【ROS RIKIBOT智能车-使用系列 第二章节】-RIKIBOT的IMU、线速度、角速度的校准

这部分的内容给大家讲解一下RIKIBOT 的IMU、线速度、角速度的校准,为什么要校准,机器人是硬件,只要是硬件,那精度有高有低,特别是IMU这种校正更加明显,关于IMU的误差与校准,这里有一篇很好的文章,而且小车在装配时也存在微小的差异也会导致机器人的误差。
另一方面从软件层面,系统是在一定频率下得到这些数据,也会产生一定的误差,理论上软件的频率越高,机器人的单位时间内得到的数值就越多,那么精度就会越高,但我们处理器能力是有限的(tips:RIKIBOT的驱动板是stm32,芯片的频率都是72MHz),不能开无限频率模式,因此从硬件与软件两方面我们需要校准我们车的IMU、线速度角速度

IMU的校准

下图两轮驱动车体标红蓝色模块的是GY-85 九轴 陀螺仪,不同车型的RIKBOT的ROS车在电机驱动板上都有这个模块
IMU
校准前先开机,让车体保持静止状态,然后打开终端(Ctrl+Alt+T),校准操作都是在主控端完成(工控机与树莓派端为主控端),先将小车的启动起来:

$roslaunch rikibot bringup.launch

然后重新打开一个终端,进入的IMU的校准文件目录:

roscd rikibot
cd param/imu/

你执行查看文件的命令(tips: ls是查看当前目录文件命令),可以看到里面有一个imu_calib.yaml的yaml格式的文件,也就是最终的校准数据保存的这个文件里面,此时终端的位置已经在这个目录下了,执行下面的命令,执行完成后系统就会提示你按enter键,也就是键盘上的回车键,直到校正完成,需要按6次回车键,校准由于是采样大量的平均值是需要一定时间,大家慢慢等待就可以,校准后的参数文件就会保存imu_calib.yaml
这个文件里面。

rosrun imu_calib do_calib

校准完成后,我们可以看一下我们的IMU参数是否准确,这里我们需要重新启动bringup文件,让系统重新加载校准后的参数,也就是要关闭以前执行的roslaunch rikibot bringup.launch命令(tips:Ctrl+C可以关掉当前终端的应用)。

roslaunch rikibot bringup.launch

在重新开一个终端,执行查看imu话题的命令,执行完下面的命令就会出现校准后的IMU数值的界面,由于我们目前只用到IMU的角速度,因此我们看图片的角速度的的各项指标是不是正常就行:

rostoipc echo /imu/data
这里写图片描述

###RIKIBOT的线速度
接下来我们校准小车的线速度,RIKIBOT的线速度是通过电机转动+编码器计数+PID速度调节反馈,来完成线速度的计算,具体理论我在进阶篇会给大家讲解。
首先,我们将RIKIBOT小车放在地下,开机启动小车,打开远程端电脑,我们在远程端ssh到主控端运行,将图中的校准的系数设置为1.0,:

roscd rikibot
cd launch
vim bringup.launch
这里写图片描述

更改完成后,然后启动小车,执行:

roslaunch rikibot bringup.launch

在ssh远程到主控端,执行线速度校准脚本:

rosrun rikibot_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的校准,否则校准是无效的
一样将RIKIBOT小车放在地下,然后启动小车,执行:

roslaunch rikibot bringup.launch

在ssh远程到主控端,执行角速度校准脚本:

rosrun rikibot_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
这里写图片描述

最后的最后

QQ交流群:130486387

### ROS智能车定位导航实现方案 #### 1. 系统架构概述 ROS智能车的定位导航系统通常由感知层、决策层和执行层组成。感知层负责收集环境信息;决策层处理这些信息并规划路径;执行层则根据指令控制车辆移动。 #### 2. 定位技术的选择 对于室内场景,可以采用激光雷达SLAM(Simultaneous Localization And Mapping)[^1] 或者基于视觉里程计的方法进行精确定位。而在室外环境中,则更多依赖于GPS/INS组合导航系统以及RTK差分定位技术来提高精度。此外,磁导航作为一种补充手段也能够增强系统的稳定性和可靠性[^2]。 #### 3. 导航算法的应用 常见的全局路径规划算法有A*、Dijkstra等图搜索类算法,而局部避障法则常用Dynamic Window Approach(DWA)或者Vector Field Histogram(VFH+)等方式。为了使机器人能够在复杂多变的真实世界里安全高效地行驶,往往还需要引入行为树(Behavior Tree)或有限状态机(Finite State Machine, FSM)来进行高层次的任务调度管理。 #### 4. 关键组件介绍 - **底盘控制器**:作为连接上位机软件同物理世界的桥梁,其作用不可忽视。Arbotix便是这样一个适用于小型无人平台开发的理想选择之一,它不仅支持多种通信协议还具备丰富的外设接口资源方便扩展其他设备[^1]。 - **传感器模块** - 激光测距仪(LiDAR): 提供高分辨率的距离测量数据用于构建地图及障碍物检测; - RGB-D相机: 结合颜色图像深度信息辅助完成物体识别分类工作; - IMU惯性测量单元(Inertial Measurement Unit): 输出角速度加速度等参数帮助修正姿态估计误差; - RFID读写器: 实现特定区域内的身份验证功能; - 超声波阵列: 补充近距离范围内盲区探测能力; - 磁感应线圈组: 构建磁场分布特征曲线指导自动循迹过程。 ```cpp // C++代码片段展示如何订阅来自LiDAR的数据话题 #include <ros/ros.h> #include <sensor_msgs/LaserScan.h> void laserCallback(const sensor_msgs::LaserScanConstPtr& msg){ // 处理接收到的消息... } int main(int argc, char **argv){ ros::init(argc, argv, "laser_subscriber"); ros::NodeHandle nh; ros::Subscriber sub = nh.subscribe("/scan", 10, laserCallback); ros::spin(); } ``` #### 5. 部署注意事项 当涉及到具体项目实施时,除了要充分考虑上述提到的各种软硬件选型因素之外,还需特别关注如下几个方面: - 工作空间的安全防护措施设置; - 合适的工作电压电流范围选取以保障长时间稳定供电; - 抗干扰能力强弱评估确保无线通讯链路畅通无阻; - 数据存储容量大小预留满足日志记录需求; - 用户界面友好程度优化便于后期维护调试。
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值