找回密码
 立即注册
首页 业界区 业界 【ROS教程】ROS文件系统和基础架构

【ROS教程】ROS文件系统和基础架构

叭遭段 2025-6-9 09:36:26
@
目录

  • 1.工作空间目录

    • 1.1 package.xml

  • 2.启动节点的方式

    • 2.1 一次启动一个
    • 2.2 一次启动多个

  • 3.ROS常用命令

    • 3.1 增
    • 3.2 查
    • 3.3 执行

      • 3.3.1 加载环境变量
      • 3.3.2 运行节点

    • 3.4 查看计算图

  • 4.创建功能包

    • 4.1 选择工作目录
    • 4.2 创建功能包目录
    • 4.3 建立功能包


1.工作空间目录

1.jpeg
  1. WorkSpace --- 自定义的工作空间
  2.     |--- build:编译空间,用于存放CMake和catkin的缓存信息、配置信息和其他中间文件。
  3.     |--- devel:开发空间,用于存放编译后生成的目标文件,包括头文件、动态&静态链接库、可执行文件等。
  4.     |--- src:源码
  5.         |-- package:功能包(ROS基本单元)包含多个节点、库与配置文件,包名所有字母小写,只能由字母、数字与下划线组成
  6. <launch>
  7.     <node pkg="helloworld" type="demo_hello" name="hello" output="screen" />
  8.     <node pkg="turtlesim" type="turtlesim_node" name="t1"/>
  9.     <node pkg="turtlesim" type="turtle_teleop_key" name="key1" />
  10. </launch>|-- CMakeLists.txt:配置编译规则,比如源文件、依赖项、目标文件
  11. <launch>
  12.     <node pkg="helloworld" type="demo_hello" name="hello" output="screen" />
  13.     <node pkg="turtlesim" type="turtlesim_node" name="t1"/>
  14.     <node pkg="turtlesim" type="turtle_teleop_key" name="key1" />
  15. </launch>|-- package.xml:包信息,比如:包名、版本、作者、依赖项...(以前版本是 manifest.xml)
  16. <launch>
  17.     <node pkg="helloworld" type="demo_hello" name="hello" output="screen" />
  18.     <node pkg="turtlesim" type="turtlesim_node" name="t1"/>
  19.     <node pkg="turtlesim" type="turtle_teleop_key" name="key1" />
  20. </launch>|-- scripts:存储python文件
  21. <launch>
  22.     <node pkg="helloworld" type="demo_hello" name="hello" output="screen" />
  23.     <node pkg="turtlesim" type="turtlesim_node" name="t1"/>
  24.     <node pkg="turtlesim" type="turtle_teleop_key" name="key1" />
  25. </launch>|-- src:存储C++源文件
  26. <launch>
  27.     <node pkg="helloworld" type="demo_hello" name="hello" output="screen" />
  28.     <node pkg="turtlesim" type="turtlesim_node" name="t1"/>
  29.     <node pkg="turtlesim" type="turtle_teleop_key" name="key1" />
  30. </launch>|-- include:头文件
  31. <launch>
  32.     <node pkg="helloworld" type="demo_hello" name="hello" output="screen" />
  33.     <node pkg="turtlesim" type="turtlesim_node" name="t1"/>
  34.     <node pkg="turtlesim" type="turtle_teleop_key" name="key1" />
  35. </launch>|-- msg:消息通信格式文件
  36. <launch>
  37.     <node pkg="helloworld" type="demo_hello" name="hello" output="screen" />
  38.     <node pkg="turtlesim" type="turtlesim_node" name="t1"/>
  39.     <node pkg="turtlesim" type="turtle_teleop_key" name="key1" />
  40. </launch>|-- srv:服务通信格式文件
  41. <launch>
  42.     <node pkg="helloworld" type="demo_hello" name="hello" output="screen" />
  43.     <node pkg="turtlesim" type="turtlesim_node" name="t1"/>
  44.     <node pkg="turtlesim" type="turtle_teleop_key" name="key1" />
  45. </launch>|-- action:动作格式文件
  46. <launch>
  47.     <node pkg="helloworld" type="demo_hello" name="hello" output="screen" />
  48.     <node pkg="turtlesim" type="turtlesim_node" name="t1"/>
  49.     <node pkg="turtlesim" type="turtle_teleop_key" name="key1" />
  50. </launch>|-- launch:可一次性运行多个节点
  51. <launch>
  52.     <node pkg="helloworld" type="demo_hello" name="hello" output="screen" />
  53.     <node pkg="turtlesim" type="turtlesim_node" name="t1"/>
  54.     <node pkg="turtlesim" type="turtle_teleop_key" name="key1" />
  55. </launch>|-- config:配置信息
  56. <launch>
  57.     <node pkg="helloworld" type="demo_hello" name="hello" output="screen" />
  58.     <node pkg="turtlesim" type="turtlesim_node" name="t1"/>
  59.     <node pkg="turtlesim" type="turtle_teleop_key" name="key1" />
  60. </launch>|-- CMakeLists.txt:编译的基本配置
复制代码
1.1 package.xml


  • 固定格式
  1. <?xml version="1.0"?>
  2. <package format="2">
  3.   
  4.   <name><the name of package></name>
  5.   
  6.   <version>0.0.0</version>
  7.   
  8.   <description>The <the name of package> package</description>
  9.   
  10.   
  11.   
  12.   
  13.   <maintainer email="*">XXX</maintainer>
  14.   
  15.   
  16.   
  17.   
  18.   <license>TODO</license>
  19.   
  20.   
  21.   
  22.   
  23.   
  24.   
  25.   
  26.   
  27.   
  28.   
  29.   
  30.   
  31.   
  32.   
  33.   
  34.   
  35.   
  36.   
  37.   
  38.   
  39.   
  40.   
  41.   
  42.   
  43.   
  44.   
  45.   
  46.   
  47.   
  48.   <buildtool_depend>catkin</buildtool_depend>
  49.   
  50.   <build_depend>roscpp</build_depend>
  51.   <build_depend>rospy</build_depend>
  52.   <build_depend>std_msgs</build_depend>
  53.   
  54.   <build_export_depend>roscpp</build_export_depend>
  55.   <build_export_depend>rospy</build_export_depend>
  56.   <build_export_depend>std_msgs</build_export_depend>
  57.    
  58.   <exec_depend>roscpp</exec_depend>
  59.   <exec_depend>rospy</exec_depend>
  60.   <exec_depend>std_msgs</exec_depend>
  61.   
  62.   <export>
  63.    
  64.   </export>
  65. </package>
复制代码
2.启动节点的方式

2.1 一次启动一个
  1. rosrun <the name of package> <the name of executable file>
复制代码

  • executable file:对于C语言,这个文件就是CMakeLists.txt中用add_executable生成的可执行文件;对于python,这个文件就是CMakeLists.txt中用catkin_install_python指向的文件
对应语法:
  1. add_executable(<the name of executable file>
  2. <launch>
  3.     <node pkg="helloworld" type="demo_hello" name="hello" output="screen" />
  4.     <node pkg="turtlesim" type="turtlesim_node" name="t1"/>
  5.     <node pkg="turtlesim" type="turtle_teleop_key" name="key1" />
  6. </launch>   src/<the name of the source>.cpp
  7. <launch>
  8.     <node pkg="helloworld" type="demo_hello" name="hello" output="screen" />
  9.     <node pkg="turtlesim" type="turtlesim_node" name="t1"/>
  10.     <node pkg="turtlesim" type="turtle_teleop_key" name="key1" />
  11. </launch>  )
  12. catkin_install_python(PROGRAMS scripts/<the name of the source>.py
  13. <launch>
  14.     <node pkg="helloworld" type="demo_hello" name="hello" output="screen" />
  15.     <node pkg="turtlesim" type="turtlesim_node" name="t1"/>
  16.     <node pkg="turtlesim" type="turtle_teleop_key" name="key1" />
  17. </launch>          DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
  18. <launch>
  19.     <node pkg="helloworld" type="demo_hello" name="hello" output="screen" />
  20.     <node pkg="turtlesim" type="turtlesim_node" name="t1"/>
  21.     <node pkg="turtlesim" type="turtle_teleop_key" name="key1" />
  22. </launch>         )
复制代码
2.2 一次启动多个

如果想要一次性启动一个包里的多个节点,而不是一行行地输入rosrun指令...

  • 我们需要一个launch文件,它的固定格式是这样的:
  1. <launch>
  2.     <node pkg="helloworld" type="demo_hello" name="hello" output="screen" />
  3.     <node pkg="turtlesim" type="turtlesim_node" name="t1"/>
  4.     <node pkg="turtlesim" type="turtle_teleop_key" name="key1" />
  5. </launch>
复制代码

  • node:包含的某个节点
  • pkg:功能包
  • type:被运行的节点文件
  • name:为节点命名
  • output:设置日志的输出目标
然后,在终端输入:
  1. roslaunch <the name of package> <the name of launch file>
复制代码
3.ROS常用命令

3.1 增

创建新的ROS功能包:
  1. catkin_create_pkg 自定义包名 依赖包
复制代码
3.2 查

列出所有功能包:
  1. rospack list
复制代码
查找某个功能包是否存在,如果存在返回安装路径:
  1. rospack find 包名
复制代码
3.3 执行

3.3.1 加载环境变量

先进入工作目录,然后:
  1. source ./devel/setup.bash
复制代码
3.3.2 运行节点

roscore:ROS的系统先决条件节点和程序的集合,必须运行 roscore 才能使 ROS 节点进行通信。新开一个终端并输入
  1. roscore #用法一
  2. roscore -p xxxx #用法二,指定端口号
复制代码
roscore 将启动:

  • ros master
  • ros 参数服务器
  • rosout 日志节点
3.4 查看计算图

在节点正在运行的情况下,终端输入:
  1. rosrun rqt_graph rqt_graph
复制代码
2.png

4.创建功能包

4.1 选择工作目录

首先,选择一个路径作为工作目录。这里我选择了如下路径作为工作目录
3.png

4.2 创建功能包目录
  1. mkdir src
复制代码
然后,在工作空间目录下
  1. catkin_make
复制代码
src目录下会多出一个锁定的CMakeLists.txt文件,不用管它。
4.3 建立功能包

先进入src目录
  1. cd src
复制代码
然后使用ROS提供的指令直接创建功能包即可:
  1. catkin_create_pkg <the name of your package> roscpp rospy std_msgs message_generatio
复制代码
roscpp、rospy、std_msgs、message_generatio是你所需要的依赖,你可以自由决定想要哪些依赖
本文由博客一文多发平台 OpenWrite 发布!

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册