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 两个角度转换函数。