Jetson Agx Orin 配置 VINS-Fusion 环境,解决opencv4.6.0与opencv4.2.0冲突

  1. 安装基础依赖

一键安装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
  • 编译安装ceres

#下载安装包
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关于这个问题的解释
    目前看起来这个问题不大,可以忽略。
  1. 安装Vins-Fusion-GPU

下载源码

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运行测试

  1. 数据集测试。打开三个终端,分别运行:
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
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Jetson AGX Orin是一款强大的嵌入式计算平台,可以轻松安装ROS 2以实现机器人及其他自动化系统的开发和运行。以下是使用300字中文回答Jetson AGX Orin安装ROS 2的步骤和注意事项。 首先,确保Jetson AGX Orin已经正常运行,并且您已经完成了基本的设置和配置。 接下来,从ROS 2官方网站(https://index.ros.org/doc/ros2/Installation/Foxy/Linux-Install-Debians/)下载适用于您的Jetson AGX Orin的ROS 2发行版,建议选择最新版本Foxy Fitzroy。下载完成后,将.deb文件保存到您的Jetson AGX Orin的本地存储中。 然后,在Jetson AGX Orin的终端中打开一个新的命令行窗口,以便在系统中进行安装。使用以下命令导航到.deb文件的目录: cd /path/to/deb/file 然后,使用以下命令安装ROS 2: sudo apt install ./ros-foxy-*.deb ROS 2的安装过程可能会花费一些时间,具体取决于您的Jetson AGX Orin的性能和网络连接速度。在安装过程中,请耐心等待,直到安装完成。 安装完成后,您需要设置ROS 2的工作环境。使用以下命令执行此操作: source /opt/ros/foxy/setup.bash 现在,您可以开始使用ROS 2在Jetson AGX Orin上进行开发和运行机器人应用程序了。请查阅ROS 2的文档和教程,以了解更多关于ROS 2在Jetson AGX Orin上的使用方法和功能。 总结一下,安装ROS 2到Jetson AGX Orin的过程包括下载适用于该平台的ROS 2发行版,并使用apt命令进行安装。安装完成后,使用source命令设置ROS 2的工作环境。最后,您就可以开始使用ROS 2在Jetson AGX Orin上进行开发和运行机器人应用程序了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值