最近摸索ros以及orbslam2的一些错误
ORBSLAM2的安装主要是参考
https://blog.csdn.net/learning_tortosie/article/details/79881165。
该博主所学内容和自己非常的像。
1、orbslam2首先可以跑数据集,博客里写的非常清楚,没有问题。
2、orbslam2可以跑单目相机,跑单目相机的话首先还得在ros的工作空间下编译,
$ cd ORB_SLAM2
$ chmod +x build_ros.sh
$ ./build_ros.sh
以上代码我在本机上编译出错了,解决办法可以参考:
https://blog.csdn.net/sinat_38343378/article/details/78883919
出错原因为:libboost_system.so 与libboost_filesystem.so找不到链接目录。
解决办法:将libboost_system.so(libboost_system.so.1.58.0)与libboost_filesystem.so(libboost_filesystem.so.1.58.0)等4个文件复制到ORB_SLAM2/lib下,并且将ORBSLAM2/Examples/ROS/ORBSLAM2下的Cmakelists.txt中加入库目录,具体为
在
set(LIBS
${OpenCV_LIBS}
${EIGEN3_LIBS}
${Pangolin_LIBRARIES}
${PROJECT_SOURCE_DIR}/../../../Thirdparty/DBoW2/lib/libDBoW2.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o/lib/libg2o.so
${PROJECT_SOURCE_DIR}/../../../lib/libORB_SLAM2.so
后面加上
${PROJECT_SOURCE_DIR}/../../../lib/libboost_filesystem.so
${PROJECT_SOURCE_DIR}/../../../lib/libboost_system.so
编辑即可通过。
其次,安装USB摄像头驱动,可以参考:
https://blog.csdn.net/learning_tortosie/article/details/79879575
所有步骤按操作完成后,当我运行
roslaunch usb_cam usb_cam-test.launch
时出错。
参考https://blog.csdn.net/u010925447/article/details/55522005解决,
也就是安装
sudo apt-get install ros-indigo-image-view
最后就可以实现单目的实时slam,输入如下命令:
$ roslaunch usb_cam usb_cam-test.launch
$ rosrun ORB_SLAM2 Mono PATH_TO_VOCABULARY PATH_TO_SETTINGS_FILE
我的机子里具体命令是这样的
$ roscore
$ roslaunch usb_cam usb_cam-test.launch
$ rosrun ORB_SLAM2 Mono /home/liu/catkin_ws/src/ORB_SLAM2/Vocabulary/ORBvoc.txt /home/liu/catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/Asus.yaml
如果打开运行之后出现waiting for images,也不要慌张
新开一个终端运行rosrun rqt_graph rqt_graph
命令,发现话题没有连接上。
在ORB_SLAM2/Examples/ROS/ORB_SLAM2/src 打开ros_mono.cc,找到下面这句
ros::Subscriber sub = nodeHandler.subscribe("/camera/image_raw", 1, &ImageGrabber::GrabImage,&igb);
修改成
ros::Subscriber sub = nodeHandler.subscribe("/usb_cam/image_raw", 1, &ImageGrabber::GrabImage,&igb);
同样的,在跑单目的AR例子时也会遇到这种情况,程序一直卡住不出现任何画面。
在ORB_SLAM2/Examples/ROS/ORB_SLAM2/src/AR 打开ros_mono_ar.cc,找到下面这句
ros::Subscriber sub = nodeHandler.subscribe("/camera/image_raw", 1, &ImageGrabber::GrabImage,&igb);
改成
ros::Subscriber sub = nodeHandler.subscribe("/usb_cam/image_raw", 1, &ImageGrabber::GrabImage,&igb);
原文:https://blog.csdn.net/poulang5786/article/details/79249755
3、捣鼓ros
学习ros最好的素材:
中科大做的demo:https://github.com/sychaichangkun/ROS-Academy-for-Beginners
相应的配套视频:http://training.eeworld.com.cn/video/14320
因为老师让我捣鼓gazebo,结果我就删了又装,直接给中科院这个配置好的gazebo仿真器给弄坏了,不可执行该命令:
roslaunch robot_sim_demo robot_spawn.launch
出现的具体问题及解决办法见博客:
https://bitbucket.org/osrf/gazebo/issues/2448/problem-running-gazebo7
突然发现自己的相机的节点和其他的节点不能通讯了,晚上打算解决一下。
然后学习Kinect来跑slam,遇到问题后还会记下来,不然老是做重复的工作。
溜了,去看四世同堂了。