话题通讯/服务通讯的比较:
两者的实现流程是比较相似的:
1,消息的发布方/客户端
2,消息的订阅方/服务端
3,话题名称
4,数据载体
哎呀呀,很久没更新了,其实不是懒而是前面的那些其实你找一个博主随便敲敲都能搞出来,一定注意细节,其他的都是照猫画虎,接下来登场的才是真正黄金的地方
静态坐标变换
一句话搞定:
rosrun tf2_ros static_transform_publisher x偏移量 y偏移量 z偏移量 z偏航角度 y俯仰角度 x翻滚角度 父级坐标系 子级坐标系
乌龟的跟随仿真
实现流程:
1,先启动乌龟的GUI(用户图形界面),生成一只新的小乌龟
2,创建两个乌龟相对于世界坐标系的发布(同一个节点启动两次,传入不同的参数turtle1 turtle2)
3,订阅并转换成turtle1 turtle2之间的相对关系
4,计算速度消息并发布(线速度,角速度)
python版本实现
这个内在逻辑其实很有东西:
组合逻辑
两个速度同时下发:
- 只要存在距离,就持续向前走;
- 只要目标不在正前方,就同步转向对准目标;
- 当 turtle1 和 turtle2 完全重合时:
dx=0, dy=0,线速度、角速度全部变为 0,乌龟自动停下。
rosbag
机器人传感器获取到的信息,有时需要实时处理,有时可能只是采集数据,事后分析
本质:
rosbag本质也是ros的节点,当录制的时候,rosbag是一个订阅节点,可以订阅话题消息并将其订阅到的数据写入磁盘文件,当重放时,rosbag是一个发布节点,可以读取磁盘文件,发布文件中的话题消息
rosbag实现录制和重放
rosbag写入文件
#! /usr/bin/env python import rospy import rosbag from std_msgs.msg import String """ 需求:写出消息数据到磁盘上的bag文件 流程: 1.导包 2.初始化 3.创建rosbag对象并且打开文件流 4.写数据 5.关闭流 """ if __name__ =="__main__": #2.初始化 rospy.init_node("write_bag_p") #3.创建rosbag对象并且打开文件流 bag = rosbag.Bag("hello_p.bag","w") #4.写数据 msg = String() msg.data = "hello bag!" bag.write("/liaoTian",msg) bag.write("/liaoTian",msg) bag.write("/liaoTian",msg) bag.write("/liaoTian",msg) bag.write("/liaoTian",msg) #5.关闭流 bag.close()以python文件的形式实现读文件
#! /usr/bin/env python import rospy import rosbag """ 需求:读取磁盘上的bag文件 流程: 1.导包 2.初始化 3.创建rosbag对象并且打开文件流 4.读数据 5.关闭流 """ if __name__ =="__main__": # 2.初始化 rospy.init_node("read_bag_p") # 3.创建rosbag对象并且打开文件流 bag = rosbag.Bag("hello_p.bag","r") # 4.读数据 msgs = bag.read_messages("/liaoTian") for topic,msg,time in msgs: rospy.loginfo("话题:%s,消息:%s,时间:%s", topic, msg.data, time ) # 5.关闭流 bag.close()rqt工具箱:
在调用工具时以图形化操作替代了命令操作,应用更便捷,提高效率
ROS基于QT框架,针对机器人开发提供一系列可视化工具
三大组成:
1.rqt --- 核心实现,开发人员无需关注
2.rqt_common_plugins --- rqt中常用的工具套件
3.rqt_robot_plugins --- 运行中和机器人交互的插件(rviz)
当初非常难搞的乌龟生成,现在be like
| 工具 | 核心作用 | 常用场景 | 启动指令 |
|---|---|---|---|
| rqt_graph | 可视化节点、话题、服务连接拓扑图 | 排查节点通信断开、话题收发异常 | rqt_graph |
| rqt_console | 集中查看全系统日志,分级过滤报错信息 | 定位程序崩溃、硬件 / 代码警告错误 | rqt_console |
| rqt_plot | 绘制话题数值实时曲线,支持导出数据 | 观测速度、IMU、测距、PID 输出等数值变化 | rqt_plot |
| rqt_bag | 图形化录制、回放、裁剪 bag 数据包 | 离线复现机器人实验、保存传感器数据调试 | rqt_bag |