Jetson AGX orin Ubuntu22.04 ROS2 humble ORB-SLAM3 Realsense D435i

一、ORB-SLAM3 

1.删除AGX中多余opencv版本

参考:

jetson系列opencv版本更换_jetson 升级opencv版本-优快云博客

我使用jetpack6.0,捆绑安装的opencv版本为4.5d(??过于小众,很难搞)

不删除的话,环境中多个opencv版本并存,就会莫名其妙报一堆错,然后改到头秃吐肝颤道心破碎,望各位听劝。(实在不行使Docker吧,我下一步打算研究一下子了)

上述链接中的方法可能写在不完全,可以在文件夹中搜索4.5d来充分删除所有相关文件。

2.安装ORB-SLAM3源码和OpenCV

OpenCV 4.5.4 !! 

4.5.4!

4.5.4!!! 

Ubuntu安装opencv4.5(自己安装过程详细)_opencv 4.5.1 unbunt xiazai-优快云博客

ROS2安装ORB—SLAM3并用电脑摄像头运行_ros2 orbslam3-优快云博客

注:为什么一定是4.5.4?

尝试了多个版本的适用humble的ros2 orbslam包,本文选择的ros包bug更少。该仓库对opencv的版本要求就是 Opencv 4.5.4。

此外,按照该教程安装ORB-SLAM3存在问题就是后期buildROS版时存在Sophus报错,是因为ThirdPart中Sophus没安装。cmake  ..  make     sudo make install三行命令安装一下就行。


、ROS2 Humble 下的orb-slam3-ros2

首先需要保证自己有一个正常的ROS2 Humble,推荐小鱼ros一键安装。

1. 源码版本选择

参考:

zang09/ORB_SLAM3_ROS2 at humble (github.com)

教程啥的都有。


然后令人头秃吐血道心破碎的部分来了

2. Debug

(1)/usr/bin/ld: warning: libopencv_imgproc.so.4.5d, needed by /opt/ros/humble/lib/libcv_bridge.so, may conflict with libopencv_imgproc.so.4.4

是的,由于本人第一步并没有将原本自带的莫名其妙版本 4.5d卸载干净,导致ros2 humble 的cvbridge默认调用4.5d。

解决办法:如前文所述,充分卸载干净,重新安装opencv。

最近根据同事反馈,删除4.5d版本还是存在这个问题,最后通过下载cvbridge源码并替换ROS中的libcvbridge.so解决。具体步骤哪天补上(网上也能搜到)

(2)undefined reference to symbol '_ZN2cv23initUndistortRectifyMapERKNS_11_InputArrayES2_S2_S2_NS_5Size_IiEEiRKNS_12_OutputArrayES7_'
/usr/bin/ld: /usr/local/lib/libopencv_calib3d.so.4.5: error adding symbols: DSO missing from command line

因为环境配置或者依赖关系不完整,需要检查两个CmakeLists:ORB-SLAM3源码包中CmakeLists,以及orbslam3_ros2功能包中CmakeLists。

ros2功能包会调用源码包,所以我就以为orbslam3-ros2的Cmakelist会调用源码ORB_SLAM3的CmakeList中的库(包括opencv在内),不需要额外调opencv,但是仔细读一下代码发现其实需要。以下是修改后的ros2包中CmakeLists.txt:

cmake_minimum_required(VERSION 3.5)
project(orbslam3)

# You should set the PYTHONPATH to your own python site-packages path
set(ENV{PYTHONPATH} "/opt/ros/humble/lib/python3.10/site-packages")

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules)

# Default to C++14
if(NOT CMAKE_CXX_STANDARD)
  set(CMAKE_CXX_STANDARD 14)
endif()

if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
  add_compile_options(-Wall -Wextra -Wpedantic)
endif()

find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)
find_package(sensor_msgs REQUIRED)
find_package(OpenCV 4.5.4 REQUIRED) #此处为新加的
find_package(cv_bridge REQUIRED)
find_package(message_filters REQUIRED)
find_package(Sophus REQUIRED)
find_package(Pangolin REQUIRED)
find_package(ORB_SLAM3 REQUIRED)



include_directories(
  include
  ${ORB_SLAM3_ROOT_DIR}/include
  ${ORB_SLAM3_ROOT_DIR}/include/CameraModels
  ${OpenCV_INCLUDE_DIRS}      #新加
)

link_directories(
  include
)

add_executable(mono
  src/monocular/mono.cpp
  src/monocular/monocular-slam-node.cpp
)
ament_target_dependencies(mono rclcpp sensor_msgs cv_bridge ORB_SLAM3 Pangolin OpenCV) #每一个都加opencv

add_executable(rgbd
  src/rgbd/rgbd.cpp
  src/rgbd/rgbd-slam-node.cpp
)
ament_target_dependencies(rgbd rclcpp sensor_msgs cv_bridge message_filters ORB_SLAM3 Pangolin OpenCV)  #每一个都加opencv

add_executable(stereo
  src/stereo/stereo.cpp
  src/stereo/stereo-slam-node.cpp
)
ament_target_dependencies(stereo rclcpp sensor_msgs cv_bridge message_filters ORB_SLAM3 Pangolin OpenCV)  #每一个都加opencv

add_executable(stereo-inertial
  src/stereo-inertial/stereo-inertial.cpp
  src/stereo-inertial/stereo-inertial-node.cpp
)
ament_target_dependencies(stereo-inertial rclcpp sensor_msgs cv_bridge ORB_SLAM3 Pangolin OpenCV)  #每一个都加opencv

install(TARGETS mono rgbd stereo stereo-inertial
  DESTINATION lib/${PROJECT_NAME})

# Install launch files.
#install(DIRECTORY launch config vocabulary
#  DESTINATION share/${PROJECT_NAME}/)

ament_package()

进行改动后保存,并在ros2工作空间路径下运行:

rm -rf build
colcon bulld .-symlink-install .-packages-select orbslam3

成功。


三、Realsense D435i  SDK和ROS2 humble Wrapper

哈哈~这是上周另一个头秃肝儿颤的事故。直接导致重装系统,心态爆炸。

(太长不看版:;1.Jetson好单纯好不做作,和外面那些妖艳Ubuntu一点都不一样;2.sdk和ros包需要版本一致)

使用Jetson系列边缘计算平台一定要养成习惯,搜教程千万加上Jetson/arm64/aarch64关键词,看看有没有不同于普通Ubuntu的教程。普通Ubuntu大部分情况通用,但是指定有格愣子的情况(例如realsense SDK2.0)

首先,打开适用于ros2 humble的wrapper链接:

jetsonhacks/installRealSenseSDK: Install the Intel RealSense SDK on the NVIDIA Jetson Development Kits (github.com)

克隆到本地,然后按照readme的内容整。

注意:一定一定要保证sdk和wrapper版本一致!!!!如何保证:

在ROS2 Wrapper页面Releases · IntelRealSense/realsense-ros (github.com)

往下翻,查看支持的SDK版本:

也就是说Librealsense v2.54.1对应ROS2 Wrapper 4.54.1。这是我翻阅该release时,查找到的最新一版明确写明对应关系的版本(截至2024.11),可能尾数一致就是对应版本,但是为了稳妥,在此使用点明了互相对应的54.1版本。

1.realsense SDK 2.0

确定好Librealsense版本(v2.54.1),然后按照如下Jetson特供安装教程进行安装:

https://github.com/jetsonhacks/installRealSenseSDK

注意,运行安装脚本之前,修改 build脚本第187行:

 sudo udevadm control--reload.rules && sudo udevadm trigger
# &&后面加上 sudo,不然会导致权限不够,命令报错
#修改脚本后保存,然后运行脚本
git clone https://github.com/jetsonhacks/installRealSenseSDK.git
cd installRealSenseSDK
./installLibrealsense.sh 
./buildLibrealsense.sh -v v2.54.1 -j4
## -v 后面跟sdk版本,此处为 v2.54.1 注意不要少写v -j4就是4核处理

安装成功后,命令行运行 :

realsense-viewer

SDK安装成功。

如果没有图像,请检查摄像头硬件连接(USB3.0接口)并确认usb是否识别到摄像头(终端输入命令 lsusb)。

2.ROS2 Wrapper

  • 创建一个ROS2 工作空间(自己创,略) ,并克隆包:

  

git clone https://github.com/IntelRealSense/realsense-ros.git -b 4.54.1
cd ..#返回到/SSD/ros_ws目录
  • 安装依赖



#安装依赖(此处和github中的教程一致)
sudo apt-get install python3-rosdep -y
sudo rosdep init # "sudo rosdep init --include-eol-distros" for Eloquent and earlier
rosdep update # "sudo rosdep update --include-eol-distros" for Eloquent and earlier

#如果按照前文链接教程,源码安装Pangolin,则此处应该用--skip-keys 参数跳过它,因为 rosdep 无法自动解析 Pangolin 。

rosdep install -i --from-path src --rosdistro $ROS_DISTRO --skip-keys="librealsense2 Pangolin" -y

  • 构建:

 colcon build --allow-overriding cv_bridge image_geometry

当然,也可以单独build一个包,注意,如果出现debug了还build失败的情况,请及时清理build文件夹和install文件夹。

rm -rf /SSD/ros_ws/build
rm -rf /SSD/ros_ws/install

再重新build。

  • Source environment

source /opt/ros/humble/setup.bash 

# 看好位置,在_ws文件夹下
 . install/local_setup.bash 
  • 开启节点

ros2 launch realsense2_camera rs_launch.py

rviz中查看

安装成功。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值