ROSで動かすロボットカー作り(Lidarセンサーを装備してみた編)
去年ぐらいにロボットに装備するためにLidarセンサーをaliexpress買ってみました。
未開封状態でずっと放置していたのですが、いろいろと落ち着いているタイミングなので今回はこれをロボットカーに実装していきます。
ROS melodicをインストール
今までkineticをROSに入れてましたが、セットアップをしていくうちにバージョンが古いせいでgeometryなどの依存パッケージが足りなくて、ググってもパッケージレポジトリが見当たらなかった上にkinetic用にコンパイラをいろいろ設定してごちゃごちゃしてきました。
過去のDistributionをみているとkineticのサポートは2021年4月で切れてました。どうりで標準パッケージのレポジトリのブランチからkineticが消えてたんですね(最初から気づけばよかった…)
というわけでこれ以上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センサーの中ではかなりお得じゃないかなと思います。
このセンサーには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の設定は前回の記事を参考に行ってください(むしろこのためにこの記事を書きました)。
設定を終えたら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を使う上で必須のセンサーでこれからこのセンサーを使ってロボットの自立移動を実装してみたいと思います。
というわけで次回はそのための準備的なことをしていきたいと思います。