ROS基础知识
通信机制
- 话题使用编程语言无关的 .msg 文件定义 类型和数据结构 用于传输数据
- 服务使用编程语言无关的 .rsv 文件定义 类型和数据结构 用于传输数据
node – 执行单元
执行具体任务的执行单元,可以分布式运行在不同的主机,由不同的编程语言实现。名称必须唯一。
ros master – 节点管理器
- 为节点提供命名和注册服务
- 跟踪和记录话题/服务通信,辅助节点相互查找、建立连接。
- 提供参数服务器,由所有节点共享。适合存储一些静态、非二进制的配置参数
文件系统
- 功能包:ros基本单元,包含节点源码、配置文件、数据定义等
- 功能包清单:记录功能包的基本信息
- 元(综合)功能包:组织用于同一目的的功能包
常用命令
- rostopic
- rosservice
- rosnode
- rosparam
- rosmsg
- rossrv
启动样例
# 启动 ros master 用于管理所有的节点
$ roscore
# rosrun 运行某个功能包里面的某个节点
$ rourun <功能包> <节点>
# 显示系统的计算图:各个节点及其指点的通讯数据和方式
$ rqt_graph
rosnode
# 列出所有节点
$ rosnode list
# 查看某个节点的信息:发布什么话题,订阅什么话题,提供什么服务,它的配置、主机信息
$ rosnode info <node>
话题
rostopic
$ rostopic list
# 用命令行发送话题。加上 -r int数,就可以指定话题发布的频率,为(int数)Hz。
$ rostopic pub [-r] [int] <topic> <消息数据的结构> <消息数据的内容>
# 例子(按两次tab就会出现 geometry_msgs/Twists "…………" 这些,只需要修改数据的内容即 "…………" 这部分):
$ rostopic pub /turtle/cmd_vel geometry_msgs/Twists "…………"
rosmsg
# 显示消息的数据结构
$ rosmsg show geometry_msgs/Twists
服务
rosservice
$ rosservice list
话题记录和复现
# 记录
$ rosbag record -a -O <zip_name>
$ rosbag record -a -O cmd_record
# 复现
$ rosbag play cmd_record.bag
创建工作空间与功能包
devel 和 install 重叠部分很多
样例
$ mkdir -p ~/catkin_ws/src
$ cd <path_to_src>
$ catkin_init_workspace
$ cd .. # 工作空间根目录
$ catkin_make
$ catkin_make install
创建功能包
功能包是源码的最小单元,因此所有的源码都要放在功能包里面,不能直接放在 src
里面
$ catkin_create_pkg <package_name> [depend1] [depend2] [depend3] …
$ catkin_create_pkg test_pkg std_msgs rospy roscpp
# 创建后,编写代码在 /test_pkg/src 头文件在 /test_pkg/include/test_pkg
# 回到 catkin_ws (工作空间根目录)编译
$ catkin_make
$ source devel/setup.bash
# 查看功能包路径
$ echo $ROS_PACKAGE_PATH
功能包里面的 CMakLists.txt
功能包里面的 package.xml
- 名字
- 版本号
- 描述信息
- 维护者的email
- 开源许可证
- 依赖信息
- 编译依赖 build_depend
- 执行依赖 exec_depend