ROS melodicにおいて、小型の深度センサーである、Intel RealSense D435iを用いて、マップ生成や自己位置推定などに必要な/scanと/imuのトピックを発行したいと思います。RealSenseにはD435とD435iと、形状が似ているタイプが存在しますが、D435iの方がIMU(ジャイロや加速度センサー)がついているため、こちらを使用します。

RealSenseライブラリのインストール

こちらのrealsense-rosがRealSenseのROSライブラリになります。

https://github.com/IntelRealSense/realsense-ros

ROS melodic向けのRealSenseライブラリは上記のREADMEを参考にしてインストールしましょう。

roslaunch realsense2_camera rs_camera.launch

インストール後、上記コマンドを実行し、別のターミナルを開いてrostopic list -vなどとコマンドを打ってtopicのリストを表示した時に、/camera/color/camera_infoなどのPublished Topicsに記載されているtopicのリストが表示されていれば無事にインストールと実行ができています。

デプス画像から/scanトピックを発行する

マップ生成をする際、/scanトピックをsubscribeする必要がありますが、realsense-rosで発行できるトピックの中に/scanトピックはありません。

そこで、デプス画像を/scanトピックに変換できる下記ライブラリを使用します。

元となるデプス画像(depthimage_to_laserscanのページより)

scanデータに変換される(depthimage_to_laserscanのページより)
sudo apt-get install ros-melodic-depthimage-to-laserscan

でインストールするか、下記のようにcatkinでインストールをします。

cd catkin_ws/src
git clone https://github.com/ros-perception/depthimage_to_laserscan.git
cd ..
catkin_make

realsense-rosでは、デプス画像は/camera/depth/image_rect_rawというトピックで発行されているので、

roslaunch realsense2_camera rs_camera.launch
rosrun depthimage_to_laserscan depthimage_to_laserscan image:=/camera/depth/image_rect_raw

と、2つのターミナルで実行してみましょう。

rostopic list -v で確認した時に/scanが発行されていれば、無事にデプス画像からスキャンデータに変換ができていることになります。

また、launchファイルに組み込む際は、下記などのようにします。

 <node pkg="depthimage_to_laserscan" type="depthimage_to_laserscan" name="depthimage_to_laserscan" >
     <param name="scan_height" value="3"/>
     <param name="output_frame_id" value="base_link"/>
     <remap from="image" to="/camera/depth/image_rect_raw" />
 </node>

/imuトピックを発行する

また、自己位置推定のために/imuのトピックを発行する必要がありますが、realsense-rosはデフォルトでは発行されません。

githubのレポジトリ のページに説明がありますが、launchファイルを実行する際に、unite_imu_methodというパラメータにlinear_interpolationをセットしてあげる必要があります。これにより、gyroとaccelの2つのストリームを統合して/imuトピックを発行することができます。

roslaunch realsense2_camera rs_camera.launch unite_imu_method:=linear_interpolation

上記を実行した後にrostopic list -vで確認をすると/imuトピックが発行されていると思います。

また、launchファイルに組み込む時は下記などのようにします。

 <include file="$(find realsense2_camera)/launch/rs_camera.launch">
   <arg name="unite_imu_method" value="linear_interpolation"/>
 </include>
RealsenseRos

Related Posts

ROSで使われる単位について
ROSで使われる単位について
ROS(Robot Operation System)はオープンソースのロボット開発プラットフォームで、様々な技術要素をライブラリとして使えるため、非常に簡単にロボットシステムを構築することができます。 ROSで使われる距離・重...
Read More
NVIDIA Jetson Nanoにケースと冷却ファンを取り付ける
NVIDIA Jetson Nanoにケースと冷却ファンを取り付ける
NVIDIA Jetson Nanoを動かす際、アクリルケースに入れておくことと、冷却ファン(扇風機)を取り付けておくことをおすすめします。 アクリルケースは、マイコンに埃が溜まってしまったり、誤って傷つけたりショートさせて壊して...
Read More
ROS melodicのturtlebot3でGazebo上のロボットが動かなかった
ROS melodicのturtlebot3でGazebo上のロボットが動かなかった
現象 ROS MelodicでTurtlebot3をGazeboで動かしてついでにSLAMする https://qiita.com/protocol1964/items/1e63aebddd7d5bfd0d1b こちらの...
Read More

サイトについて

RoboStationは誰でも手軽にロボットを製作できるようにすることを目的としたEC・ハウツーサイトです。