小鱼 ROS 2 新书上线!点击链接查看, 新书配套视频点击链接查看。
提问前必看的发帖注意事项—— 提问前必看!不符合要求的问题拒绝回答!!
社区使用指南—如何添加标签修改密码
ros2机器人foxy版用笔记本摄像头跑单目orb_slam3
-
环境:
Ubuntu 20.04
ROS2 foxy
OpenCV 4.4.0(4版本以上的应该都可以)安装orb_slam3 搭建环境参考:
https://mp.csdn.net/mp_blog/creation/editor/129137521
git clone https://github.com/zang09/ORB-SLAM3-STEREO-FIXED.git ORB_SLAM3 cd ORB_SLAM3 chmod +x build.sh ./build.sh
这将在lib文件夹中创建libORB_SLAM3.so,只需要安装到这一步,生成 libORB_SLAM3.so 动态库即可。后面的ros程序安装是ros1的,ros1早晚会被ros2替代的,所以后面的ros程序我们就不在安装了。
安装ros2 foxy版orb_slam3程序:安装相关的ROS2软件包:
sudo apt install ros-$ROS_DISTRO-message-filters
安装orb_slam3_ros2
mkdir -p colcon_ws/src cd ~/colcon_ws/src git clone https://github.com/zang09/ORB_SLAM3_ROS2.git orbslam3_ros2
按自己的目录结构修改CMakeLists.txt 第五行
set(ENV{PYTHONPATH} "/opt/ros/foxy/lib/python3.8/site-packages/")
修改 FindORB_SLAM3.cmake 第八行为自己的ORB_SLAM3路径,比如我的:set(ORB_SLAM3_ROOT_DIR "~/ORB_SLAM3")
编译:cd ~/colcon_ws colcon build --symlink-install --packages-select orbslam3
编译报错找不到sophus/se3.hpp:
cd ~/ORB_SLAM3/Thirdparty/Sophus/build
sudo make install重新编译直至成功。
安装笔记本摄像头驱动:
sudo apt install ros-foxy-usb-cam //foxy安装摄像头驱动
ros2 run usb_cam usb_cam_node_exe //启动摄像头节点
查看摄像头话题:ros2 topic list
/camera_info
/image_raw
/image_raw/compressed
/image_raw/compressedDepth
/image_raw/theora
/parameter_events
/rosout摄像头发布话题为 : /image_raw
和程序里面的接收话题不一样,需要修改程序内的接收话题名与摄像头发布话题名一致
修改 monocular-slam-node.cpp
修改好话题后要重新编译。运行程序:
- 打开终端开启摄像头节点
ros2 run usb_cam usb_cam_node_exe
- 重新打开一个终端开启单目orbslam3程序
source ~/colcon_ws/install/local_setup.bash
ros2 run orbslam3 mono ~/ORB_SLAM3/Vocabulary/ORBvoc.txt ~/ORB_SLAM3/Examples/Monocular/RealSense_D435i.yaml
上面命令是ros主程序+ ORBvoc.txt + RealSense_D435i.yaml (摄像头配置文件)路径需要按自己电脑实际路径修改。
可能我的笔记本配置低,需要等待十几秒才能看到图像
看到图像说明程序正常运行了,如果只是一个黑框出不来图像,移动一下笔记本,跑单目静止画面有时出不来图像。
我们这里的目的是跑通程序,真正要让程序运行好还需要给摄像头做标定。参考网址:
GitHub - zang09/ORB-SLAM3-STEREO-FIXED: Fixed version of ORB-SLAM3 stereo mode
GitHub - zang09/ORB_SLAM3_ROS2: ROS2 wrapping package for orbslam3 library
-
@毛哥成山轮胎机油保养 你好,我用的是galactic版本,步骤一样但在编译ROS2包的时候会报错:
/usr/bin/ld: /home/turtlebot/origin_slam/ORB_SLAM3/lib/libORB_SLAM3.so: undefined reference toDUtils::Random::RandomInt(int, int)' /usr/bin/ld: /home/turtlebot/origin_slam/ORB_SLAM3/lib/libORB_SLAM3.so: undefined reference to
DUtils::Random::SeedRandOnce()'
/usr/bin/ld: /home/turtlebot/origin_slam/ORB_SLAM3/lib/libORB_SLAM3.so: undefined reference toDUtils::Random::SeedRandOnce(int)' /usr/bin/ld: /home/turtlebot/origin_slam/ORB_SLAM3/lib/libORB_SLAM3.so: undefined reference to
DBoW2::FORB::L'
请问你遇到过这个问题么 -
@SciMaker 按你的提示应该是缺少libORB_SLAM3.so这个文件,你搜一下这个文件看看你机子里面有吗,有的话把他复制到/usr/lib/文件夹下。
搜索命令:sudo find / -name libORB_SLAM3.so -
@毛哥成山轮胎机油保养 在 ros2机器人foxy版用笔记本摄像头跑单目orb_slam3 中说:
zang09
xin@MOSS:~/Code/Test$ colcon build --symlink-install --packages-select orbslam3 Starting >>> orbslam3 --- stderr: orbslam3 Traceback (most recent call last): File "/opt/ros/rolling/share/ament_cmake_core/cmake/package_templates/templates_2_cmake.py", line 21, in <module> from ament_package.templates import get_environment_hook_template_path ModuleNotFoundError: No module named 'ament_package' CMake Error at /opt/ros/rolling/share/ament_cmake_core/cmake/ament_cmake_package_templates-extras.cmake:41 (message): execute_process(/usr/bin/python3.10 /opt/ros/rolling/share/ament_cmake_core/cmake/package_templates/templates_2_cmake.py /home/xin/Code/Test/build/orbslam3/ament_cmake_package_templates/templates.cmake) returned error code 1 Call Stack (most recent call first): /opt/ros/rolling/share/ament_cmake_core/cmake/ament_cmake_coreConfig.cmake:41 (include) /opt/ros/rolling/share/ament_cmake/cmake/ament_cmake_export_dependencies-extras.cmake:15 (find_package) /opt/ros/rolling/share/ament_cmake/cmake/ament_cmakeConfig.cmake:41 (include) CMakeLists.txt:18 (find_package) --- Failed <<< orbslam3 [0.32s, exited with code 1] Summary: 0 packages finished [0.42s]
我编译的时候遇到这个问题,可以帮我看看吗
-
-
@毛哥成山轮胎机油保养 谢谢回复,我的设备中是有个文件的,目前通过改写CMakelists把路径加进去了,问题解决了啦
-
Starting the Viewer
[ros2run]: Segmentation fault
最后一步的时候会这样,是什么原因 -
@2689324574 程序跑起来了吗?
-
此回复已被删除! -
此回复已被删除! -
你好 出现这种错 这是沙玩意儿 -
@1157354382 你这是跑的单目的程序,需要启动摄像头的,你的主程序已经启动,正在等你的摄像头数据,如果你的摄像头已经启动了,那要检查摄像头发布的话题和你的主程序接收的话题是否一致
ros2 topic list 查看话题 -
@毛哥成山轮胎机油保养 是的 这些我都修改好了,好奇怪
-
@毛哥成山轮胎机油保养 我看了一眼里面的代码,好像执行到这一步就没了好像是直接死掉了
后面哪怕我加了 cout 也不显示,但是我用 ./运行 exalmple,就能正常显示,我不懂啊
-
@1157354382 m@ubun:~$ ros2 run orbslam3 mono ~/ORB_SLAM3/Vocabulary/ORBvoc.txt ~/ORB_SLAM3/Examples/Monocular/RealSense_D435i.yaml
ORB-SLAM3 Copyright (C) 2017-2020 Carlos Campos, Richard Elvira, Juan J. Gómez, José M.M. Montiel and Juan D. Tardós, University of Zaragoza.
ORB-SLAM2 Copyright (C) 2014-2016 Raúl Mur-Artal, José M.M. Montiel and Juan D. Tardós, University of Zaragoza.
This program comes with ABSOLUTELY NO WARRANTY;
This is free software, and you are welcome to redistribute it
under certain conditions. See LICENSE.txt.Input sensor was set to: Monocular
Loading settings from /home/m/ORB_SLAM3/Examples/Monocular/RealSense_D435i.yaml
Camera1.k3 optional parameter does not exist...
-Loaded camera 1
Camera.newHeight optional parameter does not exist...
Camera.newWidth optional parameter does not exist...
-Loaded image info
-Loaded ORB settings
Viewer.imageViewScale optional parameter does not exist...
-Loaded viewer settings
System.LoadAtlasFromFile optional parameter does not exist...
System.SaveAtlasToFile optional parameter does not exist...
-Loaded Atlas settings
System.thFarPoints optional parameter does not exist...
-Loaded misc parametersSLAM settings:
-Camera 1 parameters (Pinhole): [ 382.613 382.613 320.183 236.455 ]
-Camera 1 distortion parameters: [ 0 0 0 0 ]
-Original image size: [ 640 , 480 ]
-Current image size: [ 640 , 480 ]
-Sequence FPS: 30
-Features per image: 1250
-ORB scale factor: 1.2
-ORB number of scales: 8
-Initial FAST threshold: 20
-Min FAST threshold: 7Loading ORB Vocabulary. This could take a while...
Vocabulary loaded!Initialization of Atlas from scratch
Creation of new map with id: 0
Creation of new map with last KF id: 0
Seq. Name:
There are 1 cameras in the atlas
Camera 0 is pinhole
slam changedStarting the Viewer
你的下一步该加载摄像头配置了,看看你的摄像头配置文件路径对吗? -
@毛哥成山轮胎机油保养 无论我是对的还是错的,都直接结束程序了,莫名其妙的,用ros2来驱动
-
@WK%2.png" class=" img-fluid img-markdown" />
您好,wo'xian我想结合ros2——orbslam3和gazebo仿真,在订阅到图像后,在运行程序后,orbslam3也显示出来有图像接收到了,但是在可视化界面根本没有图像,这是什么原因,困扰很久了,真心想解决这个问题 -
@3532206791 你让仿真的小车移动一下,也许就会出来图像,我没有跑过仿真的,但是用实体的摄像头跑单目跑到你这个地方也卡了我很久,有一次无意中移动了一下摄像头图像就出来了。他计算第一帧和第二帧图像,如果摄像头没动,第一帧和第二帧图像是同一个图像,初始化不了,不知道你碰到的问题和我曾经碰到的问题是否一样。
-
@毛哥成山轮胎机油保养 哎,我尝试了,不管怎么动小车都没有图像显示,不知道是不是代码方面还有什么其他的问题,还是说只进行话题的订阅还不够,还需要调整其他参数?不明白
-
@毛哥成山轮胎机油保养 还是说需要用这个文件 RealSense_D435i.yaml