設計と難所への挑戦
2011年10月11日(火)
モーターAを回転速度0、ブレーキ有効で動かす:
nxt_motor_set_speed(NXT_PORT_A, 0, 1);
- [吉田] お、ブレーキ!!固定できそうじゃん!!こんな感じで動かしてみれば良いかな。
検証タスク:
TASK(Main) { while (1) { nxt_motor_set_speed(NXT_PORT_A, 0, 1); } }
- [吉田] 。。。んー。なんか、倒れてきちゃうよ。ブレーキ効いてるのかな?ブレーキモードってこんなもんなのかな?
- [舟元] 確かに倒れてきちゃうね。ブレーキは効いてるみたいだし、こんなもんなのかな。ブレーキだと弱くて支えられないね。
- [吉田] えー、じゃあ、作戦失敗!?
- [舟元] 大丈夫、まだ策はある!!モーターの回転角度が取得できるから、その回転角度を意図する角度になるように制御すればできるんじゃないかな。
- [吉田] っ!!(@。@
- [舟元] ライントレースのときの、「白だったら右、黒だったら左」と同じ感じってこと。
- [吉田] あーなるほどぉ。それじゃぁ、こういうことかな。
モーター回転角度を目標値にして制御:
TASK(Main) { // 目標とする角度 static const int ROTATE = 60; int current = ROTATE; nxt_motor_set_count(NXT_PORT_A, 0); while (1) { current = nxt_motor_get_count(NXT_PORT_A); if (current > 0) { nxt_motor_set_speed(NXT_PORT_A, 20, 1); } else { nxt_motor_set_speed(NXT_PORT_A, -20, 1); } } }
- [舟元] そうそう、そういうことだね。
- [吉田] お。おぉ!!今度は、しっかり支えてる!!
- [舟元] 良い感じだね。倒立制御→後傾走行、後傾走行→倒立制御も、尻尾の操作だけでどうにかなりそうだよ。 後傾したままの走行も含めてまとめるね。
フェーズ | 走り方 |
---|---|
倒立制御→後傾走行 | 倒立制御の前進量を0としてから、尻尾を下ろしていく。 ※尻尾側に重心が移るので前に倒れてしまうことは、ほぼ無い。 |
後傾走行 | 前述のとおり、尻尾を走行体を支える位置に制御し続ける。 |
後傾走行→倒立制御 | 一度、走行体を垂直に近くなるよう尻尾で起こしてから倒立制御を再開する。 |
- [吉田] これで、ルックアップゲートは攻略できそうだね!!なんだか、コース全体を考えると、難しくて、ゴチャゴチャしちゃうけど、難所ごとに考えれば、意外と簡単だね。
- [舟元] そうだね。難しい問題も簡単に実装できるようにするのも、設計時の腕の見せ所だね。
まとめ
- [吉田] 今回は、設計と難所の攻略をやってみました。「どうやって作れば良いか」が「設計する」ってことらしいのですが、まだ実装の経験が乏しいし設計と言われてもピンときませんでした。もっと、他人の作ったものを読んだり、自分で作ってみないとダメですね。
【参照リンク】
<サイト最終アクセス:2011.10>
連載バックナンバー
Think ITメルマガ会員登録受付中
Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。