30.发布者流程
31.回调函数:可以将其理解为对消息包到来时的响应,类似于中断函数。每当一个新的消息包到达订阅者节点,ros系统就会在后台调用回调函数,自动调用,我们只需在函数里对接收到的消息包进行处理,回调函数传进来的参数就是最新获取到的消息包对象,可以直接对参数进行操作
32.话题并不属于发布者或者订阅者,而是由ROS系统创建管理的,只要节点向NodeHandle提出话题发布需求或订阅需求,这个话题就会被自动创建
33.话题订阅
34.
35.机器人正前方为x轴,正左方为y轴,正上方为z轴。右手握拳,拇指指向x轴,四指方向为滚转运动正方向,拇指指向y轴,四指方向为俯仰运动正方向,拇指指向z轴,四指方向为自转运动的正方向
36.矢量运动的单位都是米每秒,旋转运动单位都是弧度每秒
37.速度控制的消息包是geometry_msgs中的Twist
38.gazebo是模拟真实机器人发出传感器数据的工具,在gazebo中看到的是虚拟机器人所处的环境状况。rviz是接受传感器数据并进行显示的工具,显示的是机器人实际能探测到的环境状况,rviz并不参与机器人算法的运行
39. 激光雷达
Ranges:长度是1147,这些浮点数表示激光雷达从起始角度旋转到终止角度过程中测量的距离个数,1147表示雷达一圈测量1147次,每个测距值对应每一次扫描方向的障碍物距离,这些测距值按照扫描的起始角度到终止角度的顺序排列
40.在机器人ROS系统中激光雷达一般会有相对应的节点,这个节点一般由雷达制作厂商提供,我们只需配置一下端口参数就能和激光雷达的电路系统建立连接,雷达的测距数值从电路系统传递到雷达节点,被封装成消息包发布在topic话题中,我们只需订阅这个话题就能获取激光雷达的数据
41.雷达消息包格式为sensor_msgs::LaserScan,话题名称/scan
42.获取雷达数据和雷达避障
43.IMU惯性测量单位
Orientation:机器人的朝向相对于空间中xyz三个坐标轴的偏移量
Angular_velocity:角速度,包含xyz分量
Linear_acceleration:矢量加速度,包含xyz分量
三个数据都带了一个协方差矩阵,主要用于后期的优化和滤波
44.四元数和欧拉角一样是对机器人空间姿态的描述,在实际应用中,四元数通常只在进行旋转变换的过程中使用,旋转后的结果还是会转换成欧拉角进行处理
45.IMU消息格式sensor_msgs/Imu.msg
话题名称
只有九轴IMU才会有第三个话题,一般情况下使用第二个话题
46.IMU数据获取
47.IMU航向锁定
不完全,可以看上一点补充
48.标准消息包std_msgs,几何消息包geometry_msgs,传感器消息包sensor_msgs
49.标准消息包
数组的长度是可变的,数组中放置的数值个数可多可少,可以把一些数量不确定的数值用数组消息包发送,当程序写道一半,需要额外增加发送数值个数时,直接在数组中push_back(),不用修改消息的类型结构,当程序定型时最好为消息包定义一个意义更加明确的新类型
结构体类型通常把一些互相关联的数据整合到一起,然后放置在比较复杂的消息格式中,起到简化消息格式的作用
50.常规消息包
51.消息类型的使用方法:在ROS Index网站中搜索消息包名称,进入官网,找到Wiki页面的消息类型定义,通常在消息类型定义的页面中,会有详细的注释信息,解释每个变量的含义和量纲,按照定义中的消息包结构,进行数据的装填和读取,然后就是发布或订阅相关话题,进行消息包的发送和接收
52.在一些项目中需要传输一些特殊的数据,官方消息包不能满足需求时,就可以自定义一个新的消息类型
53.在自定义消息包创建功能包时要添加message_generation message_runtime这两个依赖,消息包也是package软件包,包名自定义,为了好区分一般后缀是msgs
54.使用自定义消息类型
订阅者节点
发布者节点
55.发布地图