前に書いた
この記事は ubuntu20.04 にインストールされていますが、他のバージョンも同様です。考えられる問題は主に、インストール関連のライブラリのそれぞれのバージョンの不一致によって引き起こされるため、問題は異なりますが、一般に解決するのは簡単で、通常の状況では発生しません。
Intel Realsense Depth Camera D435i は、D435 の強力な深度認識機能と慣性測定ユニット (IMU) を組み合わせて、RGBD、単眼および両眼のスラム研究および実際の戦闘に対応します。この記事では、実際の戦闘スラム アルゴリズムの前提条件であり不可欠な部分でもある D435i 関連ツールのインストール、設定、およびキャリブレーションを紹介します。実物は次の写真に示されています。
1. ツールのインストール
D435i ツールには、Intel Realsense SDK2.0 および realsense-ros が含まれます。
1.インテル リアルセンス SDK2.0
(1) ソースコードをダウンロードする
- git clone https://github.com/IntelRealSense/librealsense.git
- cd librealsense
(2) インストールの依存関係
- sudo apt-get install libudev-dev pkg-config libgtk-3-dev
- sudo apt-get install libusb-1.0-0-dev pkg-config
- sudo apt-get インストール libglfw3-dev
- sudo apt-get インストール libssl-dev
(3) 権限を追加する
- sudo cp config/99-realsense-libusb.rules /etc/udev/rulesgger
- sudo udevadm コントロール --reload-rules && udevadm トリガー
(4) コンパイルとインストール
- mkdir ビルド
- CD ビルド
- cmake …
- 作る
- sudo メイクインストール
(5) テスト
- CD サンプル/キャプチャ
- ./rs-キャプチャ
また
- リアルセンスビューア
インストールが成功すると、SDK インターフェイスが次のように表示されます。
注: USB3.0インターフェイスを使用してください。
2.realsense-rosをインストールする
両眼データと imu データを公開するには ros を使用する必要があるため、realsense-ros をインストールする必要があります。
(1) ワークスペースの作成、ソースコードのダウンロード、コンパイル
- mkdir -p realsense_ws/src
- cd realsense_ws/src
- git clone https://github.com/IntelRealSense/realsense-ros.git
- git clone https://github.com/pal-robotics/ddynamic_reconfigure.git
- catkin_make の
コンパイルが完了し、個人の好みに応じてソースを永続的に追加できます。 - echo “source /realsense_ws/devel/setup.bash” >> ~/.bashrc
- ソース ~/.bashrc
(2) テスト
前のステップでソースが追加されていない場合は、launch を実行する必要があります。
- ソースdevel/setup.bash
- roslaunch realsense2_camera rs_camera.launch
公開されたトピックを表示できます
- ロストピックリスト
以下に示すように
2、構成
vins_fusion 実戦では d435i を使用する必要があるため、双眼 + imu 構成とし、rs_camera.launch を以下のように修正します。RGBD などのその他のものは、rs_rgbd.launch を参照することで必要に応じて変更できます。
1. <launch>
2. <arg name="serial_no" default=""/>
3. <arg name="json_file_path" default=""/>
4. <arg name="camera" default="camera"/>
5. <arg name="tf_prefix" default="$(arg camera)"/>
6. <arg name="external_manager" default="false"/>
7. <arg name="manager" default="realsense2_camera_manager"/>
8.
9. <arg name="fisheye_width" default="640"/>
10. <arg name="fisheye_height" default="480"/>
11. <arg name="enable_fisheye" default="false"/>
12.
13. <arg name="depth_width" default="640"/>
14. <arg name="depth_height" default="480"/>
15. <arg name="enable_depth" default="false"/>
16.
17. <arg name="infra_width" default="640"/>
18. <arg name="infra_height" default="480"/>
19. <arg name="enable_infra1" default="true"/>
20. <arg name="enable_infra2" default="true"/>
21.
22. <arg name="color_width" default="640"/>
23. <arg name="color_height" default="480"/>
24. <arg name="enable_color" default="true"/>
25.
26. <arg name="fisheye_fps" default="30"/>
27. <arg name="depth_fps" default="30"/>
28. <arg name="infra_fps" default="30"/>
29. <arg name="color_fps" default="30"/>
30. <arg name="gyro_fps" default="400"/>
31. <arg name="accel_fps" default="200"/>
32. <arg name="enable_gyro" default="true"/>
33. <arg name="enable_accel" default="true"/>
34.
35. <arg name="enable_pointcloud" default="false"/>
36. <arg name="pointcloud_texture_stream" default="RS2_STREAM_COLOR"/>
37. <arg name="pointcloud_texture_index" default="0"/>
38.
39. <arg name="enable_sync" default="true"/>
40. <arg name="align_depth" default="true"/>
41.
42. <arg name="publish_tf" default="true"/>
43. <arg name="tf_publish_rate" default="0"/>
44.
45. <arg name="filters" default=""/>
46. <arg name="clip_distance" default="-2"/>
47. <arg name="linear_accel_cov" default="0.01"/>
48. <arg name="initial_reset" default="false"/>
49. <arg name="reconnect_timeout" default="6.0"/>
50. <arg name="unite_imu_method" default="linear_interpolation"/>
51. <arg name="topic_odom_in" default="odom_in"/>
52. <arg name="calib_odom_file" default=""/>
53. <arg name="publish_odom_tf" default="true"/>
54. <arg name="allow_no_texture_points" default="false"/>
65.
66. <group ns="$(arg camera)">
67. <include file="$(find realsense2_camera)/launch/includes/nodelet.launch.xml">
68. <arg name="tf_prefix" value="$(arg tf_prefix)"/>
69. <arg name="external_manager" value="$(arg external_manager)"/>
70. <arg name="manager" value="$(arg manager)"/>
71. <arg name="serial_no" value="$(arg serial_no)"/>
72. <arg name="json_file_path" value="$(arg json_file_path)"/>
73.
74. <arg name="enable_pointcloud" value="$(arg enable_pointcloud)"/>
75. <arg name="pointcloud_texture_stream" value="$(arg pointcloud_texture_stream)"/>
76. <arg name="pointcloud_texture_index" value="$(arg pointcloud_texture_index)"/>
77. <arg name="enable_sync" value="$(arg enable_sync)"/>
78. <arg name="align_depth" value="$(arg align_depth)"/>
79.
80. <arg name="fisheye_width" value="$(arg fisheye_width)"/>
81. <arg name="fisheye_height" value="$(arg fisheye_height)"/>
82. <arg name="enable_fisheye" value="$(arg enable_fisheye)"/>
83.
84. <arg name="depth_width" value="$(arg depth_width)"/>
85. <arg name="depth_height" value="$(arg depth_height)"/>
86. <arg name="enable_depth" value="$(arg enable_depth)"/>
87.
88. <arg name="color_width" value="$(arg color_width)"/>
89. <arg name="color_height" value="$(arg color_height)"/>
90. <arg name="enable_color" value="$(arg enable_color)"/>
91.
92. <arg name="infra_width" value="$(arg infra_width)"/>
93. <arg name="infra_height" value="$(arg infra_height)"/>
94. <arg name="enable_infra1" value="$(arg enable_infra1)"/>
95. <arg name="enable_infra2" value="$(arg enable_infra2)"/>
96.
97. <arg name="fisheye_fps" value="$(arg fisheye_fps)"/>
98. <arg name="depth_fps" value="$(arg depth_fps)"/>
99. <arg name="infra_fps" value="$(arg infra_fps)"/>
100. <arg name="color_fps" value="$(arg color_fps)"/>
101. <arg name="gyro_fps" value="$(arg gyro_fps)"/>
102. <arg name="accel_fps" value="$(arg accel_fps)"/>
103. <arg name="enable_gyro" value="$(arg enable_gyro)"/>
104. <arg name="enable_accel" value="$(arg enable_accel)"/>
105.
106. <arg name="filters" value="$(arg filters)"/>
107. <arg name="clip_distance" value="$(arg clip_distance)"/>
108. <arg name="linear_accel_cov" value="$(arg linear_accel_cov)"/>
109. <arg name="initial_reset" value="$(arg initial_reset)"/>
110. <arg name="reconnect_timeout" value="$(arg reconnect_timeout)"/>
111. <arg name="unite_imu_method" value="$(arg unite_imu_method)"/>
112. <arg name="topic_odom_in" value="$(arg topic_odom_in)"/>
113. <arg name="calib_odom_file" value="$(arg calib_odom_file)"/>
114. <arg name="publish_odom_tf" value="$(arg publish_odom_tf)"/>
115. <arg name="allow_no_texture_points" value="$(arg allow_no_texture_points)"/>
116. </include>
117. </group>
118. </launch>
109.
3. 校正
d435i キャリブレーションは、主に双眼カメラの内部基準、歪み、および imu キャリブレーションを目的としています。
1. 構造化された光をオフにする
d435i には、深度情報の測定を支援するために使用される IR プロジェクトが含まれており、この記事では主に、IR が深度情報を提供せずに、単眼/双眼でスラム戦闘を完了することを目的としています。ただし、IR 構造光はイメージングに多くのスポットを引き起こし、キャリブレーションとその後の双眼使用に影響を与えるため、オフにする必要があります。
rs_camera.launchを変更する
- gedit rs_camera.launch
パラメータの後に追加
<arg name="emitter_enable" default="false"/>
<!-- rosparam set /camera/stereo_module/emitter_enabled false -->
<rosparam>
/camera/stereo_module/emitter_enabled: false
</rosparam>
<rosparam if="$(arg emitter_enable)">
/camera/stereo_module/emitter_enabled: true
</rosparam>
このコード ブロックは、rs_camera.launch が有効になっている場合、構造化ライトがデフォルトでオフになることを意味します。
必要に応じて、次の方法を使用して開くことができます。
- roslaunch realsense2_camera rs_camera.launch emitter_enable:=true
デフォルトがオフの場合、実行するために次のパラメータemiter_enable:=trueを追加する必要はありません。
2. カメラの内部基準と歪みのキャリブレーション
カメラのデフォルトの内部パラメータを参照してください
- ソースdevel/setup.bash
- roslaunch realsense_camera rs_camera.launch
- エコー/カメラ/infra1/camera_info
以下に示すように、rostopic echo /camera/infra2/camera_info を実行します。
注: ここでは特に注意してください。双眼カメラを使用する必要がある場合、トピックは上記のとおりであり、/camera/color/camera_info ではありません。
図からわかるように、双眼レンズの内部パラメータはデフォルトで提供されていますが、歪みパラメータはありません。kailbr は、imu のランダム ウォークとカメラと imu の外部パラメータを調整するために後で使用する必要があるため、ここではカメラの内部基準の調整に組み込みツールは使用されません。
3.imu 6 面キャリブレーション
imu 6 面キャリブレーションとは、acc、ジャイロのゼロ バイアス、スケール ファクター、および非直交誤差のキャリブレーションを指します。realsense は公式ライブラリを提供します。
(1) インストールの依存関係
- sudo pip3 pyrealsense2 をインストールします
(2) 走る
rs-imu-calibration フォルダーに入ります
- cd librealsense/tools/rs-imu-calibration
- Python rs-imu-calibration.py
以下に示すように
プロンプトに従って 6 つの側面を回転します。詳細については、https://github.com/IntelRealSense/librealsense/blob/master/tools/rs-imu-calibration/README.mdを参照してください。
注: 1. 6 面のレベルを確保するために、Realsense 梱包箱を使用して 6 面校正ツールを作成できます 2. 各面のデータを収集するときは、振動の干渉がないことを確認してください。
(3) 校正データの保存と書き込み
6 面データの収集が完了すると、「
生データを保存しますか?」というプロンプトが表示されます。
「yes」と入力して完了し、ハードウェアに書き込みます。キャリブレーション データは、同じディレクトリの calibration.json に保存されます。
参考:
https://github.com/IntelRealSense/librealsense
https://github.com/IntelRealSense/realsense-ros
https://blog.csdn.net/Hanghang_article/details/103612300