4624127 ランダム
 HOME | DIARY | PROFILE 【フォローする】 【ログイン】

おびやまロボット研究所 ~マイコン電子工作と自作ドローン~

おびやまロボット研究所 ~マイコン電子工作と自作ドローン~

ソフト作成

つくばチャレンジの試作ロボット動作チェック

今日は学校の寮の日直.
寮監室にロボット,電源,工具一式持ち込んで,つくばチャレンジの試作ロボットの
動作チェック.

マイコンボード接続OK.
スイッチ類OK,エンコーダ動作左右OK.
タイマが動いてないのでプログラムをチェックする.
その後,もう一方のシリアル通信の確認をして,モータ駆動できたら足回りの動作確認完了.
後は適当に駆動系のコマンドを作って書込むだけ.

--追記--
タイマが動いてない原因がわかった.
intprg.c の中を書き換えるのを忘れてた.

--追記2--
シリアルポート動作確認. 
DIP-SWの半田不良見つけた.

--追記3--
PC->SH7125へのコマンド送信.レスポンス確認.
PC->サーボコントローラの制御確認.
PC->SH7125->モータドライバ,何か信号を送ってるものの,動作不具合.
         計測機器がないと無駄に時間を取りそうなので止め.

--追記4--
PC->SH7125->モータドライバ,左右モータ動作確認.
PC<-SH7125<-エンコーダ読み取りOK.

ハード的には予定した動作確認完了.
次はSH7125を介したコマンドをいくつか作ったらPC上のプログラムに移行できる.

少々手間取った原因はほとんど接続ミスと接触不良だった・・・
分かってしまえば簡単だが,SH7125の初めて使う機能のプログラムに誤りがあると
思い込んでたので疑ってかかってたので,見つけるのに時間がかかった.

PCからのコマンドで車輪が回ってる動画

----------------------------------
つくばチャレンジの試作ロボット,ちょっと改良

サーボは結構電流を食うので,
シリアルサーボコントローラに最初に信号を送った途端に電圧が落ちて
上手く起動しないことがありました.

なので,1000μF16Vの電解コンデンサを直近に接続.

DSC01591.JPG

不恰好だけど,誤動作がなくなりました.

DSC01592.JPG


----------------------------------
つくばチャレンジの試作ロボットのコマンド作成

モータを動かすコマンドをいくつか作りました.

・エンコーダリセット(0000H,1000Hの2種)
・エンコーダ読み取り(左右)
・モータドライバへデータ直送
・モータ規定動作(停止,前,右旋回,左旋回,後ろ,・・・など)
・モータ規定動作(同上,低速)
・指定距離移動後停止(倍率×4)
・指定距離移動後停止(倍率×256)

まで.
問題は,モータドライバにコマンドを送っても,ドライバが受信失敗する時があること.
送ったコマンドとエンコーダ値の変化とを照合して,状態監視する仕組みが必要そうです.


----------------------------------
GPSからシリアルでデータを取り出してみたら・・・

GPSからシリアルでデータを取り出してみたら,文字列がつらつら出てきたので,
Webで調べたらNMEA-0183フォーマットというものらしいです.
参考URL
http://bg66.soc.i.kyoto-u.ac.jp/forestgps/nmea.html

その中から必要な情報を取り出すアプリをVB6で作りました.
こんな感じ↓
GPSdada.JPG

たいしたプログラムじゃないですが欲しい方はどうぞ


持ってるのはこれです↓

[即納]値下げ!【送料・代引手数料無料】【LCD画面付き!GPSデータロガー】M-241 GPSロガー


----------------------------------
秋月電子通商の3Dセンサー(TDS01V)モジュールをVBで・・・

秋月電子通商の3Dセンサー(TDS01V)モジュールをVB6で動かしてみました.
(VC++でも.netでもなく今どきVB6,これしか使えないもので)

TDScontrol.JPG

また適当なプログラムですが欲しい方はどうぞ.
ポートはCOM2固定,左から順番にボタンを押して動かします.
こちらからダウンロードできます(TDS01control)


----------------------------------
互換バッテリー?

ちょっと悩んだこと.
学校で使ってるノートPCのバッテリーがへたってるのでバッテリーだけ買おうと思っていたら,丁度業者さんが来られたので見積もりをお願いした.
ノートPC自体はもう5年前の生産終了品で中古なら市場価値ほとんどなし.
定価がいくらかネットで検索してみたら,互換バッテリーが定価の半値以下でぞろぞろ出てきた.

互換バッテリーも校費で買えなくもない.
でも,校費で注文するなら高くてもメーカー純正品を頼むべきなのだろうか.
校費の元は税金.
自分的には限られた予算枠でいろいろ買いたいけど,
安い中国製の互換バッテリーを買うのが税金の使い道として妥当なのか?
高くても国産(海外工場かも?)純正品を買って,まず国内に税金を還流させるべきなのか?

--->結局純正品を購入しました.


----------------------------------
UHG-08LXをVBで動かしてみました.

HOKUYOのレーザ式測域センサ UHG-08LXをVisualBasic Ver6,VB6で動かしてみました.

こんな感じで使ってみます↓
DSC01584.JPG

アプリの画面コピー↓

UHGcontrol.JPG

ダウンロードできます,
UHG-08LXをVBで制御


データ点数が多いので1回5秒程度かかってます.
VBだとデータ点数を減らさないと厳しいです.


----------------------------------

モータをPCからSH-7125マイコン経由で制御するマイコン側は作っていたのですが,
PCで制御するプログラムを作ってませんでした.
なので最低限の機能確認だけVisualBasicで作りました,こんな感じで↓

名称未設定 1 コピー.JPG

----------------------------------
片目をつぶってふらふらしながら歩いていたら・・・

同僚が不審に思って声をかけてきました.
何をやってたかというと,ロボットの気持ちになって廊下を歩いていた,つもり.


----------------------------------
考えれば考えるほど難しいです...

今日はGPSの専門家のI先生(Y高専)とディスカッション.
いろいろと教えていただきました.

週末と今日の成果はこんな感じ↓

名称未設定 1 コピー.JPG

メインの画面に配置されたボタンから各種センサを呼び出しで
個別のセンサを使った動作を確認しながら作っていくつもり.
いまGPS単独を使ったモータ制御を思案中.

----------------------------------

つくばチャレンジの試作ロボット,初運転

つくばチャレンジの試作ロボットを外で初運転.
GPSのみを使って,目標地点に自律移動させてみました.

ケースにPCとGPSのみ乗せてこんな感じで↓

SBSC0120.jpg

結果わかったこと.
GPSの値が安定しない.ケースの中(PCの下)に置くよりは,
外に出したほうが良さそう.
旋回軸に合わせてGPSを配置すべき.お尻の方に置くと,カーブしていくときに
方向の実測値がおかしくなる.
目標地点を遠くに設定し,直線的にそちらに向かっているうちは良いが,
目標地点に近づくにしたがって角度補正に頻度が上がり,また目標地点のズレが
誤差となって目標を見失う.

というわけで,最低限の動作は確認できました.
GPSをちゃんと固定して,次は歩数カウントを制御に加えてみます.

取りあえず初運転の動画

----------------------------------
つくばチャレンジ試作ロボット,GPS取り付け

昨日の結果から,今日はGPS取り付けのための支柱を作りました.
GPSもバージョンアップ!

DSC01613.JPG

----------------------------------
つくばチャレンジ試作ロボット,GPSによる比例制御

VBのプログラムの手直しをして,GPSを用いた目標位置と進行方向の角度のズレに
よる比例制御のプログラムをつくりました.うまく動いてるっぽいですが,
今日は雨なので外で実験できません.

DSC01618.JPG

途中経過記録のための動画

----------------------------------
GPS比較中

コメットUSB/3(BU-353)の方がかっこいいし,感度も良さそうなのだけど,
ウソのデータを吐いてなさそうな代わりに,方位計測が安定しない感じ.
m-241はデータが尾を引いてる感じだけど,方位計測が安定してる.
GPSの方位のデータと目標地の方位の比較はm-241のほうが使いやすいんだけど,
どうしよう?


----------------------------------
つくばチャレンジ試作ロボット,プログラム追加

プログラムをちょっとだけ進めました.
目標地点に近づくとGPSの誤差が大きくなるので,一つ遠いところに目標点を
置いて角度の誤差を減らすことにしたプログラムを書いたところ.

次は目標地点に来たら,次の地点の方向へ旋回するプログラム.
GPSの位置からの計算値とGPSの前の方位データと地磁気センサと歩数の関係で旋回角度を
決めるのは結構大変.
そろそろちゃんと設計してかからないと,行き当たりばったりのコーディングじゃ
行き詰まりぎみ.


--追記--
目標地点に来たら次の地点へ進めるプログラムできた.
設定距離以内であり,目標地点との距離差最少の地点を過ぎたら,
(距離が再び増加したら)目標地点到達とする.
設定距離は一つだけど,地点によって距離を設定できるように
したらなおいいかも.

--更に追記--

シリアル通信でデータを受けるのに待ちを入れたら,他の処理の足を引っ張りそうな感じ.
処理を分散して書かないといけないのかな・・・?


----------------------------------
つくばチャレンジ試作ロボット,進捗状況

複数のタイマ割込みでシリアル送受信させると,場合によってマイコンが応答しなくなる
(暴走?)してしまう現象が出てきた.
マイコンのプログラムを見直すのは後回しにして,VBの方でタイマ割込みの整理.
設定地点を移動する度に次の方向と距離に応じたエンコーダ値を割り出して配列に記録.

----------------------------------
つくばチャレンジ試作ロボット,プログラム追加その2

GPSで設定した座標を歩数を数えながら走るだけができた.
設定地点でいったん止まって,旋回して角度を合わせて再スタートするようにできた.
次は,障害物に対する対処をどうするか?
遠くにある障害物もよけながら走るか,近くに障害物があるときだけ避けるかで,
話は違いそうだけど,とりあえず後者で作ってみることにする.

まだVB6で処理速度が足りてる.足りなければロボットの速度を落とすかも.
今年はとりあえずチャレンジの年!

tukuba-image.JPG

----------------------------------
UHG-08LXの性能

うす曇でしたが,屋外で使ってみました.

このように壁に近づけてデータを取ると,
DSC01624.JPG

こんな感じ↓
DSC01625.JPG

こういう場面では,
DSC01630.JPG

こんなデータ(表示は左右逆転してます)↓
DSC01631.JPG

今度カンカン照りの時,同じくらいのデータが取れれば想定している範囲では使えそうな感じ.

----------------------------------
つくばチャレンジ,OpenCVとVB6

つくばチャレンジのロボットのプログラムはVB6で書いてます.
画像処理はOpenCVでやろうとしてるのですが,OpenCVとVB6の間でデータやコマンドのやり取りするのに困りました.どちらも使いこなしてるわけではないので.
手っ取り早いのはファイルを介してやり取りかな,と思って,OpenCVで画像を出力してVB6で
画像を読み出したのですが,タイミングが悪いとファイルを同時にアクセスしてエラーに.
OpenCVに用意されてる画像保存ではファイルアクセスできないときエラー終了してしまうので,標準入出力に用意されてるテキストファイルの書込んだ値でタイミングを取って画像の同時アクセスをしないようにしました.
結果,OpenCVからVBに画像を渡すことができて,スマートな方法ではないけど一歩前進.

CVtoVB2.JPG

--追記--
またちょっとつまずいて検索かけたらあれこれ出てきますがやっぱりVB6じゃ古いみたい.
来年はVC#いちから勉強しないといけないかなぁ.

----------------------------------
今日もマップのところ.

少しずつマップのプログラムかいてます.
夜に辛い残業予定なので,ぼちぼちと.

現状記録
10cm単位として1km四方をメッシュに切って座標管理.
1km四方を表示するマップと10m四方を表示する自分を中心とした拡大マップを並べて作成.
あらかじめ取った障害物をラインを表示.
予定ルートを赤線で表示.
現在のGPS座標が更新されると,全体マップ上の赤い点が動き,拡大マップも更新される.
あと,現在位置からの進行方向に障害物があるかどうかの判定を組み込む.
TOP-URGから得た障害物もマップ上に重ねて表示し,判定要素に加える予定.

夜の辛い残業が来ないので,やっぱり軽い残業でプログラム作成.
久しぶりに行列式とか計算しました.

----------------------------------
つくばチャレンジ,週末の成果

週末,子守の合間にプログラム作成.作った分を動かしてみたらすんなり動いてよかった.
左下ウィンドウは,測域センサで衝突判定距離と角度を指定すると,その範囲内の障害物があれば判定フラグが立つプログラムを作ったところ.
右下ウィンドウはマップ上の指定したコースを外れる状況だと障害物判定フラグが立つプログラムを作成.
黒線がコース境界,予定進路は赤,ロボットは丸,進路を緑で表示,角度と距離を入れると判定フラグが変化する.

次は画像処理をどうするか・・・?

tsukuba-hantei.JPG

----------------------------------
テンプレートマッチングをやってみた

つくばチャレンジのロボットの画像処理に使うテンプレートマッチングを試した.
画像処理としては初歩の初歩なんだろうけど.

予定ルートで写真を撮りためておいて,現在のルートから見える画像と照合して現在位置やルートのずれを検出できないかと考え中.

参考URL
http://opencv.jp/sample/matching.html

ただし,プログラム中にバグあるみたい.
(cvRectangleの引数の数が合わない)


画像をグレースケールで読み込んで,テンプレート画像の位置を表示したところ↓

matching2.JPG

----------------------------------
テンプレートマッチング,続き (追記あり)

昨日の続き.
約15度傾いた画像でも認識してくれる.
普通の道で15度傾いた場所なんてないから傾き補正はしなくてOK?
テキスト画面のmax_valの値が傾きに応じて下がってくる.

傾いたマッチング2.JPG

さらに続き.
今度は画像の縮小もしてみた.比較対象画像を15度傾け,80%縮小しても認識可能.
max_valの値は0.908に下がった.

傾いたマッチング縮小80-2.JPG

さらにさらに続き.
10度ひし形に歪ませて認識.
max_valの値は0.93くらい.
歪んで認識-2.JPG

かなりの違いでも妥当な認識ができ,傾きや縮尺で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;

結果↓
kirinuki-2.JPG

----------------------------------
画像処理がうまくいかない.

Webカメラより画像取り込んで参照画像に設定.
その後,左右に動いてカメラ画像を読みこんで,どちらにずれているか判定.
条件がいいときは上手く動いているように見えるけど...
違う場所でやったら値が逆転したりして意味不明.
原理的に無理なのかな?

--追記--
実験を重ねてみたら,原理的には無理じゃないようだ.ただし条件が厳しい.
条件に合わせるようにカメラ(ロボット)を動かさないといけない.
ソフト的な工夫も必要.
バグも分かった.
透視の座標をちゃんと考えること.
メモリの確保と解放が上手く対応してない.

とりあえず1歩前進.

--更に追記--

あれこれ考えたら,条件が厳しい理由が分かった.
ソフトのイメージも分かったが,だんだん速度的に厳しくなってくる.
しかも,あれこれ仕事が来てソフト作れない.
間に合うのかな・・・?

----------------------------------
最低限の画像処理はできたもよう.
テンプレートマッチングと透視変換.VBとの受け渡し.
写真と撮影場所と方向とを関連付けて読み出せるようにした.

----------------------------------
つくばチャレンジのプログラム,作ったモジュール(フォーム)から情報を
統合して動かそうと考えたら,障害物判定は作ったものの,どちら方向にどのように回避すればよいかを考えてませんでした.
一番簡単な方法として,進行方向に対して指定角度の開きに対してどちらに障害物があるか,どちら方向に何度よければ回避できるか,を追加しました.
これだけでは袋小路に入ってしまったときに抜け出せないのは分かってるのですが,これ以上高度は判定を作る時間はなさそうです.

名称未設定 1 コピー2.JPG

----------------------------------
今日は一日マイコンと格闘

中身が見えないから何がどう悪いか検討がつかない.
あれこれやってたらいつの間にか動き出した.
投げ出したい気分だったけど動いてひと安心.
結局何が悪かったのか分からない.

その後,週末作ったプログラムのテスト.
最初GPSメインで作ってたのだけど,それより歩数カウントをメインで動かして,ずれをGPSで補正したほうがいいのかな・・・?

マップ上の基準ルートを仮想的に走ってる動画.
マップ上にあらかじめ固定障害物を記録しておきそれと衝突するなら回避
Top-URGで障害物検出したら衝突回避.
オドメトリが完全にならこれだけで走れるとして,あとはこれにどんな補正をいれるか.
GPSの補正はどういれる?
衛星捕捉数が変化したら何か処理する?
エンコーダとGPSデータ系列を比較して何がわかる?
特徴物のある座標にきたら画像処理で位置あわせして補正?
あれこれ考えるけど,プログラムに直す時間がなさそう.
やっぱり,マウス,ハーフマウス,地区大会運営,つくばチャレンジのかけ持ちは無理だったか?
くじけそう・・・

DSC02116.JPG

----------------------------------
立ち木が目標になるかな?と思って・・・

つくばチャレンジのプログラム考え中.

立ち木が目標になるかな?と思って,孤立障害物判定を作りました.
しきい値を決めて,孤立した障害物が何個,どの位の幅でどの位の距離にあるのかを
ウインドウの下の方のテキストに表示しています.

koritu2.JPG

----------------------------------
マップデータを作りました.


つくばチャレンジについて,
まだ試走もしてないんですが,GPSのログをもらってマップデータを作りました.
プログラムは書き足してますが,本当に動くかどうかは・・・?

マップ上を走るイメージ↓
map-2.JPG


© Rakuten Group, Inc.