Ubuntu: 20.04 noetic
雷达型号:VLP-16
IMU:N100
LIO-SAM
雷达驱动安装之前的博客写过: Ubuntu 20.04 调试VLP-16
一、安装IMU驱动
此处的命令在我这是不符合 我的是 ::
vim /etc/modules
打开文件之后,在最后一行加入 “ch343”文本,然后 ctrl+o 保存后,ctrl+x 退出即可。
然后惯导接入Linux系统,出入命令查看端口:
ls -l /dev | grep ttyCH
买设备 厂家会给提供IMUROS_SDK::使用的是ROS1,需要 fdilink_ahrs_ROS1 这个文件 里面的 fdilink_ahrs , 保存到 工作空间 imu_calib_ws/src 文件夹下
下面参考博客:
Ubuntu20.04编译并运行imu_utils,并且标定IMU_学无止境的小龟的博客-CSDN博客
SLAM硬件搭建(激光雷达+IMU+相机+移动底盘)_Cloudy_to_sunny的博客-CSDN博客_slam 硬件
1. 运行脚本确定串口
在编译之前需要运行一下脚本wheeltec_udev.sh这个脚本的作用是确定该IMU是通过哪一个串口进行连接的。
sudo ./wheeltec_udev.sh
出现问题:
修改:
打开脚本文件属性,勾选“允许作为程序执行文件”
之后再次运行即可!!!
或者 直接查找对应的串口编号,运行下面的代码 查看外设情况
ll /dev/
刚开始根据上面博客的这种方法查找串口对我的设备来说不管用,所以后来增加了最开始那个驱动 来检查串口 ,就可以找到!!!!
2. 编译运行
返回到工作空间 imu_calib_ws
cd ~/imu_calib_ws
catkin_make
报错:
解决: 安装串口依赖
sudo apt-get install ros-noetic-serial
再次 catkin_make 编译即可编译成功!!!!
3. 运行launch 文件
之后的过程参考:
Ubuntu20.04编译并运行imu_utils,并且标定IMU_学无止境的小龟的博客-CSDN博客
在运行launch文件之前, 先打开 launch 文件夹 下面的 ahrs_data.launch 文件修改串口号:
<param name="port" value="/dev/你的串口号"/>
我的是 <param name="port" value="/dev/ttyCH343USB0"/>
source devel/setup.bash
roslaunch fdilink_ahrs ahrs_driver.launch
查看发布的话题:
查看IMU数据
rostopic echo /imu
Rviz 可视化展示
rosrun rviz rviz
ADD话题,增加imu信息;参照配置文件,修改坐标系换成gyro_link。rviz效果如下:
保存数据
// 指定话题 将要录制的bag的文件名
rosbag record /imu -O imu.bag // 让IMU静止不动两个小时,录制IMU的bag
大概录制两个小时左右.....
终端显示如下:
二、利用 imu_utils 标定 imu
参考博客:
利用 imu_utils 标定 imu_er_dan_love的博客-CSDN博客_imu_utils标定
1. 安装 imu_utils
(1) 安装依赖项
sudo apt-get install libdw-dev
(2) ceres 已经安装(code_imu依赖ceres)
(3) 下载代码并编译 code_utils
cd ~/imu_calib_ws/src
git clone https://github.com/gaowenliang/code_utils
cd ..
catkin_make
报错:
解决:
找到报错的文件 sumpixel_test.cpp 把 #include "backward.hpp" 改为 #include "code_utils/backward.hpp"。
再次 catkin_make 编译成功!!!!
(4) 编译 imu_utils
cd ~/imu_calib_ws/src
git clone https://github.com/gaowenliang/imu_utils
cd ..
catkin_make
2. 录制IMU数据
rosbag record -o ***
录制两个小时左右......
3. 编写 launch 文件
在 imu_utils 下的 launch 文件夹中创建 imu_test.launch 。内容如下
<launch>
<node pkg="imu_utils" type="imu_an" name="imu_an" output="screen">
<!--这里的value是你的imu的topic-->
<param name="imu_topic" type="string" value= "/imu"/>
<!--这里的value是你的imu名字自定义-->
<param name="imu_name" type="string" value= "wheeltec"/>
<!--存放数据的文件路径可以根据自己需要修改-->
<param name="data_save_path" type="string" value= "$(find imu_utils)/data/fdilink/"/>
<!--这里的value值是你录制的imu的数据包的时间长度,这个value值一定要小于你录制的imu数据包-->
<param name="max_time_min" type="int" value= "120"/>
<param name="max_cluster" type="int" value= "100"/>
</node>
</launch>
4. 标定过程
- 在标定文件根目录下,输入命令:
catkin_make
source devel/setup.bash
roslaunch imu_utils imu_test.launch
- 然后,在 录制的 imu 数据包目录下,播放录制好的 imu 的 bag 包。
rosbag play -r 200 imu.bag // 200 倍速播放rosbag
程序进入bag读取,并计算allan方。当bag包加速回放完毕后,执行launch的窗口仍然会显示wait for imu data.,等待一段时间计算,计算完毕后会显示计算结果。
标定过程图片如下:
陀螺仪:
加速度计:
- 数据包播放结束之后,在 ~
/imu_utils/data/
fdilink/
(这是我修改后的文件路径)这个文件夹下会出现一系列的参数文件,如下图所示:
- 打开wheeltec_imu_param.yaml这个文件,会看到计算出来的噪声和随机游走的系数值,如下所示:
至此,IMU的内参标定和记录结束。
参考:
Ubuntu20.04编译并运行imu_utils,并且标定IMU_学无止境的小龟的博客-CSDN博客