0


ROS从入门到精通(三) ROS核心架构、常用指令与计算图

在这里插入图片描述


目录

1 ROS核心架构

ROS工程的架构如图所示

在这里插入图片描述
其中的核心概念阐述如下:

1.1 工作空间

工作空间是存放工程开发文件的地方,可能包含多个功能包,其中又细分为四个子空间:

  • 源码空间:源码空间包含了功能包源代码
  • 编译空间:编译空间存放编译源码空间产生的缓存信息和中间文件
  • 开发空间:开发空间存放已编译文件,为工程提供了测试环境;
  • 安装空间:安装空间存放开发完毕并通过测试的构建目标。

1.2 功能包

功能包是ROS的基本功能单元,可能包含多个节点,其中包含工程文件主体

  • CMakeLists.txt:配置编译规则,比如源文件、依赖项、链接库# 依赖项include_directories(include${catkin_INCLUDE_DIRS})# 源文件add_executable(helloworld helloworld.cpp)# 链接库target_link_libraries(helloworld${catkin_LIBRARIES})
  • package.xml:包信息,比如包名、版本、作者<pacakge> 根标记文件<name> 包名<version> 版本号<description> 内容描述<maintainer> 维护者<license> 软件许可证<buildtool_depend> 编译构建工具,ROS中为catkin<depend> 指定依赖项为编译、导出、运行需要的依赖,等价于<build_depend>+<exec_depend><build_depend> 编译依赖项<build_export_depend> 导出依赖项<exec_depend> 运行依赖项<test_depend> 测试用例依赖项<doc_depend> 文档依赖项
  • scripts:存储脚本文件,例如python源码或.sh脚本
  • src: 存储C++源文件
  • include:存储.h头文件
  • msg:存储消息文件
  • srv:存储服务文件
  • action:存储动作文件
  • launch:存储启动文件,可一次性运行多个节点
  • config:存储配置信息

其中,**

package.xml

CMakeLists.txt

非常重要,前者作为功能包入口声明依赖关系;后者解析

.xml

并执行具体的查找依赖、链接库等行为**,文件缺失或错误配置都会导致编译失败。

2 ROS常用指令

2.1 ROS-bash相关

  • roscore``````# 启动节点管理器 roscore
  • rosrun``````#运行单个节点 rosrun <pkg><node># <node>位于<pkg>中
  • rosnode``````# 显示当前运行的ROS节点信息 rosnode list # 获得当前运行节点列表rosnode info <node># 获得特定节点信息rosnode ping<node># 测试特定节点是否连通rosnode kill<node># 终止特定节点
  • rosbag``````# 话题录制与复现 rosbag record [-a][-O <bag>]#话题录制。[-a]将录制所有话题,[-O]将记录的话题输出到<name>文件rosbag play <bag># 回放<bag>中录制的话题rosbag info <bag># 显示<bag>信息
  • rospack``````# 查看功能包rospack list # 列出所有功能包rospack find<pkg># 查找某个功能包是否存在,如果存在返回安装路径
  • roscd``````# 进入某个功能包roscd <pkg>
  • rosls``````# 列出某个功能包下的所有文件rosls <pkg>
  • roslaunch``````# 执行功能包的启动文件roslaunch <pkg><.launch>roslaunch <.launch>

2.2 ROS-通信相关

  • rostopic``````# 显示当前ROS中的话题信息 rostopic list # 获得当前话题列表rostopic info <topic># 获得特定话题信息rostopic pub <topic><msg># 向话题<topic>中发布一则消息rostopic pub -r <num><topic><msg># 向话题<topic>中以num/s的频率发布消息rostopic echo<topic># 打印话题数据到终端
  • rosmsg``````# 显示当前ROS中的消息rosmsg list # 获得ROS已定义的消息列表rosmsg show <msg># 显示消息<msg>的格式rosmsg package <pkg># 显示功能包<pkg>的所有消息
  • rosservice``````# 显示当前ROS中的服务 rosservice list # 获得当前服务列表rosservice info <srv># 获得特定服务信息rosservice call <srv>[post]# 用数据[post]调用服务<srv>
  • rossrv``````# 显示当前ROS中的服务数据rossrv list # 列出所有服务信息rossrv show <srv># 显示服务<srv>的格式rossrv package <pkg># 显示功能包<pkg>的所有服务消息
  • rosparam``````# 向ROS参数服务器获取或注册参数rosparam set<key><val># 向ROS参数服务器注册参数rosparam get <key># 向ROS参数服务器获取参数rosparam load <file># 从外部文件加载参数到ROS参数服务器rosparam dump <file># 将ROS参数服务器参数写出到外部文件rosparam delete <key># ROS参数服务器删除参数rosparam list # 列出所有参数

2.3 catkin编译系统相关

  • catkin_create_pkg``````# 创建一个ROS功能包(depend为依赖)catkin_create_pkg <pkg>[depend1 depend2 ...]
  • catkin_make``````# 创建和初始化工作空间、编译功能包catkin_makecatkin编译一个工程只需catkin_make指令,编译系统会自动完成编译和链接过程,构建生成目标文件。
  • catkin_find``````# 显示当前所有工作空间[功能包]的路径# (若未source devel/setup.bash则不会被定位)catkin_find [pkg]

3 ROS动态计算图rqt

运行ROS工程后,不同功能包的不同节点将产生错综复杂的通信,不再是第一节中静态的文件分布与存储结构,动态计算图功能包

rqt

就是用来分析当前ROS工程通信情况的工具,其中的

rqt_graph

能够创建一个显示当前系统运行情况的动态图形,以点对点的网络形式表现数据交互过程

举例

运行海龟测试代码

rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key

启动

rqt
rqt_graph 

即得

在这里插入图片描述


🔥 更多精彩专栏

  • 《机器人原理与技术》
  • 《ROS从入门到精通》
  • 《计算机视觉教程》
  • 《机器学习》
  • 《嵌入式系统》
  • 《数值优化方法》

🏠 欢迎加入社区和更多志同道合的朋友交流:AI 技术社

👇配套代码 · 优质体验 · 系统知识 请关注👇


本文转载自: https://blog.csdn.net/FRIGIDWINTER/article/details/124033053
版权归原作者 Mr.Winter` 所有, 如有侵权,请联系我们删除。

“ROS从入门到精通(三) ROS核心架构、常用指令与计算图”的评论:

还没有评论