ROS基础 6 | 角速度校准与IMU校准

IMU提供的姿态数据融合到角速度上,小车原地旋转是否准确需要靠准确的IMU和里程计。在硬件装配或者生产的时候总会产生误差,软件通讯速率不同也会有误差,所以我们需要标定好IMU、角速度、线速度,以达到理想误差范围,在建地图或导航的时候减少地图漂移。

影响角速度因素: 轮间距、轮子直径、IMU、编码器精度

屏蔽磁力计设置(MPU6050设置)

小车一般使用GY-85、MPU6050、MPU9250,但是MPU6050是六轴陀螺仪比其他少了磁力计,在ROS上不进行屏蔽会报错,需要在imu.launch进行屏蔽(在主控端完成)

roscd lingao_bringup/launch/include/imu
vim imu.launch

找到param name=”use_mag”,将 value=”true”改为false,如下

<node pkg="imu_filter_madgwick" type="imu_filter_node" name="imu_filter_madgwick" output="screen" respawn="false" >
        <param name="fixed_frame" value="base_footprint" />
        <param name="use_mag" value="false" />
        <param name="publish_tf" value="false" />
        <param name="use_magnetic_field_msg" value="true" />
        <param name="world_frame" value="enu" />
        <param name="orientation_stddev" value="0.05" />
    </node>


IMU校准

校准IMU前先将小车保持静止状态,然后打开终端(在主控端完成,如工控机或树莓派),启动小车

roslaunch lingao_bringup bringup.launch

然后重新打开一个终端,进入IMU校准文件目录(必须)

roscd lingao_bringup/param/imu/

此时目录有上次校准的文件imu_calib.yaml,最终的校准数据会保存在这个文件上,现在执行校准命令

rosrun imu_calib do_calib

现在不用动小车看到提示Press [ENTER]按下回车键即开始校准当前轴,直到校正完成。

tips: 你可按照官方指示方法校准,需要翻转小车,因为现在融合模块只用到Z轴所以没做翻转处理。

  • 校正X+轴 机器人的正面朝上
  • 校正X-轴 机器人的背面朝上
  • 校正Y+轴 机器人的左侧朝上
  • 校正Y-轴 机器人的右侧朝上
  • 校正Z+轴 机器人的顶面朝上
  • 校正Z-轴 机器人的底面朝上
lingao@lingao:~/lingao_ws/src/lingao_project/lingaorobot/param/imu$ rosrun imu_calib do_calib
......
Orient IMU with X+ axis - Front side of the robot facing up. Press [ENTER] once done.
Calibrating! This may take a while....
 Done.
Orient IMU with X- axis - Rear side of the robot facing up. Press [ENTER] once done.
Calibrating! This may take a while....
 Done.
Orient IMU with Y+ axis - Left side of the robot facing up. Press [ENTER] once done.
Calibrating! This may take a while....
 Done.
Orient IMU with Y- axis - Right side of the robot facing up. Press [ENTER] once done.
Calibrating! This may take a while....
 Done.
Orient IMU with Z+ axis - Top side of the robot facing up. Press [ENTER] once done.
Calibrating! This may take a while....
 Done.
Orient IMU with Z- axis - Bottom side of the robot facing up. Press [ENTER] once done.
Calibrating! This may take a while....
 Done.
Computing calibration parameters... Success!
Saving calibration file... Success!

校准完成后需要重启bringup文件,让系统重新加载刚刚校准的参数。(提示:ctrl+c可关闭当前终端执行的任务)

roslaunch lingao_bringup bringup.launch

执行订阅/imu/data查看命令可看到角速度各项指标是否正常

rostopic echo /imu/data


角速度校准(编码器)

小车的角速度是通过编码器和车体姿态解算出来,在不同地面摩檫力也不同会导致旋转的角度出现偏差,这里将编码器换算的角速度单独拿出来校准。

  1. 打开终端(小车主控端)启动base_driver并且发布odom
roslaunch lingao_bringup lingao_base_driver_pub_odom.launch
  1. 打开终端(小车主控端),执行角速度调整脚本:
rosrun lingao_bringup calibrate_angular.py

如果报错Couldn't find executable named calibrate_angular.py below /home/lingao/lingao_ws/src/lingaoRobot/lingao_bringup这个是没有给py文件权限,需要增加执行权限

 roscd lingao_bringup
sudo chmod -R +x scripts/

现在回到PC远程终端打开rqt

rosrun rqt_reconfigure rqt_reconfigure


现在需要开始校准旋转角度是否正确,把带有指南针的设备放到车上(如手机指南针),记录开始的值,调整比例参数以达理想中的误差


– 调整方法:
– 第一次:假如一开始值是0度,逆时针旋转没一圈到44度,这时候还差44度才归零,((360-44)/360)=0.878
– 第二次:假如一开始值是0度,顺时针旋转超过一圈到10度,((360+10)/360)*0.878(0.878是乘以上一次值) = 0.902
– 后面调整方法类推

将校准好的值保存到(小车主控端)配置文件上,首先进入lingao_bringup/launch/目录,编辑文件值

roscd lingao_bringup/launch/
vim lingao_base_driver.launch

最后保存文件重启bringup生效,ROS的IMU与角速度校准完毕!

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。
电子工坊 » ROS基础 6 | 角速度校准与IMU校准

发表评论

提供最优质的资源集合

立即查看 了解详情