ros下用kinectv2运行orbslam2

目录

前提

创建工作空间

orbslam2源码配置、测试:

配置usb_cam ROS功能包

配置kinect

kinectv2标定

在ROS下用kinect运行orbslam2

出错:


前提

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一下或者重新打开一个终端才会生效。

参考:rospack found package “...ORB_SLAM2...“ at ““, but the current directory is“...“_Run_with_you的博客-CSDN博客

配置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:

【无标题】_发如雪Jay的博客-CSDN博客

这篇博客说是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

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值