Memorandum

New version Kouhei's Homepage

タブレットPC

P1030617
つくばの現場での操作性を考慮して
今年は制御用PCをタブレットPCにする予定で
前から注文していたPCがやっと届きただいま
環境を移植中です

いままでがcore2duoだったのがcorei5なので
たぶん重い処理もすこし速くなるかと
期待してます。

ハフ変換

hafu02
hafu01

直線の壁を見出して角度補正をしてみようと
ハフ変換の勉強してURGのデータにかけて見て実験中

最も最上位の候補のみ抽出して
予測した直線を重ねて見たのが上の図です

ハフ変換は理屈がシンプルなので実装もしやすいですが
マシンの速度とメモリ結構食います

でも最近のマシンだと何とかなりそうです。
解説なしで今回作って試したハフ変換部分のコードをのせてみます
何かのお役にたてれば幸いです


void houghtrans()
{
  int[] houghmat = new int[1024 * 1024];
  int N = 1024;
  int maxvalue=0;
  int tmp=0;
  int maxindex=0;
  int maxm = 0;
  int maxn = 0;
  double maxro = 0;
  double maxtheta = 0;

  for (int i = 0; i < 1080; i = i + 1)//URGのデータ一つ一つ検査
  {
    double x = lrf.Range[i] * Math.Cos(i * 0.25*Math.PI/180 - Math.PI / 4);//極座標→デカルト座標
    double y = lrf.Range[i] * Math.Sin(i * 0.25*Math.PI/180 - Math.PI / 4);
    if (Math.Abs(x) < 5000 && Math.Abs(x) > 500 && Math.Abs(y) < 5000 && Math.Abs(y) > 500)//範囲を限定
    {                  
      for (int n = 0; n < N; n++)//走査範囲をNで決めた数で分割して調べる
      {
        double ro = x * Math.Cos(n * Math.PI / N) + y * Math.Sin(n * Math.PI / N);
        int m = (int)(ro / 7500 * N/2 + N/2);
        tmp = ++houghmat[m * N + n];
        if (tmp > maxvalue)
        {
          maxvalue = tmp;//ハフ変換により変換された曲線がピクセルに何線重なっているかカウントしこれまでの最大値を記憶
          maxindex = m * N + n;//最大値のインデックス番号
          maxm = m;//最大値の行番号
          maxn = n;//最大値の列番号
          maxro = ro;//最大値のρ
          maxtheta = maxn * Math.PI / N;
        }
      }
    }
  } 
  leserScanerViewer1.Theta = maxtheta;
  leserScanerViewer1.Ro = maxro;
  label1.Text = maxindex.ToString();
  label2.Text = maxvalue.ToString();
  label3.Text = maxm.ToString();
  label4.Text = maxn.ToString();
}

つくばまであとひと月もないですが

今年は職場の行事等でこれまで一回しか試走会に行けてません

次回の試走会にはロボットを持っていかず計測に全精力を傾けるつもりです。
地図作りというかコマンドを記述したファイルを作るのに全精力をかけたいのと
11月の6日にロボットを送ってしまうと、送って、受け取って、また送るのに
膨大な日数がかかってしまい、最後の調整ができないからです。

今年はは距離を目安に走行コマンドを左壁走行、右壁走行をふくめ6種類以上用意して
あらかじめ用意したコマンドファイルに従って実行していきます

距離でコマンドが切り替わるシーケンサーです

距離情報はエンコーダーからとるので累積誤差はGPSの受信状態が良いところの距離をあらかじめ計測しておいてその地点に入ってGPSの受信状況が良いことが確認できたら補正をかけます。

特にGPSの受信状況に自信がある地点にさしかかったら止まって測量をします。

また、これから実装するつもりですが、あらかじめ直線ランドマークが認識できるところを調べて、その直線の方向データも計測しその場所に来たら、レーザースキャナーのデータにハフ変換をかけて
直線を割り出し角度補正をかけるつもりです。

昨年は違う道に迷いこんでしまったので、今年は他のアルゴリズムが有効に働けば違う道に行かないはずですが万一、人垣が変な場所にロボットを誘導した場合に行ってはいけない場所の点のデータを持って置いてその周囲数mに入ったら間違った道にいると認識して引き返すようにしてます。

とにかく難しい判断は人があらかじめやっておいてやろうという作戦です。

GPS測量結果を地図にプロット

gps6
gps5
メルカトル図法の地図にGPSで測量した緯度経度から軌跡をプロットするプログラムを
作っています。
測量に使用している衛星の個数やHDOPの値で表示を変えられるようにしてみると
衛星の個数とHDOPは相関があります。
HDOPは衛星の幾何学的関係からくる測定精度の指標なので当然ですね

上の図は衛星5個の場合は地図上の道路からだいぶずれていることが解ります
6個だと大体地図の道路上に来ています。

はたして地図はずれていないのかという疑問もありますが
どうすれば調査できるでしょう?

学園祭でつくチャレロボ走らす

festival

本日は学園祭

屋外の模擬店のある道路上を
つくチャレロボを走らせました

宣伝&案内ロボットとして活躍!

風船や各模擬店のビラなどを貼ってです(^^ゞ

実行委員の先生の方からオファーがあり
測域センサベースでの走行です

研究室としては実環境での安全性テストも
兼ねています(笑)

GoogleMapの投影法など

tukubaMapSmall

GUIとして地図上にロボットの位置を表示するのは
皆さん結構やっていますが
自分としてはやったことないので
とりあえず地図データを作ってみた

では緯度経度から地図のXYにどうやって変換するのか?

試しにGoogleMapを少し拝借して考える
GoogleMapの投影法はメルカトル図法だそうです。

また地球を回転楕円体としてではなく球として投影しています

そして通常GoogleMapにアクセスしたときに見られる地図は
ズームレベルを1から19まで変えられます。

ズームレベルが0の時が世界全体を256×256の正方形の中に収めます
経度方向は全部入っていますが、緯度はメルカトル図法なので全部入っていません。
GoogleMapでは緯度はプラスマイナス85度までです。

256×256のタイル一枚で一単位になっています。
ズームレベルが1増えるとタイルの縦横の枚数が2倍づつになり
面積が四倍になった中に世界地図が収まります。

つづく

朝ごはん

P1070830

おはようございます

最近はちょっと寝坊気味でしたが
今日はすこし早起き

早く起きるといいですねえ

新聞も読めるし、ご飯も炊いて食べれる

新聞にトヨタがサンヨーのリチウムイオン電池を
使うという記事が
サンヨー株主としてはうれしい限り(*^_^*)

今日から3日間は職場のイベント

原稿も今日一本締め切り


さてがんばるか!

今日も一日明るく元気にがんばりましょう!

旋回中の加減速で円弧を描くか?

マイクロマウスみたいな2輪式の移動ロボットでは
速く走ろうと思うと直線は速く走り
カーブは曲がりきれないので減速して走ることになります。

もしカーブ中に加速・減速した時に一定の半径の円弧
で走れるのでしょうか?
それとも半径の違う円弧や楕円弧を接続したような走行軌跡に
なるのでしょうか?

加速減速をカーブ中にするメリットが本当にあるかは
解りませんがうまくいけば時間を短縮できるような気がします。

別にきれいに一定の半径の円弧にならなくても
いいとも考えられますが
その方が簡単で良いですよね

結論だけですが
考えてみると一定半径の円弧を描くように思われます。

お決まりの仮定は
1 加減速時は一定の加速度で行う等加速度運動とする
2 左右のタイヤの加速度は片方のタイヤの定数比の関係
3 タイヤは滑らないとする
4 加減速の時間は両輪で同じ
です

ここで

円弧の半径をr(回転中心から両輪の中間点が描く軌跡の半径)
左右のタイヤの間隔をW
両輪の加速度の比をk

としますと

これらの値の間には

r= 0.5 * W * ( 1 + k )/( 1 - k );

といった関係があるようです。

左右の加速度の比を決めると半径が決まりますね。

一定速度で回る時もkを左右のタイヤの速度の比とすると
上の式はそのまま使えます。

旋回半径を決めると左右の速度比が求められるので便利かもです

ちなみにタイヤが滑らないことが前提なので
高速旋回で左右のグリップのバランスが極端に
変化する時などは大幅にずれるでしょうね

たぶん合ってると思いますが
自分で実車で試してみることにします。

マイクロマウス迷路ベース

maze0001

マイクロマウスの新しい迷路ベースの構想中
現在のものは個々のパーツが大きくて重く
大きさもばらばらなので保管も移動も大変で
更に組立も難しいので、それらの欠点を改良した
バージョンを思案中

構想
1 16枚でフル迷路となり、組合わせ次第で色々な大きさの迷路になる
2 一つ一つのパーツはすべて同じパーツとする
3 ひとつのパーツは大きさを小さくし軽量化をはかり(フレームはアルミを使用)一人で持ち運べる

一枚に4×4区画+周囲に0.5区画ずつ(上図参照)の構成で16枚では16×16以上になりますが
半端区画のために違う規格の迷路を作るよりも多少大きくなっても
同じものを作ることのほうが楽だと思いますのでこのようにしました。

来年のMEXに向けてゆっくり新迷路を作ろうと思います
これに向けて壁は本物を購入しようと思いつつありますが

資金をひねり出さねばなりません(^^ゞ

晩酌

P1070827
今日は近所の8番ラーメンで野菜ラーメンを食べて
スタバでコーヒーを飲んだ後
帰宅して龍馬伝を見ながら晩酌です。

イか刺し買いに行ったら無かったので
イカだけより高かったですが刺身セットを奮発しました。

今日の朝ごはん

P1070825

おはようございます(もう昼過ぎですが・・・)

今日は世間一般には3連休の最終日
僕的にはほんとに久々の2連休

家でまったり過ごしているところです
休日に外に出ないともったいないような気がして
気が急くのですが
いつものパターンならスタバで読書ですが
さてどうしよう?

ロボット関連のプログラムもしたいような気がする等
気持ちだけプロジェクトは沢山あるんですが
なかなか重い腰が上がりません

昨日、甥から電話があり
妹と僕の小さいときの写真を見つけたそうです
それを見たときの第一声が「僕がいる」だったそうで
遺伝のからくりは面白いこと限りなしです

妹からは息子に従妹を早く作ってやってと頼まれましたが(^^ゞ

とりあえず再来週は「お見合い」があります(*^_^*)

過去の経験からいうと、合コン、紹介、お見合い
はうまくいったことがないので
今回もあまりいい風にはならないかもしれません
紹介者にも申し訳ないですね

この年になってみると
何か人と違って足りないところがあるのか
と思ったりする今日このごろです。

マイクロマウス金沢支部月例会

P1070815
P1070822
P1070821
P1070820
P1070819
P1070818
P1070817

本日は3回目の月例会
北信越大会の結果などを聞きながら
互いに自分の作業に没頭する

みんな思い思いにマウスを作り始めたり、ソフトを見直したり
迷路で試走したり
回路図を見ながら配線をテスターで確認したりなど
しておりまして中々活動してる!てな雰囲気でした。

私も2年前のマウス大金平のソフトを解析するところから
徐々にブラッシュアップを図り始めました

今年はたぶん大会には出れないのですが全国の予選だけは出れるかもしれません
中部に出ようと思ってたら「お見合い」の日でした(^^ゞ

最後に忘年会に話が出て、北信越のときに新潟に別荘がある人に
別荘が貸してもらえるかもしれないので
そこで泊りがけ合宿をかねて忘年会をしようと盛り上がりました
そうなるかはわかりませんが
大会をまじかにして支部活動も盛り上がりを見せております。

フル迷路を出すのが大変なので、もう少し持ち運びが楽で組み立てやすい
新しい組立式迷路を作ろうかと思案しているところです。

久々の休日

P1070823
今日は何週間ぶりに感じられるほどの休日です
ご褒美に豚しゃぶ!(いつもですけどね、好きだから良いのです)

今日はマイクロマウスの月例会もあり充実してました。
人間お休みは大事ですねえ

ロボコン終了

ロボコン終わりました

私が指導しているチームの結果は準決勝進出でベスト4で終わりました
協賛企業から特別賞をいただけましが
全国行きの切符はもらえませんでした

わが校のもう一つのチームはベスト8で全国大会の切符を手に入れています

今年のロボコンは人が乗った乗り物を2足歩行ロボットがゴールまで運びタイムを競う競技です
相手チームとのインタラクションは一切ありませんが
2チームが同時に走行し、早いチームが勝ちとなりトーナメントで争います

コースは折り返しコースになっており
行きは2足ロボット単体で走行して折り返し地点で手動もしくは自動で人の乗った乗り物と連結し
けん引して走ります折り返し後のコースに高さ2.5mぐらいのところにつってある輪がありそこに
かぎ状のものを差し込まないと前に進めないといったルールになっています。

2足での歩行、人の乗った乗り物のけん引能力、鍵を入れる確実性の3つを問われる競技課題でした


実は一週間前にはまだ動いていなかったことを考えれば
今回のこの成績は奇跡的なものを感じます

2年連続スタートで動かない状態だったことを考えれば
快挙です。

1回戦はくじでシード状態だったのでパス
2回戦は実はゴールできませんでしたが、相手チームが動けなかったので突破
3回戦は完ぺきな走りでゴールしタイムもかなり良い方で完勝
4回戦は途中でトラブルが発生しリトライをしているところで相手に追い抜かれて敗北でした

今回の戦いで
やはりマシンの信頼性を上げなければ勝てないと
思います。

今回もアイデア的には他にない工夫がありましたが
2回戦はゴールしておらずくじ運で勝てたことになります
3回戦が本来やりたかった戦いで
4回戦はやはり確実性がなく敗れました
こう考えるときっちり戦えたのは3回戦のみですので
最後の審査員選考に残るには弱かったのかなと考えます

もうひとつのチームはシードではなかったので順々決勝まで3回戦ったのですが
動作的にはパーフェクトでした3回戦は同時にゴールしましたが
全長が長かったためお尻がゴールラインを割るのが相手より遅かっただけです
そしてこちらも全チーム中唯一のアイデアがありそれが評価されました

Twitter

    follow me on Twitter

    フォロワー