
## 里程计标定

里程计标定也叫里程计校准，即在当前运行环境下重新计算运动模型，得到里程计的运动模型参数，此教程**只适用于使用ROS控制M1机器人**的用户。

Autolabor M1 出厂时已做过标定了，在一般运行环境下（地毯、水泥、普通瓷砖等平坦路面）不用重新做标定，但如果您的运行环境是非一般环境，机器人可能就需要重新做标定，比如【经过打磨过的】并且还有【镜面效果】的水泥路面，或摩擦力较大路面，如果您在使用导航套件建图时效果不佳，也可以进行标定。

对于不太确定产品是否需要标定的用户，可先进行里程计测试，根据测试结果来判断机器人是否需要标定。



## 检测机器人是否需要标定



### 操作步骤：

1. 启动键盘控制，使用ROS键盘控制AP1原地转360度
2. 打开一个新的terminal，运行
  ```
  $ rviz
  ```
3. rviz窗口打开后，将fixed frame选择为odom
4. 关闭其他所有勾选，只保留grid和tf（如没有grid，左下角add新增）
5. 打开tf，下拉出来frames的内容，关闭其他所有勾选，保留baselink和odom
6. rviz右侧界面可看两个重合的坐标系(baselink和odom)
7. 对机器人（实体）的四个轮子做标记，标记此时车的位置
8. 键盘控制机器人原地360度转一圈（请必须记住此时旋转的方向，标定会用到），控制机器人回到刚刚标记的位置（重合），保持机器人与标记的初始位置方向一致
9. 观察rviz中的2个坐标系是否重合

如果不重合，表示需要标定。

如果基本重合，表示不需要标定。

## 对机器人进行里程计标定

### 操作步骤：

1. 打开一个新的terminal
2. 运行
  ```
  $ rosrun tf tf_echo /odom /base_link
  ```
3. 在出现的数据中查找in RPY (degree)[0,0,X]
4. 查看X值，如果刚刚键盘控制车时是顺时针转，用360-X，如果是逆时针转，用360+X，得到Y
5. 计算 model_param*Y/360，得到计算结果
6. 打开启动的launch文件，找到Autolabor M1驱动部分（autolabor_pro1_driver），找到model_param参数，将model_param改为上一步得到的结果
7. 保存、关闭launch文件
8. 关闭terminal中的运行的launch(ctrl+c)，如果rviz关闭时弹出窗口，询问是否需要保存，点击【without saving】（不保存）
9. 再次重复【检测机器人是否需要标定】的操作

如果不重合，表示需要标定，如果基本重合，表示不需要标定，重复以上【标定】工作，一次次的进行，直到基本重合。

注意：除第一次标定时使用的model_param为驱动中的原始值，之后每一次的标定操作中model_param为上一次标定计算的model_param结果（第5步）

