こんにちは。二足歩行ロボット研修中のshota(@マウス、@ヒューマノイド)です。
この研修では、ROBOTIS社のロボットキットMAX-E1を動かし、競技会HACの走破を目指しています。
今回はMAX-E1をR+ Task 3.0アプリで動かします。
前回の記事はこちら
R+ Task 3.0とは
R+ Task 3.0は、ROBOTIS社が公開しているROBOTIS社製ロボットを動かすPCアプリケーションです。
「ロボットの動きのセットを3Dインタフェースで作成できる」Motion Programmingと、
センサやコントローラ信号をもとに「どのMotionを再生するかをプログラミングできる」Task Programmingが特徴です。
今回はMotion Programmingを行います。
また、Task Programmingはこの研修で扱いません。マウスのクリックや、ドラッグ&ドロップで簡単にプログラミングできるのは良いですが、その分、開発の自由度が低くなることが理由です。
Motion Programmingとは

motion_construction 引用元:https://emanual.robotis.com/docs/en/software/rplustask3/motion_programming/#motion-programming
Motion Programmingでは、Key-Frame、Motion Unit、Motion、Motion Groupをという動きのブロックを作成します。
Key-Frameは、ロボットの瞬間的な姿勢です。ロボットの姿勢をカメラで撮影したものがKey-Frame、とイメージしてよいと思います。
そのKey-Frameを並べたものがMotion Unitです。写真を並べて短い動画をつくるイメージです。
Key-Frameを並べるだけでは姿勢が瞬間的に変わってしまいそうですが、Unit作成時にKey-Frame間の動きをきれいにつなげてくれるので、心配無用です。
その後、Motion Unitを並べた、Motion。Motionを集めたMotion Groupを作成します。
まず初めに、Motion Unitを作ります。
Motion Unitを作成する
今回は準備運動(warm up)をテーマにMotionを作成します。
そして、出来上がったものがこちらです。
腕の準備運動もします。
それぞれ、warm_up_kneeとwarm_up_armという名前で作成しています。
Motionを作成する
MotionはMotion Unitを並べたものです。
ただ並べるだけではなく、Unitの再生速度を変更したり、繰り返し再生したりできます。
まずは、warm_up_kneeとwarm_up_armを並べて、屈伸運動の後に腕のストレッチをするMotionを作成します。
これをwarm_upという名前で作成しました。
また、腕の準備運動(warm_up_arm)が、バイバイ~~と手を振る動作に見えたのでbye_byeというMotionも作成しました。
Motionを再生してみると、UnitとUnitのつなぎ目が途切れて、動きが急に変化していることがわかります。
そのため、他のUnitとつなげることを考えながら、Motion Unitを作成したほうがよさそうです。
Motion Groupを作成する
Motion Groupの作成は簡単です。
MAX-E1の制御ユニットであるCM-550に、どのMotionを書き込みたいかを選び、グループにするだけです。
作成したwarm_upとbye_byeをまとめたfirst_motion_groupというグループを作成し、CM-550に書き込みます。
ここで注目するのは、各Motionの隣にある数字です。warm_upには1が、bye_byeには2が設定されています。
これがMotionの再生番号になります。
Motionを再生するときは、この番号を指定します。
Dynamixel Wizard 2.0を使ってMotionを再生する
それではMotionを再生してみます。
Motionを再生するには、CM-550に指令を送らなければなりません。
今回はDyanmixel Wizard 2.0を使用して、PCからCM-500に指令を送信します。
Dynamixel Wizard 2.0のPacket送信画面を開きます。
通信ポート(COM5)とボーレート(57600)を設定してポートをOpenします。
CM-550のControl Tableより、
Address 66のMotion Index Numberに再生したいMotionの番号を書き込むと、Motionを再生できます。
また、CM-550自体のIDは200です(Address 7参照)。
ということで、ID 200のAddress 66に1を書き込んでみます。
1番のMotionであるwarm_upが再生されました。
つづいてMotionの2番を書きこんだ結果がこちらです。
作った通りに動いてくれました。
まとめ
Motionの作り方がわかったので、前進歩行、回転、ものをつかむ、などのMotionを作っていけば、競技会に向けて準備できそうです。
が、しかし、1からMotionを作るのは大変です。。。。
そこで、Motionを作るのは一旦保留し、あらかじめ用意されているサンプルを使うことにします。
まずは既存のMotionを組み合わせて競技会に参加することを目指します。
(マイクロマウス研修でも、1年目はPi:Coキットを使い、2年から自作マウスを作成してましたね。)
ということで、次回はDynamixel SDKを使って、Linux PCからMAX-E1を動かしてみます。