准备先从2开始,再去弄3,因为3的教程不多。
- 下载好了包之后,发现build的时候经常出现usleep报错,用kdevelop查看报错的文件,再前面加上再进行编译。
#include <unistd.h>
- 编译ros部分出现报错:
/usr/lib/x86_64-linux-gnu/libboost_system.so: 无法添加符号: DSO missing from
command line collect2: error: ld returned 1 exit status
在Examples/ROS/ORB_SLAM2/Cmakelist.txt 的文件中set(LIBS)的最后加一条:
-lboost_system
而且cmakelist后面要加上一些对库的链接。(不知道是否需要,回头再看看)
二、运行部分
D455的内参(未经过标定),使用下列命令查看内参(分别用两个终端输入):
roslaunch realsense2_camera rs_rgbd.launch
rostopic echo /camera/color/camera_info
内参为(截取部分,因为似乎一直在跑):
header:
seq: 141 stamp:
secs: 1603789990
nsecs: 909847059
frame_id: “camera_color_optical_frame”
height: 480
width: 640
distortion_model: “plumb_bob”
D: [-0.05395696684718132,
0.06465082615613937, -0.0005918957176618278, -0.0009528784430585802, -0.02047022618353367]
K: [382.2296447753906, 0.0, 321.88739013671875, 0.0, 381.337158203125, 241.31826782226562, 0.0, 0.0, 1.0]
R: [1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0] P: [382.2296447753906, 0.0, 321.88739013671875, 0.0, 0.0, 381.337158203125, 241.31826782226562, 0.0, 0.0, 0.0, 1.0, 0.0]
binning_x: 0 binning_y: 0 roi: x_offset: 0 y_offset: 0 height: 0 width: 0 do_rectify: False
运行roslaunch之后显示没有图像,估计是哪里要修改,感觉可以试一下这篇(https://www.jianshu.com/p/f4bfe531306c?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation)
估计要修改在ORB-SLAM2/Examples/ROS/ORB-SLAM2/src中修改ros_rgbd.cc的topic订阅,改为自己的相机路径,默认的那个topic可能没有。
4.将Kinect连接到电脑上,输入指令:$ roslaunch freenect_launch freenect.launch
此时Kinect开始发射图像的topic了。
5.源代码上使用的topic是/camera/image_raw,然而我$ rostopic list 之后根本就没有这个topic,所以我直接去ORB_SLAM2/Examples/ROS/ORB_SLAM2/src/ros_mono.cc中将topic改为/camera/rgb/image_color就可以了
后面在运行rosrun
可以用rostopic list
来看有哪些主题:
然后用rostopic hz +主题名
来检查主题当前发布的频率来检查主题是否正在发布,如:
rostopic hz / camera / color / image_raw
解决了上一篇ORB-SLAM3开头的那个问题,主题的订阅是要修改的,直接用源代码估计不会显示图像。但我怀疑对ORB-SLAM3来说后面的值100不用改成1,因为在rviz中看会变得很暗。而在ORM-SLAM2中,源代码就是1.只需要改一下前面的topic就可以了。
因此,在ORB-SLAM2/Examples/ROS/ORB-SLAM2/src中修改ros_rgbd.cc的topic订阅:
message_filters::Subscriber<sensor_msgs::Image> rgb_sub(nh, "/camera/color/image_raw", 1);
message_filters::Subscriber<sensor_msgs::Image> depth_sub(nh, "/camera/aligned_depth_to_color/image_raw", 1);
然后重新编译ORB-SLAM2
chmod +x build_ros.sh
./build_ros.sh
连接realsense d435i,启动ROS realsense2_camera:
roslaunch realsense2_camera rs_rgbd.launch
先用TUM1.yaml的参数运行一下试试看:
rosrun ORB_SLAM2 RGBD Vocabulary/ORBvoc.txt Examples/RGB-D/TUM1.yaml
然后就可以看到实时识别的特征点啦!
ORB-SLAM3也可以按照上面的步骤来实现,就是把上面的2换成3就行了。有的时候还是会发现图像不显示,拔一下相机,看下realsense-viewer里有没有图像,显示图像了再跑。
2020.10.28
今天按这篇跑一下双目(https://blog.youkuaiyun.com/qq_39266065/article/details/108275010)主要是修改了的东西要记得怎么改的,免得跑错了只能重装。
1.在路径/catkin_ws/src/realsense-ros/realsense2_camera/launch中找到rs_camera.launch文件,建立一个副本rs_camera_copy.launch,然后查看以下两个参数是否为false,改为true。(以后每次运行双目的时候,用这个launch)
<arg name="enable_infra1" default="true"/>
<arg name="enable_infra2" default="true"/>
然后在/ORB_SLAM2/Examples/ROS/ORB_SLAM2/src修改ros_stereo.cc的订阅,原本是:
message_filters::Subscriber<sensor_msgs::Image> left_sub(nh, "/camera/left/image_raw", 1);
message_filters::Subscriber<sensor_msgs::Image> right_sub(nh, "camera/right/image_raw", 1);
改为(感觉显示有点暗,于是把后面数字改成了100,但还是很暗,怀疑不是在这里调节的):
message_filters::Subscriber<sensor_msgs::Image> left_sub(nh, "/camera/infra1/image_rect_raw", 1);
message_filters::Subscriber<sensor_msgs::Image> right_sub(nh, "/camera/infra2/image_rect_raw", 1);
改完了以后再编译一下:
chmod +x build_ros.sh
./build_ros.sh
可能需要关一下IR光,否则会干扰。运行:
rosrun rqt_reconfigure rqt_reconfigure
按照这篇的方法关一下emitter_enable(https://blog.youkuaiyun.com/Hanghang_/article/details/103612300,按照他的方法二修改了一下rs_camera_copy.launch,发现并没有关掉ir光,还是要手动关,然后用RGBD的时候估计又要手动开。)
然后在新终端运行:
rosrun ORB_SLAM2 Stereo Vocabulary/ORBvoc.txt Examples/ROS/ORB_SLAM2/Asus.yaml false
其中因为只是粗略的尝试一下,并未对相机标定,因此ONLINE_RECTIFICATION设置为false