SLAM入坑之一:用realsense D415跑一下ORB-SLAM在ROS-melodic上
一.安裝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
然后差不多所有配置都搞定了
最后,打開三個終端
之前就是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.如何用這個進行稠密建圖?
?
總結
以上是生活随笔為你收集整理的SLAM入坑之一:用realsense D415跑一下ORB-SLAM在ROS-melodic上的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python3入门机器学习之2.8sci
- 下一篇: win7休眠、待机api