Hatena::ブログ(Diary)

熊工房 ohgumaの腹凹ませたい日記

2004 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2005 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2012 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2013 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2014 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2015 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2016 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2017 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |

2017-02-20

[] Google翻訳

Google翻訳で「RoboCupJunior Soccer - Rules 2017」訳してみた。

参考にされる場合、間違い等あるかもしれませんので、原本を確認してください。

翻訳結果について本サイトは何ら責任を負いません。

更新:2017-02-17版

https://drive.google.com/file/d/0BzFoKYiCZtMrZ1NtOS0yYnEwZFE

▼原文はこちら。

http://rcj.robocup.org/rcj2017/soccer_2017.pdf


外国語文献の翻訳には、Google翻訳が便利だが、今回は一手間かけて使ってみた。

https://translate.google.co.jp/

原文のPDFからテキストコピペすると、PDF上の改行部分で改行されたテキストが張り付き、そのまま翻訳するとおかしな翻訳になることがある。

f:id:ohguma:20170221031257p:image

翻訳したいテキストを一旦テキストエディタ(以下はサクラエディタ)にコピペし、「改行」を半角スペースに置換する。正規表現が使えると、改行などの制御文字も置換も容易になる。

f:id:ohguma:20170221031258p:image

改行がなくなったテキスト翻訳すると良い感じになる。

f:id:ohguma:20170221031255p:image

正規表現は複雑なテキスト操作可能でとっつきにくいかもしれないが、いろいろなプログラム言語テキストエディタなどでサポートされているので、部分的にでも覚えるとテキストの整形などで重宝する。

反復学習ソフト付き 正規表現書き方ドリル (WEB+DB PRESS plus)

反復学習ソフト付き 正規表現書き方ドリル (WEB+DB PRESS plus)

2017-02-13

[]マット(つや消し)布テープ

舞台道具に良さげなマット(つや消し)布テープがあったので、筒内の表示でググってみる。一般的布テープと比べると高いがRCJのライントレースサッカーコートラインに良いかも。

(購入先)

スペック

f:id:ohguma:20170214035241j:image:w360

▲左:一般的布テープ 右:マットな布テープ

2017-01-24

[]電池ボックス

市販電池ボックスには回路への接続方法がいろいろあるが、よくあるプラ製の電池ボックスはハンダづけに向かず、太いケーブルに変更しにくいリード線とスナップのタイプは正直使いづらい。ロボットへの電源供給には、ラグ端子付きのものにそれなりの太さのケーブルをつなぎたい。

f:id:ohguma:20170125013950p:image

▲「パーツ一般/電池ケース(電池ボックス/電池ホルダー)/単3×3本用 秋月電子通商 電子部品 ネット通販」より


ハンダづけに問題のないアルミ製の電池ボックスも以前はよく見かけた気がするが、いざ探してみると最近は扱いのある店が少ないようで、単3用だと2本用しか見つけられなかった。

f:id:ohguma:20170125013951p:image


また激しく動くロボット場合は、電池が外れる危険性も考慮したい。以下の2つは共に単3が6本入る電池ボックスだが、右は1本づつ電池を押さえるようになっており、少々の動きでは電池が外れることはないが、左は電池を押さえるようになっていないため、衝撃で電池が外れる恐れがある。この手の電池ボックスを使う場合はフタを付けるなどの対応を取りたい。

f:id:ohguma:20170125013952p:image

▲「パーツ一般/電池ケース(電池ボックス/電池ホルダー)/単3×6本用 秋月電子通商 電子部品 ネット通販」より

2017-01-05

[]C-Style の変数の使い方の例

C-Style上では変数がA〜Zの26個使える。プログラム中のどこからでもアクセス可能グローバル変数として定義されていて、有効範囲スコープ)の概念がないのでプログラム時にはそれを作り手が意識する必要があるが、以下の3範囲ぐらいが意識できればよいのではないかと思う。(2,3の使い分けは曖昧だが)

  1. プログラムを通して有効
  2. 無条件ループ内で有効
  3. 一時的にのみ使用する

以下は動作確認していないサンプル。変数が足りなくなる場合は2進数フラグと同様に10進数を数桁毎に加算して使うなどのアイデアもある。こうすることで上の1用の変数を減らすこともできるし、下の例であればAとBの比較で前回と今回でCN1,2,3のいずれかが変化したことなどの確認も一度にできるなどのメリットもある。

f:id:ohguma:20170106040234p:image

  1. プログラムを通して有効変数:B
  2. 無条件ループ内で有効:A,C,D,E
  3. 一時的使用する:Z

2016-12-27

[]ロボットスピード

C-Styleのタイマープログラムの処理時間を図る方法は次の通り。

  1. タイマーをスタートさせる。
  2. 処理時間を図りたい処理を実行する。
  3. タイマーの値を変数にセットする。
  4. 変数の値をシリアルモニタに表示する。(センサモニターの見出し部分をダブルクリックしてからスタートスイッチを押す)

f:id:ohguma:20161228012258p:image

上のプログラムだと、砂時計1秒間の処理時間変数Aにセットされ、変数Aをシリアルモニタに表示している。変数Aの値は1000(単位ミリ秒)なので、処理時間は1秒であることが確認できる。

4行目のC-Codeは「printf("%ld", gV[VAR_A]);」と記述している。


f:id:ohguma:20161228012259p:image

直接タイマーの値を表示する場合は、3行目のC-Codeは「printf("%ld", gT[T1]);」と記述する。タイマー1の場合はT1、タイマー2の場合T2、以下同様にタイマー4まで利用できる。


上記の2つのプログラムには処理時間に差が無いように見えるが、ここで「printf」の処理時間も図ってみる。タイマーミリ単位でしか計測できず、1回の処理時間だと0ミリ秒になってしまったので、for文で100回繰り返した時間を図る。

f:id:ohguma:20161228012300p:image

変数Aの処理時間にはfor文の処理時間も含むので、中身のないfor文の時間も図って変数Bにセットする。AからBを引くことでprintfの100回文の処理時間が分かる。この例では「A-B = 42-0 = 42」なので、「printf("%ld", gV[VAR_A]);」の1回の処理時間は0.42ミリ秒となる。

より正確に測るなら、繰り返しももっと増やす。100x100=10000回の繰り返しで測った場合がこちら。

f:id:ohguma:20161228012301p:image

「A-B = 4221-34 = 4187」なので、「printf("%ld", gV[VAR_A]);」の1回の処理時間は0.4187ミリ秒となる。


変数Aにタイマー1の値を10000回セットする処理時間は、「A-B = 142-34 = 108」なので、「A=Timer1」の1回の処理時間は、0.0108ミリ秒となる。

f:id:ohguma:20161228012302p:image

printf」の処理は「A=Timer1」に比べ、0.3097ミリ秒遅く、一桁遅いことが分かる。最初の2つプロラムでは差が出なかったが、より正確な時間を図るならば、タイマーの値を直接表示せずに、一旦タイマーの値を変数にセットして変数を表示すべき、と判断できる。

また、printfの実行にも処理時間かかることが分かったので、printfの使用はデバッグ中に限定し、本番時には削除して全体の処理速度を上げるべき、となる。


C-Style上で1行分の処理でも、内容によって処理時間が異なることが分かった。その他の処理も同様に処理時間を図り、遅い処理をなるべく避け、プログラムスピードを上げる工夫をする。


なお、ここでの計測結果はあくまでも、手元にあるTJ3Bでの結果であり、他のTJ3Bでは結果が異なる可能性がある。また私が勘違いしている可能性もあるので、ここの数値を鵜呑みにせず、同様のテスト方法について考察し、自分なりに実験して結果を確認し、ロボットの性能upを図ってほしい。


個人的には、処理速度を上げたいならば、TJ3Bにはこだわらずに、より高速なCPUを使うマイコンボードを使うべきとは思うが、使う以上は性能を目一杯引き出してみたい。あくまで「ロボットの性能≒プログラムの性能」であり、「ロボットの性能≠CPUの性能」と考える。