前回は、TOMOT-Aro1を接続して動かすことができましたが、十分に理解ができているとは言い難い状態でした。
これから2回に渡って、実際にTOMOT-Aro1を動かしながらプログラミングの基礎を勉強していきたいと思います。
私だけでは心もとないので、今回からメンターとして指導してくださる、アロン先生と一緒にすすめて参りたいと思います。先生よろしくお願いします。
こんにちは。一緒に楽しく学びながら進めていこうね。難しく考えるとつまずいてしまうので、楽しくが基本だよ。ただし、基本的なことは覚えてほしい。そこは丁寧に説明するから安心してね。
はい、わかりました!やさしそうな先生で安心しました。先生、最初に知っておきたいのですが、TOMOT-Aro1でいったいどんなことができるのですか?
そうだね。まずは、簡単に概要を説明しておこう。
TOMOT-Aro1は小さいロボットだけど、ラズベリーパイ(Raspberry Pi)という超小型コンピューターを内蔵しているんだ。そのコンピューター内でプログラミングすることで、ロボットを制御することができるようになるというわけ。
なるほど、手足のついたパソコンという感じですかね。
まさに、その通り。さらに色んなセンサーや機能がついているから、それらのセンサーを組み合わせることで、様々な動きが実現できるようになるってこと。
どんなセンサーが付いているのですか?
主にはそうだね。まずは、簡単に概要を説明しておこう。TOMOT-Aro1は小さいロボットだけど、ラズベリーパイ(Raspberry Pi)という超小型コンピューターを内蔵しているんだ。そのコンピューター内でプログラミングすることで、ロボットを制御することができるようになるというわけ。
- カメラビュー(カメラ映像の取り込み)
- 3軸加速度センサー(ロボットの傾きを検出)
- 超音波距離センサー(対象物までの距離を測る)
- 発話プログラム(テキストの読み上げ)
の4つだね。
例えば、何かが近くに来たら所定の動作をさせる、といったようなコントロールができるようになる。
人間でいう五感が備わっているんですね。色んなことができそうな気がしてきました。
よし、じゃあ早速進めていこうか。
よろしくお願いします。
TOMOT-Aro1のプログラミングはROS(ロス)で行うよ。
ROSは前回に調べてみました。ロボット用のOSなんですよね。
そう、Robot Operating System(ロボットオペレーティングシステム)の略でROS。
開発ツールやライブラリが含まれたオープンソースソフトウェアで、これからのロボット制御開発の共通言語になりつつあるんだ。これが使えるようになれば、TOMOT-Aro1だけじゃなくて、世界中のあらゆるロボットの制御開発に応用できるようになるよ。
ROSを理解しておけば、可能性が広がりそうですね。がんばります。
まずはデモプログラムを実行したいので「ROSCORE」を起動しよう。
「ROSCORE」とは、ノード間で通信できるようにするためのプログラムやノードの集合体のことだね。「ノード」とは目的毎の最小のプロセスで、「ROSCORE」を立ち上げておかねば、ノード間で通信ができないんだ。ターミナルに[roscore]とコマンドを入れて実行してみよう。
先生できました。「started core service」と表示されました。とっても簡単です。
いま行ったターミナルにコマンドを入力して実行するという簡単な動作が、全てのプログラミングの基本になる。コンピューターは指示されるのを待っているから、細かく指示して動作させていかねばならないんだ。今では電化製品もボタンひとつで動くけど、これらも一つひとつのコマンドを組み合わせて、複雑な動作を制御しているってことだよ。
誰かがプログラムを書いてくれていて、それをボタンで実行しているということなんですね。なんともありがたいです。それをできるようになりたいです。
もちろんできるようになる。そのためにはきちんと理解することが大事だよ。
わかりました。
次に各種センサーを起動してみよう。
新しいターミナルを立ち上げてもらえるかな。
なぜ新しいターミナルを開く必要があるんでしょうか?
コンピューターの場合、いくつもの処理を平行で処理していけるわけなんだけど、
それぞれのターミナルでそれぞれの処理を同時に行っていくと考えてほしい。
なるほど、各担当者が担うという感じですかね。
覚えやすいように理解できていればOK。
それでは、まずはカメラの起動からいこう。ターミナルで[roslaunch raspicam_node camerav2_1280×960.launch]を実行してみてごらん。
「Video capture started」と表示されました。コンピュータと対話している感じがしてきます。
「.launch」は複数のノードを一斉に起動できるようにしたファイルで、この場合は所定のデモ動作をするために用意されているファイルだよ。最初に「roslaunch」と入れているのは、launchファイルを起動してねっていう指示だね。間にある「raspicam_node」は固有のパッケージ名で、その中にあるlaunchファイルを指定しているという意味。
コマンド一つひとつの意味を理解していくと、頭の中にスーッと入っていきますね。
よし。新しいターミナルで今度は[rqt_image_view]を実行してみてくれるかな。これはROSの標準で用意されているコマンドで、これによってカメラビューが起動してモニタリングできるようになるよ。そのまま覚えておこう。
映像が写りました。私が写ってます。恥ずかしい。
どんどん行こう。
今度は3軸加速度センサーだ。新しくターミナルを起動して、[rosrun ndc_hn01 publish_acceleration_sensor.py]を実行しよう。
また新しいコマンドが出てきましたけど、どんな意味があるのでしょうか?
きちんと説明しておこう。「rosrun」も先ほどの「roslaunch」と同じく、ノードを起動するコマンドなんだ。今回は「.launch」ではなく「.py」というPythonのファイルを開くので「rosrun」を使ってるというわけ。つまり、「.py」では「rosrun」を使い、「.launch」では「roslaunch」と使い分けており、ノードの実行は「rosrun」か「roslaunch」のどちらかになるよ。
なるほど、わかりやすい違いがあるんですね。
ちなみに、私、「Python」は知ってますよ。特にAIの分野で活用されているプログラム言語ですよね。
そのとおり。InstagramやYouTubeなどの世界的なWebアプリケーションも「Python」によって開発されていて、ロボット開発においても重要な言語になっているね。TOMOT-Aro1の開発にも「Python」は欠かすことができないから、しっかりと習得していこう。
「ROS」に「Python」と、今後の開発のスタンダードになっていくものが学べるいうことですね。わくわくします。
うわっ、大変です。凄いスピードで文字や数字が流れています、、、
驚かなくても大丈夫。これはセンサーで取得しているデータだよ。
これだと何かわからないので、新しいターミナルで[rqt_plot]を実行してごらん。
はい。各センサーの値がグラフで表示されてとても分かりやすくなりました。
このグラフが先ほどのセンサーで取得しているデータなんですか?
そう、このグラフは取得したセンサーのデータをグラフ化したものだよ。本体を動かすとセンサーの数値が変わるから、動作しているのが確認できるね。このように取得したデータは全て数値で認識されているんだ。モーションキャプチャーのときも、角度を細かく数値でコントロールしていくことになるよ。
全て数値で管理していくんですね。最初はとっつきにくい印象を受けましたが、むしろ明確になる気がします。
数値は絶対だからね。曖昧な指示ではロボットは制御できないんだ。
では新たなターミナルを起動し、[rosrun ndc_hn01 publish_ultrasonic_sensor.py]を実行しよう。こちらは超音波距離センサーの値を表示するコマンドだよ。
トモ)実行しました。今度は、先ほどよりはゆっくりのスピードですが距離の値が表示されました。「ndc_hn01」にある「publish_ultrasonic_sensor.py」というファイルを「rosrun」で実行させるってことですね。
最初はターミナルが無機質な文字列だと感じていましたが、何となくコマンドラインの意味合いがわかってきた気がします。
素晴らしい進歩だよ。最初の関門は突破できたんじゃないかな。プログラムも言語と言われるように、日本語や英語と同じで、意味がわかってくれば、コミュニケーションが取れるということだね。
なるほど!目からウロコです。
では今回はここまでにしよう。次回は動くデモを活用したり、ティーチングでロボットを学習させていこうか。
[Ctrl]+[C]を押して必要のないデモプログラムは終了しておこう。
本日はありがとうございました。細かく解説をしていただけることで、理解しながら進めることができました。
次回もよろしくお願いします。