度々すみません。
ロボットをある程度移動させたあと、自分で決めた位置にどこからでも移動させるといったプログラムは可能ですか。
プログラムについて
(2件の投稿) (2件の返信)-
13年前の投稿 #
-
はい、今ぱっと考えられるのは二つの方法があります。
1.ルンバのホーム方式(自動充電)、ランドマーク利用方法
2.エンコーダなどを利用したデッドレコニングランドマーク?デッドレコニング?と思うと思いますがそういう時はすぐさままずはWEBで検索してみてください。
ここでは、具体的な方法を示します1.の場合は赤外線(もしくは可視光線)を使ってロボットにとっての灯台を作ってやります(赤外線LED)。
赤外線を受光するセンサを使ってロボットは灯台の光を探してその麓まで移動する(赤外線受光素子)。2.ロボットの移動の際、タイヤ(およびステアリング)にエンコーダなどを取り付けてタイヤがスタートから何回転したか計測します。すると「タイヤの直径x円周率x回転数」の計算をすれば大体のスタートからの位置がわかります(ステアリングした場合も角度から計算できます)。
自分の位置がわかれば計算から元の位置に戻ることができます。現実問題としては一番簡単な方法として移動の時間を計ってみたらどうでしょうか?例えば、前進+50の速度で2秒、その場右旋回+20で1秒、後進-30で4秒、という履歴が取れれば大体の自分の位置はわかるかもしれません。プログラムは、、、、若干ややこしくなるかもしれません。
wait(1);という文を繰り返しループの中に入れて変数でカウントさせる方法ではどうでしょうか。
例えば
int right_cnt=0,
int left_cnt=0;
int forward_cnt=0;
int backward_cnt=0;
として
分岐で右旋回が選択されたらright_cnt++;とする。前進したらforward_cnt++;
ホームに戻りたくなったらカウントされた数を計算するか、そのままカウント分を逆実行すれば大体の位置に戻れるかもしれません。
摩擦だったり、モータの速度の不安定さが起因してなかなかうまくいかないかもしれません。いずれにせよ、ロボットの自己位置推定、自己位置同定といわれる分野の技術になります。
今は時間がないかもしれませんが興味があったら是非調べてみてください。13年前の投稿 #
返信
ログイン しなければ投稿できません。