目录
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
即得
🔥 更多精彩专栏:
- 《机器人原理与技术》
- 《ROS从入门到精通》
- 《计算机视觉教程》
- 《机器学习》
- 《嵌入式系统》
- 《数值优化方法》
- …
🏠 欢迎加入社区和更多志同道合的朋友交流:AI 技术社
👇配套代码 · 优质体验 · 系统知识 请关注👇
版权归原作者 Mr.Winter` 所有, 如有侵权,请联系我们删除。