AIBO をつかってロボットプログラミングを学ぼう

2009 年度 知能情報システム創成 1 (T1)
AIBO をつかってロボットプログラミングを学ぼう
Ver. 1.62(2009.5.11)
1. テーマの目標
犬型ペットロボット SONY AIBO™を動かす簡単なプログラムを作成し、センサの読み取りとアクションの組み合わ
せによるロボットプログラミングの基礎を体得する。
2. スケジュール
第 1、2週
テ ー マの 説 明 お よび AIBO を 動 か して み よう ∼ プ ログラミング基 礎 編 ∼ (CC301
教室)
AIBO の仕組みと基本的なプログラミングの講義の後、グループに分かれて実際に AIBO を動作させる。
パソコンから AIBO に簡単な動作コマンドを送って動作させ、どのような機能が AIBO にあるのかを探してみる。
第 3 週までに次の 2 課題から1つ選択し、どのように AIBO を動作させるかアルゴリズムを検討しておく。
1) ゴール地点にたどりつくように AIBO を制御する。
2) センサ入力に反応して、複数の動作を選択的に行うエンタテインメント型 AIBO を作る。
第 3∼ 5週
AIBO に 機 能 を実 装 す る ∼ プログラミング実 践 編 ∼ (CC301 教 室 )
選択した課題を R-CODE 言語を用いてプログラミングする。グループのメンバで役割分担を決め、効率的に作
業を行うこと。成果発表会、レポートでは各自が担当した箇所を述べること。
第 6、7週
成 果 発 表 会 (CC101 教 室 )
グループごとに得られた成果をそれぞれ 5 分程度発表する。また、各グループの作成したAIBOの動作を全員
で評価しあう。ただし、この学生同士による評価結果は直接個人の成績には反映しないものとする。
クラス
ガイダン
ス
第1週
第2週
第3週
第4週
第5週
第6週
第7週
D1,D2
4/13
4/20
4/27
5/11
5/18
5/25
5/30(土)
6/1
D3,D4
4/13
6/8
6/15
6/22
6/29
7/6
7/13
7/20(祝)
3. フォローアップ
下記時間に CC301 教 室 の 共 通 利 用 計 算 機 を開 放 す る。AIBOを利用した課題への取り組みは、以下の日
のみ利用することができるので注意すること。
5/18, 5/25, 6/29, 7/6 (月)
16:20∼17:50
4. 評 価
個人点
出席 20%、 レポート 30%
グループ点
プログラム 30%、 発表 20%
5. サポートページ
授業にあたって必要な情報や資料、連絡事項等を次のURLに掲載するので、常に確認すること。
http://sys.ci.ritsumei.ac.jp/aibo/
1
6. AIBO の機構
センサ
CMOSカメラ、距離センサ、各部タッチセンサを搭載。
モータ
各関節部をモータとギアにより駆動。
関節角度センサも搭載
LED
頭部と背中にLEDによる各種表示が可能。
メモリスティック
AIBOを動作させるプログラムやデータを格納する。
腹部にスロットを搭載。
無 線 LAN
802.11b、TCP/IP によるPCからの遠隔操作、
プログラム転送・実行が可能。
充 電 ステーション
本体内のバッテリーを充電するためのステーション。
ロッカー内に収納。
7. プログラミング環境
7.1 R-CODE と Open-R
AIBO には既存の動作プログラムの他に、センサ情報を元に独自の行動をさせるためのプログラムを開発する環
境が用意されている。Open-R ™ というライブラリを使うとC++言語(C言語をオブジェクト指向言語に拡張したも
の)によって詳細な制御が可能となっているが、使いこなすにはプログラミングに関する知識を必要とし、短期間で
は習熟するのは困難である。
そこで今回の授業では R-CODE™というスクリプト型言語を使ってAIBOを動かす。R-CODE はC言語やBASI
C言語にやや似た言語で、初心者でも簡単にAIBOを動作させることができる。またいくつかの基本的な行動コマ
ンドが既に用意されており、1コマンドで立ち上がらせたり歩かせたりできる。
7.2 操 作 用 ソフトウェア
今回は無線LANを使ってPCからAIBOを制御する。AIBOで無線LANを使用するには、「AIBO WLAN マ
ネ ー ジ ャ 」という付属ソフトを使ってAIBOの設定を行う。また「に ゃ ー こ む 」というフリーソフトを使用して、無線LA
N経由でAIBOを制御したり、プログラムを送り込んで実行する。詳細は次節以降で説明する。
2
8. AIBO の基本操作
8.1
実 験 機 材 一 式 の 取 り出 し
AIBO 本 体 を は じ め と す る 実 験 機 材 一 式 は
CC301 のロッカー(写真)に保管してある。AIBO に
は 1∼ 50 までの 番 号 が付いている。各 グル ー プ
は割り当てられた番号のAIBOを常に使うこと。
授業前には、ロッカーの鍵を指導教員、もしくは TA
ロッカー
に開錠してもらった後、次のものを持ち出す。
・
AIBO(写真)
・
ピンクボール(写真)
・
フェルトマット(写真)
・
メモリステ ィック(AIBO に 内 蔵 )
・
アイボーン(骨型のプラスティックアイテム
ピンクボール
フェルトマッ
ト
(写真)、必要に応じて)
これ らの付 属 品 に は す べ て AIBO と同 じ番 号 が
メモリスティッ
ク
付してあるので、他の番号のものと取り替えな
い こ と 。 AIBO は大変衝撃に弱いので、絶 対 に
落 とさないよう慎 重 に 取 り扱 うこと!
アイボー
AIBOは必 ず 床 に 敷 い た フ ェ ル ト マ ッ ト の 上
ン
で 動 作 さ せ る 。 机 の 上 で 動 作 さ せ て は い け な い 。 床で動作させる場合、A I B O を 踏 み つ け る こ と の な い よ う 、
十 分 に注 意 す る。
8.2
AIBO の起 動
1.
グループの代表 1 名が教室の端末に Windows でログインする。
2.
AIBO のお腹の蓋を開けて(蓋 の 爪 を 折 らな い よ うに 慎 重 に 開 け 閉 め す る こと! )、ピンク色のメモリスティ
ックが入っていることを確認する。(写真)
3.
AIBO を静かに床に置き(ひっくりかえした状態にはしないこと)、首の付け根にあるメインスイッチを押す(緑の
LED が点灯)。(写真)
4.
しばらく待つと AIBO が各関節を動かし始め(自己点検モード)、やがて体を伏せた状態で止まる。(写真)
蓋の爪
メ モ リ ス テ ィ ック
メインスイッチ
LED(緑
)
3
9. AIBO を制御する
9.1 にゃー こむ に よる接 続 と操 作
1. デスクトップにある「NyERCom」のアイコンをクリックして起動。(アイコン写真)
2. IP アドレス欄に、メモした IP アドレスを入力する。
3. 「接続して気をつけ」ボタン(接続した後に立ちあがる、⑯のボタン)もしくは「接続し
てお座り」ボタン(接続した後に座る、⑰のボタン)を押す。(写真)
にゃーこむ
4. にゃーこむウィンドウの左半面①部分に
[R-CODE ver.2.0 (2004/03/09)
]
といった文字が出力され、右側の ENERGY インジケータ(バッテリ残量、③)が表示されれば接続完了(写真)。
AIBO は押したボタンによってそれぞれ立ち上がっているか、座っている状態になっている。
5. 試しに基本アクションを行う指令を AIBO に出してみる。にゃーこむウィンドウの右下にある入力領域⑱部分に
次のように打ち込み、Enter キーを押すか画面右下の送信ボタン⑮を押すと AIBO が伏せる。
「PLAY ACTION LIE」
他に、
「PLAY ACTION STAND」 → 立ち上がる
「PLAY ACTION SIT」 → 座る
「PLAY ACTION WALK 45 100」 → 正面から 45 度左に向かって 100mm 歩く
「PLAY ACTION STOP_WALK」 → 歩くのをやめる
などがあるので動作するかどうか試してみよ。
6.
プログラムやコマンドの動作を止めるには、⑱の欄に「STOP」と打ち込んで、送信ボタンを押す。
IP ア ド レ ス 欄
⑯
⑰
⑱
⑮
にゃーこむの詳細説明は http://www.april.ne.jp/tech/aibo/windows.html を参照
4
9.2 緊 急 停 止
AIBO が動き続けて障害物にぶつかると危険なので、危 な い
と思ったら早めに、にゃーこむウィンドウの右側にある「緊
無 線 LAN ス イ ッ チ
急 停 止 」 ボ タ ン ⑬ を 押 す 。 それでも止らなければ、AIBO の体
を支えながら( 絶 対 に 腕 や 足 を 持 た な い こ と ! ) 、首の根本の
メインスイッチを押す。押 す と 関 節 の テ ン シ ョ ン が 急 に 緩 む の
で 取 り 落 と さ な い よ う に 注 意 す る 。 通常はしばらく待つと電源
が切れるが、1分待っても切れないときは次の手順で緊急停止
する。
1.
お腹の蓋をあける
2.
無線 LAN のスイッチ(写真)を一度切り、すぐ入れる。
3.
「ピロリ」という音がして、電源が切れる。
4.
しばらく待って、再度のメインスイッチを入れる。
5.
それ でも切 れ な い 場 合 は 、TA、ESの 学 生 、もしくはスタッフに連 絡 す ること。
9.3 AIBOの停 止
AIBO の首の付け根にあるメインスイッチを押すとAIBOが停止する。押 す と 関 節 の テ ン シ ョ ン が 急 に 緩 む の
で取 り落 とさない ように 注 意 す る。もし停止しないときは、上述の緊急停止の手順を行う。
9.4 AIBO の充 電 と片 付 け
AIBO はバッテリーで駆動されるため、次の授業時までに十分充電しておかないと操作不可能となる。充電ステ
ーションはCC301教室内のAIBO格納ロッカー内に設置してあるので、AIBOの番号と一致するステーションに座
らせて充電する(写真)。
きちんと座らせないと充電されないので、ス テ ー シ ョ ン の 液 晶 画 面 が 点 灯 す る こ と を 必 ず 確 認 す る こ と !
(写 真 )。この 他 、ピンクボー ル 、アイボー ン、フェル トマットは元 の場 所 に確 実 に格 納 す ること!
5
10 R-CODE によるプログラミング
10.1 にゃー こむ に よるプ ログラム の 作 成
にゃーこむを使うと、R-CODE 言語による AIBO の行動プログラムを編集・保存したり、AIBO に送り込んで実行さ
せることが簡単にできる。
1. にゃーこむを起動して、AIBO に接続する(9.1 を参照)。
2. にゃーこむウィンドウの右下にある EDIT&RECORDER ボタン(にゃーこむ
画面の⑭ボタン)を押し、プログラムエディタを起動する(右写真)。
3. 白紙のウィンドウ中に R-CODE によるプログラムを書いていく。もしくはウェ
ブブラウザやほかのエディタの画面からサンプルコードをコピーして張り付
けることもできる。
4. プログラムをファイルに保存するには、「保存」もしくは「別名保存」ボタン
でファイル名を指定して保存する。
5. ファイル中のプログラムを読み込むには、「開く」ボタンを押して、ファイル
名を指定する。
6. 作成したもしくは読み込んだプログラムを実行するには、まず「送信」ボタ
ンを押し、プログラムをパソコンから AIBO に転送する。
7. 転送できたら、次に「再生」ボタンを押すと、実行が始まる。
8. 動作がおかしくなったり、AIBOがものにぶつかりそうになった場合には、
にゃーこむウィンドウの右端にある「緊急停止」ボタンを押して停止させる。
はじめはサンプルプログラムを貼り付けて実行してみるとよい。サンプルを少し改造した後、「送信」「再生」し、
AIBO の動作がどのように変化するかを確認しながら、プログラムを進める。作 成 中 の プ ロ グ ラ ム は 、 各 自 が
所 有 す る USB メモ リな どに 保 存 す ること。Windows 環 境 のデ スクトップに保 存 しても次 回 ログイン時 に
は消 去 され ているの で 注 意 す ること。
10.2 R-CODE の 基 本
R-CODE はC言語のように、変数の代入読み取り、IF/ENDIF の条件分岐、DO/LOOP,WHILE/WEND のような
繰り返しが利用できる。コ マ ン ド は 大 文 字 の み で 表 記 する。変数名は大文字と小文字で表記でき、整数のみ扱
える。変数は宣言する必要がなく、プログラム中でいきなり使用することができる。
例1)
SET value = 1 // value という変数に 1 を代入する(変数 value を宣言する必要はない)
IF value1 = 0 THEN
// もし value の値が0なら ENDIF までのコマンドを実行する
// 制御用ソフトのウィンドウに文字を表示(C言語の printf 文に相当する)
PRINT "value2 の値が%d です" value2
ENDIF
コメント文(プログラムを読みやすくするメモで実行されることはない)は"//"の後ろに続けて記述することができる。
コマンド、変数の間は必ず空白、もしくはコロン(:)で区切る必要がある。
AIBO各部のモータの角度や、センサの状態(ボタンが押されているか、ピンクボールが視野にあるかどうか等)を
知るためにあらかじめ用意されている変数を参照することができる。センサの状態によって、AIBOの行動コマンド
(歩け、立ち上がれなど)を発行することで、AIBOに様々な動作をさせることができる。
6
例2)
SET Head_ON 0
// 頭タッチセンサを初期化
DO
// 繰り返し開始
IF Head_ON = 1 THEN
// もし頭タッチセンサが押されていたら
PLAY ACTION WALK 0 200 // 正面(0 度)にむかって 200mm 前進する
// 頭タッチセンサを再度初期化(勝手に0には戻らないので)
SET Head_ON 0
ENDIF
// DO からここまでを無条件に繰り返す
LOOP
詳しい文法や使用できる演算命令は、R-CODE マニュアルを参照。
10.3 R-CODE で 使 え るAIBO動 作 コマンド
R-CODE には、ACTION 系と MWCID 系の 2 種類の動作コマンドがある。
1.
ACTION 系 コマンド
立つ、座る、歩く、首を振るなどの動作を実行する。引数で、歩く距離や方向、角度などを指定できる。
[書式] PLAY ACTION (コマンド名) (引数1)
(引数n)
例3)
PLAY ACTION MOVE_HEAD 45 –10
// 首を右 45 度、下 10 度に向ける
PLAY ACTION WALK 0 200
// 正面(0 度)にむかって 200mm 前進する
PLAY ACTION SIT
// 座る
PLAY ACTION STAND
// 立ち上がる
2.
MWCID 系 コマンド
頭部あるいは背中の LED を光らせる、尻尾を振る、踊る、などの特殊動作を実行する。コマンドは 4 桁の整数で
表されるコマンドIDで識別される。 コマンドによっては sit(座っている状態), stand(立っている状態)など、特定の
状態でしか機能しないものがある(状態が違う場合は無視される)。また、一回だけ動作を実行して終わるものと、
停止コマンドを送るまで繰り返し続けるもの(infinity)がある。詳細は別紙資料のMWCIDコマンド一覧を参照。い
ろいろなコマンドIDをにゃーこむから打ち込んで、どんな動作をするかを確かめてみると面白い。
[書式] PLAY MWCID (コマンドID)
例4)
PLAY MWCID 2991
// yes の意思表示(緑の光)を頭部LEDでおこなう。
PLAY MWCID 3182
// no の意思表示(赤の光)を頭部LEDでおこなう。
PLAY MWCID 1426
// 立ち上がった状態で体をゆすりつづける(止めるまでつづく)
R-CODE の動作コマンドは、コ マ ン ド が 完 全 に 終 了 す る 前 に 次 の 行 の 実 行 に 移 る ( C 言 語 と は こ こ が 大 き く
異 な る ! )。 も し 直 前 の コ マ ン ド の 終 了 を 待 っ て 次 の コ マ ン ド を 実 行 し た い 場 合 は 、 WAIT コ マ ン ド を 入 れ
る。
例5)
PLAY ACTION WALK 0 200 // 正面(0 度)にむかって 200mm 前進する
WAIT
// 直前のコマンド終了を待ち、終了したら次の行へ
PLAY ACTION TURN 90
// 90 度左に旋回する
WAIT
// 直前のコマンド終了を待ち、終了したら次の行へ
PLAY ACTION KICK
// キックする
7
11 課題
11.1 ロボットプログラミング
次の2つの課題のうち、グループで1つを選択して、グループで調査やディスカッションを行い、その機能を達す
るためのプログラムを作成しなさい。
1) ゴール地点にできるだけ早い時間でたどりつくように AIBO を制御する
ゴール地点にはピンクのボールを置いておくものとする。しかし、AIBOのカメラでは遠くのボールが正確に
検知できないので、声やボール、タッチセンサなどで誘導してもよいし、全自動でピンクボールを捜し、追尾し
ながら自律移動するようにしてもよい。
2) センサ入力に反応して複数の動作を選択的に行うエンタテインメント型 AIBO をつく
る
AIBOには組み込みの動作(踊ったり、ないたり、LEDを光らせたり、尻尾を振るなど)があるので、これらを組
み合わせて、外部のセンサ情報に反応して楽しく行動するAIBOをつくってほしい。
いずれの課題も、どのようなアルゴリズムにするかを議論し、プログラムの作成、実行、動作確認、アルゴリズムの再
検討、という試 行 錯 誤 の プ ロセスを必要とする。どうすればグループで効率的に行えるかをよく考えること。
11.2 成 果 発 表
第 6 週目には、グループ毎にどのようなことができたか、成果をプレゼンテーションしてもらう。内容は以下に沿っ
てパワーポイントのスライド資料を作成し、口頭で説明を行うこと。 またAIBOの動作環境を用意するので、作成し
たAIBOの動作をデモ実演すること。
1) タイトル
何をやろうとしたか、何ができたかを表すタイトルを付ける。
2) 目的
何をやろうとしたか、何ができたかをわかりやすく説明する。
目的を実現するために、どのように考え、どのようなことをしたか、具体的に説明する。アルゴリ
ズムをどうしたか、実際の実装をどのように行ったか、開発途中にどのようなことが起き、それに
3) 方法
どのように対処したか、工夫した点は何かを述べる。
プ ロ グ ラ ム コ ー ド を そ の ま ま ス ラ イ ド に し て も 、 見 る 側 は 理 解 で き な い 。 流 れ 図 (フ ロ ー チ
ャー ト)な どに して 図 解 す ること。
4) 結果
5) 考察
6) まとめ
目的をどの程度達できたか、客観的に述べる。
なぜうまく動作したか、あるいは動作しなかったか、結果の考察、問題点、どうすれば解決でき
そうかについて述べる。
成果を簡略にまとめて、箇条書きにして述べる。
11.3 スライド資 料 の 提 出
上 記 のスライド資 料 な らび に 作 成 した R-CODE プログラムを、締 め切 り(第 6 週 目 の前 日 )まで に 、下
記 アドレス宛 にメー ル に て 提 出 す ること(グル ー プとしての提 出 物 )。
件名: 創成1スライド (クラス名) (グループ名)
メールアドレス: [email protected]
提出した資料やプログラムはレポートの作成に必要なので、各自でコピーやバックアップをとるのを忘れないこと。
8
11.4 レポー ト
個人ごとに、成果発表した内容をA4レポートにまとめること。口頭で述べた内容を文章として説明し、全員提出
すること(グループで 1 部ではなく、各自が自分の言葉で述べたレポートをそれぞれ提出すること)。単にタイトルを
箇条書きにしただけのものはレポートとは呼ばない。レポートには以下のものを含むこと。
1) 表紙ページ
発表のタイトル、学生番号、氏名、クラス、グループメンバー全員の氏名、日付を記入した
表紙を付ける。
「目的」、「方法」、「結果」、「考察」、「まとめ」を、成果発表の構成に順じて書く。各 項 目
で 最 低 で も 半 ペ ー ジ は 記 述 す る こ と 。 特にグ ル ー プ の 中 で 自 分 が 貢 献 し た 部 分
2) 内容
が どこか 、わ か るように はっきりと書 くこと。
最終的なプログラムコードを添付すること。プログラムの各部の機能について、詳細なコメ
ントを付すること(つまり、各自がコードの意味をきちんと理解すること)。
3) 感想
授業の感想、希望などがあれば書くこと。
11.5 レポー トの 提 出
作 成 したレポー トを A4 で 印 刷 し、左 上 をホッチキスで綴 じて、指 定 され た締 め切 りまでにクリエー シ ョン
コア 1 階 にある創 成 1用 レポー トボックスに 投 函 す ること。
参考文献
•
知能システム創成1 サポートページ http://sys.ci.ritsumei.ac.jp/aibo/
•
SONY AIBO オフィシャルサイト http://www.sony.jp/products/Consumer/aibo/
•
R‐CODE リファレンスマニュアル http://sys.ci.ritsumei.ac.jp/aibo/r-code-manual.htm
•
ACTION コマンド一覧 http://sys.ci.ritsumei.ac.jp/aibo/r-code-11.htm
•
MWCIDコマンド一覧 http://sys.ci.ritsumei.ac.jp/aibo/ERS-7-MWCID.htm
9
A.付録 R-CODE によるAIBOのサンプルプログラム
A.1.
歩 き 続 け る AIBO
A.2.
音声入力で動作
//
// 歩き続けるAIBO
//
PLAY ACTION STAND // 立ち上がる
WAIT
//
// 音声入力で動作
//
:START
CALL 1001
DO
DO
PRINT "Distance:%d" Distance
IF Distance < 100 THEN // 障害物までの距離が100未
満のとき
RND rnd 0 1 // 0か1の乱数発生
IF rnd = 0 THEN // 0のとき
PLAY ACTION TURN -45 // 右に45度まわる
ELSE // 1のとき
PLAY ACTION TURN 45 // 左に45度まわる
ENDIF
WAIT // 直前の動作が終わるまで待つ
ELSE // 障害物がないとき
PLAY ACTION WALK 0 200 // 200mm正面に歩く
ENDIF
LOOP
WAIT 1
PRINT "音声入力待ち"
IF AU_Voice = 1 THEN
//PRINT "音声入力あり"
WAIT 1
SWITCH AU_Voice_ID
CASE 32 CALL 1003 // すわって
CASE 30 CALL 1005 // たちあがって
CASE ELSE CALL 1007 // それ以外
CALL 1001
ENDIF
LOOP
// RESET
:1001
//PLAY ACTION STAND
//WAIT
SET AU_Voice 0
RETURN
// すわって
:1003
PRINT "すわって"
PLAY ACTION SIT
WAIT
RETURN
// たちあがって
:1005
PRINT "たちあがって"
PLAY ACTION STAND
WAIT
RETURN
// それ以外
:1007
PRINT "それ以外"
// L_EDSP.M_ANGRY.S_SOUNDLED
PLAY MWCID 2471
WAIT
RETURN
10