文章目录
1. 数据采集
1.1 采集IMU数据
采集APK:IMU标定使用开源库https://github.com/sunset768541/mobile-ar-sensor-logger所提供的APK进行数据采集。
采集⽅法:将手机静止于桌面,采集至少2小时数据。
存储路径:数据存储于手机/sdcard/Android/data/edu.osu.pcv.marslogger/files/data/目录下,可使
用adb pull命令将数据拷贝至电脑。
1.2 采集相机+IMU数据
相机+IMU的标定使用开源库https://github.com/DavidGillsjo/VideoIMUCapture-Android所提供的APK进行数据采集。
2. IMU标定
2.1 数据预处理
将1.1节所采集到gyro_accel.csv⽂件重命名为imu0.csv,并将表头重写为timestamp, omega_x, omega_y, omega_z, alpha_x, alpha_y, alpha_z。
2.2 数据打包⽣成.bag⽂件
我们使用1.2节所clone的工程进行imu数据打包。在该工程calibration目录下打开终端,启动docker容
器:
SUDO=1 DATA=<imu-data-path> ./run_dockerhub.sh
imu-data-path为电脑端imu0.csv文件所在目录。
在容器中打包imu数据:
cd /data
kalibr_bagcreater --folder /data --output-bag imu0.bag
查看打包数据信息:
rosbag info imu0.bag
退出容器:
exit
2.3 创建.launch文件
我们在imu-data-path目录下创建android.launch文件,并填入如下内容:
<launch>
<node pkg="imu_utils" type="imu_an" name="imu_an" output="screen">
<param name="imu_topic" type="string" value= "/imu0"/>
<param name="imu_name" type="string" value= "iQOO_8_Pro"/>
<param name="data_save_path" type="string" value= "$(find imu_utils)/data/"/>
<param name="max_time_min" type="int" value= "27"/>
<param name="max_cluster" type="int" value= "100"/>
</node>
</launch>
max_time_min:表示.bag数据的最大时长,单位为分钟,程序会在最大时长内截断读取数据,此部分根据.bag数据实际情况填写。
imu_name:表示imu设备名称,此部分可随意填写,最终标定所生成的文件名会带有此标识。
2.4 数据标定
启动容器:
sudo docker run --name imu_utils -v <imu-data-path>:/data -it chelmx/imu_utils:melodic-desktop-full
在容器启动标定程序:
source /imu-calibration/devel/setup.sh
cp /data/android.launch /imu-calibration/src/imu_utils/launch/
roslaunch imu_utils android.launch
程序运行一段时间后,会出现“wait for imu data.”字样,此时需要新建一个终端重新进⼊容器:
sudo docker exec -it imu_utils bash
之后,在第二个终端中推送imu数据:
source /imu-calibration/devel/setup.sh
nohup roscore &
rosbag play -r 200 /data/imu0.bag
第一个终端接收到数据后会继续运行标定程序,等待一段时间后会出现“done”字样,表明标定结束。
标定结果被保存至/imu-calibration/src/imu_utils/data目录,命名为<imu_name>_imu_param.yaml,拷贝出容器即可。
3. 相机+IMU标定
请参考博文:https://www.jianshu.com/p/f715ce9937d9。