ニュースNEWS

ラボニュース

2023.08.25

クローラロボットでSLAM! CartographerでSLAMしてみた

こんにちは。ロボティクスエンジニアの中村です。今回はROS開発キットの応用例を紹介いたします。ROS開発キットは、自律走行機能の開発にすぐ取りかかれるように、センサなどのハードウェアを追加したり、各電装部品ように電源系統を整備したり、ドライバ類などのソフトウェアを整備した開発プラットフォームです。ROS開発キットでは、CartographerのインストールからSLAMをするまでのスクリプトを用意いたしました。ご購入されてからCartographerでSLAMをしたのち、NavigationStackで走行するまでスムーズにお試しできるようにしておりますので、ぜひご参考ください。

 

ROS開発キットでできること

ROS開発キットでは、ROSで自律走行アプリケーションを開発するのに必要な様々な装備を整えたものです。”ハードウェアを気にせず、いきなりソフト開発ができる!”を目標に開発しております。CuGo V3にROS開発に必要な様々な機能を搭載しております。

 

  • CuGoの制御機能

ROS開発キット専用のROSパッケージを用意してあります。ROS / ROS 2両方とも対応しております。

https://github.com/CuboRex-Development/cugo_ros_control

このROSパッケージでは、ROSで標準的なコマンドである、/cmd_velトピックを受け付け、クローラのモータを制御します。また、自己位置推定としてモータの回転数からオドメトリを/odomトピックで出力します。標準的な自律走行アプリケーションであるNavigationStackに使用することができます。

 

  • ROS開発キット搭載センサ
    • エンコーダ:モータの回転数を測定します。ロボットを正確に制御するだけでなく、回転数の累計を求めることでスタート位置からどのくらいの位置まで進んだか大まかな移動量を推定することができます。実際に回ったモータ回転数を知ることができるため、正確な距離を求めることができますが、クローラがスリップした場合、位置推定はだんだんとズレていきます。
    • IMU:加速度と角加速度と磁力を測定します。加速度と角速度の累計を求めることでスタート位置からどのくらいの位置まで進んだか大まかな移動量を推定することができます。慣性から推定するため、クローラのスリップで位置推定の悪影響は受けにくいですが、正確な距離はエンコーダによる測定には劣ります。
    • 2D LIDAR:ロボットの周囲360度の障害物までの距離を測定します。2次元の平面上の障害物を認識することができます。最大40m先まで測距することができます。
    • GNSSアンテナ(開発中 / オプション予定):いわゆるGPS信号を受け取り、地球上での正確な位置座標を計算します。開けた場所であれば、ロボットの持っている地図の位置をロストしても位置を知ることができます。
    • カメラ(開発中 / オプション予定):画像処理をすることで、人や交通標識、白線などといったロボットの周辺環境の意味的情報を得ることができます。

自律走行ロボットでは、さまざまなセンサを活用してロボット周辺環境を認識し、どのような行動をさせるかを設計することが大切です。ROS開発キットでは、センサをあらかじめ用意してあるため、ナビゲーションシステムの開発に集中することができます。

 

  • Jetson Orin NX 16GBによる画像処理機能

自律走行ロボットの計算用コンピュータとして、NVIDIA社のJetson Orin NX 16GBを搭載しました。自律走行の計算だけでなく、カメラに写った物体の検出など画像AIをロボット上でリアルタイムで処理することができます。

 

SLAMとは

引用:https://google-cartographer-ros.readthedocs.io/en/latest/

 

現在の自動運転車を含めた自律走行ロボットの基本的な考え方は、

  • ロボットが認識できる地図を作る
  • 地図上の現在地を知る
  • ゴールまでの道のりを逆算してモータを回す

という手順を繰り返します。目的地に到達するためには、ロボットが理解できる地図を作成することが必須な手順となります。

SLAMは、ロボットが未知の環境で自分の位置を推定しながら地図を生成する技術を指します。本来、地図を作成するときには測量用の装置や、絶対的な位置を正確に把握するGPSなどの装置が必要となりますが、SLAMでは地図作成をしながら自身の移動した位置を推定することで、ロボットに搭載されているセンサの値の組み合わせだけで地図を作ることができます。さまざまな場所でロボットが自律走行するために、SLAMは世界中で開発されている技術とも言えます。

 

Cartographerの概要

引用:https://google-cartographer-ros.readthedocs.io/en/latest/algo_walkthrough.html

 

Cartographerは2Dにも3Dにも対応するLIDAR SLAM手法の一つです。GoogleによってROS実装もされており、自律ロボットでよく使われるSLAM手法です。

CartographerはローカルSLAMとグローバルSLAMの2つの機能でSLAMを実現します。

ローカルSLAMはLIDARなどの距離センサから得られたscanやpointcloudをつなぎ合わせて、ロボット周辺の小さなエリアだけの高品質な地図を作成します。これをサブマップといいます。ロボットがある程度走行すると、別のサブマップが新たに作成されます。前後のサブマップ同士の共通点を見つけ、サブマップ同士をつなぎ合わせることで、ロボットが進んできた環境の地図を逐次的に作成していきます。ただし、高品質なサブマップであっても逐次的に地図作成をしているため、オドメトリのように誤差は累積していきます。

グローバルSLAMでは、ローカルSLAMで累積した誤差を解消する処理を行います。具体的には、過去に通った場所に再び戻ってきたことを検出すると、過去の地図の位置と現在位置のマッチングを行いズレ量を算出します。そこから累積誤差をさかのぼって修正することで地図全体のズレを矯正する処理を行います。この処理があることで、大規模な地図を破綻なく作ることができます。

Cartographerでは、2D/3D地図の両方に対応しているだけでなく、センサ入力もオドメトリありなし、IMUありなしなどを選択することができ、様々なロボットに対応できるアルゴリズムです。ROS開発キットでもCartographerでSLAMをすることができます。

 

Cartographerを使ってみた

ROS開発キットを制御するROSパッケージ"cugo_ros_contol"のリポジトリ内に搭載しているセンサのドライバパッケージ、SLAMパッケージ、Navigationパッケージのインストールを行うスクリプトが付属しています。必要なソフトウェアをインストールし、実際にCartographerを動かしてみて、開発室の2D地図を作成してみました。

まずは"cugo_ros_control"をインストールします。今回はROS noeticで実施します。

$ cd ~/your/ros/catkin_ws/src

$ git clone https://github.com/CuboRex-Development/cugo_ros_control.git

$ cd cugo_ros_control

$ git checkout ros-noetic

$ cd ../..

$ catkin build

これでROS開発キットを動かす”cugo_ros_control”のインストールが完了します。

 

次にCartographerで必要な環境を準備します。

$ cd src/cugo_ros_control/install

$ sudo bash ./install.bash

sudo権限を使うのはapt update, apt installをするためです。必要に応じて変更してください。このスクリプトでcartograhper_rosと依存パッケージ、ビルドに必要なツールとROS開発キットに搭載されているセンサ類のすべてのパッケージをインストールされます。

 

最後にCartographerの起動スクリプトを実行します。

$ roslaunch cugo_ros_control cugo_cartographer.launch

 

実行すると、各ノードが立ち上がり、ビジュアライズツールのrvizで観測結果と作成した地図がリアルタイムで表示されます。動画のように、プロポ操作でロボットを操作して走行を続けると、だんだんと地図が作られていくことがわかると思います。

 

動画の初期では、部屋の角が直角に曲がっていない、壁が直線ではないなど地図の端っこの部分が歪んていましたが、走行を続けることで地図が補正されて修正されていきます。走行を続けることで、作成されたばかりの地図と過去に作成された地図の対応点がみつかり、矛盾が生じないように(正確には誤差が最小化するように)つながりを修正していくことで、地図が正確になっていきます。地図の黄色や赤色の線は対応点が発見されたときに描画され、この対応点が多いほど正確になる可能性が高くなります。

 

以上のように、Cartographerを使って、走行したい屋内環境で地図を作成することができました。次回はNavigationStackを使って、この地図内での自律走行を紹介いたします。お楽しみに!

 

お問い合わせ

CuboRexでは、いままでロボットがうまく立ち入れなかった不整地環境で役に立つロボットを開発しています。より詳しい情報を知りたい方は以下までお気軽にお問い合わせください。

https://cuborex.com/contact/

 

ROS開発キットの詳細情報についてはこちらをご覧ください。

お求めの場合は、上記お問い合わせにお願いいたします。

https://prtimes.jp/main/html/rd/p/000000057.000022568.html

 

その他、クローラロボット製品はこちらのWebShopからもお求め頂けます。

https://cuborex.base.shop/categories/4419463

WEBからのお問い合わせ

ご相談はお問い合わせフォームをご利用ください。

お問い合わせフォームへ