コラム
FEATURE DETAIL
コラムコラム

LiDARとROSによるSLAMについて

ROSとは

ROS(Robot Operating System)は既存の豊富なソフトウェアを使用することで、ロボット周辺のシステム開発を容易にするフレームワークです。また、ソフトウェアの再利用を支援することを目的に開発されており、ハードウェアの制御方法やデータを共通化し、別々のメーカーや方式のものを同じように扱えるように設計されています。

なお、オペレーティングシステムと名前がついていますが、WindowsやLinuxといった一般的にOSと呼ばれるものとは違い、ソフトウェアの形式としてはOS(主にUbuntu)上で動作するアプリケーション群となっています。

ROSの構成

ROSでは、ソフトウェアの再利用を容易にするため、以下のような構成を持ちます。
これらの要素が上図のように関連し合い、ロボットのソフトウェアを実現します。

要素 説明
ノード センサデータを取得するノード、ロボットを動かすノード、経路を計画するノードなど、様々な処理をするソフトウェア urg_node、hokuyo3d、move_base等
メッセージ ノード間でやり取りするデータ LaserScan、PointCloud、Twist等
トピック ノード間でのメッセージのやり取りを仲介する場所 scan、hokuyo_cloud、cmd_vel等
マスター ノード同士がお互いを見つけたりする際の仲介役 roscore

測域センサで使用できるノード

測域センサで使用できるノードとしては以下のようなノードがあります。 これらのノードを使用することで、これまではお客様側で実装が必要であったセンサとの通信やアプリケーションとのインタフェース部分の設計が必要なくなるため、簡単に測域センサを使用でき、より本質的な機能の開発に専念することができます。

センサの種類 使用できるノード 出力するメッセージ
2Dセンサ(SCIP) urg_node(http://wiki.ros.org/urg_node) LaserScan
3Dセンサ(VSSP) hokuyo3d(http://wiki.ros.org/hokuyo3d) PointCloud, PointCloud2, Imu
※これらのノードは当社が開発したものではありませんが、第3者によって開発されたノードが多くのユーザが使用できるように公開されているのもROSの特徴です。

中之島チャレンジ用に開発したロボット

中之島チャレンジとは、実際に人々の往来する環境において移動ロボットが問題無く行動できるかどうかを試すイベントで、2018年から大阪の中之島で開催されています。
http://www.proassist.co.jp/nknsmchallenge.html

当社の有志メンバーが中之島チャレンジ2019に参加しましたので、ROS具体的な応用例として、その際に開発したソフトについて説明します。この写真のロボットが中之島チャレンジ2019に参加したロボットで、arno(アルノー)と言います。ロボット自体は筑波大学の知能ロボット研究室で開発された i-Cart mini (http://t-frog.com/products/icart_mini/)
をベースに開発を行いました。センサは2Dセンサ(URM-40LC-EW)を2つ搭載しています。3Dセンサ(YVT-35LX)も2つ搭載していますが、今回は制御には使用していません。

ソフト構成

arnoで動かしているノードとそれぞれがやり取りするトピックはこのような構成です。
※実際にはもう少し多くのトピックがありますが、簡略化しています。

①まず、2つのurg_node(urg_node1とurg_node2)が2つのURM-40LCN-EWからデータを取得し、LaserScanのメッセージを/urg_node1/scanと/urg_node2/scanトピックに出します。/urg_node1/scanと/urg_node2/scanをlaserscan_multi_mergerで一つのデータとしてまとめることにより、360度のスキャンデータ/scanを構成し、amclに渡します。

②amclはパーティクルフィルタを用いて自己位置推定を行うノードで、map_serverから取得したマップと、laserscan_multi_mergerから取得した360度のスキャンデータ/scanから自己位置推定し、マップ上のどこにいるかを認識し、座標情報の/tfトピックを出します。

③move_baseは動作指示を行うノードで、amclが推定した自己位置の/tfと、arno_navigationから取得した目的地/goalから動作を決定し、で動作指示の/cmd_velトピックを出します。

④icart_mini_driver_nodeが実際にi-Cart miniのモータを動かすノードで、move_baseからの動作指示の/cmd_velトピックに従ってi-Cart miniのモータを動かします。

こういった流れでロボットの制御を行っています。 また、マップ生成時にはSLAMを行うgmappingを使用しました。なお、これらのノードで、1から作成したのはarno_navigationノードだけで、他はパラメータ調整等のみで使用しています。
このように、ROSを使用することで既存のノードを組み合わせることによりロボットのソフトウェアの多くの部分を作ることができ、開発期間の大幅な短縮が期待できます。

中之島チャレンジでの動画

ROS2について

ROSを使うと様々なメリットがありますが、実際にはセキュリティ面や、要求スペック、リアルタイム性等の問題があるため、主に研究用途等が多く、製品への応用ができるのは限定的となっていました。ROS側ではそれらの問題を解決することにより、これまでの研究用途だけではなく製品にも応用することを視野に入れたROS2を開発しています。

以下に現在のROSとROS2の特徴の比較表を示します。

  現在のROS ROS2
ロボットの同時利用数 単体ロボットのみ対応 複数台ロボットにも対応
計算資源 高性能計算機のみ対応 組み込みプラットフォームにも対応
リアルタイム制御 特別な作法に従う必要あり 一般的なプロセス内・プロセス間通信
ネットワーク品質 高品質のみ対応 欠損や遅延も許容
プログラミング形式 最大限にユーザの自由 柔軟性を残しながらも形式を固定
アプリケーション 研究、学術用途のみ対応 製品化にも対応
[近藤豊 (2019)ROS2ではじめよう 次世代ロボットプログラミング 技術評論社]より引用

北陽電機でも測域センサ用のROS2ノードを用意しています。
詳しくはURG NetworkサイトのROS2に関する記事をご覧ください。▼
URG Network / Wiki / urg_node2 (sourceforge.net)
ROS2対応urg_node2の入手はこちらから▼
https://github.com/UrgNetworks/urg_node2

まとめ

ROSやROS2を使うことにより、最新のロボット技術を簡単に取り入れることができます。 また、こういったツールが普及することにより、様々な分野でのロボット及びLiDARの利用の拡大が見込まれます。
当社としても、LiDARのメーカーとして今後様々な提案をさせて頂きたいと考えております。

今回使用した測域センサの仕様を確認する

・距離35m(最大)、水平210°、垂直40°の範囲を3次元計測するレーザスキャナ(3D LiDAR)。
・距離40m、270°の範囲を計測する屋外用レーザスキャナ(LiDAR)。

関連コラムを読む

上に戻る