# 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. 注意陀螺仪的安装位置,一定要在中心,否则旋转的时候加速度计乱飘,建出来的图原点会一直变。
前车之鉴:

### 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,这里为了方便没有采用动作发布,无法订阅动作的执行状态(完成/未完成),建议还是用动作发布。