#プログラミング ROS< 移動ロボットの作成(1) >
はじめに
1つの参考書に沿って,ROS(Robot Operating System)を難なく扱えるようになることが目的である.その第28弾として,「移動ロボットの作成(1)」を扱う.
環境
仮想環境
ソフト | VMware Workstation 15 |
実装RAM | 2 GB |
OS | Ubuntu 64 ビット |
isoファイル | ubuntu-mate-20.04.1-desktop-amd64.iso |
コンピュータ
デバイス | MSI |
プロセッサ | Intel(R) Core(TM) i5-7300HQ CPU @ 2.50GHz 2.50GHz |
実装RAM | 8.00 GB (7.89 GB 使用可能) |
OS | Windows (Windows 10 Home, バージョン:20H2) |
ROS
Distribution | noetic |
移動ロボットの作成
ROSを使って,ほとんどの新しいロボットを制御する手順は次のようである.
1. ROSのメッセージインタフェースを決める.
2. ロボットのモータ用ドライバを書く.
3. ロボットの物理構造を書く.
4. Gazeboのシミュレーションで使用できるようにモデルに物理的特性を追加する.
5. tfを介して座標変換データを配信し,rvizでそれを可視化する.
6. センサを追加する.ドライバとシミュレーションのサポートも必要.
7. ナビゲーション等の標準的なアルゴリズムを適用する.
移動ロボットを例にその流れを確認していく.
今回はその1つ目ということで,1と2をまとめて移動ロボットの作成(1)として扱うこととする.
手順1:ROSメッセージインタフェース
- 最初に行うべきことは移動台車を制御すること
- ハードウェア(移動台車)と通信するROSノードを何らかの方法で書き,システムのほかの構成要素に標準的なROSのインタフェースを提供する.
これが抽象化というROSにおいてコアとなる概念
ROSはどのようなロボットでも汎用的に扱いたいと思っている.そうすることで,標準的なインタフェースで動作するように設計されたツールとライブラリからなるエコシステムの全てを再利用することができるようになる.
例:TortoiseBot
三輪車と同じ動作で,前進(x軸方向)と回転(z軸周り)に動くことが可能で,
それ以外の動きはできないと考えられる.
ゆえに,TortoiseBotはx軸上の並進速度とz軸周りの回転速度に対して,
目標値を設定することで,動きを制御できることになる.
vx : x軸上の並進速度(前方を正)
vyaw :z軸周りの回転速度(反時計回りを正)
この結果として,ロボットが(x, y, yaw)のような平面内での位置と向きを報告することが期待される.
- ROSコミュニティは次のようなメッセージインタフェースに行き着く
geometry_msgs/Twist (cmd_velトピック)
- ロボットの目標速度(コマンドとしてロボットに送信する)
nav_msgs/Odometry (odomトピック)
- ロボットの位置と向き(データとしてロボットから送信される)
geometry_msgs/Twist
nav_msgs/Odometry
四元数についての説明はここを参考にするとよいかもしれない.
-
必要な部分だけ使って,残りは空の状態で使える.自分で必要な部分だけで構成されたメッセージインタフェースを定義することもできるが,ほかのツールやライブラリとの互換性がなくなるかもしれない.
-
ゆえに,自分が扱うロボットが既存のツールとライブラリを最大限に再利用できる方法を慎重に探すべきである.
これにより,地上を走るものであろうと,空中を飛ぶものであろうと,このインタフェースを
使う移動型のロボットと同じように自身のロボットも共通のツール群を使って操作することが
できるようになる.
手順2:ハードウェアドライバ
-
ドライバを書くステップは,ロボットのハードウェアがどのように設計され,
そのハードウェアとどうやって通信を行うことができるのかに強く依存する. -
通信の内容がどんなものであっても,ドライバノードで何らかの計算をして,
ロボットが提供するコマンドとデータの表現形式と,私たちがROSのインタフェース
としてサポートするcmd_vel/odom間での変換を行う必要がある. -
移動台車を制御するための汎用的なドライバのコードはないが,ROSエコシステム内
には,参考になるサンプルがたくさんある.
感想
今回から,ようやく自作の移動ロボットを構築していく手順について学ぶことができる.いよいよロボットの構築に触れることができるということで非常に楽しみである.今回は,まだ導入のような形ではあるが,1つ1つ丁寧に学習を進めていき理解を深めていきたい.
参考文献
プログラミングROS Pythonによるロボットアプリケーション開発
Morgan Quigley, Brian Gerkey, William D.Smart 著
河田 卓志 監訳
松田 晃一,福地 正樹,由谷 哲夫 訳
オイラリー・ジャパン 発行