SLAM入坑之一:用realsense D415跑一下ORB-SLAM在ROS-melodic上

本文档详细记录了如何在ROS环境中安装RealSense ROS驱动、librealsense库,以及ORB-SLAM3,并针对D415相机获取内参和调整ORB-SLAM的订阅话题。过程中遇到了相机分辨率、内参匹配、ORB-SLAM编译等问题,最终实现了ORB-SLAM的运行,但还有RGBD同步、稠密建图等细节待解决。
摘要由CSDN通过智能技术生成

一.安装ROS,realsense-ros,librealsense

这一块有很多大佬们已经分享了的,不再赘述了,ROS,realsense-ros直接按照官网的方法去安装.

librealsense安装如下

sudo apt-key adv --keyserver keys.gnupg.net --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE || sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE
sudo add-apt-repository "deb http://realsense-hw-public.s3.amazonaws.com/Debian/apt-repo bionic main" -u
sudo apt-get install librealsense2-dkms
sudo apt-get install librealsense2-utils
sudo apt-get install librealsense2-dev

如果成功安装,可以使用realsense-viewer命令打开Realsense客户端,然后插上realsense,一定要用USB3,要不各种丢数据整死你.

二.在ROS下安装ORB-SLAM3

官网https://github.com/UZ-SLAMLab/ORB_SLAM3.git

因为是要在ROS下测试,直接

cd ~/catkin_ws/src/
git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git

建立第三方库:

cd ORB_SLAM3
chmod +x build.sh
./build.sh

在此之前,需要安装Pangolin,OpenCV,Eigen3(最少3.1版),DBoW2 and g2o (Included in Thirdparty folder).不会的自己谷歌,要学会自己学习.

然后把ORB-SLAM3写入bash,按照自己的地址改一下:

export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:PATH/ORB_SLAM3/Examples/ROS
cd
source ~/.bashrc 

然后cd到ORB-SLAM文件下执行ros的sh

chmod +x build_ros.sh
./build_ros.sh

三.获取D415相机内参阵intrinsic:

安装好realsense-ros之后:

roscore
roslaunch realsense2_camera rs_rgbd.launch
rostopic echo /camera/color/camera_info

自己标定也可以,但是fx和fy不知道为啥会相差很大

这是我自己标定的

RGB intrisic matrix is:
[[617.80462732   0.         310.3541441 ]
 [  0.         618.05936895 230.64186799]
 [  0.           0.           1.        ]]
RGB Distortion matrix is:
[[ 1.36745009e-01 -1.85886269e-01  9.91348265e-04  1.19814982e-04
  -3.37693396e-01]]

这是ROS告我的:

K: [924.0258178710938, 0.0, 627.2476806640625, 0.0, 923.494873046875, 344.0141296386719, 0.0, 0.0, 1.0]

没有畸变参数...

好吧,我大概知道了,分辨率的问题,opencv标定的是640*480,ROS是给的1280*720...也许是我错的,有大佬知道正确答案的话可以留言交流一下,谢

还记得要改一下depth factor,要不跑出来的效果自己都想笑

DepthMapFactor: 1000.0

在Asus.yaml下改成自己的相机参数,重命名成D415.yaml,然后放在自己喜欢的目录下.

四:改一下orb-slam3的topic:

在~/catkin_ws/src/ORB_SLAM3/Examples/ROS/ORB_SLAM3/src下的ros_rgbd.cc文件subscribe的名字不对,因为realsense发布的名字和其他的深度相机不一样,要改为

message_filters::Subscriber<sensor_msgs::Image> rgb_sub(nh, "/camera/color/image_raw", 100);
message_filters::Subscriber<sensor_msgs::Image> depth_sub(nh, "/camera/depth/image_rect_raw", 100);

如果是ORB-SLAM2,100为1就可.

之后要再运行./build_ros.sh

注意:每次改完ros_rgbd.cc都要build一下,否则无效.

五:编译ORB-SLAM:

这一步有很多坑啊,opencv只能装一个版本,要不会找不到yaml文件(这个问题还么解决,好像是要强行卸载opencv3或4,但是卸载后就会找不到库),所以我决定用ORB-slam2,步骤和上面一样的,但是还是会出现很多头疼的东西:

 

出现错误error: usleep is not declared in this scope

https://github.com/raulmur/ORB_SLAM2/issues/337

出现错误Undefined reference to symbol '_ZN5boost6system15system_categoryEv'

https://github.com/raulmur/ORB_SLAM2/issues/494

六.运行ORB-SLAM2

然后差不多所有配置都搞定了
最后,打开三个终端

roscore
rosrun ORB_SLAM2 RGBD /home/(user name)/catkin_ws/ORB_SLAM2/Vocabulary/ORBvoc.txt /home/(user name)/catkin_ws/ORB_SLAM2/Examples/ROS/ORB_SLAM2/D415.yaml
roslaunch realsense2_camera rs_rgbd.launch

之前就是ORB-SLAM3中无法识别D415.yaml搞得我直接爆炸...只能用orb-SLAM2,效果如下:

七.问题???????欢迎大佬留言讨论

到目前为止,ORB-SLAM运行成功,但是很多细节问题还没有解决

1. realsense的ROS官网上提供了rs_aligned_depth.launch这个launch文件,目的是让RGB和depth重合,网上的所有教程都没有运行这个.论文中好像说ORB-SLAM2的RGBD是用ICP方法解决的T矩阵求解问题,所以...我觉得不运行这个对精度有影响(比如D435的depth和RGB不匹配的话相差十万八千里).D415的depth和RGB不align还是挺接近的,所以差别没有那么大.

如果launch的是rs_aligned_depth.launch,那么在第四步中要把

message_filters::Subscriber<sensor_msgs::Image> depth_sub(nh, "/camera/depth/image_rect_raw", 1);

改成

message_filters::Subscriber<sensor_msgs::Image> depth_sub(nh, "/camera/aligned_depth_to_color/image_raw", 1);

可以对比上图,还是有区别的,虽然不大:D,改了后再build一下.

2.相机分辨率的问题,realsense的launch分辨率比D415.yaml中的大,影响如何???

3.如何用这个进行稠密建图?

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值