Jetson Agx Orin 配置 VINS-Fusion 环境
一键安装ROS (ubuntu 20.04 - noetic)
wget http://fishros.com/install -O fishros && . fishros
安装catkin_ws工作空间
基础依赖
mamba install catkin_pkg empy
建立一个catkin_ws文件夹
mkdir -p catkin_ws/src
cd catkin_ws
空间初始化
catkin init
空间构建
catkin build
添加启动设置脚本
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/catkin_ws/devel/setup.bash
配置mavros
基础依赖
sudo apt-get install ros-noetic-mavros ros-noetic-mavros-extras ros-noetic-control-toolbox
cd /opt/ros/noetic/lib/mavros
安装数据库,此处较慢
sudo ./install_geographiclib_datasets.sh
安装ceres1.4, 不要安装2.1
安装依赖
sudo apt-get install cmake
sudo apt-get install libgoogle-glog-dev libgflags-dev
sudo apt-get install libatlas-base-dev
sudo apt-get install libeigen3-dev
sudo apt-get install libsuitesparse-dev
#下载安装包
wget ceres-solver.org/ceres-solver-1.14.0.tar.gz
#解压安装包
tar -xvf ceres-solver-1.14.0.tar.gz
cd ceres-solver-1.14.0
mkdir build
cd build
cmake ..
sudo make
sudo make test
sudo make install
- 在sudo make test时候报错:
99% tests passed, 1 tests failed out of 127
30 - evaluation_callback_test (Failed)
官网issue关于这个问题的解释
目前看起来这个问题不大,可以忽略。
下载源码
cd ~/catkin_ws/src
git clone https://github.com/pjrambo/VINS-Fusion-gpu
修改头文件
在camera_models/include/camodocal/chessboard中的头文件Chessboard.h中添加
#include <opencv2/imgproc/types_c.h>
#include <opencv2/calib3d/calib3d_c.h>
在camera_models/include/camodocal/calib/CameraCalibration.h中添加
#include <opencv2/imgproc/types_c.h>
#include <opencv2/imgproc/imgproc_c.h>
修改opencv3的表达为opencv4的表达
在文件中搜索CV_FONT_HERSHEY_SIMPLEX
并替换成cv::FONT_HERSHEY_SIMPLEX
在文件中搜索CV_BGR2GRAY
并替换成cv::COLOR_BGR2GRAY
在文件中搜索CV_GRAY2BGR
并替换成cv::COLOR_GRAY2BGR
在文件中搜索CV_RGB2GRAY
并替换成cv::COLOR_RGB2GRAY
在文件中搜索CV_LOAD_IMAGE_GRAYSCALE
并替换成cv::IMREAD_GRAYSCALE
编译,src下只有vins-fusion的情况
修改~/catkin_ws/src/VINS-Fusion-gpu/vins-estimator/CMakeLists.txt
第20行,改为你的地址
include(/usr/local/lib/cmake/opencv4/OpenCVConfig.cmake)
或者设置为
find_package(OpenCV REQUIRED)
此处需要修改loop_fusion和vins_estimator的CMakeLists.txt
在链接catkin_LIBRARIES之前,添加两行:
file(GLOB_RECURSE OLD_OPENCV "/usr/lib/aarch64-linux-gnu/libopencv*")
list(REMOVE_ITEM catkin_LIBRARIES ${OLD_OPENCV})
参考博客-ROS中catkin_make的OpenCV冲突的解决
如果上边的无效,则尝试手动删除/usr/lib/aarch64-linux-gnu/opencv4.2.0库,用opencv4.6.0伪装代替。
将下边的代码命名为build_fake_lib_opencv4.2_4.6.sh
cd /usr/local/lib
for f in libopencv_*4.6.0; do
base_name=$(basename "$f")
target_name=${base_name/4.6.0/4.2.0}
sudo ln -s "/usr/local/lib/$base_name" "/usr/lib/aarch64-linux-gnu/$target_name"
done
sudo ln -s /usr/local/lib/libopencv_imgcodecs.so.4.6.0 /usr/lib/aarch64-linux-gnu/libopencv_imgcodecs.so.4.2
sudo ln -s /usr/local/lib/libopencv_imgproc.so.4.6.0 /usr/lib/aarch64-linux-gnu/libopencv_imgproc.so.4.2
sudo ln -s /usr/local/lib/libopencv_core.so.4.6.0 /usr/lib/aarch64-linux-gnu/libopencv_core.so.4.2
注意此处so.4.2的三个文件一定要生成,我因为有了so.4.2.0而没注意到.0
的区别而耽误了三个小时.
然后运行bash build_fake_lib_opencv4.2_4.6.sh
修改完成之后开始编译
cd catkin_ws
catkin init
catkin build camera_models
catkin build vins
catkin build
vins运行测试
- 数据集测试。打开三个终端,分别运行:
roslaunch vins vins_rviz.launch
rosrun vins vins_node /home/hello/catkin_ws/src/VINS-Fusion-gpu/config/euroc/euroc_stereo_imu_config.yaml
rosbag play ~/Downloads/MH_01_easy.bag
我开始在运行第二行之后报错,经过查看官方issue,应该是安装了两个版本的opencv导致的冲突。
具体解决过程上一节编译部分,其他详情见文末附录。
2) d435i相机测试
roslaunch realsense2_camera rs_camera_vins.launch initial_reset:=true
rosrun vins vins_node ~/catkin_ws/src/VINS_Lite_GPU/config/realsense_d435i/realsense_stereo_imu_config.yaml
3)查看位姿
rostopic echo /vins_estimator/odometry
rosbag record /camera/imu /camera/infra1/image_rect_raw /camera/infra2/image_rect_raw
附录:
解决opencv多版本冲突
我手动安装了opencv4.6.0,jetson上的jetpack自带了opencv4.2.0
ros-noetic的cv_bridge默认要调用opencv4.2.0
(base) hello@hello-desktop:~$ sudo find /usr -name "*opencv*4.2*"
/usr/lib/aarch64-linux-gnu/libopencv_bgsegm.so.4.2.0
/usr/lib/aarch64-linux-gnu/libopencv_text.so.4.2.0
/usr/lib/aarch64-linux-gnu/libopencv_stereo.so.4.2.0
/usr/lib/aarch64-linux-gnu/libopencv_datasets.so.4.2
/usr/lib/aarch64-linux-gnu/libopencv_core.so.4.2.0
/usr/lib/aarch64-linux-gnu/libopencv_viz.so.4.2.0
/usr/lib/aarch64-linux-gnu/libopencv_reg.so.4.2.0
/usr/lib/aarch64-linux-gnu/libopencv_ximgproc.so.4.2.0
/usr/lib/aarch64-linux-gnu/libopencv_shape.so.4.2.0
/usr/lib/aarch64-linux-gnu/libopencv_core.so.4.2
/usr/lib/aarch64-linux-gnu/libopencv_reg.so.4.2
/usr/lib/aarch64-linux-gnu/libopencv_rgbd.so.4.2.0
/usr/lib/aarch64-linux-gnu/libopencv_freetype.so.4.2
/usr/lib/aarch64-linux-gnu/libopencv_xobjdetect.so.4.2.0
/usr/lib/aarch64-linux-gnu/libopencv_xobjdetect.so.4.2
/usr/lib/aarch64-linux-gnu/libopencv_dnn_superres.so.4.2
/usr/lib/aarch64-linux-gnu/libopencv_ccalib.so.4.2
/usr/lib/aarch64-linux-gnu/libopencv_dnn_superres.so.4.2.0
/usr/lib/aarch64-linux-gnu/libopencv_bgsegm.so.4.2
/usr/lib/aarch64-linux-gnu/libopencv_hdf.so.4.2
/usr/lib/aarch64-linux-gnu/libopencv_video.so.4.2
/usr/lib/aarch64-linux-gnu/libopencv_calib3d.so.4.2
/usr/lib/aarch64-linux-gnu/libopencv_superres.so.4.2.0
/usr/lib/aarch64-linux-gnu/libopencv_dnn.so.4.2.0
/usr/lib/aarch64-linux-gnu/libopencv_videostab.so.4.2
/usr/lib/aarch64-linux-gnu/libopencv_dnn_objdetect.so.4.2.0
/usr/lib/aarch64-linux-gnu/libopencv_imgcodecs.so.4.2
/usr/lib/aarch64-linux-gnu/libopencv_face.so.4.2
/usr/lib/aarch64-linux-gnu/libopencv_line_descriptor.so.4.2
/usr/lib/aarch64-linux-gnu/libopencv_fuzzy.so.4.2.0
/usr/lib/aarch64-linux-gnu/libopencv_videoio.so.4.2.0
/usr/lib/aarch64-linux-gnu/libopencv_structured_light.so.4.2.0
/usr/lib/aarch64-linux-gnu/libopencv_phase_unwrapping.so.4.2.0
/usr/lib/aarch64-linux-gnu/libopencv_dnn_objdetect.so.4.2
/usr/lib/aarch64-linux-gnu/libopencv_tracking.so.4.2
/usr/lib/aarch64-linux-gnu/libopencv_shape.so.4.2
/usr/lib/aarch64-linux-gnu/libopencv_videostab.so.4.2.0
/usr/lib/aarch64-linux-gnu/libopencv_objdetect.so.4.2.0
/usr/lib/aarch64-linux-gnu/libopencv_aruco.so.4.2.0
/usr/lib/aarch64-linux-gnu/libopencv_stitching.so.4.2.0
/usr/lib/aarch64-linux-gnu/libopencv_face.so.4.2.0
/usr/lib/aarch64-linux-gnu/libopencv_features2d.so.4.2.0
/usr/lib/aarch64-linux-gnu/libopencv_superres.so.4.2
/usr/lib/aarch64-linux-gnu/libopencv_photo.so.4.2
/usr/lib/aarch64-linux-gnu/libopencv_hdf.so.4.2.0
/usr/lib/aarch64-linux-gnu/libopencv_optflow.so.4.2
/usr/lib/aarch64-linux-gnu/libopencv_optflow.so.4.2.0
/usr/lib/aarch64-linux-gnu/libopencv_quality.so.4.2
/usr/lib/aarch64-linux-gnu/libopencv_ximgproc.so.4.2
/usr/lib/aarch64-linux-gnu/libopencv_fuzzy.so.4.2
/usr/lib/aarch64-linux-gnu/libopencv_highgui.so.4.2
/usr/lib/aarch64-linux-gnu/libopencv_saliency.so.4.2
/usr/lib/aarch64-linux-gnu/libopencv_img_hash.so.4.2
/usr/lib/aarch64-linux-gnu/libopencv_surface_matching.so.4.2
/usr/lib/aarch64-linux-gnu/libopencv_surface_matching.so.4.2.0
/usr/lib/aarch64-linux-gnu/libopencv_stereo.so.4.2
/usr/lib/aarch64-linux-gnu/libopencv_viz.so.4.2
/usr/lib/aarch64-linux-gnu/libopencv_video.so.4.2.0
/usr/lib/aarch64-linux-gnu/libopencv_datasets.so.4.2.0
/usr/lib/aarch64-linux-gnu/libopencv_features2d.so.4.2
/usr/lib/aarch64-linux-gnu/libopencv_calib3d.so.4.2.0
/usr/lib/aarch64-linux-gnu/libopencv_imgcodecs.so.4.2.0
/usr/lib/aarch64-linux-gnu/libopencv_ml.so.4.2
/usr/lib/aarch64-linux-gnu/libopencv_ml.so.4.2.0
/usr/lib/aarch64-linux-gnu/libopencv_hfs.so.4.2
/usr/lib/aarch64-linux-gnu/libopencv_hfs.so.4.2.0
/usr/lib/aarch64-linux-gnu/libopencv_photo.so.4.2.0
/usr/lib/aarch64-linux-gnu/libopencv_line_descriptor.so.4.2.0
/usr/lib/aarch64-linux-gnu/libopencv_xphoto.so.4.2
/usr/lib/aarch64-linux-gnu/libopencv_imgproc.so.4.2
/usr/lib/aarch64-linux-gnu/libopencv_img_hash.so.4.2.0
/usr/lib/aarch64-linux-gnu/libopencv_plot.so.4.2.0
/usr/lib/aarch64-linux-gnu/libopencv_flann.so.4.2.0
/usr/lib/aarch64-linux-gnu/libopencv_text.so.4.2
/usr/lib/aarch64-linux-gnu/libopencv_stitching.so.4.2
/usr/lib/aarch64-linux-gnu/libopencv_videoio.so.4.2
/usr/lib/aarch64-linux-gnu/libopencv_objdetect.so.4.2
/usr/lib/aarch64-linux-gnu/libopencv_highgui.so.4.2.0
/usr/lib/aarch64-linux-gnu/libopencv_structured_light.so.4.2
/usr/lib/aarch64-linux-gnu/libopencv_dnn.so.4.2
/usr/lib/aarch64-linux-gnu/libopencv_flann.so.4.2
/usr/lib/aarch64-linux-gnu/libopencv_freetype.so.4.2.0
/usr/lib/aarch64-linux-gnu/libopencv_saliency.so.4.2.0
/usr/lib/aarch64-linux-gnu/libopencv_phase_unwrapping.so.4.2
/usr/lib/aarch64-linux-gnu/libopencv_bioinspired.so.4.2
/usr/lib/aarch64-linux-gnu/libopencv_bioinspired.so.4.2.0
/usr/lib/aarch64-linux-gnu/libopencv_rgbd.so.4.2
/usr/lib/aarch64-linux-gnu/libopencv_aruco.so.4.2
/usr/lib/aarch64-linux-gnu/libopencv_quality.so.4.2.0
/usr/lib/aarch64-linux-gnu/libopencv_dpm.so.4.2
/usr/lib/aarch64-linux-gnu/libopencv_dpm.so.4.2.0
/usr/lib/aarch64-linux-gnu/libopencv_xphoto.so.4.2.0
/usr/lib/aarch64-linux-gnu/libopencv_tracking.so.4.2.0
/usr/lib/aarch64-linux-gnu/libopencv_ccalib.so.4.2.0
/usr/lib/aarch64-linux-gnu/libopencv_plot.so.4.2
/usr/lib/aarch64-linux-gnu/libopencv_imgproc.so.4.2.0
/usr/share/lintian/overrides/libopencv-videostab4.2
/usr/share/lintian/overrides/libopencv-calib3d4.2
/usr/share/lintian/overrides/libopencv-core4.2
/usr/share/lintian/overrides/libopencv-videoio4.2
/usr/share/lintian/overrides/libopencv-imgcodecs4.2
/usr/share/lintian/overrides/libopencv-stitching4.2
/usr/share/lintian/overrides/libopencv-superres4.2
/usr/share/lintian/overrides/libopencv-features2d4.2
/usr/share/lintian/overrides/libopencv-photo4.2
/usr/share/lintian/overrides/libopencv-flann4.2
/usr/share/lintian/overrides/libopencv-objdetect4.2
/usr/share/lintian/overrides/libopencv4.2-java
/usr/share/lintian/overrides/libopencv-viz4.2
/usr/share/lintian/overrides/libopencv-video4.2
/usr/share/lintian/overrides/libopencv-dnn4.2
/usr/share/lintian/overrides/libopencv-imgproc4.2
/usr/share/lintian/overrides/libopencv-ml4.2
/usr/share/lintian/overrides/libopencv-highgui4.2
/usr/share/lintian/overrides/libopencv-contrib4.2
/usr/share/lintian/overrides/libopencv-shape4.2
/usr/share/doc/libopencv-videostab4.2
/usr/share/doc/libopencv-calib3d4.2
/usr/share/doc/libopencv-core4.2
/usr/share/doc/libopencv-videoio4.2
/usr/share/doc/libopencv-imgcodecs4.2
/usr/share/doc/libopencv-stitching4.2
/usr/share/doc/libopencv-superres4.2
/usr/share/doc/libopencv-features2d4.2
/usr/share/doc/libopencv-photo4.2
/usr/share/doc/libopencv-flann4.2
/usr/share/doc/libopencv4.2-jni
/usr/share/doc/libopencv-objdetect4.2
/usr/share/doc/libopencv4.2-java
/usr/share/doc/libopencv-viz4.2
/usr/share/doc/libopencv-video4.2
/usr/share/doc/libopencv-dnn4.2
/usr/share/doc/libopencv-imgproc4.2
/usr/share/doc/libopencv-ml4.2
/usr/share/doc/libopencv-highgui4.2
/usr/share/doc/libopencv-contrib4.2
/usr/share/doc/libopencv-shape4.2
我将这些libopencv-4.2文件打包压缩,然后建立软链接,将opencv4.6.0的链接伪装成4.2.0.
cd /usr/local/lib
for f in libopencv_*4.6.0; do
base_name=$(basename "$f")
target_name=${base_name/4.6.0/4.2.0}
sudo ln -s "/usr/local/lib/$base_name" "/usr/lib/aarch64-linux-gnu/$target_name"
done
sudo ln -s /usr/local/lib/libopencv_imgcodecs.so.4.6.0 /usr/lib/aarch64-linux-gnu/libopencv_imgcodecs.so.4.2
sudo ln -s /usr/local/lib/libopencv_imgproc.so.4.6.0 /usr/lib/aarch64-linux-gnu/libopencv_imgproc.so.4.2
sudo ln -s /usr/local/lib/libopencv_core.so.4.6.0 /usr/lib/aarch64-linux-gnu/libopencv_core.so.4.2
卸载重新安装ros和vins的操作
卸载ros
sudo apt-get purge ros-noetic-*
rm -rf ~/catkin_ws
安装ros
wget http://fishros.com/install -O fishros && . fishros