ROSで動かすロボットカー作り(Lidarセンサーを装備してみた編)

去年ぐらいにロボットに装備するためにLidarセンサーをaliexpress買ってみました。

ja.aliexpress.com

開封状態でずっと放置していたのですが、いろいろと落ち着いているタイミングなので今回はこれをロボットカーに実装していきます。

ROS melodicをインストール

今までkineticをROSに入れてましたが、セットアップをしていくうちにバージョンが古いせいでgeometryなどの依存パッケージが足りなくて、ググってもパッケージレポジトリが見当たらなかった上にkinetic用にコンパイラをいろいろ設定してごちゃごちゃしてきました。

過去のDistributionをみているとkineticのサポートは2021年4月で切れてました。どうりで標準パッケージのレポジトリのブランチからkineticが消えてたんですね(最初から気づけばよかった…)

wiki.ros.org

というわけでこれ以上kineticで作業するのは断念して一からOSを入れ直して、新たにmelodicをセットアップすることにしました。

Raspberry Pi OSのインストール

Raspberry Pi OSをインストールするときに注意することとして、ROSをインストールできるRaspberry Pi OSはDebian Busterベースの必要があります。

そのため、OSを選択するときには必ずBuster版のLegacyを選択してください。このあとの手順のためにDesktop版をインストールしておきます。

あとはImagerを使ってインストールしてもらえばOKです。

ROSをインストールするスクリプト

今回は本題ではないので、kineticのときと同様にセットアップ内容をまとめたスクリプトを用意しました。

kineticのときに比べるとかなり手順がシンプルになったのでスクリプトを作るほどではありませんが念の為…

ワークスペースを作成

それではROSのインストールを終えたらローバー用のワークスペースを作成していきます。

以下のコマンドでワークスペースのフォルダを作成して、初期化します。

mkdir -p ~/rober_catkin_ws/src
cd ~/rober_catkin_ws
catkin init

Raspberry Pi上ではこのワークスペース以外作成する想定はないので、以下のコマンドでワークスペースにパスが通るように設定します。

echo "source ~/rober_catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc

初期化したら正常にビルドできるか確認するために一度以下のコマンドを実行します

catkin build

ローバーのパッケージをインストール

続いてこのシリーズで紹介しているローバーを制御するパッケージを以下のコマンドでCloneします。

cd ~/rober_catkin_ws/src
git clone https://github.com/Miura55/ros_rober my_rober

そして、このローバーを動かすための依存関係を以下のコマンドでインストールしていきます。

sudo apt-get install libopenjp2-7 install libatlas-base-dev
sudo pip3 install smbus trollius rosdep rospkg rosinstall_generator rosinstall wstool vcstools catkin_pkg

Lidarセンサー用のROSパッケージをインストール

いよいよLidarセンサー用のROSパッケージをインストールします。

今回使用するセンサーはYDLidarのX2Lです。価格が1万円を切っているので、Lidarセンサーの中ではかなりお得じゃないかなと思います。

ja.aliexpress.com

このセンサーにはROS用のパッケージが公式で提供されており、ROSを使った知見が豊富です。

Lidarセンサーのパッケージを以下のコマンドでワークスペースにCloneします。

cd ~/rober_catkin_ws/src
git clone https://github.com/YDLIDAR/ydlidar_ros

catkin buildします。

catkin build

ここでデバイスを接続したときに作成されるデバイスファイルに対して決まった名前でシンボリックリンクを張るようにします。

ターミナルを開き直してセットアップ用のスクリプトがあるディレクトリに移動します。

roscd ydlidar_ros/startup

スクリプトファイルに権限をつけます。

sudo chmod 777 ./*

スクリプトファイルを実行します。

sudo sh initenv.sh

スクリプトが実行完了したら一度Raspberry Piを再起動します。

これでLidarセンサーを動かすためのセットアップができました。

とりあえず動かしてみる

それではRaspberry Pi上で実際にセンサーを動かしてみます。

まずはRaspberry Pi上のデスクトップでrvizを起動してRaspberry Piのデスクトップ画面上でセンサー情報を確認できるようにします。

実行前にlidar_view.launchを以下の内容に書き換えます。(使うセンサーの型番を変更します)

<launch>
  <include file="$(find ydlidar_ros)/launch/X2L.launch" />
  <node name="rviz" pkg="rviz" type="rviz" args="-d $(find ydlidar_ros)/launch/lidar.rviz" />
</launch>

デスクトップ画面(VNCでもOK)でターミナルを開いて以下のコマンドで実行します。

roslaunch ydlidar_ros lidar_view.launch

実行すると以下のようにセンサーで取得した点群情報が表示されます。

別PCで表示する

Raspberry Piのデスクトップ画面でセンサー情報を可視化したところで、今度は別のPCのrvizで表示できるようにします。

これをやるためにMaster / Slaveの設定を行います。

Master / Slaveの設定は前回の記事を参考に行ってください(むしろこのためにこの記事を書きました)。

supernove.hatenadiary.jp

設定を終えたらMaster側のマシンでroscoreを起動します。

roscore

Raspberry Pi側では以下のコマンドを実行します。

roslaunch ydlidar_ros X2L.launch 

続いてrvizを動かすPC側ではパッケージをCloneして、rvizを起動します

cd ~/catkin_ws/src
git clone https://github.com/YDLIDAR/ydlidar_ros
rosrun rviz rviz -d $(find $(pwd) -name lidar.rviz)

実行すると以下のようにRaspberry Piに接続したLidarセンサーの情報を遠隔のPC上でも表示できるようになりました。

まとめ

今回はLidarセンサーを使ってみました。

LidarはROSの醍醐味であるSlamを使う上で必須のセンサーでこれからこのセンサーを使ってロボットの自立移動を実装してみたいと思います。

というわけで次回はそのための準備的なことをしていきたいと思います。