#プログラミング ROS< ロボットアームの作成(1) >
はじめに
1つの参考書に沿って,ROS(Robot Operating System)を難なく扱えるようになることが目的である.その第33弾として,「ロボットアームの作成(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インタフェースはcmd_vel/odomというトピックの組だったが,ロボットアームでの類似のインタフェースは次のようになる.
-
control_msgs/FollowJointTrajectory(follow_joint_trajectoryアクション)
- アームの軌道を指示し,その経過を観察する.
-
sensor_msgs/JointState(joint_statesトピック)
- アームの各関節の現在の状態を配信する.
follow_joint_trajectory/joint_statesというROSのインタフェースを使って簡単にロボットアームの関節を観測したり,コマンドを送ることができる.
どのようなゴールメッセージを送ることができるのか?
-かなり多くのパラメータがある.
軌道は,経過時間とその経路に従って動作する際の許容範囲を,位置,速度,加速度,作用の目標点との組み合わせで定義することができるようだ.幸いにも,すべてのフィールドを埋めなくても簡単な軌道を作成することはできる.
joint_statesは...
-各関節の現在の位置,速度,回転力(トルク)を報告しているだけ.
手順2:ハードウェアドライバ
-
ドライバを書くステップは,ロボットのハードウェアがどのように設計され,
そのハードウェアとどうやって通信を行うことができるのかに強く依存する. -
通信の内容がどんなものであっても,ドライバノードで何らかの計算をして,
ロボットが提供するコマンドとデータの表現形式と,私たちがROSのインタフェース
としてサポートすfollow_joint_trajectory/joint_states間での変換を行う必要がある. -
ロボットアームを制御するための汎用的なドライバのコードはないが,ROSエコシステム内
には,参考になるサンプルがたくさんある.
感想
前回までは,移動ロボットの作成について扱っていたが,今回からはロボットアームについて扱う.しかしながら,ほとんどのロボット作成の方針・手順は同じようで,実際に中身は違ってくるけれども,流れは同じだと感じることができた.その流れに沿って,移動ロボットを学んだようにロボットアームについての理解も深めていきたい.
参考文献
プログラミングROS Pythonによるロボットアプリケーション開発
Morgan Quigley, Brian Gerkey, William D.Smart 著
河田 卓志 監訳
松田 晃一,福地 正樹,由谷 哲夫 訳
オイラリー・ジャパン 発行