采集APK:IMU标定使⽤开源库https://github.com/sunset768541/mobile-ar-sensor-logger所提供的APK进⾏数据采集。
采集⽅法:将⼿机静⽌于桌⾯,采集⾄少2小时数据。
存储路径:数据存储于⼿机/sdcard/Android/data/edu.osu.pcv.marslogger/files/data/⽬录下,可使
⽤adb pull命令将数据拷⻉⾄电脑。
相机+IMU的标定使⽤开源库https://github.com/DavidGillsjo/VideoIMUCapture-Android所提供的APK进⾏数据采集。
将1.1节所采集到gyro_accel.csv⽂件重命名为imu0.csv,并将表头重写为timestamp, omega_x, omega_y, omega_z, alpha_x, alpha_y, alpha_z。
我们使⽤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
我们在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设备名称,此部分可随意填写,最终标定所⽣成的⽂件名会带有此标识。
启动容器:
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⽬录,命名为
请参考博文:https://www.jianshu.com/p/f715ce9937d9。