LIDAR(HDL-64E)をROS2で動かす
はじめに
今回は、HDL−64Eと呼ばれるLIDARの点群をrviz2で表示してみました。
表示する上で行ったことを自分用に書いておきます。
環境
・ROS2 Humble
・buntu 22.04 LTS
LIDARとの接続
1.Wiresharkのインストールと起動
まずは、LIDARを有線で接続し、通信しているIPアドレスを確認します。
LIDARとパソコンを有線で接続した後、以下のコマンドを実行してWiresharkをインストールし、起動します。
sudo apt install wireshark
sudo wireshark
2.インターフェースの選択
次に、Ubuntuの画面右上にある有線接続アイコンをクリックすると表示されるインターフェイスと同じインターフェイスをwiresharkで選択します。
今回はenp0s31f6です。
選択すると、enp0s31f6インターフェイスと通信している機器のIPアドレスがわかります。
このインターフェイスはLIDARしか接続されていないので、LIDARのIPアドレスが確認できます。
LIDARのIPアドレスがわかったら、同じネットワークに入るために画面右上にある有線接続アイコンをクリックし、
「有線設定」(Wired Settings)を選択します。
該当ネットワークの歯車ボタンを押し、上記の画面に移動します。
IPv4ボタンを押してIPv4 methodを「手動」(Manual)にしたあと、該当するネットワークに入ることができるようにIPアドレスを設定します。
IPアドレス:LIDARと同じネットワーク内のアドレス(今回は、192.168.5.15の最後の15を適宜変更)
サブネットマスク:255.255.255.0
ゲートウェイ:192.168.5.1
上記のように設定画面に先程設定したIPアドレスが表示されていれば成功です。
ROSでLIDARを起動する
次にvelodyne driverを使用してLIDARを起動します。
HDL-64EのドライバがROS2に対応していないため、ROSのドライバを使用しています。
まず適当なフォルダを作成し、その中で下記の内容のDockerfileを作成します。
FROM osrf/ros:melodic-desktop-full
RUN apt-get update && apt-get install -y \
ros-melodic-velodyne usbutils net-tools \
&& rm -rf /var/lib/apt/lists/*
その後、下記のコマンドを実行してコンテナを起動します。
sudo docker run --net=host -it --rm ros-melodic-velodyne
--net=hostでホストとコンテナのネットワークを同じにしています。
コンテナを起動したあとは、以下のコマンドを実行してドライバを起動します。
source /opt/ros/melodic/setup.bash
roslaunch velodyne_pointcloud 64e_points.launch
ROS1BRIDGEを起動する
つぎに、ROSのトピックをROS2で受け取れるようにするために、ROS1BRIDGEを起動します。
今回は、DockerHubにあったimageをそのまま使用しました。
新しくターミナルを開いて、以下のコマンドを実行します。
sudo docker run --net=host -it -e ROS_DOMAIN_ID=19 -e ROS_LOCALHOST_ONLY=1 andrejorsula/ros1_bridge:galactic
-e ROS_DOMAIN_ID=19 -e ROS_LOCALHOST_ONLY=1
この部分は、
printenv | grep -i ROS
で表示された
ROS_LOCALHOST_ONLY
ROS_DOMAIN_ID
と等しくなるようにします。
ROS2でrviz2を起動して点群を表示する
最後に、以下のコマンドでrviz2を起動した後、Fixed nameをvelodyneに変更すれば点群を見ることができます。
rviz2
Discussion