目录
说明:
1. 回顾小海龟案例
终端1:启动ROS master
终端2:启动小海龟仿真器
终端3:启动海龟控制节点:
2. 系统计算图:rqt_graph
3. rosnode
rosnode list:显示节点列表
rosnode info:查看节点信息
示例
/turtlesim节点信息说明
4. rostopic
rostopic list:显示话题列表
手动向话题发布消息数据
示例
补充
linear:线速度
angular:角速度
5. rosmsg
查看消息数据结构
示例
6. rosservice
rosservice list :显示服务列表
手动请求一个服务
示例
7. rosbag
话题数据记录
示例
话题数据复现
1. 本系列学习笔记基于B站:古月居《ROS入门21讲》课程,且使用的Ubuntu与ROS系统版本与 课程完全一致;
虚拟机版本 | Linux系统版本 | ROS系统版本 |
---|---|---|
VMware WorkStation Pro 16 | Ubuntu18.04 | Melodic |
2. 本节是整个笔记的第6节,对应视频课程的第8节,请自行对应学习;
3. 整个系列笔记基本已经完结,但部分章节仍需润色修改 ,后面会陆续发布,请大家持续关注, 创作不易,感谢支持!
roscore
$ rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key
新建终端:
rqt_graph
我们之前介绍过ROS里面的核心通讯机制就是一个计算图,
通过这张图可以很快的了解当前正在运行的整个系统的全貌,
尤其是针对一些未知的系统,很快可以知道这个系统是干嘛的。
/teleop_turtle: 键盘控制节点
/turtle1/cmd_vel: 通讯话题,这个话题里面的具体通讯内容就是我们通过键盘输入指令的内容
/turtlesim: 小海龟仿真器节点
rosnode 可以显示一些关于节点的帮助信息:
(/rosout:在rqt_graph中没有体现,它是在ROS环境里,只要你启动roscore,都会默认启动的一个话题,这个话题主要采集ROS里面所有节点的日信息,用来提交给上面的界面做显示的,一般不用去关心它。)
格式:rosnode info 某一个节点名
rosnode info /turtlesim
节点turtlesim正在发布的话题:
(/turtle1/pose [turtlesim/Pose]:海龟的位置)
节点turtlesim 正在订阅的话题:
节点turtlesim 提供的一些服务:
可以通过这些服务来完成一些配置。
主机号和pid号:
底层通讯的一些信息:
rostopic可以显示一些关于话题的帮助信息:
我们前面的键盘控制节点和海龟仿真器节点之间就是通过 /turtle1/cmd_vel 话题实现通讯的。
我们也可以手动通过指令向 /turtle1/cmd_vel 话题发布消息数据,让海龟运动,
格式:rostopic pub (参数)话题名 消息数据结构 “具体数据”
rostopic pub /turtle1/cmd_vel
然后空格,再连按两次tab键自动填充数据,
使用方向键←→移动到要修的数据的位置修改数据,如将x的0.0改成了1.0,回车,海龟应该按照1.0m/s向前运动一小段
我们发现海龟只动了一小段又停下来了,并不会一直来动,这是因为pub指令只会发布一次,
如果想要海龟一直动,我们需要给其一个循环:
rostopic pub -r 10 /turtle1/cmd_vel geometry_msgs/Twist "linear: x: 1.0 y: 0.0 z: 0.0 angular: x: 0.0 y: 0.0 z: 0.0"
(-r:频率rate,10:10赫兹,代表一秒钟发布十次这样指令)
可以看到海龟撞到墙也不会回头,并且显示:Oh no! I hit the wall!,此时按ctrl+c 中断程序。
如果给angular角速度的z一个数值,海龟的运动将是曲线的,如下图:
单位:m/s
单位:弧度/s
每一个速度都会给出x,y,z三个方向上的分量,比如上面给linear线速度x方向的分量数据1.0
ROS里面的默认的单位,一般跟平移相关的都是:m/s,跟角度角度相关的都是:弧度/s
格式:rosmsg show (参数)消息数据结构 "具体数据"
rosmsg show geometry_msgs/Twist
这些的服务的服务端都是仿真器,我们的终端都是作为客户端去请求某个服务的。
在上面的服务列表中,有个/spawn服务,此服务是用来产生一只新海龟的,
格式:rosservice call (参数)服务名 "具体数据"
rosservice call /spawn
最后加空格,然后连按2次tab键,会自动根据请求的服务类型(spawn)补全的服务数据
x,y分别代表产生新海龟位置的横纵轴坐标(仿真器窗口左下角为x,y轴的0点坐标);
theta:产生新海龟的角度;
name:产生新海龟的名字,
然后我们对新海龟的服务数据给予一些值:
服务反馈结果
rosbag的作用是记录当前系统中所有的话题数据,并且保存下来,当下次需要的时候再复用出来。
例如:一个需要调试的无人机,每次做数据调试都要让无人机飞一次,非常麻烦,
所以一般的方式都是做一次飞行,然后把所有的飞行数据都保存下来,回到实验室,再把这些数据复现出来做实验调试,
所以后面的实验和真机飞行就没有关系了,都是用数据实验的,rosbag就是做这样的事情的。
格式:rosbag record (参数)保存数据的文件名
rosbag record -a -O cmd_record
参数:
-a:-all,所有的
-O:把记录的数据保存成一个压缩包
现在随便让小海龟动几下,留下一个轨迹,然后在Ctrl+C保存数据,如下:
保存的文件位置在主目录Home下
现在可以尝试复现保存文件里面的数据内容了,先把所有终端都关掉,然后
终端1 :
roscore
终端2:
rosrun turtlesim turtlesim_node
终端3:
rosbag play cmd_record.bag
复现效果