最小半径の物体の決定

[[サンプルプログラム>]]をダウンロード・コンパイル・実行してください.

このプログラムでは,アームが最小半径の物体を左下 (-0.8, -0.8) に移動させます.

今回,二つの新しい関数を作成しています.

まず,minimum_object_number関数では,センシングした物体情報から,最小半径の物体を探します.

配列に格納された数値列から,最小値を探すアルゴリズムは今までの授業で学習しています.

最小半径の物体の移動

次に,その最小半径の物体番号をobject_move関数に渡して,ロボットを駆動します.

今回,物体位置であるpositionをアドレスとして渡していることに注意してください. メイン関数でこの関数を使うときは,

object_move(&object[i].position, target_pos, get_arm_state(), get_gripper_state());

のように書きます. こうすることで,この関数内でobject[i].positionの値を更新することができます.

この関数では,列挙型TaskState?で課題の達成状況を管理して,場合分けします.

前回のapproach_and_weight関数とは異なり,PICKUP(に成功した)後に,関数

set_command_move_arm_to(target_pos);

で物体をtarget_posまで運びます.

そして,RELEASEでは,関数

set_command_release_object();

で物体を設置しています.

また,

*position = target_pos;

で,移動させた物体の位置を更新します.

練習

5個すべての物体を手前 (y = -0.8) に半径の小さい順に並べるプログラムを作成してください.

手前の領域に,横一列に物体を並べてください.

ヒント

物体情報配列objectを半径でソートしましょう.

課題

N個すべての物体を重量の小さい順に並べるプログラムを作成してください.

すべての物体の重量を計測した後に,重量の小さい順に,横一列 (y = -0.8) に物体を整列してください.

物体数Nはプログラム実行後にキーボード入力します.

適宜コメントを入れたり,関数化したりして,他人にもわかりやすいプログラムになるように心がけてください.全くコメントのないものは減点します.

他人のプログラムを写したことが判明した場合は,両者とも0点になります.課題内容に対応していないプログラムにも点をつけません.

ヒント

重量計測か整列かの課題達成状況で,場合分けしましょう.

発展課題

重量計測と整列を同時にして,上記の整列を高速化してください.

提出物

提出物一式を入れるフォルダの名前は学生番号にしてください.

提出期限

次回の授業中に,提出プログラムが正しく実行できていることをTAが直接確認します.

その授業日24:00までにCLEで提出物を提出してください.


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS