ソフト作成,その2
つくばチャレンジの試作ロボット,初運転つくばチャレンジの試作ロボットを外で初運転. GPSのみを使って,目標地点に自律移動させてみました.
ケースにPCとGPSのみ乗せてこんな感じで↓
結果わかったこと.
GPSの値が安定しない.ケースの中(PCの下)に置くよりは, 外に出したほうが良さそう.
旋回軸に合わせてGPSを配置すべき.お尻の方に置くと,カーブしていくときに 方向の実測値がおかしくなる.
目標地点を遠くに設定し,直線的にそちらに向かっているうちは良いが, 目標地点に近づくにしたがって角度補正に頻度が上がり,また目標地点のズレが 誤差となって目標を見失う.
というわけで,最低限の動作は確認できました.
GPSをちゃんと固定して,次は歩数カウントを制御に加えてみます.
取りあえず初運転の動画
つくばチャレンジ試作ロボット,GPS取り付け
昨日の結果から,今日はGPS取り付けのための支柱を作りました. GPSもバージョンアップ!つくばチャレンジ試作ロボット,GPSによる比例制御
VBのプログラムの手直しをして,GPSを用いた目標位置と進行方向の角度の ズレによる比例制御のプログラムをつくりました.うまく動いてるっぽいですが, 今日は雨なので外で実験できません.途中経過記録のための動画
GPS比較中
コメットUSB/3(BU-353)の方がかっこいいし感度も良さそうなのだけど, ウソのデータを吐いてなさそうな代わりに,方位計測が安定しない感じ. m-241はデータが尾を引いてる感じだけど,方位計測が安定してる.GPSの方位のデータと目標地の方位の比較はm-241のほうが使いやすい んだけど,どうしよう?
つくばチャレンジ試作ロボット,プログラム追加
プログラムをちょっとだけ進めました.目標地点に近づくとGPSの誤差が大きくなるので,一つ遠いところに目標点を 置いて角度の誤差を減らすことにしたプログラムを書いたところ.
次は目標地点に来たら,次の地点の方向へ旋回するプログラム.
GPSの位置からの計算値とGPSの前の方位データと地磁気センサと歩数の関係 で旋回角度を決めるのは結構大変.
そろそろちゃんと設計してかからないと,行き当たりばったりのコーディングじゃ 行き詰まりぎみ.
--追記--
目標地点に来たら次の地点へ進めるプログラムできた.
設定距離以内であり,目標地点との距離差最少の地点を過ぎたら, (距離が再び増加したら)目標地点到達とする.
設定距離は一つだけど,地点によって距離を設定できるように したらなおいいかも.
--更に追記--
シリアル通信でデータを受けるのに待ちを入れたら,他の処理の足を引っ張りそう な感じ.処理を分散して書かないといけないのかな・・・?
つくばチャレンジ試作ロボット,進捗状況
複数のタイマ割込みでシリアル送受信させると,場合によってマイコンが応答 しなくなる(暴走?)してしまう現象が出てきた.マイコンのプログラムを見直すのは後回しにして,VBの方でタイマ割込みの整理. 設定地点を移動する度に次の方向と距離に応じたエンコーダ値を割り出して配列に 記録.
つくばチャレンジ試作ロボット,プログラム追加その2
GPSで設定した座標を歩数を数えながら走るだけができた.設定地点でいったん止まって旋回して角度を合わせて再スタートするようにできた. 次は,障害物に対する対処をどうするか?
遠くにある障害物もよけながら走るか,近くに障害物があるときだけ避けるかで, 話は違いそうだけど,とりあえず後者で作ってみることにする.
まだVB6で処理速度が足りてる.足りなければロボットの速度を落とすかも. 今年はとりあえずチャレンジの年!
このように壁に近づけてデータを取ると,
こんな感じ↓
こういう場面では,
こんなデータ(表示は左右逆転してます)↓
今度カンカン照りの時,同じくらいのデータが取れれば想定している範囲では使えそうな感じ.
つくばチャレンジ,OpenCVとVB6
つくばチャレンジのロボットのプログラムはVB6で書いてます.画像処理はOpenCVでやろうとしてるのですが,OpenCVとVB6の間で データやコマンドのやり取りするのに困りました.どちらも使いこなしてるわけ ではないので.手っ取り早いのはファイルを介してやり取りかな,と思って, OpenCVで画像を出力してVB6で画像を読み出したのですが,タイミングが 悪いとファイルを同時にアクセスしてエラーに.OpenCVに用意されてる画像 保存ではファイルアクセスできないときエラー終了してしまうので,標準入出力 に用意されてるテキストファイルの書込んだ値でタイミングを取って画像の同時 アクセスをしないようにしました.
結果,OpenCVからVBに画像を渡すことができて,スマートな方法ではない けど一歩前進.
--追記--
またちょっとつまずいて検索かけたらあれこれ出てきますがやっぱりVB6じゃ古い みたい.来年はVC#いちから勉強しないといけないかなぁ.
今日もマップのところ
少しずつマップのプログラムかいてます. 夜に辛い残業予定なので,ぼちぼちと.現状記録
10cm単位として1km四方をメッシュに切って座標管理.
1km四方を表示するマップと10m四方を表示する自分を中心とした拡大マップ を並べて作成.
あらかじめ取った障害物をラインを表示. 予定ルートを赤線で表示.
現在のGPS座標が更新されると,全体マップ上の赤い点が動き,拡大マップも 更新される.
あと,現在位置からの進行方向に障害物があるかどうかの判定を組み込む. TOP-URGから得た障害物もマップ上に重ねて表示し,判定要素に加える予定. 夜の辛い残業が来ないので,やっぱり軽い残業でプログラム作成. 久しぶりに行列式とか計算しました.
つくばチャレンジ,週末の成果
週末,子守の合間にプログラム作成.作った分を動かしてみたらすんなり動いて よかった.左下ウィンドウは,測域センサで衝突判定距離と角度を指定すると, その範囲内の障害物があれば判定フラグが立つプログラムを作ったところ. 右下ウィンドウはマップ上の指定したコースを外れる状況だと障害物判定フラグ が立つプログラムを作成.黒線がコース境界,予定進路は赤,ロボットは丸,進路を緑で表示,角度と 距離を入れると判定フラグが変化する.
次は画像処理をどうするか・・・?
テンプレートマッチングをやってみた
つくばチャレンジのロボットの画像処理に使うテンプレートマッチングを試した. 画像処理としては初歩の初歩なんだろうけど.予定ルートで写真を撮りためておいて,現在のルートから見える画像と照合して 現在位置やルートのずれを検出できないかと考え中.
参考URL
http://opencv.jp/sample/matching.html
ただし,プログラム中にバグあるみたい.
(cvRectangleの引数の数が合わない)
画像をグレースケールで読み込んで,テンプレート画像の位置を表示したところ↓
テンプレートマッチング,続き (追記あり)
昨日の続き. 約15度傾いた画像でも認識してくれる.普通の道で15度傾いた場所なんてないから傾き補正はしなくてOK?
テキスト画面のmax_valの値が傾きに応じて下がってくる.
さらに続き.
今度は画像の縮小もしてみた.比較対象画像を15度傾け,80%縮小しても 認識可能.max_valの値は0.908に下がった.
さらにさらに続き.
10度ひし形に歪ませて認識. max_valの値は0.93くらい.
かなりの違いでも妥当な認識ができ,傾きや縮尺でmax_valの値が連続的に 変化してくれるなかなかの優れもの.
あれこれ認識方法を考えていたが,テンプレートマッチングだけで考えたことがで きそう.
透視変換とテンプレートマッチング
微妙な結果.とりあえず経過記録.透視変換とテンプレートマッチングを使ってコースの修正をしようとしたんだけど, もう少しがんばらないと上手くいくかどうかわからない.
OpenCVで画面の切り抜き
これもほとんどサンプル通り.http://opencv.jp/sample/sampling_and_geometricaltransforms.html
センター位置を変えて,
center.x = src_img->width *3/4;
center.y = src_img->height *3/4;
画像の大きさを縦横半分に
dst_img->width /=2;
dst_img->height /=2;
結果↓
画像処理がうまくいかない.
Webカメラより画像取り込んで参照画像に設定.その後,左右に動いてカメラ画像を読みこんで,どちらにずれているか判定. 条件がいいときは上手く動いているように見えるけど...
違う場所でやったら値が逆転したりして意味不明.
原理的に無理なのかな?
--追記--
実験を重ねてみたら,原理的には無理じゃないようだ.ただし条件が厳しい. 条件に合わせるようにカメラ(ロボット)を動かさないといけない. ソフト的な工夫も必要.
バグも分かった.
透視の座標をちゃんと考えること. メモリの確保と解放が上手く対応してない.
とりあえず1歩前進.
--更に追記--
あれこれ考えたら,条件が厳しい理由が分かった.
ソフトのイメージも分かったが,だんだん速度的に厳しくなってくる. しかも,あれこれ仕事が来てソフト作れない.
間に合うのかな・・・?
--更に追記--
最低限の画像処理はできたもよう.
テンプレートマッチングと透視変換.VBとの受け渡し. 写真と撮影場所と方向とを関連付けて読み出せるようにした.
つくばチャレンジのプログラム,作ったモジュール(フォーム)から情報を 統合して動かそうと考えたら,障害物判定は作ったものの, どちら方向にどのように回避すればよいかを考えてませんでした.
一番簡単な方法として,進行方向に対して指定角度の開きに対してどちらに障害物 があるか,どちら方向に何度よければ回避できるか,を追加しました.
これだけでは袋小路に入ってしまったときに抜け出せないのは分かってるのですが, これ以上高度は判定を作る時間はなさそうです.
今日は一日マイコンと格闘
中身が見えないから何がどう悪いか検討がつかない.
あれこれやってたらいつの間にか動き出した. 投げ出したい気分だったけど動いてひと安心. 結局何が悪かったのか分からない.
その後,週末作ったプログラムのテスト.
最初GPSメインで作ってたのだけど,それより歩数カウントをメインで動かして, ずれをGPSで補正したほうがいいのかな・・・?
マップ上の基準ルートを仮想的に走ってる動画.
マップ上にあらかじめ固定障害物を記録しておきそれと衝突するなら回避 Top-URGで障害物検出したら衝突回避.
オドメトリが完全にならこれだけで走れるとして,あとはこれにどんな補正を いれるか.GPSの補正はどういれる?
衛星捕捉数が変化したら何か処理する?
エンコーダとGPSデータ系列を比較して何がわかる?
特徴物のある座標にきたら画像処理で位置あわせして補正?
あれこれ考えるけど,プログラムに直す時間がなさそう.
やっぱり,マウス,ハーフマウス,地区大会運営,つくばチャレンジのかけ持ちは 無理だったか?
くじけそう・・・
立ち木が目標になるかな?と思って・・・
つくばチャレンジのプログラム考え中.
立ち木が目標になるかな?と思って,孤立障害物判定を作りました.
しきい値を決めて,孤立した障害物が何個,どの位の幅でどの位の距離にあるの かをウインドウの下の方のテキストに表示しています.
マップデータを作りました.
つくばチャレンジについて, まだ試走もしてないんですが,GPSのログをもらってマップデータを作りました.プログラムは書き足してますが,本当に動くかどうかは・・・?
マップ上を走るイメージ↓
ESP32 Wifi Bluetooth開発ボード |
Arduino Nano Every |
Raspberry Pi pico |
FPGA XILINX Artix-7 |