D435i相机与PX4飞控IMU联合标定

3 篇文章 0 订阅
1 篇文章 0 订阅

        在复现ego-planner项目时,进行到vins-fusion标定这步,使用vins-fusion在线标定出现发散,位置漂移现象,如下图所时

所以使用kalibr离线标定法

一、IMU内参标定

使用imu_utils包标定IMU内参,可以校准IMU的噪声密度和随机游走噪声

1. 安装IMU内参标定环境

1.1 安装ceres库

该库为必须项,本机在此前使用中已安装,如下记录,具体可参考Installation — Ceres Solver

1.1.1 安装ceres的一些相关依赖
# CMake
sudo apt-get install cmake
# google-glog + gflags
sudo apt-get install libgoogle-glog-dev libgflags-dev
# BLAS & LAPACK
sudo apt-get install libatlas-base-dev
# SuiteSparse and CXSparse (optional)
sudo apt-get install libsuitesparse-dev
 1.1.2 下载编译 ceres-solver
git clone https://github.com/ceres-solver/ceres-solver.git
tar zxf ~/Documents/ceres-solver-*.*.*.tar.gz(对应版本号)
cd ceres-solver
mkdir build
cd build
cmake ..
make 
sudo make install

 编译ceres过程中出现依赖错误,安装对应库即可,其他问题,自行搜索也可解决

1.2 安装 code_utils

1.2.1 构建工作空间
mkdir -p ~/kalibr_workspace/src
cd ~/kalibr_workspace
catkin_make
1.2.2 下载编译code_utils
sudo apt-get install libdw-dev
cd kalibr_workspace/src
git clone https://github.com/gaowenliang/code_utils.git
cd ..
catkin_make

 编译之前需要修改 code_utils 的 CMakeLists.txt 文件

①(CMAKE_CXX_FLAGS “-std=c++11” )改为(CMAKE_CXX_STANDARD 14)

② 添加 include_directories(include/code_utils)

1.3 安装 imu_utils

imu_utils依赖code_utils,先编译code_utils 再编译imu_utils

cd kalibr_workspace/src
git clone https://github.com/gaowenliang/imu_utils.git
cd ..
catkin_make

编译之前也需要修改 imu_utils 的 CMakeLists.txt 文件

(CMAKE_CXX_FLAGS “-std=c++11” )改为(CMAKE_CXX_STANDARD 14)

2. 录制IMU数据包及标定

2.1 录制IMU数据包

无人机静置情况下采集飞控IMU数据,使用rosbag录制IMU静置数据,大约两小时

#(确认飞控的串口连接正常,一般是 /dev/ttyACM0)
ls /dev/tty* 
#(为串口附加权限)
sudo chmod 777 /dev/ttyACM0
#(启动mavros)
roslaunch mavros px4.launch 
#录制imu数据包
rosbag record /mavros/imu/data_raw -O imu_xsens.bag  

飞控的IMU数据有两个,一个为/mavros/imu/data_raw,一个为/mavros/imu/data,区别可以自行百度。因为这里后续vins-fusion订阅的是/mavros/imu/data_raw,所以直接录制该话题IMU数据。

2.2 标定结果

2.2.1 配置launch文件

配置imu_utils/launch路径下的xsens.launch,相应名称和参数应以自己IMU为准

<launch>

    <node pkg="imu_utils" type="imu_an" name="imu_an" output="screen">
        <param name="imu_topic" type="string" value= "/mavros/imu/data_raw"/>
        <param name="imu_name" type="string" value= "xsens"/>
        <param name="data_save_path" type="string" value= "$(find imu_utils)/data/"/>  #话题名称
        <param name="max_time_min" type="int" value= "120"/>  #加载多长时间的数据
        <param name="max_cluster" type="int" value= "100"/>
    </node>



</launch>
2.2.2 运行 imu_utils 标定IMU
cd kalibr_ws
source devel/setup.bash
roslaunch imu_utils xsens.launch
rosbag play -r 200 imu_xsens.bag

在执行roslaunch命令后,会进入等待话题的状态:wait fot imu data,

然后再打开一个终端,尽快执行rosbag命令,程序进入bag读取,

当bag包加速回放完毕后,执行launch的窗口仍然会显示wait for imu data,等待一段时间计算,计算完毕后会显示计算结果,并保存。

可以在imu_utils/data路径下找到与imu_name对应的xxx_imu_param.yaml文件,其中_n代表noise,_w代表random walk。如下图所示,文件后续用到。

二、相机内参标定

1. 安装相机内参标定环境

1.1 安装依赖项

# 安装依赖项
sudo apt-get install python3-setuptools ipython3 libboost-all-dev doxygen libopencv-dev libeigen3-dev
sudo apt-get install libopencv-dev ros-noetic-vision-opencv ros-noetic-image-transport-plugins ros-noetic-cmake-modules python3-software-properties software-properties-common libpoco-dev python3-matplotlib python3-scipy python3-git python3-pip libtbb-dev libblas-dev liblapack-dev python3-catkin-tools libv4l-dev 

 1.2 安装kalibr包

cd ~/kalibr_workspace/src
git clone https://github.com/ethz-asl/Kalibr.git
cd ~/kalibr_workspace
catkin build -DCMAKE_BUILD_TYPE=Release -j4

这里使用了catkin build命令,因为之前同一工作空间下已有imu_utils相关编译,

如果导致catkin build有问题,可以先把kalibr_workspace下的build和devel文件夹删掉,再使用catkin_build编译。

编译时间相对长,多等一会。

遇到编译缺少依赖或其他原因报错,可自行安装或者根据报错百度。

2. 下载并打印标定板

从网站Downloads · ethz-asl/kalibr Wiki · GitHub下载Aprilgrid 6x6 0.8x0.8 m (A0 page)标定板PDF和对应yaml文件,如下图所示。(二维码Aprilgrid或者棋盘格checkerboard都是可以的,使用时做好相应yaml的修改即可,此处使用Aprilgrid)

 下载的PDF如果用A0纸打印下来,二维码标定板尺寸是和下载的yaml文件对应的,如果用其他尺寸纸打印,需要用尺子量出下图示例a和b的长度然后对yaml文件进行修改。

target_type: 'aprilgrid' #gridtype
tagCols: 6               #number of apriltags
tagRows: 6               #number of apriltags
tagSize: 0.088           #size of apriltag, edge to edge [m]
tagSpacing: 0.3          #ratio of space between tags to tagSize
codeOffset: 0            #code offset for the first tag in the aprilboard

这里直接使用A0纸打印下来,yaml文件无需修改,制作完的板子如下所示。

3. 录制相机数据包

realsense-viewer #先去关闭结构光
roslaunch realsense2_camera rs_camera.launch   #启动相机
rqt_image_view   #查看图像
rosrun topic_tools throttle messages /camera/infra1/image_rect_raw 4.0 /infra_left #左目设置为4hz
rosrun topic_tools throttle messages /camera/infra2/image_rect_raw 4.0 /infra_right #右目设置为4hz
rosbag record -O double_cam_1 /infra_left /infra_right #录左右目数据包

首先输入realsense-viewer,打开realsense软件关闭结构光,如下图所示

然后roslaunch启动D435i相机,再打开终端输入rqt_image_view检查话题/camera/infra1/image_rect_raw和/camera/infra2/image_rect_raw图像显示,如下图所示

然后两行rosrun命令输出左右目4hz图,话题名称分别为/infra_left和/infra_right,用rqt_image_view查看是否有输出,如果有输出:

将无人机放置好,然后手拿标定板站在无人机前方相机能够完全拍摄到的地方,

输入rosbag命令开始录制数据包,手拿标定板进行前后左右上下倾斜等全方向动作录制,

动作不要太快,大概两分钟左右,录制完成后Ctrl+C结束保存数据包,

大致如下图所示,录制时不要让板子超过相机视野

4. 进行标定

cd ~/kalibr_workspace
source devel/setup.bash
rosrun kalibr kalibr_calibrate_cameras --target /home/camera_data/april_6x6_80x80cm.yaml --bag /home/camera_data/double_cam_1.bag --models pinhole-radtan pinhole-radtan --topic /infra_left /infra_right --show-extraction --approx-sync 0.1 

命令解释:

--target后面是标定板参数文件的绝对路径

--bag后面是录制的数据包的绝对路径

--models后面是相机/畸变模型,有几目相机就要写几个,这里是两个针孔模型相机,所以是两个pinhole-radtan;相应地,其他支持的模型可以查看Supported models · ethz-asl/kalibr Wiki · GitHub

--topics后面是刚才录制的话题数据

--show-extraction是在标定过程中的一个显示界面,可以看到图片提取的过程,可以不要

--approx-sync 0.1 时间戳不对齐问题

标定完成后会输出下面三个文件。

查看其中的pdf文件,里面的重投影误差(reprojection errors)在1个像素以内标定就是比较好的了,这里标定到了2个像素以内,如果误差比较大,可以多标定几次,其他文件后续用到。

三、相机和飞控IMU联合标定

1.录制相机和飞控IMU数据包

realsense-viewer #关闭结构光
roslaunch realsense2_camera rs_camera.launch  #启动相机
roslaunch mavros px4.launch  #启动mavros
rosrun topic_tools throttle messages /camera/infra1/image_rect_raw 20.0 /infra_left #左目设置20hz
rosrun topic_tools throttle messages /camera/infra2/image_rect_raw 20.0 /infra_right #右目设置20hz
rosbag record -O imu_cam_1.bag /infra_left /infra_right /mavros/imu/data_raw  #录左右目和imu数据包

与相机内参标定类似,首先检查关闭D435i结构光,

然后启动相机,之后启动mavros包,接收imu话题,

然后这次左右目图像设置为20hz,imu数据直接使用/mavros/imu/data_raw话题(本机之前设置过,频率已经为200hz)。

这次录制将标定板静置,手拿无人机,进行前后左右上下俯仰等全方位运动录制数据包,与相机内参录制一样,

移动过程中,标定板不要超过相机视野,移动不要太快,时间也大致2分钟左右,

演示视频如Kalibr相机及IMU校准教程(Tutorial: IMU-camera calibration)_哔哩哔哩_bilibili所示。

2. 进行标定

rosrun kalibr kalibr_calibrate_imu_camera --target /home/camera_data/april_6x6_80x80cm.yaml --cam /home/camera_data/double_cam_2-camchain.yaml --imu /home/imu/imu.yaml --bag /home/imu_cam_data/imu_cam_1.bag

命令解释:

--target后面依旧是标定板参数文件的绝对路径

--cam后面是相机内参yaml(相机内参标定生成的yaml文件)的绝对路径

--imu后面是对应格式的imu内参yaml的绝对路径

--bag后面是录制的数据包的绝对路径

imu格式需设置为如下所示:

#Accelerometers
accelerometer_noise_density: 1.4909699009847377e-02   #Noise density (continuous-time)
accelerometer_random_walk:   4.8545209750110478e-04   #Bias random walk
 
#Gyroscopes
gyroscope_noise_density:     9.4975779621881166e-04   #Noise density (continuous-time)
gyroscope_random_walk:       1.7041508754582521e-05   #Bias random walk
 
rostopic:                    /mavros/imu/data_raw      #the IMU ROS topic
update_rate:                 200.0      #Hz (for discretization of the values above)

上面数据来自IMU内参标生成的yaml文件,如下图所示:

标定完成后,会生成如下四个文件

在PDF文件里会有两个相机的重投影误差,如下所示,控制在零点几以内就可以,误差大重复上述标定步骤即可

四、参数填写

1.相机内参

 对应参数如上图所示,分别一一填写入vins-fusion左右目配置文件。

2.相机外参

下图的时间偏差可取两者平均值

对应参数如上图所示,分别一一填写入vins-fusion配置文件。

最后进行vins-fusion算法验证,位置不会再发散和漂移严重,完成标定。

【参考】

VIO测试准备——使用imu_utils和kalibr进行相机与IMU标定_tagspacing-CSDN博客

相机与IMU标定教程_相机imu标定-CSDN博客

Realsence D455标定并运行Vins-Fusion_realscene455使用说明书-CSDN博客

[相机标定] 用Kalibr标定diy的双目相机_keyerror: 'attribute does not exist-CSDN博客

Kalibr使用:imu+camera联合标定过程详解_kalibr标定流程-CSDN博客

T265与imu内参标定及联合标定 - 知乎

  • 14
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以按照以下步骤下载PX4飞控的bootloader: 1. 首先,确保您的飞控硬件是PX4支持的型号,比如Omnibus F4 SD。您可以参考\[1\]中的链接获取更多关于Omnibus F4 SD的信息。 2. 将飞控安装到无人机上,并连接电调。如果您使用的是UBEC供电,将UBEC的正极连接到飞控的VBAT接口,负极接地。如果您使用的是电池供电,可以直接将电池连接到飞控。请注意,这是基于\[2\]中的引用。 3. 下载PX4固件后,如果您发现没有姿态信息,您可以在nsh终端中执行"attitude_estimator_q stop"命令来解决此问题。这是基于\[2\]中的引用。 4. 打开QGroundControl(QGC)地面站,并切换到固件下载页面。插上飞控,并下载最新的PX4固件。您可以参考\[3\]中的引用来了解更多关于固件下载的详细步骤。 5. 下载完成后,打开QGC并连接到飞控。将机型设置为四旋翼,并进行传感器校准等操作。 6. 如果在调试过程中遇到接收机无法被飞控识别的问题,您可以尝试使用PPM协议。将飞控板上的PPM脚短接,并将接收机连接到RCIN口。这是基于\[3\]中的引用。 希望以上步骤对您有帮助! #### 引用[.reference_title] - *1* *2* *3* [PX4装机教程(四)F4飞控刷写PX4](https://blog.csdn.net/qq_38768959/article/details/106988811)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值