Ubuntu ROS 创建功能包
创建包结构
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws
catkin init
catkin config --cmake-args -DCMAKE_CXX_STANDARD=17 -DCMAKE_BUILD_TYPE=Release -DCMAKE_EXPORT_COMPILE_COMMANDS=YES
cd src
catkin_create_pkg <your-package> std_msgs roscpp rospy genmsg
for C++
vi <your-package>/src/<your-code-file>.cpp
for Python
mkdir <your-package>/bin
mkdir <your-package>/src/<your-subpackage-name>
touch <your-package>/bin/<your-run-code-file-name>
chmod u+x <your-package>/bin/<your-run-code-file-name>
touch <your-package>/src/<your-subpackage-name>/__init__.py
vi <your-package>/src/<your-subpackage-name>/<your-code-file>.py
修改 CMakelists.txt
运行
vi <your-package>/CMakelists.txt
修改为
cmake_minimum_required(VERSION 3.0.2)
project(<your-package>)
#for c++
add_compile_options(-std=c++17)
#find include file
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
genmsg
)
#add srv file
add_service_files(
FILES
<your-service-name>.srv
)
#add msg file
add_message_files(
FILES
<your-message-name>.msg
)
#for python
#python package setup
catkin_python_setup()
#generate srv code
generate_messages(
DEPENDENCIES
<your-.srv-file-depended-msg-namespace>
)
catkin_package()
include_directories(include ${catkin_INCLUDE_DIRS})
#for c++
add_executable(<your-package> src/<your-code-file>.cpp)
target_link_libraries(<your-package> ${catkin_LIBRARIES})
#for python
catkin_install_python(PROGRAMS
bin/<your-run-code-file-name>
DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
运行
vi <your-package>/package.xml
在合适的位置添加
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
for Python
运行
vi <your-package>/setup.py
添加
#!/usr/bin/env python
# -*- coding: utf-8 -*-
## ! DO NOT MANUALLY INVOKE THIS setup.py, USE CATKIN INSTEAD
from distutils.core import setup
from catkin_pkg.python_setup import generate_distutils_setup
# fetch values from package.xml
setup_args = generate_distutils_setup(
packages=['<your-subpackage-name>'],
package_dir={'': 'src'},
)
setup(**setup_args)
添加代码引用
for Python
vi <your-package>/bin/<your-run-code-file-name>
通过
import <your-subpackage-name>.<your-code-file>
来实现 python 文件的引用
编译
catkin build <your-package>