ROS包开发工作流程
设置工作空间:
- 创建一个新的工作空间(如果尚不存在):
mkdir -p ~/catkin_ws/src cd ~/catkin_ws/ catkin_make
- 激活ROS环境(选择正确的ROS版本):
source /opt/ros/noetic/setup.bash
- 激活您的工作空间的设置脚本,以将其覆盖在基本ROS环境之上:
source devel/setup.bash
开发一个新包:
- 导航到工作空间的
src
目录:cd ~/catkin_ws/src
- 使用必要的依赖项创建一个新的ROS包:
用您想要的包名称替换catkin_create_pkg <package_name> [dependencies]
<package_name>
,用任何ROS包依赖项(如std_msgs
、roscpp
或rospy
)替换[dependencies]
。
编写包内容:
- 开发您的包:
- 编写节点代码(C++或Python)。
- 如有需要,创建消息和服务定义。
- 编写
CMakeLists.txt
和package.xml
文件。
构建包:
- 编译包:
cd ~/catkin_ws catkin_make
- 重新激活
devel/setup.bash
以刷新环境变量:source devel/setup.bash
测试包:
- 使用
rosrun
或roslaunch
运行节点进行测试:
或者rosrun <package_name> <node_name>
roslaunch <package_name> <launch_file.launch>
准备安装:
- 编辑您的包中的
CMakeLists.txt
文件,包括所有必要组件的安装规则,如二进制文件、库、启动文件等。
安装包:
- 将包安装到工作空间的
install
目录中:cd ~/catkin_ws catkin_make install
共享包:
- 现在可以共享
install
目录的内容。如果要将其作为存档共享,请压缩install
目录:
用您的包名称替换cd ~/catkin_ws tar -czf <package_name>.tar.gz install
<package_name>
。
使用已安装的包:
对于最终用户或接收包的另一个开发人员:
- 解压包并激活安装设置脚本:
tar -xzf <package_name>.tar.gz source <path_to_extracted_install>/setup.bash
- 运行包:
roslaunch <package_name> <launch_file.launch>
该框架涵盖了从设置到共享最终产品的完整ROS包开发周期。提供的每个命令都是较大开发过程的一部分,确保即使是对ROS不熟悉的人也能按步骤创建和分发ROS包。记得用实际项目相关的真实名称替换占位文本(如 <package_name>
)。
验证步骤并寻找更新或最佳实践始终是个好主意,特别是对于像ROS这样不断发展的工具。在线搜索或参考最新的ROS文档可能提供额外的背景信息或更新到这些流程。
实际代码示例,让我们重走整个流程
1. 创建新的工作空间
选择一个与已有的catkin_ws
不同的工作空间名称,例如my_ros_workspace
:
mkdir -p ~/my_ros_workspace/src
cd ~/my_ros_workspace/
catkin_make
2. 设置ROS环境
你需要使用正确的ROS版本的setup.bash
文件来设置环境:
source /opt/ros/noetic/setup.bash
3. 创建一个新的包
在工作空间的src
目录下创建一个名为my_python_package
的包,它依赖于rospy
,这是ROS Python客户端库:
cd ~/my_ros_workspace/src
catkin_create_pkg my_python_package rospy
4. 编写节点代码
在包中创建一个名为scripts
的文件夹,并在其中创建一个Python脚本talker.py
:
cd ~/my_ros_workspace/src/my_python_package
mkdir scripts
创建文件scripts/talker.py
并编辑内容如下:
#!/usr/bin/env python
import rospy
from std_msgs.msg import String
def talker():
pub = rospy.Publisher('chatter', String, queue_size=10)
rospy.init_node('talker', anonymous=True)
rate = rospy.Rate(10) # 10hz
while not rospy.is_shutdown():
hello_str = "hello world %s" % rospy.get_time()
rospy.loginfo(hello_str)
pub.publish(hello_str)
rate.sleep()
if __name__ == '__main__':
try:
talker()
except rospy.ROSInterruptException:
pass
确保talker.py
是可执行的:
chmod +x scripts/talker.py
5. 编译工作空间
返回到工作空间根目录并编译:
cd ~/my_ros_workspace
catkin_make
6. 测试节点
启动roscore(如果还没有运行的话)和节点进行测试:
# 另一个终端
roscore
# 原终端
source devel/setup.bash
rosrun my_python_package talker.py
7. 编辑CMakeLists.txt
文件
为了使安装过程包括Python节点和任何其他文件,您需要编辑CMakeLists.txt
文件来添加安装指令。文件位于my_python_package
目录下。
CMakeLists.txt
中安装指令的示例:
catkin_install_python(PROGRAMS scripts/talker.py
DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
这会安装您的Python节点。
8. 执行安装
执行安装过程:
catkin_make install
这将会把文件安装到~/my_ros_workspace/install
目录下。
9. 分享工作空间
你可以分享install
目录给其他人。其他人可以通过设置环境变量来运行这个节点:
source ~/my_ros_workspace/install/setup.bash
rosrun my_python_package talker.py
通过这个流程,您不仅能体验从创建包到编写代码、编译、安装和分享的完整开发周期,还能了解如何为不同类型的文件配置安装指令。如果在执行过程中遇到任何问题,请告诉我,我会协助您解决。