Linux 35.5 + JetPack v5.1.3@VINS-Fusion编译安装

1. 源由

VINS-FusionVINS-Mono的一个扩展,支持以下类型的传感融合:

  • 多传感器支持(双目相机 / 单目相机+IMU / 双目相机+IMU)
  • 在线空间标定(相机与IMU之间的变换)
  • 在线时间标定(相机与IMU之间的时间偏差)
  • 视觉回环检测

依据上述描述来说,优先在Ardupilot开源飞控之FollowMe验证平台使用VINS-Fusion

2. 编译&安装

  • Step 1:确认当前OpenCV版本 4.6.0
$ opencv_version

or
$ sudo jtop

注:如果不是上述版本,可能存在兼容性问题。

  • Step 2:删除手动安装OpenCV库 (通常安装在/usr/local/lib下)
$ sudo rm -rf /usr/local/include/opencv4/
$ sudo rm -rf /usr/local/lib/libopencv_*
$ sudo rm -rf /usr/local/bin/opencv_*

验证没有手动安装版本:

sudo find /usr/local/ -name "*opencv*"

检查系统apt安装opencv:

$ dpkg -l | grep opencv
ii  libopencv                                  4.5.4-8-g3e4c170df4                   arm64        Open Computer Vision Library
ii  libopencv-dev                              4.5.4-8-g3e4c170df4                   arm64        Open Computer Vision Library
ii  libopencv-python                           4.5.4-8-g3e4c170df4                   arm64        Open Computer Vision Library
ii  libopencv-samples                          4.5.4-8-g3e4c170df4                   arm64        Open Computer Vision Library
ii  nvidia-opencv                              5.1.3-b29                             arm64        NVIDIA OpenCV Meta Package
ii  nvidia-opencv-dev                          5.1.3-b29                             arm64        NVIDIA OpenCV dev Meta Package
ii  opencv-licenses                            4.5.4-8-g3e4c170df4                   arm64        Open Computer Vision Library

注:系统默认安装的(通常是放在/usr/lib/aarch64-linux-gnu/)下。暂时先不要调整,后续通过链接路径来优先使用自定义安装的库文件。

  • Step 3:安装OpenCV4.6.0
$ git clone git@github.com:SnapDragonfly/SnapLearnOpenCV.git
$ cd SnapLearnOpenCV/scripts

修改install_opencv_for_jetson.sh文件,将版本号修改为4.6.0

执行编译安装OpenCV 4.6.0,并确认安装成功。

$ ./install_opencv_for_jetson.sh

将后续程序编译优先选择OpenCV 4.6.0版本:

echo 'export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH' >> ~/.bashrc
  • Step 4:安装cv_bridge

确认当前ROS版本:

$ rosversion -d
noetic

获取cv_bridge:

$ sudo apt-get remove ros-noetic-cv-bridge
$ git clone git@github.com:ros-perception/vision_opencv.git
$ cd vision_opencv/
$ git checkout noetic

编译安装cv_bridge:

$ cd cv_bridge/
$ mkdir build
$ cd build
$ cmake ..
$ sudo make
$ sudo make install

注:该版本会自动寻找手动安装的OpenCV4.6.0版本,有些早期版本可能需要修改cv_bridge中的cmakelists.txt,将里面的OpenCV版本号保持和手动安装的一致。

  • Step 5:建立工程
$ mkdir -p ~/catkin_ws/src
$ tree -L 2 ~/catkin_ws/
catkin_ws
└── src
  • Step 6:下载代码
$ cd ~/catkin_ws/src
$ git clone https://github.com/HKUST-Aerial-Robotics/VINS-Fusion.git

或者(该版本已经含有相关修改,100%可用)

$ git clone git@github.com:SnapDragonfly/VINS-Fusion.git
$ git checkout lida2003
  • Step 7:编译代码
$ cd ../
$ catkin_make

鉴于验证环境存在各种系统软件版本,遇到的问题也千奇百怪,

原则上来说,只要梳理清楚应用软件各部件部署和依赖关系,就能从底层逻辑的角度解决问题。

3. 验证&测试

模拟验证需要三个终端串口,分别启动不同的工作内容:仿真软件、算法逻辑、模拟输入。
启动顺序请按照:终端1(仿真软件) --> 终端2(算法逻辑) --> 终端3(模拟输入)

  • 仿真软件(终端1)
$ cd ~/catkin_ws
$ source ~/catkin_ws/devel/setup.bash
$ roslaunch vins vins_rviz.launch
  • 模拟输入(终端3)
$ cd ~/catkin_ws/src
$ source ~/catkin_ws/devel/setup.bash
$ rosbag play MH/MH_01_easy.bag

注:模拟输入采集样本已经放置在MH目录下,数据样本请点击样本数据

3.1 单眼相机 + IMU

$ rosrun vins vins_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_mono_imu_config.yaml 

or
$ rosrun loop_fusion loop_fusion_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_mono_imu_config.yaml

3.2 双眼相机 + IMU

$ rosrun vins vins_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_stereo_imu_config.yaml 

or
$ rosrun loop_fusion loop_fusion_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_stereo_imu_config.yaml 

3.3 双眼相机

$ rosrun vins vins_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_stereo_config.yaml 

or
$ rosrun loop_fusion loop_fusion_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_stereo_config.yaml

4. 问题汇总

4.1 适配OpenCV宏定义

4.2 OpenCV版本不兼容

terminate called after throwing an instance of 'cv::Exception'
  what():  OpenCV(4.5.4) /home/ubuntu/build_opencv/opencv/modules/core/src/matrix.cpp:250: error: (-215:Assertion failed) s >= 0 in function 'setSize'

解决方案: 采用OpenCV 4.6.0

4.3 OpenCV编译告警

/usr/bin/ld: warning: libopencv_core.so.4.2, needed by /home/daniel/ego-planner/devel/lib/libvins_lib.so, may conflict with libopencv_core.so.4.5
/usr/bin/ld: warning: libopencv_imgcodecs.so.4.5, needed by /home/daniel/ego-planner/devel/lib/libvins_lib.so, may conflict with libopencv_imgcodecs.so.4.2
/usr/bin/ld: warning: libopencv_calib3d.so.4.5, needed by /usr/lib/aarch64-linux-gnu/libopencv_video.so.4.5.4, may conflict with libopencv_calib3d.so.4.2
[100%] Built target kitti_odom_test
/usr/bin/ld: warning: libopencv_video.so.4.2, needed by /home/daniel/ego-planner/devel/lib/libvins_lib.so, may conflict with libopencv_video.so.4.5
/usr/bin/ld: warning: libopencv_core.so.4.2, needed by /home/daniel/ego-planner/devel/lib/libvins_lib.so, may conflict with libopencv_core.so.4.5
/usr/bin/ld: warning: libopencv_imgcodecs.so.4.5, needed by /home/daniel/ego-planner/devel/lib/libvins_lib.so, may conflict with libopencv_imgcodecs.so.4.2
/usr/bin/ld: warning: libopencv_objdetect.so.4.2, needed by /usr/lib/aarch64-linux-gnu/libopencv_face.so.4.2.0, may conflict with libopencv_objdetect.so.4.5
[100%] Built target kitti_gps_test
[100%] Linking CXX executable /home/daniel/ego-planner/devel/lib/vins/vins_node
/usr/bin/ld: warning: libopencv_video.so.4.2, needed by /home/daniel/ego-planner/devel/lib/libvins_lib.so, may conflict with libopencv_video.so.4.5
/usr/bin/ld: warning: libopencv_core.so.4.2, needed by /home/daniel/ego-planner/devel/lib/libvins_lib.so, may conflict with libopencv_core.so.4.5
/usr/bin/ld: warning: libopencv_dnn.so.4.5, needed by /usr/lib/aarch64-linux-gnu/libopencv_video.so.4.5.4, may conflict with libopencv_dnn.so.4.2
/usr/bin/ld: warning: libopencv_calib3d.so.4.5, needed by /usr/lib/aarch64-linux-gnu/libopencv_video.so.4.5.4, may conflict with libopencv_calib3d.so.4.2

解决方案: ros-noetic-cv-bridge版本与OpenCV版本不一致,安装于ros-noetic-cv-bridge一致的OpenCV或者重新安装正确的ros-noetic-cv-bridge版本。

5. 总结

从模拟测试数据看,效果不错。后续如果有机会可以考虑融合GNSS传感的GVINS

效果如下:

Jetson Orin Nano | VINS-Fusion simulation

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值