1.以小海龟为例的命令行使用
启动ROS Master,节点管理器,
- 为节点提供命名和注册服务
- 跟踪和记录话题/服务通信,辅助节点互相查找、建立连接
- 提供参数服务器,节点使用此服务器存储和检索运行时的参数(节点可以使用ROS Master处理后得到的数据)
roscore
启动小海龟仿真器,实际上是启动了一个节点
rosrun turtlesim turtlesim_node
启动键盘控制节点
rosrun turtlesim turtle_teleop_key
随后就可以通过键盘控制海龟的上下左右和转向运动
可以通过输入以下命令行(重要的命令行工具)了解其运作机制,包含其系统通信的节点信息和方式。
rqt_graph
如图所示,其中椭圆形的代表系统中的节点,左侧是键盘控制海龟节点,右侧是海龟仿真节点,两个节点之间有一个/turtle1/cmd_vel的话题(topic)作为通讯。其中数据的内容是速度指令的内容。
上述小海龟的例子中出现了rosnode,显示的是系统中所有节点相关的指令。
在系统中输入:
rosnode
出现了和rosnode相关的指令
rosnode list
列出了当前系统中所有的节点,其中rosout是一个启动默认的节点,用于提交给上层做显示。
rosnode info /turtlesim
显示当前节点包含的信息
rostopic相关的指令
输入rostopic
rostopic list,列出系统中当前的话题
rostopic pub 可以通过命令行工具控制小海龟动起来。其中/turtle1/cmd_vel是话题名称,Twist是发布指令的消息数据结构。
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist
其中包含两个部分数据,linear和angular
可以通过rosmsg show geometry_msgs/Twist,后续Tab补全,来显示该message的数据结构。
可以移动光标改变其中的值
(小海龟被怼到了墙上) ,但是pub指令只会发布一次,所以会随后停下来。
如果要持续发布需要更改指令,在pub后加 -r,表示rate,10表示10Hz,每秒发布10次。
rostopic pub -r 10 /turtle1/cmd_vel geometry_msgs/Twist
小海龟开始持续运动,并且撞了南墙也不回头,Ctrl+C停止。
rosservice相关的命令行
rosservice list显示相关的服务
其中的/spawn是用来诞生一只新的海龟的,可以通过调用该服务来同时产生两只海龟。通过call,后续可Tab补全
rosservice call /spawn
包含的数据内容是海龟的出生地点,角度和名字。
修改参数,调用服务
出现了第二只海龟(还挺萌)
此时再次调用rostopic list,小海龟2号已赫然在目。
按照刚刚控制海龟1的方式控制它。
龟龟,转起来了。
话题记录相关的工具rosbag
-a表示所有数据,-O表示保存成一个压缩包,后面跟的是名字。保存当前系统下的所有数据。
rosbag record -a -O cmd_record
信息中告诉我们订阅了相关的内容。
移动龟龟后,Ctrl+C保存文件。
保存路径默认在/home/下。
重启roscore和海龟仿真器节点,通过数据包复现之前记录的指令。通过play指令加文件名称。
rosbag play cmd_record.bag