一、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链接:
克隆到本地,然后按照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中查看
安装成功。