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_raw
RGB画像
<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_vocabulary
1 つ目はグローバル パラメーターです。最初に完全なコマンドを入力しないでください。使用方法が出力され、出力される合計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 点群マップとスラム カメラ マップを構築する起動コマンドの最適化プロセスは終了しました。