ROS中,节点之间通过发布话题和订阅话题来通信,在程序中是通过消息发布器和订阅器来实现,数据流通过话题的发布和订阅在节点之间传播,而数据流的数据类型则称为消息msg。
重要概念:
- Nodes节点:
一个节点其实只不过是ROS程序包中的一个可执行文件。ROS节点可以使用ROS客户库与其他节点通信。节点可以发布或接收一个话题。节点也可以提供或使用某种服务。节点之间使用不用的编程语言一样也可以通信。
- Topics话题:
A节点和B节点之间是通过一个ROS话题来互相通信的。A在一个话题上发布按键输入消息,而B节点则订阅该话题以接收该消息。
- Messages消息:
话题之间的通信是通过在节点之间发送ROS消息实现的。对于发布器和订阅器之间的通信,发布器和订阅器之间必须发送和接收相同类型的消息。这意味着话题的类型是由发布在它上面的消息类型决定的。rostopic type 话题名 #查看发布在某个话题上的消息类型。
- Master:节点管理器,ROS名称服务 (比如帮助节点找到彼此)。
相关文件:
- package.xml文件:
创建一个软件包后该包目录下会自动生成一个package.xml文件,该文件中有许多的标签,其中依赖项标签记录了编译依赖和运行依赖的软件包。
- .launch文件用于定义即将即将启动的多个节点
- .bag文件用于保存录制的话题消息
- .msg文件用于定义新的消息类型
常用命令:
- roscore 用于在master主机上打开ros服务,之后就提供节点之间的发布订阅服务。
所有参与ros的主机的.bashrc文件中配置master主机的ip需要统一,
- catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
使用catkin_create_pkg命令来创建一个名为'beginner_tutorials'的新程序包,这个程序包依赖于std_msgs、roscpp和rospy
- catkin_make
完成当前工作空间中所有软件包的编译
- rospack find 软件包名 #查找软件包目录
- rospack depend1 软件包名 #查看软件包的一级依赖
- rospack denpend 软件包名 #递归查看软件包的所有依赖
- roscd 软件包名 #能够直接打开软件所在目录,前提是该软件包名已经加入系统环境路径
- roscd log #查看ros的运行日志
- rosls 软件包名 #直接显示软件包中所有文件
- rosnode list #列出活跃的节点
- rosnode info /节点名 #获取对应节点信息
- rosrun 软件包名 节点名 #让一个节点开始运行
- rostopic list #查看当前所有的话题
- rostopic echo 话题名 #查看当前话题内容
- roslaunch 软件包名 filename.launch #启动.launch文件中定义的所有节点
- rosed 软件包名 文件名
通过vim编辑包中的文件
- rosbag record -a #将当前发布的所有话题数据录制保存到当前文件夹中
- rosbag info .bag文件 #查看bag文件相关信息
- rosbag record -O 文件名 话题名话题名2 话题名3......#录制制定的话题数据
- rosbag play .bag文件名 #回放.bag文件中话题信息
-l 循环回放
-r 2 以两倍速发布回放
-s 跳过初始部分后才真正开始回放