vins和realsense安装,内外参标定
github网址:HKUST-Aerial-Robotics/VINS-Fusion: An optimization-based multi-sensor state estimator
vins和realsence安装
详情见
Ubuntu20.04用D435i运行VINS-Fusion_vins-fusion d435i-CSDN博客
运行
数据集测试
数据集验证安装,Euroc数据集可前往官网下载,从官网[官网](The EuRoC micro aerial vehicle datasets)给的下载地址中下载,下载其中的bag文件,比如V1_01_easy.bag。将其放在目录~/dataset/下,然后分别打开三个终端:运行Stereo cameras + IMU
![[Pasted image 20251226212001.png]]
roslaunch vins vins_rviz.launch
rosrun vins vins_node ~/vinsfusion_ws/src/VINS-Fusion/config/euroc/euroc_stereo_imu_config.yaml
(optional) rosrun loop_fusion loop_fusion_node ~/vinsfusion_ws/src/VINS-Fusion/config/euroc/euroc_stereo_imu_config.yaml
rosbag play ~/dataset/V1_01_easy.bag
实机测试(IMU+双目)
开四个终端,分别执行以下命令
roslaunch realsense2_camera rs_camera_vins.launch
rosrun vins vins_node ~/vinsfusion_ws/src/VINS-Fusion/config/realsense_d435i/realsense_stereo_imu_config.yaml
rosrun loop_fusion loop_fusion_node ~/vinsfusion_ws/src/VINS-Fusion/config/realsense_d435i/realsense_stereo_imu_config.yaml
roslaunch vins vins_rviz.launch
实机测试(双目)
复制一份realsense_stereo_imu_config.yaml文件改名为realsense_stereo_imu_config.yaml修改3处地方
# 原来是 1
imu: 0 # 改为 0,表示不使用 IMU
# 原来是 1
estimate_extrinsic: 0 # 改为 0,不再在线优化外参
# 原来是 1
estimate_td: 0 # 改为 0,不估计时间偏移
开四个终端,分别执行以下命令
roslaunch realsense2_camera rs_camera_vins.launch
rosrun vins vins_node ~/vinsfusion_ws/src/VINS-Fusion/config/realsense_d435i/realsense_stereo_no_imu_config.yaml
rosrun loop_fusion loop_fusion_node ~/vinsfusion_ws/src/VINS-Fusion/config/realsense_d435i/realsense_stereo_imu_config.yaml
roslaunch vins vins_rviz.launch
内外参标定
参考第十课-VINS的参数设置与外参标定_哔哩哔哩_bilibili
内参标定
内参采用原厂自带的,
#启动相机
roslaunch realsense2_camera rs_camera_vins.launch
#读取相机内参(左右目相机内参一样)
rostopic echo /camera/infra2/camera_info
外参标定
先在配置文件输一个大概的参数,例如:
# 1. 配置自动校准外参
estimate_td: 1 # online,1为启用自动调参
# 2. 配置外参输出路径
output_path: "/home/uav/vinsoutput/"
# 3,输一个大致的外参,旋转矩阵不是单位阵是要变换到飞控的坐标系定义
body_T_cam0: !!opencv-matrix
rows: 4
cols: 4
dt: d
data: [ 0, 0, 1, -0.00552,
-1, 0, 0, 0.0051,
0, -1, 0, 0.01174,
0, 0, 0, 1 ]
body_T_cam1: !!opencv-matrix
rows: 4
cols: 4
dt: d
data: [ 0, 0, 1, 0.0446571,
-1, 0, 0, 0.0051,
0, -1, 0, 0.01174,
0, 0, 0, 1 ]
启动vins(这里的yaml改成对应的)
roslaunch realsense2_camera rs_camera_vins.launch
rosrun vins vins_node ~/vinsfusion_ws/src/VINS-Fusion/config/realsense_d435i/realsense_stereo_px4imu_config.yaml
然后拿起无人机走一个八字,范围大一点,可以看到设置的output_path: "/home/uav/vinsoutput/"有外参extrinsic_parameter.csv
#终端查看外参文件
cat ~/vinsoutput/extrinsic_parameter.csv
将数据手动输入到yaml文件
遇到的问题
rviz见面里不显示track_image
原因是板子算力不够,加上计算量的,延时严重,解决方法,在launch文件里修改max_cnt的数量
解决方法:~/vinsfusion_ws/src/VINS-Fusion/config/realsense_d435i/下的launch文件打开,修改里面的max_cnt数目(改的越小计算越快延时越短,但是会影响定位精度)
报错1opencv(NX特有)
terminate called after throwing an instance of 'cv::Exception'
what(): OpenCV(4.5.4) /home/ubuntu/build_opencv/opencv/modules/core/src/alloc.cpp:73: error: (-4:Insufficient memory) Failed to allocate 415416135248640 bytes in function 'OutOfMemoryError'
Aborted (core dumped)
原因:使用的nx装的ubuntu是预装了opencv4.5,但是一般的ubuntu20.04装的ubuntu是4.2,所以ros编译的时候就把包用4.5的编译了,但是运行的时候却是以为他是4.2
唯一解决方案:在工作空间里“覆盖”掉 ROS 自带的 cv_bridge
解决方法:
ROS 自带的 cv_bridge 不听话(非要用 4.2),我们就下载它的源码,在工作空间里用 4.5 重新编译它。这样,工作空间里的 cv_bridge 就会覆盖系统自带的。
下载 cv_bridge 源码
进入vins的工作空间 src 目录:
cd ~/vinsfusion_ws/src
git clone -b noetic https://github.com/ros-perception/vision_opencv.git
修改 CMakeLists 确保找到 4.5
为了防止它再次错误地找到 4.2,我们要强行指定路径。 打开文件:
gedit ~/vinsfusion_ws/src/vision_opencv/cv_bridge/CMakeLists.txt
在文件最开头(project() 下方)添加:
set(OpenCV_DIR "/usr/lib/aarch64-linux-gnu/cmake/opencv4/")
(这是 JetPack 系统自带 OpenCV 4.5 的默认路径)
彻底清理旧编译文件 (非常重要)
必须把之前“被污染”的编译缓存删得干干净净。
cd ~/vinsfusion_ws
rm -rf build/ devel/
重新编译
catkin_make
验证修复结果
编译完成后,再次执行那个 ldd 命令(注意要先 source):
source ~/vinsfusion_ws/devel/setup.bash
ldd ~/vinsfusion_ws/devel/lib/loop_fusion/loop_fusion_node | grep libopencv_core
这次你应该只看到一行 libopencv_core.so.4.5。
更多推荐
所有评论(0)