皆さん,こんにちは
今回,TORKのROSチュートリアルを使って,初めてロボットのプログラムの勉強をしたので,そのときに苦労した点を中心に感想を書いていきたいと思っています.
私のプログラミングレベルはDOSやBASICを少し知っている程度,WindowsはOSとして利用するだけで,Windowsのプログラムを書いたこともありません.もちろんLINUXも最近のプログラム言語であるPythonは全く知りません.個人的にはかなりハードルが高いのですが挑戦してみたいと思います.
ここではROSチュートリアルとして,TORKのMoveIt! Tutorial Documentation Release0.0.7を使っていきます.ちなみに日本語ですので大変助かります.
1章(CHAPTER ONE)
とりあえずサラッと読んで次へ
2章(CHAPTER TWO)
あれ,シミュレータ上のロボット? シミュレータはロボットのシミュレータじゃないのNEXTAGE OPEN,Baxter・・・・なんだなんだ? その下,2.1にはROSのシミュレータ,Hrpsys(RTM)シミュレータ??? 全然わからない???
これはすぐには理解できなかったので,実際はこのチュートリアル通りに淡々と進め,ぼんやりと分かってきた時点で整理してみると下記のようなことでした.
最初に出てきたNEXTAGE OPEN,Baxter・・・・というのはシミュレータ上で動作するロボットの名前でした.具体的なイメージは以下の画面キャプチャを見てください.このチュートリアルで使うシミュレータ上のロボットはこの4種です.
NEXTAGE OPEN | Baxter Research Robot | MINAS TRA1 | KHI duaro |
|
|||
2.3.2項 | 2.3.3項 | 2.3.4項 | 2.3.5項 |
初めから整理した形で進めると2章の理解が早いと思いました.
更にこれらのロボットが動作するベースとなるシミュレータはGUIでロボットの動作を計画(指示)するMoveIt!というものと,その計画に沿って動作するロボットの土台となる物理シミュレータであるGazeboというものがあるということです.
これらの関係を理解しておくとチュートリアルで何をしようとしてその手順を踏んでいるのか理解しやすくなります.
私はこの関係が理解できないまま進めてしまったので,進めている割には何をしているのか理解できずまごついてしまいました.
2.2 ソフトウェアのインストール
まずUbuntuのインストールから始めました.最初はWindows10にOracleのVirtual Boxをインストールし,VMの中にUbuntuをインストールしました.インストールは無事できたのですが,その後トラブル続出で,途中であきらめてしまいました.やはり慣れていない人は素直にネイティブでインストールすることが必須と思いました.
ちなみに,Ubuntuは16.04LTEの英語版を使用しました.日本語版だとディレクトリの名称に日本語が入り,うまく動かないことがあるので注意です.英語版をインストール後,日本語が使えるようにMozcをインストールしました.また,ROSのバージョンはKineticです.本チュートリアルのROS Kinetic版を行う上では Ubuntu16.04LTEとの組合わせが必須です.前のバージョンであるIndigoはUbuntu 14.04LTEとの組み合わせで検証されているため,問題が発生しても初心者では解決ができません.私自身,このチュートリアルのテキストを読む前はこの組み合わせを把握していなかったので,16.04にIndigoを入れてしまい,訳が分からなくなってしまいました.要注意です.
私は10年程前からUbuntuを試用してきましたが,基本GUIベースでしか使っていませんでした.今回はターミナル上のコマンドベースです.昔MS-DOSのコマンドを使ってみたことはありましたが,Ubuntuでは初めてです.これも勉強しながら進めていこうと思います.
さていよいよROS関連ソフトウェアのインストールです.
ソフトウェアは3ページ下部に書いてあるROS,チュートリアルパッケージ,ロボットソフトウェア3種です.
まず,ROSのインストールです.
現時点ではチュートリアルも修正されているかもしれませんが,掲載されている内容はキー情報が古いため,下記URLに記載されている手順でインストールを行いました.これはスムーズにインストールできました.
http://wiki.ros.org/ja/kinetic/Installation/Ubuntu
次にチュートリアルのインストールです.これも現時点で apt-getで取ってこれないとのことでGithubからdebianパッケージをダウンロードしてインストールすることが必要でした.具体的には下記場所から ros-kinetic-tork-moveit-tutorial_0.0.7-oxenial_amd64.deb をダウンロードし,これを下記のようなコマンドでインストールしました.
ダウンロード先:https://github.com/tork-a/tork_moveit_tutorial/releases/tag/0.0.7
インストール: $sudo apt-get install -f ./ os-kinetic-tork-moveit-tutorial_0.0.7-0xenial_amd64.deb
NEXTAGE OPEN,MINAS TRA1,KHI duaroのロボットソフトウェアはチュートリアル通り行っていくと問題なくインストールできました.
Ubuntuをコマンドベースで使っている方には初歩の初歩ですが,私はこの過程で,↑,↓キーを押すことで,前後に実行したコマンド履歴から選んで,再実行できることや,コマンド入力途中でTabキーを使うことにより,オートフィルのような機能があることを知りました.MS-DOSの時代のコマンドに比べるとすごい進化ですね.
さて全てインストールできたので,チュートリアルに沿って,実行してみました.実際にMoveIt! GUIで動作目標の位置を設定(InteractiveMakerを動かして設定)し,Plan and Execute ボタンを押すと,Gazeboシミュレータ上のロボットがその通りに動きました.ちょっと感動です.
MoveItもGazeboも表示画面のメニューを見ると機能が豊富そうなので,もう少し慣れてきたら,どんなことができるのか確認をしてみたいと思っています.
3章(CHAPTER THREE) プログラムでロボットを動かす.
ようやく,ロボットを動かす環境が整い,実際にシミュレータ上で,NEXTAGE OPENロボットをコマンドで動かしてみるところまでたどり着きました.
ワクワクしますが,ここでプログラム言語のPythonを使う必要が出てきました.この言語は全く初めてなのでこれも勉強しながらやっていこうと思います.PythonはCのようにコンパイルしたりすることがなく,1行ずつ実行する環境があるとわかり少し安心しました.また,Pythonの開発環境はROSをインストールしたときに同時にインストールされているとのことなので,そのまま進められそうです.
Pythonに関しては7章(CHAPTER SEVEN)にチュートリアルが書いてありますので,時々参照しながら行っています.
3章では基本的に1行づつの実行で確認を進めていけます.Python を1行ずつ実行する環境は tork_moveit_tutorial demo.py を実行することで可能になります.最初の行の冒頭 In[1]:は何を意味するのか分からなくて,最初はこのチュートリアル通り1から始まるのですが,1行実行すると2になってしまいます.チュートリアルでは2行目実行後でも1になっている場合があるので,何とか戻そうとしましたが戻りません.これも聞いたところ,1行実行する度に増えていく仕組みになっているので戻すことはできないし,実行上の意味は無いので気にする必要はないとのことでした.聞けば「そうですか」なのですが,本当に初めはこんなつまらないこともわかりません.トホホです.
それ以上に難しいのが,位置や姿勢を示す用語の意味です.ロール,ピッチ,ヨーについては下記のページを参照させていただきました.
https://watako-lab.com/2019/01/23/roll_pitch_yaw/
クォータニオンについては下記のページを参照させていただきました.
https://qiita.com/drken/items/0639cf34cce14e8d58a5
一通り読みましたが,ベースとなる知識がないので,十分には理解できませんでした.ここで立ち止まってもしょうがないので,とりあえずそういう定義の方法があるということだけ記憶し,次へ進むことにしました.
4章(CHAPTER FOUR) 発展的なロボットプログラミング
いよいよプログラミングのスタートです.チュートリアルではいきなりプログラムの実行のコマンドが書いてありますが,3章終了時にすべてのターミナルを閉じていた私には「あれ?いきなりコマンドを実行するの??」と,具体的にどうしたらよいかわかりませんでした.聞いたところ,この章で使用するロボットはNEXTAGE OPENとのことなので,まずコマンドを実行する前に3.2.1項に書いてあるようにまず一つ目のターミナルでNEXTAGE OPENを起動し,二つ目のターミナルでMoveIt!を起動した後,もう一つターミナル(ターミナル3)を開いて,そこでプログラムファイルを実行していく必要があるとのことでした.
ここまで準備ができれば,チュートリアルのプログラムファイルを“rosrun ファイル名” で実行していけば動作を確認できますが,問題はそのプログラムファイルの中身ですね.
4.1.1項の nextage_moveit_tutorial_poses_ifqyn.py の下にいきなり最初のプログラムファイルの中身が書いてあります.これがPythonで書かれたプログラムです.
Pythonは細かな文法はBASIC等と異なるものの,大きな考え方は共通するものがあり,それほど違和感はありませんでした.ただ,クラスという考え方は新しいことでした.それも7.3.3項を読んでみると,なんとなくわかったような気になって,そのまま進めることにしました.
4.3.2項 まではスムーズにプログラムを理解し,実行できたのですが,4.3.3項のtfでつまずいてしまいました.最初からtf=Transform Frameと理解しておけばよかったのですが,単なる記号として読み進めたため,なかなか理解できなかったのです.これまでは,単純に動作の目標位置を設定し,実行するとそこへ動くという内容だったのですが,ここで時間の概念が入ってきたことになかなか気が付かなかったのです.
考えてみれば,ロボットは逐一動いていて,時間ごとにどんどん位置や姿勢が変わっていくので,時間の概念を入れないと,自動的に判断して動いていくようなロボットのプログラムは作れないのは当然でした.そう思って,この4.3.3項以降を読むとすんなりと理解できました.
つぎに思ったことは4.3.5項の障害物の設定です.障害物は box_poseで設定すれば,MoveIt!が自動的に動作計画を作りますということなのですが,実際にはどういうステップで障害物を避けながら動いていくのか知りたいと思いました.この辺りは,これから実際にプログラムを書いて試してみて,慣れてきたら,勉強してみようかと思います.
以上,理解がまだまだ不十分ですが,チュートリアルを終えた感想をまとめます.
1.本チュートリアルでROSを使ったロボットの基本的な動作は解説されているので,これらの動作の組み合わせやセンサーからのフィードバックで目標姿勢を変えながら,繰り返し動作をさせていけば,物を掴んで移動させたり,両腕を使って,何かを組み立てさせたりすることが比較的簡単にできそうだという感触は掴むことができました.
2.しかし,チュートリアルを終えても,ROS=通信機構+ツール+ライブラリ群+コミュニティという定義に対し,ROSはこれというような概念がつかめていないことが反省です.というのは,①具体的に通信機能,ツールにはこのチュートリアルのどの部分が該当しているのか,ライブラリ群は多分膨大にあるのだとは思いますが,例としてどんなものがあるのか,ここまではROSでカバー,ここは自分でプログラムを作らないとダメとか,ROSの全貌と境界が良く見えないことです.それと②私個人の問題ですが,ROSは分散システムであり,従来自分が接してきたシリアルなプログラムとは取り扱う概念が異なるため,分散システムの同期,非同期等の考え方等,もう少し勉強しないといけないと感じました.
3.ここまでのチュートリアルでMoveIt!等の便利に使えるツールが存在すること等からロボットの動きを比較的簡単にシミュレーションしたりすることができるということは面白いと思いました.実際のプログラムを書いて実行してみたいと感じています.これから,プログラムを書く上での細かなルールや手順,作成上のツール等をもっと勉強してみたいと思います.これは,TORKのROSセミナー初級編が参考になるのではと思っています.また,最新版のMoveIt! Tutorial Documentation Release0.0.10では新しく「独自プログラムの実行」という章が加筆され,この辺を重点的に解説されているので,今後読み進めて,簡単なプログラムを書けるようになりたいと思っています.
4.CommandベースのUbuntuの操作やPythonを初体験したのですが,昔のMS-DOSのCommand操作やBasicの延長で,当初想定していたよりは取り組みやすかったと思っています.
以上,本当の初心者がチュートリアルをやってみて単純に思ったことを書いてみました.あまりにも初心者でお叱りを受けそうなところも多々ありますが,これからROSを使ってみたい人の参考にしていただければ幸いです.