这部分的内容给大家讲解一下RikiRobot的IMU、线速度、角速度的校准,为什么要校准,机器人是硬件,只要是硬件,那精度有高有低,特别是IMU这种校正更加明显,关于IMU的误差与校准,这里有一篇很好的文章,而且小车在装配时也存在微小的差异也会导致机器人的误差。
另一方面从软件层面,系统是在一定频率下得到这些数据,也会产生一定的误差,理论上软件的频率越高,机器人的单位时间内得到的数值就越多,那么精度就会越高,但我们处理器能力是有限的(tips:Rikirobot的驱动板是stm32或者arduino,芯片的频率都是72MHz,1.9版本以前的代码我们的推送频率是10hz,1.9版本以后,我们通过优化代码与算法将推送频率提高了到了50hz,各方面的精度更高),不能开无限频率模式,因此从硬件与软件两方面我们需要校准我们车的IMU、线速度角速度
IMU的校准
下图两轮驱动车体标红蓝色模块的是GY-85 九轴 陀螺仪,不同车型的Rikirobot的ROS车在电机驱动板上都有这个模块
校准前先开机,让车体保持静止状态,然后打开终端(Ctrl+Alt+T),校准操作都是在主控端完成(工控机与树莓派端为主控端),先将小车的启动起来:
$roslaunch rikirobot bringup.launch
然后重新打开一个终端,进入的IMU的校准文件目录:
roscd rikirobot
cd param/imu/
你执行查看文件的命令(tips: ls是查看当前目录文件命令),可以看到里面有一个imu_calib.yaml的yaml格式的文件,也就是最终的校准数据保存的这个文件里面,此时终端的位置已经在这个目录下了,执行下面的命令,执行完成后系统就会提示你按enter键,也就是键盘上的回车键,直到校正完成,需要按6次回车键,校准由于是采样大量的平均值是需要一定时间,大家慢慢等待就可以,校准后的参数文件就会保存imu_calib.yaml
这个文件里面。
rosrun imu_calib do_calib
校准完成后,我们可以看一下我们的IMU参数是否准确,这里我们需要重新启动bringup文件,让系统重新加载校准后的参数,也就是要关闭以前执行的roslaunch rikirobot bringup.launch命令(tips:Ctrl+C可以关掉当前终端的应用)。
roslaunch rikirobot bringup.launch
在重新开一个终端,执行查看imu话题的命令,执行完下面的命令就会出现校准后的IMU数值的界面,由于我们目前只用到IMU的角速度,因此我们看图片的角速度的的各项指标是不是正常就行:
rostoipc echo /imu/data
Rikirobot的线速度
接下来我们校准小车的线速度,Rikirobot的线速度是通过电机转动+编码器计数+PID速度调节反馈,来完成线速度的计算,具体理论我在进阶篇会给大家讲解。
首先,我们将Rikirobot小车放在地下,开机启动小车,打开远程端电脑,我们在远程端ssh到主控端运行,将图中的校准的系数设置为1.0,:
roscd rikirobot
cd launch
vim bringup.launch
更改完成后,然后启动小车,执行:
roslaunch rikirobot bringup.launch
在ssh远程到主控端,执行线速度校准脚本:
rosrun rikirrobot_nav calibrate_linear.py
然后在远程端打开终端执行下面命令,会出现校准界面,然后勾选下图的”start_test”复选框,此时小车就会向前前进,运行小车认为的1m,小车停止下来后,我们拿一个标尺进行小车起点与终点的测量,看差距有多大,这里举个例子,如果实际测量值是1.08m,那我们在界面的修正系数这一栏填写1.08,然后重新校正,直到接近1m的距离,然后记住你在修正系数这一栏填写的值,到时把它重新填回上面bringup,修改的linear_scale的value为1.0的地方,如果是1.08就把1.0改成1.08,这样线速度就校正完成:
rosrun rqt_reconfigure rqt_reconfigure
角速度校准
小车是通过IMU来计算角速度的,因此进行这一步之前必须进行IMU的校准,否则校准是无效的
一样将Rikirobot小车放在地下,然后启动小车,执行:
roslaunch rikirobot bringup.launch
在ssh远程到主控端,执行角速度校准脚本:
rosrun rikirobot_nav calibrate_angular.py
然后在远程端打开终端执行下面命令,会出现校准界面,然后勾选下图的”start_test”复选框,此时小车就会进行逆时针旋转,运行小车认为的360度,小车停止下来后,我们预估一下是不是转的360度,看差距有多大,这里举个例子,如果实际测量值是370度,那我们在界面的修正系数这一栏填写1.03(tips:370/360=1.03),然后重新校正,直到接近360度,然后记住你在修正系数这一栏填写的值,到时把它重新填回上面bringup,修改的angular_scale的value为1.0的地方,如果是1.03就把1.0改成1.03,这样线速度就校正完成:
rosrun rqt_reconfigure rqt_reconfigure
最后的最后
Rikirobot提供两驱动、四驱动、麦克纳姆轮、Omni全向三轮、Omni全向四轮、履带、阿克曼(舵机转向)、大型负载的各种ROS车,有配套指导、及完善售后。
QQ交流群:130486387
RIKIROBOT店铺连接
下面是店铺的二维码与Rikirobot的交流群,有兴趣的可以扫一扫。