目录
前提
vim 、 cmake 、 git 、 gcc 、 g++ 这些一般都装了
主要是Pangolin 、 OpenCV 、 Eigen的安装
18.04建议Pangolin0.5
创建工作空间
我们在主目录下创建一个catkin_ws文件夹
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
cd ~/catkin_ws
catkin_make
orbslam2源码配置、测试:
环境:ubuntu18.04
在上面创建好的ROS工作空间下的src目录安装orbslam2
也可以不装在sc总,但是需要注意在/opt/ros/melodic/setup.bash里配置orbslam的运行路径
cd ~/catkin_ws/src/
git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2
cd ORB_SLAM2
chmod +x build.sh
./build.sh
编译时如果有如下错误:在ORB_SLAM2/include/system.h头文件中加上 #include <unistd.h>
运行测试(单目):
需要在目录中创建一个data文件夹,其中需要放入对应的数据(这里放入这里下载的Tum数据集rgbd_dataset_freiburg1_xyz,并且解压缩)
./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml data/rgbd_dataset_freiburg1_xyz
运行测试(RGBD)
cvpr-ros-pkg - Revision 232: /trunk/rgbd_benchmark/rgbd_benchmark_tools/src/rgbd_benchmark_tools
上面网址下载好以后拷贝associate.py至ORB_SLAM2主文件夹内。在associate.py所在的目录执行:(将RGB信息和深度信息链接到一起)
python associate.py data/rgbd_dataset_freiburg1_xyz/rgb.txt data/rgbd_dataset_freiburg1_xyz/depth.txt > data/rgbd_dataset_freiburg1_xyz/associations.txt
注:我们可以看到association中的第一行中的信息是 depth 和 rgb 两个的第一行信息的和
然后执行:
./Examples/RGB-D/rgbd_tum ./Vocabulary/ORBvoc.txt ./Examples/RGB-D/TUM1.yaml data/rgbd_dataset_freiburg1_xyz data/rgbd_dataset_freiburg1_xyz/associations.txt
如果需要在ROS下运行的话还需要添加以下步骤:
sudo gedit ~/.bashrc
在文件末尾添加:
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/gzy/catkin_ws/src/ORB_SLAM2/Examples/ROS#这里的路径按自己的来
后面的“/home/ros/catkin_ws/src/ORB_SLAM2/Examples/ROS”是自己保存的文件路径,保存使其生效
source ~/.bashrc
编译build_ros环境:
sudo chmod +x build_ros.sh
./build_ros.sh
编译工作区间:
cd ~/catkin_ws
catkin_make
source devel/setup.sh
如果src中有多个orbslam代码,我们在运行另外的orbslam代码的时候需要在/opt/ros/melodic/setup.bash中的最后加入对应的路径,即:
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:xxx/xxx/catkin_ws/src/ORB_SLAM2/Examples/ROS
再进行编译build_ros.sh即可
这里网上查到的很多资料是直接去修改.bashrc文件,但是我发现在我想要换第二个slam代码的时候会报错,多次实验之后发现是需要去修改/opt/ros/melodic/setup.bash这里面的ROS_PACKAGE_PATHc才可以解决。
注:记住每次修改.bash文件之后需要source一下或者重新打开一个终端才会生效。
配置usb_cam ROS功能包
# 首先进入catkin_ws/src路径下下载功能包
cd ~/catkin_ws/src
git clone https://github.com/bosch-ros-pkg/usb_cam.git
# 然后退回到工作空间,编译源码
cd ~/catkin_ws
catkin_make
# 编译成功后将编译好的文件添加到环境变量
source devel/setup.bash
# 接下来测试usb_cam,首先打开一个新的终端运行ros master
roscore
# 然后在另一个终端中运行usb_cam节点
rosrun usb_cam usb_cam_node
# 通过运行rostopic list可知此时实际上已经接收到硬件模块的相机输出,但是还没有显示图像
rostpoic list
# 此时运行下面的命令就可以显示出此时的摄像头图像
rosrun image_view image_view image:=/usb_cam/image_raw
如果想利用一个终端在打开usb_cam节点的同时也能够看到图像,那么可以在launch文件夹下新建一个launch文件usb_cam_test.launch,然后roslaunch 文件路径/usb_cam usb_cam_test.launch
<launch>
<node name="usb_cam" pkg="usb_cam" type="usb_cam_node" output="screen" >
<param name="video_device" value="/dev/video0" />
<param name="image_width" value="640" />
<param name="image_height" value="480" />
<param name="pixel_format" value="yuyv" />
<param name="camera_frame_id" value="usb_cam" />
<param name="io_method" value="mmap"/>
</node>
<node name="image_view" pkg="image_view" type="image_view" respawn="false" output="screen">
<remap from="image" to="/usb_cam/image_raw"/>
<param name="autosize" value="true" />
</node>
</launch>
如果usb_cam出错:
ubutnu18.04下调用usb相机_ubuntu调用usb摄像头_weixin_44293973的博客-CSDN博客
配置kinect
参考:分别利用ubuntu18.04和ROS运行 kinect v2_qq_45792429的博客-CSDN博客
Ubuntu18.04+ROS安装Kinect V2步骤及问题解决 | 码农家园
安装依赖:
sudo apt-get install build-essential cmake pkg-config libturbojpeg libjpeg-turbo8-dev mesa-common-dev freeglut3-dev libxrandr-dev libxi-dev
sudo apt-get install libglfw3-dev
sudo apt-get install libopenni2-dev
sudo apt-get install libusb-1.0-0-dev
安装libfreenect2:
git clone https://github.com/OpenKinect/libfreenect2.git
cd libfreenect2
mkdir build
cd build
cmake ..
make
sudo make install
将kinect2的rules文件拷贝到udev目录下
sudo cp libfreenect2/platform/linux/udev/90-kinect2.rules /etc/udev/rules.d/
然后打开/etc/udev/rules.d/90-kinect2.rules可以看到以下内容
其中:045e是kinect设备号,重新连接kinect之后,终端输入指令:lsusb,应该出现以下三个信息
Bus 004 Device 003: ID 045e:02c4 Microsoft Corp.
Bus 004 Device 002: ID 045e:02d9 Microsoft Corp.
Bus 003 Device 003: ID 045e:02d9 Microsoft Corp.
测试
cd libfreenect2/build
./bin/Protonect
如果遇到运行程序后死机,或者图像显示不完全的情况,尝试更新显卡驱动
自动化安装显卡驱动
ubuntu-drivers devices
sudo ubuntu-drivers autoinstall
第一条命令会显示已经连接到电脑的显卡设备,并建议安装哪个版本的驱动程序
第二条命令则是自动安装所推荐的驱动程序
安装iai_kinect2库
这个包为 ROS 和 Kinect 的连接提供了必要的工具和库
cd ~/catkin_ws/src/
git clone https://github.com/code-iai/iai_kinect2.git
cd iai_kinect2
rosdep install -r --from-paths . //这一步可能会报错,好像这个报错可以忽略
cd ~/catkin_ws
catkin_make -DCMAKE_BUILD_TYPE="Release"
测试
source ~/catkin_ws/devel/setup.bash
roslaunch kinect2_bridge kinect2_bridge.launch
打开另外一个终端即可看到画面:
rosrun kinect2_viewer kinect2_viewer
使用rviz显示:终端输入 rosrun rviz rviz
修改“Fixed Frame”为/kinect2_rgb_optical_frame,接着点击add,选择camera类型。添加成功后选择camera菜单下的Iamge Topic选项,选择 /kinect2/hd/image_color。
接着点击add选择camera类型。添加成功后选择camera菜单下的Iamge Topic选项,选择 /camera/depth/image
kinectv2标定
相机插上一行行运行就行了
参考:kinect v2 相机标定_HWINLN的博客-CSDN博客_标定相机kinectv2
ros+iai_kinect2标定教程-失败-效果很差-更新和解决办法_hehedadaq的博客-CSDN博客
roslaunch kinect2_bridge kinect2_bridge.launch
rosrun kinect2_bridge kinect2_bridge _fps_limit:=2
mkdir ~/kinect_cal_data; cd ~/kinect_cal_data #为您的校准数据文件创建一个目录
录制图像:在输入下面一个命令后,在弹出来的摄像头预览框中点击一次空格就拍一张照片
rosrun kinect2_calibration kinect2_calibration chess5x7x0.03 record color
rosrun kinect2_calibration kinect2_calibration chess5x7x0.03 calibrate color #校准内在函数
rosrun kinect2_calibration kinect2_calibration chess5x7x0.03 record ir #空格拍照
rosrun kinect2_calibration kinect2_calibration chess5x7x0.03 calibrate ir #校准
rosrun kinect2_calibration kinect2_calibration chess5x7x0.03 record sync #拍照
rosrun kinect2_calibration kinect2_calibration chess5x7x0.03 calibrate sync #校准
rosrun kinect2_calibration kinect2_calibration chess5x7x0.03 calibrate depth #校准
通过查看第二个命令kinect2_bridge中打印的数据,找出您的 kinect2 的序列号。该行看起来像这样: device serial: 012526541941
在kinect2_bridge/data/$serial中创建标定结果目录:roscd kinect2_bridge/data; mkdir 012526541941
将以下文件从您的校准目录 (~/kinect_cal_data) 复制到您刚刚创建的目录中:calib_color.yaml calib_depth.yaml calib_ir.yaml calib_pose.yaml
重新启动 kinect2_bridge 并惊讶于更好的数据。
最后需要找到calib_color.yaml文件中的相机矩阵
对应:
即可。
注:但是我标注的和实际的误差很大,也不知道为什么,所以还是用的别人的参数来运行。
在ROS下用kinect运行orbslam2
~/catkin_ws/src/ORB_SLAM2下编译:
./build_ros.sh
~/catkin_ws/src/iai_kinect2/kinect2_bridge/launch启动:
roslaunch kinect2_bridge kinect2_bridge.launch
使用下面的命令查看ROS发布的话题:
rostopic list
我们这里使用/kinect2/qhd/image_color
和/kinect2/qhd/image_depth_rect这两个。
打开ORB-SLAM2/Example/ROS/ORBSLAM2/src/ros_rgbd.cc
,将对应语句修改为:
message_filters::Subscriber<sensor_msgs::Image> rgb_sub(nh,"/kinect2/qhd/image_color",1);
message_filters::Subscriber<sensor_msgs::Image> depth_sub(nh,"/kinect2/qhd/image_depth_rect",1);
然后创建kinect2的yaml文件:Examples/RGB-D/kinect2.yaml,利用上一小节标定的数据中的相机参数矩阵修改参数(对照这TUM1.yaml文件进行修改)
运行:
rosrun ORB_SLAM2 RGBD Vocabulary/ORBvoc.txt Examples/RGB-D/kinect2.yaml
参考:
ubuntu18.04运行ORB_SLAM2_alex1801的博客-CSDN博客
Ubuntu20.04配置ORBSLAM2并运行(保姆级教程)_orbslam2运行_9527风先生的博客-CSDN博客
【SLAM环境配置】基于Ubuntu18.04的ORB-SLAM2环境配置全套方案记录_Robot_Tiger_的博客-CSDN博客
搭建SLAM2并使用Kinect V2跑通ORB-SLAM2_./examples/rgb-d/rgbd_tum: 没有那个文件或目录_行走的歌的博客-CSDN博客
出错:
CMake Deprecation Warning at /opt/ros/melodic/share/ros/core/rosbuild/rosbuild.cmake:
这篇博客说是rosdep的问题,我把ros重装一次好像就好了
然后又有错误:RGBD执行文件没有生成
则需要修改Examples/ROS/ORB_SLAM2/文件夹下的CMakeLists.txt文件,在下面的位置上添加
-lboost_system
编译时如果有如下错误:在ORB_SLAM2/include/system.h头文件中加上 #include <unistd.h>
注
1:如果你在ros的src下有多个slam代码,首先要注意在/opt/ros/melodic/setup.bash下进行更改,齐次需要注意每个代码中的xxx/Example/ROS/ORB_SLAM2里面的ORB_SLAM2这个文件夹最好不要重名,最好做出一点区分,不然在rosrun的时候会分不清谁是谁(因为rosrun就是运行ROS_PACKAGE_PATH中的包,而这里的ROS_PACKAGE_PATH就是/opt/ros/melodic/setup.bash这个里面export添加的)
2