相机标定:
法1:ROS自带的标定工具
1.打开手机端app获取图像数据
2.ros自带的camera_calibration工具进行标定
然后移动标定板或者相机完成标定。
法2:Opencv 标定工具
参考链接:使用opencv进行相机标定(ubuntu系统下)
IMU标定
法1:使用imu_utils工具标定
编译安装code_utils,imu_utils.
1.静止采集数据(时间越长越好):
2.修改自己的launch文件Android_imu.launch,并启动
3.加速播放录制的数据
牢记一点:launch文件中的时间设置一定要小于bag包录制的数据时间,然后bag包快速播放完,立马就会出结果了。否则会一直wait for imu不出标定结果。(害我电脑白白开了一晚上结果还没算出来。。。。。。)
补充:用Imu_utils标定,原则上最后需要把生成的文件用matlab脚本绘制出Alann曲线再去精确的读出加速度和角速度的bias随机游走和高斯白噪声,实际操作表明直接用imu_utils出的结果也行,只要是在一个数量级上就没啥大问题,有些VIO系统跑步起来主要还是IMU本身的问题。
法2:使用kalibr_allan工具进行标定
参考链接:
1.将录制的bag数据包转mat文件,与bag在同级目录下
2.将生成的mat执行kalibr_allan/matlab目录下的script_allan_matparallel.m脚本
3.将第二步生成的结果mat文件执行script_process_results.m脚本完成标定并绘制出ALLAN曲线
补充:一开始尝试用octave跑.m脚本显示timeserises未定义,后来才发现我笔记本已经安装了matlab2018b了,但是需要开文件夹权限,执行:sudo chmod -Rf 777 ~/.matlab,然后在matlab里可以正常出结果。(过了几个月忘记咋操作了,这一点就浪费了我两三个小时才逐渐搞定)
最后的标定结果:
**》**另外Imu_tk工具可以标定确定性误差,这个可选可不选
相机和IMU联合标定
1.修改准备cam.yaml , imu.yaml,target.yaml
2.录制数据(需要3个轴来回运行至少三次)
3.运行dataToEuroc程序,将数据按照时间戳命名转成文件夹存储格式
4.再将数据文件生成bag包
5.kalibr联合标定
跑ORBSLAM2
步骤:
前期工作:使用ROS包camera_calibration标定手机,修改yaml参数配置文件
1.roscore
2.打开手机端数据获取APP(下载地址:git clone https://github.com/hitcm/Android_Camera-IMU.git),IP地址为电脑端IP
3.手机图像topic重命名:rosrun image_transport republish compressed in:=/android/image_raw raw out:=/cam0/image_raw
3.运行ORBSLAM:rosrun ORB_SLAM2 Mono /home/fs/catkin_ws/src/ORB_SLAM2/Vocabulary/ORBvoc.txt /home/fs/catkin_ws/src/ORB_SLAM2/Examples/Monocular/AndroidPhone.yaml
跑ORBSLAM3:
1.编译安装成功后运行失败的问题
解决方法:通过debug发现是Eigen库相关的问题,发现自动找的Eigen版本不对,要求3.1.0以上,切换到自己安装的3.3.7版本即可。需要全部重新编译。
2.运行出现framebuffer with requested attributes not available.的红色提示问题,一开始以为运行失败是这个东西导致的,各种查找解决这个问题的方法无果。最后发现这个并不影响代码运行。
3.如何在clion中debug ros 包
因为 经常会遇到ros包代码运行错误的问题,需要debug查找问题所在。clion在ros环境下启动可以自动加载ros环境。debug时需要在program argument中添加运行所需的参数文件路径(和非ros包程序方式一样)然后点击运行或者debug按钮即可。
运行步骤:
rosrun ORB_SLAM3 Mono_Inertial https://blog.csdn.net/weixin_43421058/article/details/Vocabulary/ORBvoc.txt https://blog.csdn.net/weixin_43421058/article/details/Examples/Monocular-Inertial/EuRoC.yaml
录制效果动图
获取鼠标位置:xdotool getmouselocation
动图录制:byzanz-record -x 482 -y 53 -w 452 -h 715 ~/x.gif 默认10s
降低topic频率,标定时用
rosrun topic_tools throttle messages 原topic 4.0 降频后的topic
查看topic的header信息
rostopic echo /cam0/image_raw | grep header -A4
下面内容更新于2022.2.25
原始标定方式用kalibr进行cam和imu的联合标定时非常耗时,优化计算需要3个小时以上
用kalibr标定相机800张左右的图片也需要30分钟左右,于是在Ubuntu20系统上重装了kalibr
参考博客:
Ubuntu20.04安装kalibr
20版本kalibr的github链接
安装完成后赶紧试验了相机的标定,速度超级快,800多张图片2分钟就标定完了。
最后总结标定步骤: