机器人搭建与调试5:线速度、角速度校准

robot_calibration 功能包代码已上传至github robot_calibration

tao@ubuntu:~/catkin_ws/src/robot_calibration$ tree
.
├── cfg
│   ├── CalibrateAngular.cfg   #角速度校准窗口
│   └── CalibrateLinear.cfg    #线速度校准窗口
├── CMakeLists.txt
├── package.xml
└── scripts
    ├── calibrate_angular.py  #角速度校准
    ├── calibrate_linear.py  #线速度校准
    ├── nav_square.py  #正方形行走测试
    ├── odom_out_and_back.py  #来回行走测试
    └── transform_utils.py #角度转换

创建robot_calibration速度校准功能包

创建 robot_calibration 功能包

$ cs
$ catkin_create_pkg robot_calibration geometry_msgs dynamic_reconfigure roscpp rospy std_msgs
$ cm
  • 新建cfg文件夹
  • 创建CalibrateAngular.cfg文件
  • 创建CalibrateLinear.cfg文件
  • 修改CMakeLists.txt文件

线速度校准

$ ssh pi@192.168.1.138 (SSH连接树莓派)
$ roscore (PC电脑)
$ roslaunch ros_arduino_python arduino.launch (树莓派)
$ rosrun robot_calibration calibrate_linear.py (PC电脑)
$ rosrun rqt_reconfigure rqt_reconfigure (PC电脑)
(图)线速度校准

线速度校准流程:

(1)设定参数后,点击 start_test ,开始测试;

test_distance:目标距离 (单位: m)
speed:线速度 (单位: m/s)
tolerance:误差
odom_linear_scale_correction:线速度缩放比例

(2)根据校准结果,记下 odom_linear_scale_correction 值。

odom_linear_scale_correction 初始值为1;
如果小车目标距离为1m,小车实际前进1.27m,则odom_linear_scale_correction 值为1.27;
同理,如果小车实际前进0.68m,则 odom_linear_scale_correction 值为0.68

(3)修改树莓派上 ros_arduino_bridge/ros_arduino_python/config/my_arduino_params.yaml 文件中 linear_scale_correction 的值为校准后的值。

linear_scale_correction: 1.26 

线速度缩放比例 linear_scale_correction 与每米编码计数 ticks_per_meter 有关
# How many encoder ticks are there per meter?
self.ticks_per_meter = self.encoder_resolution * self.gear_reduction  / (self.wheel_diameter * pi)
self.ticks_per_meter = self.ticks_per_meter/self.linear_scale_correction

(5)最后可根据校准后的 linear_scale_correction 值测试是否正确到达目标位置。

角速度校准

$ ssh pi@192.168.1.138 (SSH连接树莓派)
$ roscore (PC电脑)
$ roslaunch ros_arduino_python arduino.launch (树莓派)
$ rosrun robot_calibration calibrate_angular.py (PC电脑)
$ rosrun rqt_reconfigure rqt_reconfigure (PC电脑)
(图)角速度校准

角速度校准流程:

(1)设定参数,点击 start_test ,开始测试;

test_angle :目标角度(单位: °)
speed:角速度(单位: rad/s)
tolerance:误差
odom_angular_scale_correction:角速度缩放比例

(2)根据校准结果,记下 odom_angular_scale_correction 值。

odom_angular_scale_correction 初始值为1;
如果小车目标角度为360°,小车实际旋转380°,则 odom_angular_scale_correction 值为1.055;
同理,如果小车实际旋转270°,则 odom_angular_scale_correction 值为0.75。

(4)修改树莓派上 ros_arduino_bridge/ros_arduino_python/config/my_arduino_params.yaml 文件中 angular_scale_correction 的值为校准后的值。

angular_scale_correction: 1.0

角速度缩放比例 angular_scale_correction 与两轮间距 wheel_track 有关
self.wheel_track = pid_params['wheel_track']
self.wheel_track    = self.wheel_track/self.angular_scale_correction

(5)最后可根据校准后的 angular_scale_correction 值测试是否正确到达目标角度。

注意:角速度校准包含 transform_utils.py 文件,其提供 quat_to_angle, normalize_angle 两个角度转换函数。

参考

+