ROS从入门到精通 ROS核心架构常用指令与计算图
Posted Mr.Winter`
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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_make
catkin
编译一个工程只需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
即得
🔥 更多精彩专栏:
🏠 欢迎加入社区和更多志同道合的朋友交流:AI 技术社
以上是关于ROS从入门到精通 ROS核心架构常用指令与计算图的主要内容,如果未能解决你的问题,请参考以下文章
ROS从入门到精通系列(二十五)--常用工具值shell脚本启动多条指令
ROS从入门到精通系列(二十五)--常用工具值shell脚本启动多条指令