moveIT!の使い方を徹底解説!ダウンロード方法やチュートリアルは?
moveIT!と呼ばれるフレームワークがあります。産業用ロボットなどの開発に際して登場する不可欠のテクノロジーです。
中でも代表的なロボットの形態は関節を沢山備えたアームロボットです。
CRANE+というロボットアームなどはマニピュレータ用パッケージであるmoveIT!の制御環境下で動きます。
アームの先端を的確に動かすには軌道計画と逆運動学という別々のタスクを実行しなければなりません。
複雑な計算が要求されますがこのエリアをmoveIT!というライブラリーが担っています。
moveIT!が具体的にどんな目的で使用されるのか、その詳しい使い方やダウンロード方法、関連するテクノロジーなど詳しく解説します。
moveIT!とは
ITの世界では特定の機能を持つプログラムがいくつも部品化されていて、これを一つのファイルにまとめて収納した場合にライブラリーと呼んでいます。
更に特定の目的を持ったプログラミングに於いて必要とされる機能を集約して搭載した集合体をフレームワークと名付けています。
moveIT!は主に産業用ロボットをコントロールするプログラムを開発する際に必要となる機能を集めたフレームワークです。
因みにmoveIT!は米国Progress社の製品です。GUIの操作画面を備えているのもmoveIT!の一つの魅力です。
moveIT!はどんな時に使えるか
moveIT!を使う場面はプログラム開発の過程に於いて一定ではありません。実際の場面毎に分類して紹介します。
ロボットの行動に対するモーションプランニング
昭和から平成に至る時代の常識として、ロボットの動作というものは予めプログラミングしておかなければ成立しないものと考えられていました。
プログラミングされた動きを忠実に再現してこそのロボットとも言えます。それがティーチングという行為でした。
そのロボットが自分で考え自分で判断しながら行動できるように計画するのがモーションプランニングです。
「動作計画技術」と呼ばれることもあります。
ロボットを取り囲む障害物の位置と距離、ロボット自身の関節の角度、目的地までの軌道などロボット工学に基づく精密な解析に裏付けられています。
マニピュレーション
マニピュレーションは直訳すると「手で操作する」ことです。
例えば整形外科の領域では腰痛治療のため関節に加える手技のことをマニピュレーションと呼びますが「手技」という意味では同じです。
ロボット工学でのマニピュレーションとはアームやハンドにより対象物に対し、動かす・組み立てる・塗装する・溶接するなどの動作を加えることです。
移動ロボットのマニピュレーション
一方で対象物を別の位置へ移動させる時はグリップすること及びマニピュレーションを行うマニピュレーター自体の動作を制御することが求められます。
3D環境認識
自律移動するロボットの場合、移動経路を決定するための直進・停止・右又は左へのターンなどの移動戦略の立案が必要となります。
これらの動作を支えるのが3次元環境認識です。
運動学(順運動学・逆運動学)
ロボットの動きを制御する際に基礎となるのは運動学です。運動学は順運動学と逆運動学の2つの要素から成り立っています。
順運動学は回転や直動などのロボットの関節の変位からロボット自体の位置・姿勢を定めるものです。
逆運動学はその反対にロボットの位置・姿勢からロボットの関節の変位を求めます。
制御・ナビゲーション
ロボットを正しい目標の位置に到達させるためにはナビゲーションが重要です。
従来の一般的な手法ではGPSやセンサーなどの情報交信を通じて行うものでした。
電波障害などの事態を想定してこれらを必要としないナビゲーションシステムの開発が進められています。
moveIT!とROSの関係
ロボットを動かすためには動作設定を行うためのティーチングが必須です。
それを扱うのが「Robot Operating System」略して「ROS」と名付けられたシステムです。
米国のウィローガレージ社が開発しOSRFという財団が管理する全世界向けに公開されたオープンソースのソフトウェアです。
ROSはロボット開発のためのツールとライブラリーを搭載していますが、その内の一つがmoveIT!です。
東京オープンソースロボティクス協会はPDF化したマニュアルを公開し、ROSとmoveIT!の連動性や設定ファイルの作り方まで丁寧に教えてくれます。
ROSの基本構造
moveIT!に対する理解を深めるにはROSの構造もしっかり把握しておく必要があります。
例えばマイクロソフトのWindowsが集中管理型のOSを採用しているのに対し、ROSは分散処理型のシステムです。
ロボットに搭載された多数のセンサーから情報を集めながら動作遅延が起きないよう素早く対応する必要があり、分散処理型が適しています。
ロボットアームやセンサーなどに設置されたプロセッサーが個別にプログラムを処理することで、最適な動作選択や迅速な命令発信を実現しています。
ROSの分散処理をサポートするプログラムの構成要素は次の通りです。
ノード
ノードはプログラムという意味です。コンピューターのネットワークが点と線で構成されているとするとノードは点となります。
命令を意味するコマンドと考えて下さい。ロボットを制御するためにノード同士で情報交換を行います。
複数のノードを集約したものがパッケージです。
ROSのライブラリーには汎用性の高いパッケージが多数収納されていて開発をサポートしてくれます。
トピック
トピックはノード同士の情報交換回路のことです。トピックを通じてメッセージと呼ばれる情報を交換し、プログラムの実行につなげています。
マスター
情報交換を行おうとするノード同士や回路であるトピックを識別する機能がマスターです。ノードの管理者として存在しています。
ROSのオープンソース化でこれまでの開発ノウハウ・技術の共有化が世界的に実現し、ロボットシステム開発のスピードを飛躍的に高めました。
ROSはC++やPythonといった開発言語にも対応しています。
moveIT!のチュートリアル
moveIT!を知るためのチュートリアル即ち教材についても見ておきましょう。
まず公式チュートリアルがありますが、これは英語版です。日本語版としては東京オープンソースロボティクス協会が多数公開しています。
「MoveIt Tutorial Documentation」というPDF版のチュートリアルがあります。
動作プログラミング、ロボットシミュレーターの使い方などが詳しく掲載されていて貴重な教材です。
ソフトウェアのインストールなども詳しく書かれています。
このサイトにはmoveIT!の各アルゴリズムに関する解説、moveIT!でロボットアームを動かす方法なども格納されていますので一読をお薦めします。
一方で「Qiita」というサイトがあります。Increments株式会社が運営する情報共有サイトです。
プログラミングに関する情報が豊富に掲載されていてmoveIT!に関してもかなり詳しく説明されていますからとても便利です。
Setup Assistant によるmoveIT!のダウンロード方法
moveIT!はROSというソフトウェアプラットフォームの内部に存在するライブラリーです。
従ってmoveIT!のダウンロードに際してはROSの環境設定から進めることとなります。具体的な手順は以下の通りです。
- ROSのインストール
- ワークスペースの作成
- moveIT!のインストール
- パッケージのダウンロード
- 関連パッケージのダウンロード
- 環境設定ファイルの適用
以上のステップはmoveIT! Setup Assistantを使うことで実行できます。
米国のGitHub Enterpriseが提供する画面からダウンロードして使って下さい。
「roslaunch moveit_setup_assistant setup_assistant.launch」というコマンドで起動します。
一方でROSのインストールですが、ROSには4種類のパッケージがあります。
- 通信のros-indigo-ros-base
- 一般的なライブラリーであるros-indigo-desktop
- シミュレーターのros-indigo-desktop-full
- ros-kinetic-desktop-full
この4つの内「ros-kinetic-desktop-full」をインストールすることが推奨されています。
moveIT!で使えるアルゴリズム
プログラムを作る時、開発言語と共に重要な要素となるのはアルゴリズムです。「問題解決のための数学的計算手順」と訳されたりします。
アルゴリズムの設定を誤れば余分な計算プロセスを経ることとなり、処理時間が無意味に膨張します。
効率的なプログラムを構築し、コンピューターのパフォーマンスを向上させるためにはとても重要なことです。
moveIT!はロボットの動作制御プログラムを開発するためのフレームワークだと説明しました。
例えばロボットを目的地まで移動させようとする場合、どのアルゴリズムを使用するかによって軌道も変わってしまいます。
moveIT!に装備されたいくつかのアルゴリズムについて説明します。
OMPL(Open Motion Planning Library)
moveIT!にプラグインして使用する形のライブラリーがOMPLです。PRMやRRTといったアルゴリズムを使用できます。
PRMは障害物との衝突を回避しながらロボットの経路生成をするアルゴリズムです。
RRTも同じく経路探索のアルゴリズムですが、高速探索を特徴としています。
これらのアルゴリズムは軌道計画に於ける最適化・サンプリング・模倣学習という3つの手法の内、サンプリングベースに属するものです。
干渉のない軌道を導き出す一方で、滑らかでない軌道の平滑化が求められる場合もあります。
CHOMP(Covariant Hamiltonian Optimization for Motion Planning)
CHOMPは動作や障害物との距離を要素とする評価関数を用いて軌道の最適化を行います。
STOMP(Stochastic Trajectory Optimization for Motion Planning)
STOMPもCHOMPと同様の軌道最適化アルゴリズムです。
CHOMPが勾配計算を必要とするのに対してSTOMPは確率的手法に基づくため、勾配計算の必要がありません。
SBPL(Search Based Planning Library)
このライブラリーにはダイクストラ法やA*といったアルゴリズムが内包されています。
ダイクストラ法は最良と思われる選択肢を優先的に探索し計算時間の短縮を図る手法で、A*はその応用編です。
カーナビゲーションや路線情報の検索などにも応用される概念です。
TrajOpt(Trajectory Optimization for Motion Planning)
最適化ベース・サンプリングベース・模倣学習ベースという3つの手法グループが軌道計画にはあることを説明しました。
TrajOptはCHOMPやSTOMPと同じく最適化ベースの一つです。目的関数を定めて滑らかな軌道を求めます。
moveIT!の補助的ファイル
moveIT!の動作計画機能を使うためにはファイルを準備する必要があります。汎用的且つ基本的なファイルですが大切なツールです。
Launchファイル
複数のノードを同時に起動させるツールです。因みにノードはネットワークが点と線で構成されている場合の点に相当する部分です。
プログラムやコマンドと同義と考えて下さい。
configファイル
PGMやOSなどを動かす時の動作・構成・配置などの設定条件を書き込んだファイルです。
ロボットシミュレーター
moveIT!を利用してシミュレーター上でロボットを動かすことができます。その方法を簡単に紹介します。
動かすにはターミナルを2台起動します。まず1台のターミナルを立ち上げて動力学シミュレーターとして機能させます。
シミュレーターは次の4種類を使います。
- NEXTAGE OPEN
- Gazebo
- Baxter Research Robot
- MINAS TRA1
NEXTAGE OPENは日本の川田工業株式会社が開発したヒト型ロボットのROS対応版です。
Gazeboは3Dモデルのバーチャルシミュレータです。
他のシミュレーションモデルの設定変更により動かす方法とモデル全てを自分で定義してシミュレートする方法の2通りのアプローチを保持しています。
Baxter Research Robotは日本バイナリー株式会社が製造した作業用双腕ロボットプラットフォームです。
このロボットは製造業の世界での革命児と評価されました。MINAS TRA1は位置や速度を制御するサーボモータに使用されています。
もう1台のターミナルではmoveIT!を起動します。2台のターミナルを連動させ、動作計画機能を用いてロボットを動かすという仕組みです。
MoveIt! Commanderによるロボット操作
moveIT!にはプログラミングインタフェース機能としてMoveIt! Commanderが装備されています。
この機能を利用するとプログラミング言語からロボットを動かすことができます。プログラミングインタフェースにはPythonとC++があります。
Pythonという言語はロボット以外にも使われている汎用的な言語です。
プログラムを書くと直ちに実行できる言語なので、書いては消しの繰り返しで修正作業が進められる大変便利な言語です。
プログラムの実行には2通りあってコンソールを用いたプログラム入力、テキストファイルの保存実行のいずれかによります。
C++はC言語を原型としたプログラミング言語です。保守性の高いオブジェクト指向の言語です。
ロボットの将来像
1980年代半ばから2000年に至る科学と情報技術の急速な進歩は、ロボット技術の分野にも革命をもたらしました。
物流業界に登場した輸送・運搬用ロボットは倉庫や工場などの現場作業に従事しています。
農作物の収穫、医薬品の生産・調剤作業などにも貢献を果たしています。人感センサーを搭載したペットロボットまで現れました。
2013年時点での国際ロボット連盟の調査によれば世界で15万台以上のロボットが電子機器、化学、機械金属などの分野で稼働しています。
moveIT!が主に使用される場面は経路計算に基づく位置の制御とグリッパーの移動です。
実機として対象となるのは主にロボットマニピュレーターですが、社会全体の中でのロボットの実用化は今後益々加速するものと思われます。
moveIT!のような開発ツールも活躍の場が更に拡大していくことでしょう。