前回はkobukiの状態をRviz2で可視化しましたが、LiDARを接続してSLAMを行ってみます。これにより自己位置推定と環境地図の作成ができ、自動運転に必要な情報を生成することができます。
kobukiにLiDARを搭載する
これまでルンバで使用していたLiDARを使います。ルンバにLiDARを搭載するためのフレームを製作しましたが、それがそのまま使えました。

LiDARドライバの設定
今回使用するLiDARはYDLIDAR X2です。公式サイトにあるROS2ドライバをインストールします。
LiDAR SDKのインストール
ROS2ドライバを動作させるにはYDLIDAR-SDKが必要になります。以下のGithubにあります。
https://github.com/YDLIDAR/YDLidar-SDK
手順に従ってインストールを行います。
| |
LiDAR ROS2ドライバのインストール
YDLIDAR X2のROS2ドライバは以下のGithubにあります。
https://github.com/YDLIDAR/ydlidar_ros2_driver/tree/humble
手順に従ってインストールを行います。
| |
この状態でLiDARをUSBに接続し、/dev/ydlidar のシンボリックリンクができていることを確認します。
| |
パラメタの修正
ROS2ドライバのパラメタをYDLiDAR X2用に修正します。また、シリアルポートが /dev/ttyUSB0になっているので、/dev/ydlidarに書き換えます。
| |
ydlidarの変更点は以下の通りです。
| |
LiDARドライバの起動
LiDARのROS2ドライバを起動します。
| |
LiDARが高速回転になって、/scanトピックが流れ始めます。これがLiDARからの情報になります。
Rviz2でLiDARの情報を確認する
Rviz2を起動します。
| |
FileメニューのOpen Configで、ドライバに含まれている以下のサンプルファイルを指定して開きます。
| |
Rviz2の画面に赤い点群が表示されます。これがLiDARが認識している物体の情報です。LiDARの周りにある物や部屋の壁が認識できています。手などでLiDARの周りを遮ると手の動きが確認できます。

これでLiDARが正常に動作していることが確認できました。
SLAMの実行
kobukiのROS2ノードを起動します。ここではまとめて記載していますが、個々にターミナルを開いて実行します。
| |
SLAMを起動します。
| |
Rviz2を実行します。
| |
Rviz2の左側にあるDisplaysのメニューでAddをクリックし、By display typeからLaserScanを選んでOKをクリックします。追加されたLaserScanの項目で、Topicに/scanを設定、TopicのReliabilty PolicyをBest Effortにし、Size(m)を0.03にします。LaserScanの設定例を以下に示します。

さらに、DisplaysのメニューでAddをクリックし、By display typeからMapを選んでOKをクリックし、Topicに/mapを設定します。

最後にGlobal OptionsのFixed Frameをodomにします。

このように設定するとスキャンデータと地図が表示されます。ここでkobukiをある程度動かすと地図が生成されるのですが、まだ狭い範囲しか動かせないので残念ながらここまでです。

ここまでの状況からみて、SLAMは正常に行えているようです。
参考までにrqt_graphの結果を示します。

まとめ
LiDARを追加することで、SLAMによる地図の生成ができることが確認できました。実際に走行させると次々と地図ができていくのですが、まだバッテリーが到着していないのでここまでになります。バッテリーが届いてkobukiが自由に走行できるようになったらNavigation2での自律走行を試してみます。
