ROS工程的架构如图所示
工作空间是存放工程开发文件的地方,可能包含多个功能包,其中又细分为四个子空间:
功能包是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
并执行具体的查找依赖、链接库等行为,文件缺失或错误配置都会导致编译失败。
roscore
# 启动节点管理器
roscore
rosrun
#运行单个节点
rosrun <pkg> <node>
# 位于中
rosnode
# 显示当前运行的ROS节点信息
rosnode list # 获得当前运行节点列表
rosnode info <node> # 获得特定节点信息
rosnode ping <node> # 测试特定节点是否连通
rosnode kill <node> # 终止特定节点
rosbag
# 话题录制与复现
rosbag record [-a] [-O <bag>] #话题录制。[-a]将录制所有话题,[-O]将记录的话题输出到文件
rosbag play <bag> # 回放中录制的话题
rosbag info <bag> # 显示信息
rospack
# 查看功能包
rospack list # 列出所有功能包
rospack find <pkg> # 查找某个功能包是否存在,如果存在返回安装路径
roscd
# 进入某个功能包
roscd <pkg>
rosls
# 列出某个功能包下的所有文件
rosls <pkg>
roslaunch
# 执行功能包的启动文件
roslaunch <pkg> <.launch>
roslaunch <.launch>
rostopic
# 显示当前ROS中的话题信息
rostopic list # 获得当前话题列表
rostopic info <topic> # 获得特定话题信息
rostopic pub <topic> <msg> # 向话题中发布一则消息
rostopic pub -r <num> <topic> <msg> # 向话题中以num/s的频率发布消息
rostopic echo <topic> # 打印话题数据到终端
rosmsg
# 显示当前ROS中的消息
rosmsg list # 获得ROS已定义的消息列表
rosmsg show <msg> # 显示消息的格式
rosmsg package <pkg> # 显示功能包的所有消息
rosservice
# 显示当前ROS中的服务
rosservice list # 获得当前服务列表
rosservice info <srv> # 获得特定服务信息
rosservice call <srv> [post] # 用数据[post]调用服务
rossrv
# 显示当前ROS中的服务数据
rossrv list # 列出所有服务信息
rossrv show <srv> # 显示服务的格式
rossrv package <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 # 列出所有参数
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]
运行ROS工程后,不同功能包的不同节点将产生错综复杂的通信,不再是第一节中静态的文件分布与存储结构,动态计算图功能包rqt
就是用来分析当前ROS工程通信情况的工具,其中的rqt_graph
能够创建一个显示当前系统运行情况的动态图形,以点对点的网络形式表现数据交互过程。
举例
运行海龟测试代码
rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key
启动rqt
rqt_graph
即得
更多精彩专栏:
欢迎加入社区和更多志同道合的朋友交流:AI 技术社