フォト
2016年11月
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30      

最近のトラックバック

ロボット部品

無料ブログはココログ

« 2014年10月 | トップページ | 2014年12月 »

2014年11月

2014年11月26日 (水)

全日本マイクロマウス2014

全日本マイクロマウス2014 に参加された皆様,運営の皆様,観戦された皆様,お疲れ様でした.

出るだけ星人だったわけですが,ロボトレース競技は決勝までコマを進めることができました.
結果は
ロボトレース競技 決勝 19位 29.263
_conv_20141126_004412

昨年は3cm 刻みにログを取り,加減速走行しておりました.
今年はマーカーごとにログを取り,加減速走行してみました.

結果としてマーカー刻みの方が簡単ですが,3cm刻みでログを取っていた時の方が汎用的でした.
(3cm刻みにログを再生するのは現実的ではないですが・・・)


最後に,アニキが二連覇したということで最強のアニキに向けて・・・
さすがです,お兄様!

catface

2014年11月23日 (日)

予選通過しました

なんとか完走しました。

今日は寄り道せずに帰還。
おうちに帰って食器洗いして本日のタスクは終了。

眠すぎるので、おやすみなさい。

2014年11月22日 (土)

なんとか走るように

なりました。
安定性がまだまだなので、今年も加減速でゴールできたらいいかなレベル。

出るだけ星人に近いです。

これより速くするためには、テキトーに決めているゲイン調整をキチンとやらないといけないです。

【今年の成果】
・角速度系フィードバックのバグ修正
・oLED モジュールの導入
・Bluetooth モジュールの導入
・SPI FRAM の導入
・プログラム構造の検討

【到達した速度】
・昨年とほとんど変わらない


むむむ

2014年11月21日 (金)

今日の予定

ワイルドカード『有給』を使用して本日はお休み。

【午前】
・病院(これから無理するから念のため)
・食器洗い
・ゴミ出し
・洗濯(2回)
・散髪
・スーパー買い物

【午後】
・ロボトレ デバッグ@大学

【夜】
・ロボトレ デバッグ@大学


まだ病院工程なので、午前のタスクの2個くらいは午後かなー。


『14:50 追記』
散髪だけ午後タスクになりました。
途中、精神エネルギーの低下により、ぐったりしていましたが、なんとか根性でぐったりを上書きして大学に向かっております。

2014年11月20日 (木)

走行できないのでブログ書くことにしました

さすがにこの時間(AM2:00)から走行デバッグをすると,迷惑をかけるので自粛.
その代わり,ブログ書きます.

マイクロマウス本番が数日後に迫ってきました.

(風邪はまだ治っていないので,本番までには治したい.)
皆さんのブログを拝見していると,社会人になり学生の頃のような品質でのデバッグが出来ていないようです.

私の方は本番機(Verdi RT)の加減速走行は実装まで行けないかも・・・.
仮に形になっても決勝本番コースを完走できるほどの完成度にはならない気がしておりますが,最後まで諦めないつもり.

今年は別機(マイクロマウス学習キット)の方に関わり,かなり勉強できました.
勉強できたのはソフトウェア.ハードウェアは学生の時に散々やったので,しばらくお休みです.
似たような形の2台のロボットのソフトウェアが違いがはっきりしていて,とても良い経験でした.

1年前に作成したVerdi RT のプログラムは,データ(変数)を一括管理しています.
一方で,今年作成した学習キットのプログラムは,データを役割ごとに分割したファイルごとに管理しています.

前者の方はどちらかと言えば実行速度優先で,後者の方は保守性優先です.

デバッグ・調整時間が短い場合,後者の方が圧倒的に作業が楽です.
その代わり,データの読み書きはGet,Set 関数などを使用し(作り)ます.
ルネサスコンパイラは,割と短い関数はインライン展開されるので,実行速度が落ちることは少ないですが,ものによってはプッシュ,ポップが増えて実行速度が落ちてしまいます.
それでも最近のプロセッサは速いですし,後者の方がメリットが大きいと思われます.移植性も上がります.

ここまで来るとわざわざC で書かず,C++ を使用した方がコンストラクタで初期化できますし,関数(メソッド)のオーバーロードやクラスの継承ができるので便利なようにも感じます.

本番いろいろな方に伺ってみたいところです.

2014年11月18日 (火)

風邪ひきました

ロボットの調整する前に,体調のV字回復を目指します!

そして,ブログを投稿する瞬間にネットワークが切れて,書いたものが全て消えました・・・crying

2014年11月17日 (月)

大会まで一週間

一週間前としては,全然ダメな進捗です.

本日の一番の進捗としては
 ・風呂掃除
 ・トイレ掃除
 ・部屋掃除
 ・布団干し
 ・洗濯2回
を完遂できたこと.

ロボットの方は加減速走行がもうじき実装できそうな感じ.
1区画ずれているような動作なんだけれど,なぜかどこにバグがあるのか見つからない.
区画が飛んでいることもあるので,原因は複合の可能性ありです.

デバッグが終わらなければ,速い探索で本番走ることになりますcoldsweats01


あっ,そういえば,ブログのデザイン変更しました!
靴下にゃんこは好きだったのですが,本文の幅が狭すぎて見づらかったため,ココログ標準のテンプレートを現在使用しております.

2014年11月11日 (火)

調整中

大した変更はしておりませんが,昨年と比較してハードを少々変更しました.
そしたらこんな感じになりました.
大きなコースを走らせてみないと分かりませんが,そこそこ走りそう.

直線 1.6m/s,コーナー 1.3m/s
という設定ですが,本当だろうか・・・?

2014年11月 9日 (日)

コースログをどう取るか

本日は厚木ロボット研究会でした。

先月はチャリで行きましたが、今日は雨模様という事、先月迷子になって荻野まで行ってしまった事を考慮して電車&バスにしました。


さて本題ですが、ロボトレースのコースログはどう取るかの議論をしました。
昨年は3cm 刻みでログをとり、今年はマーカー基準でログを取ろうとしていますが、角速度の変化点でログを取るのも一つかと話です。
ただ、角速度の変化点は複合コーナーをどう処理するかが難しいです。切り返しが発生するような複合コーナーは良いですが、曲率がだんだん小さくなる(逆もしかり)ような複合コーナーは角速度の定常値が如何ほどかを判定する必要が出てきます。
この判定は難しそうです。

今のところ、案としては3つ。
 1.1cm 刻み(もしくは近い値)でログを取る。
  →RAM が足りません。
 2.マーカー基準でログを取る。
  →マーカー読みミスが問題。
 3.角速度変化点基準でログを取る。
  →同方向異種曲率の判定が難しい。

何が良いのだろうか…。

2014年11月 7日 (金)

プログラムのループと最適化の話

たまには役に立つ話を書きたいと思います.

(使用しているマイコンは,RX210,RX111 です)
 たぶん一般的な話だと思いますが,マイコンなど組み込み関連のプログラムを書く場合,特に意識することが多いです.
プログラムの動作において,一番リソースを使用する部分は主に3つです.
 1.メモリからのデータ読み出し
 2.メモリへのデータ書き出し
 3.ループや条件などの分岐
 メモリの場合,内部メモリなのか外部メモリなのかで変わってきますが,いずれにせよ汎用レジスタへのアクセスにはかないません.
 分岐については,主にアセンブラで言う『ジャンプ』です.
このへんの命令がたくさん入っているプログラム(もっと小さい単位で言えば関数)はとても遅いです.
そこでコンパイラは最適化として何を行うかと言いますと,上記の3項目については以下のようになります.
 1,2.メモリアクセスについて
 関数内で使用される直前にメモリから読み出し,何度も使用されるデータはメモリへ書き戻さず,レジスタに保持します.使用しなくなった後にメモリへ書き出します.例えば・・
int a; ←グローバル宣言
int b;
int c = 1;
void test(void)
{
  b = c + 10;
  a = b + c;
}
というプログラム(内容は無意味ですが)があると,一番遅い動作としては以下の流れになります.
 c 番地から1 をレジスタに読み出す
 1 + 10 を計算してレジスタに入れる
 b 番地に11 を書き出す
 c 番地から1 をレジスタに読み出す
 b 番地から11 をレジスタに読み出す
 11 + 1 を計算してレジスタに入れる
 a 番地に12 を書き出す
これをコンパイラは最適化過程で以下のようにします.
 c 番地から1 をレジスタに読み出す
 1 + 10 を計算してレジスタに入れる
 11 + 1 を計算してレジスタに入れる
 a 番地に12 を書き出す
 b 番地に11 を書き出す
順番はコンパイラによって多少前後しますが,工程が減る仕組みが分かります.

 3.ジャンプについて
 条件分岐がジャンプするのはイメージ通りですが,ループでジャンプというのは少しイメージにないかもしれません.while やfor 文でループするということは,ループの最後まで来たらループの先頭にジャンプしています.if やswitch 文は条件に一致したところに文字通りジャンプします.
 ジャンプについての最適化で一番分かりやすいのは,ループ展開です.
要はジャンプしなければ良いので,ループ回数分内容を展開します.10 回ループするのであれば,内容を10 個分記述すれば良いわけです.プログラムサイズは増えますが,パフォーマンスは向上します.

というところで,e2studio の最適化のコンパイラオプションを見ると,1つ分かる項目が増えます.
3.の項目である『ループ展開』です.
『外部変数へのアクセスを優先』は1,2.の項目と似たようなものですが,厳密には異なるようです.
E2studio_

2014年11月 4日 (火)

Bluetooth モジュールが付きました

こんな感じ.
書き込みが出来るかは試していませんが,E1 エミュレータで書きこむ方が速い(500kbps)ので,今のところ試すつもりはありません.

Cimg3716_r

Cimg3717_r

お好み焼きとエンコーダー

タイトルに深い意味はございません。

ただ、ホークスが優勝したので近所のスーパーで野菜が安くて、連休中にお好み焼きを作っただけです。

エンコーダーは迂闊にも一つ壊してしまいました。
やむなく予備のエンコーダーで大会は出ます。

ハード構成が少し変わったので、ゲイン調整は少しやり直し。

そして、探索時のログ取り方法は変更します。
3cm 刻みのログ取りは誤差の蓄積を許容できないので、従来のマーカー基準に切り替えます。


もう一台の方は加減速走行するまでに成長しました。
しかし、ステッパはちょっと加速度、角速度を大きくすると脱調しますね。

« 2014年10月 | トップページ | 2014年12月 »