ORB-SLAM2 のレイアウト (5) intel D435i を使用して SLAM 点群マップを構築する

Intel RealSense SDK 2.0 は、realsense-viewer などの基本的なカメラ ツールを含むクロスプラットフォーム開発パッケージであり、ROS、Python、Matlab、node.js、LabVIEW、OpenCV、PCL、.NET などの二次開発用の豊富なインターフェイスも提供します。等

今回使用したカメラは
深度画像とRGB画像を提供でき、IMUを備えたD435iカメラで、
SLAM点群構築にD435iカメラを使用するプロセスです。

Intel RealSense SDK をインストールしてカメラ データを表示するLinux
/Ubuntu - RealSense SDK 2.0 構築ガイド

インストールしたら、カメラの深度と RGB 画像を表示します

realsense-viewer

ここに画像の説明を挿入

次に、インテル® RealSense™ デバイス用インテル ROS ラッパーの各カメラを駆動する ROS フレームワークのドライバー関数パッケージをダウンロードします。


インストールが完了すると、カメラのデータが表示されます。

SMAL の設定をここで続けます。
カメラを起動する前に、realsense2_camera rospack に rs_camera.launch ファイルを設定する必要があります。
ここに画像の説明を挿入


前者は、異なるセンサー データ (深度、RGB、IMU) の時間同期を達成するため、つまり同じタイムスタンプを持ちます; 後者は、いくつかのロストピックを追加しますが、その中で、ここでの深度画像が一致している
かどうかがより重要です。/camera/aligned_depth_to_color/image_rawRGB画像

  <arg name="enable_sync"               default="true"/>
  <arg name="align_depth"               default="true"/>

ここに画像の説明を挿入


完了したら、次のコマンドでカメラを起動できます。

roslaunch realsense2_camera rs_camera.launch

重要なのは、/camera/color/image_raw と が/camera/aligned_depth_to_color/image_raw
それぞれRGB画像と深度画像に対応していることです


次に、 でExamples/RGB-D、次の名前の新しいRealSense.yamlパラメータ ファイルを作成します。
ここに画像の説明を挿入


それから編集します

#--------------------------------------------------------------------------------------------
# Camera calibration and distortion parameters (OpenCV)
Camera.fx: 909.3504638671875
Camera.fy: 908.5739135742188
Camera.cx: 645.5443725585938
Camera.cy: 369.3554992675781

Camera.k1: 0.0
Camera.k2: 0.0
Camera.p1: 0.0
Camera.p2: 0.0
Camera.k3: 0.0

Camera.width: 1280
Camera.height: 720

#Camera frames per second
Camera.fps: 30.0

#IR projector baseline times fx (aprox.)
Camera.bf: 46.01

#Color order of the images (0: BGR, 1: RGB. It is ignored if images are grayscale)
Camera.RGB: 1

#Close/Far threshold. Baseline times.
ThDepth: 40.0

#Deptmap values factor,将深度像素值转化为实际距离,原来单位是 mm,转化成 m
DepthMapFactor: 1000.0


#ORB Parameters
#--------------------------------------------------------------------------------------------

#ORB Extractor: Number of features per image
ORBextractor.nFeatures: 1000

#ORB Extractor: Scale factor between levels in the scale pyramid
ORBextractor.scaleFactor: 1.2

#ORB Extractor: Number of levels in the scale pyramid
ORBextractor.nLevels: 8

#ORB Extractor: Fast threshold
#Image is divided in a grid. At each cell FAST are extracted imposing a minimum response.
#Firstly we impose iniThFAST. If no corners are detected we impose a lower value minThFAST
#You can lower these values if your images have low contrast
ORBextractor.iniThFAST: 20
ORBextractor.minThFAST: 7

#--------------------------------------------------------------------------------------------
#Viewer Parameters
#--------------------------------------------------------------------------------------------
Viewer.KeyFrameSize: 0.05
Viewer.KeyFrameLineWidth: 1
Viewer.GraphLineWidth: 0.9
Viewer.PointSize:2
Viewer.CameraSize: 0.08
Viewer.CameraLineWidth: 3
Viewer.ViewpointX: 0
Viewer.ViewpointY: -0.7
Viewer.ViewpointZ: -1.8
Viewer.ViewpointF: 500


その中にはカメラの内部パラメータが含まれており、以下を通じて取得できます。各カメラのパラメータは異なる場合があります。

rostopic echo /camera/color/camera_info

ここに画像の説明を挿入

ここでの yaml で注意すべき主な点は次のとおりです。

# 相机标定和畸变参数(OpenCV)

トピック [/camera/color/camera_info] に従ってデータを変更するには、
URL に対してパラメータをチェックして、特定のパラメータ情報
http://docs.ros.org/en/melodic/api/sensor_msgs/htmlを表示します。 /msg/CameraInfo.html

それは次のパラメータです

Camera.fx: 909.3504638671875
Camera.fy: 908.5739135742188
Camera.cx: 645.5443725585938
Camera.cy: 369.3554992675781

Camera.k1: 0.0
Camera.k2: 0.0
Camera.p1: 0.0
Camera.p2: 0.0
Camera.k3: 0.0

Camera.width: 1280
Camera.height: 720

ここに画像の説明を挿入


完了したら保存して終了します

次にsrc/pointcloudmapping.ccファイルを変更します

1. 128行目あたり

	voxel.setLeafSize (0.02f, 0.02f, 0.02f); 		//Modified place 1 调节点云密度

ここに画像の説明を挿入

2、75行目あたり

            p.y = ( m - kf->cy) * p.z / kf->fy;
           // p.y = - ( m - kf->cy) * p.z / kf->fy;   //Modified place2 与原先添加了负号,将原本颠倒的点云地图上下翻转,方便观察 
           //【后续测试显示的pcd完全无法使用。不进行上下翻转】
            
	    	p.r = color.ptr<uchar>(m)[n*3];         //Modified place3 修改颜色显示
            p.g = color.ptr<uchar>(m)[n*3+1];
            p.b = color.ptr<uchar>(m)[n*3+2];

#########2023年04月17日08:54:17 UTC+8:00#########
#########原文が曖昧なためスクリーンショット、新しい画像を置き換えます #########
ここに画像の説明を挿入


次に、ORB_SLAM2_modified をコンパイルします。

./build.sh
./build_ros.sh

ここに画像の説明を挿入

コンパイル後のテスト

マスターノードを起動します

roscore

カメラを起動します

roslaunch realsense2_camera rs_camera.launch

ここに画像の説明を挿入


マップを作成してエラーを見つける

rosrun ORB_SLAM2 RGBD Vocabulary/ORBvoc.bin Examples/RGB-D/RealSense.yaml /camera/rgb/image_raw:=/camera/color/image_raw /camera/depth_registered/image_raw:=/camera/aligned_depth_to_color/image_raw

ここに画像の説明を挿入


検索後、yaml ファイルである可能性があります。yaml ファイルを読み取るには Opencv4.0を変更する必要があります。エラー エラー: (-49:不明なエラー コード -49) 関数 'open' で入力ファイルが空です。

yaml ファイルの先頭に追加する必要があります

%YAML:1.0

ここに画像の説明を挿入

再実行

rosrun ORB_SLAM2 RGBD Vocabulary/ORBvoc.bin Examples/RGB-D/RealSense.yaml /camera/rgb/image_raw:=/camera/color/image_raw /camera/depth_registered/image_raw:=/camera/aligned_depth_to_color/image_raw

ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
CTRL+C を押すと、出力された pcd ファイルが表示されます。

保存されたpcdファイルを表示する

pcl_viewer vslam.pcd

ここに画像の説明を挿入
ここに画像の説明を挿入

これまでのところ、深度カメラ Intel RealSense D435i に基づいた ORB SLAM 2 の実装プロセスは成功しています。

ただし、SLAM を開始する手順は少し複雑であるため、roslauch を使用して最適化します。
まず、オフライン パッケージを開始します。

開始されたコマンドが完全に入力されていない場合、ターミナルは使用された使用法を出力します。

Usage: rosrun ORB_SLAM2 RGBD path_to_vocabulary path_to_settings

ここに画像の説明を挿入

まず slam という名前の関数パッケージを作成します

cd ~/catkin_ws/src
catkin_create_pkg slam std_msgs rospy roscpp

ここに画像の説明を挿入

次に、この機能パッケージ内に起動ファイルを作成します。rgbd.launch
編集用に名前を付けました。

<launch>
    <!--定义全局参数-->
    <arg name="rgb_image" default="/camera/rgb/image_raw"/>
    <arg name="path_to_vacabulary" default="/home/heying/ORB_SLAM2_modified/Vocabulary/ORBvoc.bin"/>
    <arg name="path_to_settings" default="/home/heying/ORB_SLAM2_modified/Examples/RGB-D/TUM1_ROS.yaml"/>


    <!--播放离线包-->
    <!-- 注意这里bag文件的路径必须为绝对路径-->
    <node pkg="rosbag" type="play" name="player" output="screen"
         args=" /home/heying/ORB_SLAM2_modified/Examples/datasets/rgbd_dataset_freiburg1_xyz.bag">
         <remap from="/camera/rgb/image_color" to="/camera/rgb/image_raw" />
	 <remap from="/camera/depth/image" to="/camera/depth_registered/image_raw" />

    </node>

    <!--启动ORB-SLAM2 RGBD-->
    <node name ="RGBD" pkg="ORB_SLAM2" type="RGBD"
        args="$(arg path_to_vacabulary) $(arg path_to_settings)" respawn="true" output="screen">
        <!--remap from="/camera/image_raw" to="$(arg rgb_image)"/-->
    </node>
</launch>

ここに画像の説明を挿入


完了後のテスト

roslaunch slam rgbd.launch

ここに画像の説明を挿入


通常起動
ここに画像の説明を挿入


ライブカメラ

新しい起動ファイルを作成してカメラを起動し、マップを構築します

touch  camera.launch
gedit camera.launch

ここに画像の説明を挿入

それから書きます

path_to_vocabulary1 つ目はグローバル パラメーターです。最初に完全なコマンドを入力しないでください。使用方法が出力され、出力される合計path_to_settingsが設定する必要があるグローバル パラメーターであることがわかります。

rosrun ORB_SLAM2 RGBD

ここに画像の説明を挿入

<launch>

<!--定义全局参数-->
  <arg name = "path_to_vocabulary" default = "/home/heying/ORB_SLAM2_modified/Vocabulary/ORBvoc.bin"/>
  <arg name = "path_to_settings" default = "/home/heying/ORB_SLAM2_modified/Examples/RGB-D/RealSense.yaml"/>


  <!--include file="$(find realsense2_camera)/launch/rs_camera.launch"/-->


<!--启动ORB-SLAM2 RGBD-->
  <node pkg = "ORB_SLAM2" type ="RGBD" name = "RGBD_camera" args="$(arg path_to_vocabulary) $(arg path_to_settings)" respawn="true" output="screen">
        <remap from="/camera/rgb/image_raw" to="/camera/color/image_raw" />
	 	<remap from="/camera/depth_registered/image_raw" to="/camera/aligned_depth_to_color/image_raw" />
  </node>

</launch>

ここに画像の説明を挿入



マスターノードのテスト起動

roscore

次に、カメラのハードウェア接続を確認します。

カメラを起動します

roslaunch realsense2_camera rs_camera.launch

ここに画像の説明を挿入


マッピングの開始

roslaunch slam camera.launch

ここに画像の説明を挿入
起動は正常で、効果は完璧です。
ここに画像の説明を挿入
プログラム CTRL+C の後に pcd ファイルが生成されます。
ここに画像の説明を挿入

効果を見る

pcl_viewer vslam.pcd

ここに画像の説明を挿入

効果は良好で、
ここに画像の説明を挿入

これまでのところ、intel D435i を使用して SLAM 点群マップとスラム カメラ マップを構築する起動コマンドの最適化プロセスは終了しました。

おすすめ

転載: blog.csdn.net/Xiong2840/article/details/128470582