# RC-2022赛季-ROS部分 **Repository Path**: spr-robotics-club/rc-2022-season-ros-part ## Basic Information - **Project Name**: RC-2022赛季-ROS部分 - **Description**: RC-2022赛季-ROS部分 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-09-21 - **Last Updated**: 2022-12-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 关于ROS下的Navigation包的简单说明 *** 默认ROS为Ubuntu18.04下的melodic版本 ## 1. 通信   串口通信:r2_serial_cmd/src目录下的serial_vel_cmd_node.cpp. 负责与单片机通信并把串口传来的数据直接发布话题。
  数据转换:mrobot_navigation/src目录下的imu_odom_pub.cpp. 负责订阅r2_chassis节点发布的串口数据并转换成浮点数。
  通过安装ros-melodic-serial功能包,上层与单片机之间可以进行串口通信。这里通信协议为两个字节的起始位:0XA5, 0X5A + 数据段 + 一个结束位:0XFE + 由append_CRC16_check_sum函数添加的两字节的校验位。
  由于传输数据基本都为浮点数,为了不丢失精度,用union来存储数据。另外,用这种方法需要注意两方对浮点数的存储方式。Jetson nano和stm32都为小端模式,所以对串口传输的数据流直接按顺序读字节就行,若是一方大端一方小端,则需反向读字节。
## 2. 定位   发布里程计+陀螺仪数据:mrobot_navigation/src目录下的imu_odom_pub.cpp.
  使用ros-melodic-robot-pose-ekf功能包进行定位,ekf包会自动订阅odom与imu话题并发布包含定位数据的odom_combined话题。(三个话题名字均可通过配置修改)
  启动文件:mrobot\launch\locate下的pose_locate.launch.
``` 部分参数解析 #定义输出的话题名称 #定义基坐标系(维护tf树要用) #滤波器更新和发布频率 #当传感器停止向滤波器发送信息时,滤波器在没有传感器的情况下等待多长时间才重新开始工作。 #是否使用里程计 #是否使用陀螺仪 #是否使用视觉里程计 ``` 这里并未使用视觉里程计,实际上有较好双目相机的情况下可以跑ORBSLAM2等SLAM算法来当视觉里程计。
https://blog.csdn.net/learning_tortosie/article/details/79881165 https://blog.csdn.net/weixin_44436677/article/details/105587986?spm=1001.2014.3001.5506 对于接下来的算法建图和自动导航包,如果不深入研究代码的话就只是研究参数的设置了,没什么特别好说的,直接贴链接了。
## 3. 地图建立  这里仅针对2D激光SLAM算法讨论,在使用三维激光雷达时失效。地图建立主要为接下来的navigation自动导航做准备,提供全局静态地图。 ###  a. 自动建图    启动参数在mrobot/launch/gmapping_laser_scan里的gmapping_laser.launch 这里用的是gmapping。如果用的激光雷达性能比较好的话更推荐cartographer。
   对于使用gmapping的注意点:
    1. gmapping极度依赖里程计的数据,只有激光雷达的情况下实际效果很差。
    2. 注意陀螺仪的安装位置,一定要在中心,否则旋转的时候加速度计乱飘,建出来的图原点会一直变。
前车之鉴: ![前车之鉴](/images/err_gmapping_1.jpg) ###  b. 手动建图    在地图已知且简单的情况下,可以考虑手动绘图。
   https://blog.csdn.net/LSG_Down/article/details/120442731
   一定要先看建图算法生成的图的格式再对照去更改参数。
   图片的比例也要注意,1像素对应的距离越短,图的精度就越高。可以让机械用cad画。
## 4. Navigation包 https://sychaichangkun.gitbooks.io/ros-tutorial-icourse163/content/chapter10/10.1.html
 Navigation包的使用主要在于配置参数。参数文件在mrobot_navigation\param目录下。实际上Move_base的参数调整较为复杂而且效果不一定好,建议直接在amcl定位的基础上二次开发自动导航算法。
###  a. Mapserver ###  b. Amcl ###  c. Move_base    可以参考:    http://t.zoukankan.com/lizhensheng-p-11117583.html ###  d. 目标点发布    发布代码在mrobot_navigation/src/move_goal_pub.cpp,这里为了方便没有采用动作发布,无法订阅动作的执行状态(完成/未完成),建议还是用动作发布。