2011年01月11日

マイコン処理能力比較

※2011/8/9更新 mbed(LPC1768)の結果を追加 表を3つにしました
※2011/8/3更新 C2000 28S Piccolo (TMS320F28035)の結果を追加
※2011/3/14更新 RX62T(アルファプロジェクト AP-RX62T-0A)の結果を追加 表を2つにしました
※2011/1/13更新 AVR(ATmega168P)の結果を追加  表をちょっとだけ見やすくしました。



今回は、サークルで製作している2足歩行ロボットの研究の一環として、何種類かのマイコン処理能力の比較を行ったデータを公開します。

二足歩行ロボットの歩行制御は、ZMPや足先が通る軌道を計算するような、リアルタイム処理を行う必要があります。
逆運動学のような三角関数のオンパレードな処理は、小数点以下の位も必然的に出てきますが、皆さんご存知のとおり、実数型は処理速度が遅いので使用したくないです。そのため、固定小数点として、実際の数値を適当に桁増し(うちの場合は1000倍しています)して処理させるのが、ホビーロボットでは一般的です。逆三角関数なんかも、テーブルを用意して高速に処理させています。(math.hを使わないことで、容量の節約兼ねています)

ただ、そもそものところ、どのくらい速度が違うんだろうという情報は、そこまで多くないです。
最近開発やリリースされたマイコンは、MIPS値を公表していたりもしますが。
ルネサスエレクトロニクス公式にて、固定小数点ライブラリが公開されています。
その他実行速度についての資料もありました。アプリケーションノート付近にありますので探してみてください。



とりあえず、それぞれのマイコンがどれぐらい違うのか、そして整数型と実数型のスピード差が知りたかったので、
1,逆運動学計算10回
2,軌道計画計算
3,行列の掛け算整数10回(4*4同士の掛け算)
4,行列の掛け算実数10回(4*4同士の掛け算)
の4種類を比較しました。

実験対象は以下のマイコンです。

        
マイコン名 型番 メーカ 動作メインクロック コンパイラ 備考
SH7125 R5F7125 Renesas 50MHz C/C++ compiler package for SuperH RISC engine family V.9.04 Release 00 AKI-7125(秋月)
SH7144 64F7144F50V 50MHz AKI-7144(秋月)
SH7137 R5F71374F 80MHz TG-C005(滝田技研)
SH7262 R5S72620W144FPU 144MHz Interface 6月号
RX610 R5F56108 96MHz C/C++ compiler package for RX family V.1.00 Release 01 RX-Stick
RX62T R5F562TAADFP 96MHz AP-RX62T-0A(アルファプロジェクト)
H8/3664F HD64F3664FP 16MHz C/C++ compiler package for the H8, H8S, and H8SX family V.7.00 Release 00 AKI-H8/3664F(秋月)
H8/3694F HD64F3694FP 20MHz AKI-H8/3694F(秋月)
H8/3048F-ONE HD64F3048BF25 24.576MHz RY3048F-ONE(北斗電子)
R8C/35A R5F2135CCDFP 20MHz M16C Series, R8C Family C Compiler V.5.45 Release 01 Renesas Starter Kit for R8C/35C
 ATmega168P ATmega168P-20PU Atmel20MHz WinAVR-20100110外部セラロックによるクロック生成
 C2000 28x Piccolo TMS320F28035 Texas Instruments60MHz Code Composer Studio Core Edition Version: 4.2.2.00033 f-palette(furo)
Cortex-M3
LPC1768
LPC1768 NXP Semiconductors96MHz http://mbed.org/ mbed

測定方法は、それぞれの処理開始直前と終了直後にピンの出力を切り替えて、オシロスコープでON幅を計測します。
オシロスコープはテクトロニクスの TDS1002Bを使用しました。


逆運動学計算は、整数型しか使用していないです。三角関数も全て行列です。6関節分を1回で計算しています。
軌道計画は、イメージとして二足歩行ロボットの足が地面から離れて、再び地面につくまでの軌道を計算していると考えてください。

結果(単位:ms)


マイコン名 逆運動学 軌道計画(10) 軌道計画(20) 行列計算(long) 行列計算(float)
SH7125 6.12 2.361 8.216 0.646 4.832
SH7144 3.074 1.207 7.204 0.364 2.464
SH7137 7.052 1.836 6.284 0.9264 3.844
SH7262 4.67 0.2 0.727 0.466 0.46
RX610 3.342 0.2266 0.874 0.3112 0.3786
RX62T 1.957 0.113 0.433 0.1565 0.1882
H8/3664F 32.9 - - 10.71 31.8
H8/3694F 26.32 - - 8.568 25.42
H8/3048F-ONE 18.15 8.62 34.76 6.664 21.7
R8C/35A 59.64 - - 22.5 247.6
 ATmega168P---7.74485
 C2000 28x Piccolo9.2091.7986.2240.72573.353
Cortex-M31.4630.27741.100.12270.7696

軌道計画のとなりの数値は、軌道を何分割して計算したか、です。
欄が「-」となっているのは、メモリ不足で実行できませんでした。よって記録なしです。
R8C/35Aの行列計算実数型は、メモリの関係で1回しか計算できなかったので、1回の計算結果を10倍した数値です。


以下のグラフは、評価した全てのマイコンにおいての処理時間(行列計算2種)の結果です。
処理の早いマイコンはグラフが描画されていないように見えますので、次のグラフを見てください。
syori1.JPG


以下のグラフは、上のグラフから一部の速いもののみの処理結果です。
syori2.JPG

以下のグラフは、RX、SHマイコンの全種と、比較用にH8/3048F-ONEマイコンの行列計算2種、軌道計画(20)、逆運動学の各種計算結果です。
syori3.JPG


H8が遅いのは知っていたのですが、思った以上に遅かったです。
また、RX610とRX62T、SH7262はFPUが入っているので、floatにしてもあまり速度は低下しませんでした。

ってか、R8C/35Aがなんでこんなに遅いんだろう…。プログラムのアルゴリズムや、変数の型なんかは全部同一なのに…。
R8C速いっていうのを時々聞くので、ちょっと期待していたのですが…。
最適化は全て切ってありますが、最適化を使ってもH8に勝てず…。(詳しい数値は記録し忘れました…)うーん、なんでかなぁ。きっと私が悪いんだろうなぁ。

ATmega168Pは同クロックのH8/3694Fより若干早いです。ただそれも整数型計算のみ。実数型はタブーなぐらい遅いです。
小規模な電子工作であれば、値段的にも魅力です。

Piccoloは、うちの大学直轄のロボット研究組織である「fuRo」が開発した「f-palette」に搭載されていて、ちょうど1年生のSAをやることになった関係で頂きました。
SHと同程度の処理能力な模様です。高分解能なタイマユニットなどが魅力なマイコン。

Cortex-M3は流行りのmbedで実験してみました。
整数演算は今のところ最速、浮動小数点もFPUが入っていないのに、かなり善戦してる。FPU無しではダントツの1位。
ARM系統が思ったより早かった…!

H8は「その他の製品ファミリ」に既に入っているので、マイコンカーでも今後R8Cへの流れが進んでいくと思われます。
でも移行し始めたと思ったら、経営統合&RL78マイコンの登場で、将来的には再び移行の流れになりそうな気がしなくもない。ただ、RL78は78Kがベースだし、開発環境も旧NECのやつだし。
もちろん開発環境含め統合、かつ今までのR8Cや78Kも供給を続ける、とのことだけれど。


開発メーカはまだ良いとして、やっぱりホビーや教育関連になるとこういう話は面倒臭いよなぁ…。
きっと、「秋月が出荷終了する」とかそのぐらいのことが起きない限り、移行はしないだろうし。
とはいえ、古いファミリのマイコンで勉強するより、近年よく使われるマイコン、環境で勉強したほうが今後も役に立つことが多いだろうし。

とかいううちのサークルでは、SH7125かRX62Nが主流でございます。

posted by Tmk at 02:56 | Comment(10) | TrackBack(0) | MCR以外

2011年01月09日

今回は知能ロボコン

今回は知能ロボットコンテストについてです。
MCRの記事じゃないですが、気になる方が入れば見ていってくださいませ。

とりあえずマシン紹介です。

チーム「WTM」 マシン名「ピクソン」
IMGP0692.JPG

第3回先端ものづくりチャレンジin習志野 最優秀賞受賞
予選競技点29点(5分)、決勝競技点41点(10分)

大きさ:320*320*270ぐらい(ファンユニットを上に向けたとき)
重量:1762g(電池除く)
電池:Li-Po 4セル 1100mAh(メイン)
   Li-Po 3セル 1100mAh(ファンモータ用、とりあえず7〜12V程度のバッテリーを使用)
モータ:Maxon A-max22 333978(ギアヘッド4.4:1とエンコーダ100パルスが付いています)
ギア比:83.9:1
ファンモータ:タミヤ模型 タムテックギア スポーツチューンモータSPT(http://tamiyashop.jp/shop/product_info.php?products_id=40537
マイコン:SH7125(秋月のマイコンボード使用)

基本的にライントレースを行ってボール探索エリアまで移動。エリア内ではオドメトリを利用しつつ、ファンモータを使ってボールを回収、1個ずつボールをゴールまでいれにいきます。
シャーシと足回りは先輩の製作したものを譲り受けています。
その関係で速度が出ない(12Vで250mm/s程度)ので、Li-Po4セルを無理やり使用しています。
回収ペースは、5分で8〜10個程度。やはりギア比を落として、スピードがほしいところです。

オドメトリで自己位置がわかるので、壁にぶつからないようにしたり、ラインから外れてボールを回収し、再びラインまで戻ってくることができます。
なるべく手前のボールから迅速に回収し、ボールの見落としがないようにプログラムしました。
ファンユニットにボールが吸い付いたかどうかの判定は、ユニットに搭載されてあるカラーセンサが行います。

動作の様子は動画をどうぞ。(第3回先端ものづくりチャレンジin習志野 決勝戦)
このぐらい解像度落とせば、顔は大丈夫だろう…多分。



最後3つは、会場の照明が想定よりかなり強烈で、ボールを既に持っていると誤検知してしまったためです。
本来なら、壁にぶつかりそうになったらラインまで戻ってくるのですが、それも動きませんでした。おそらく照明対策をした際にいじってしまったのかもしれないです。
ちなみに動画開始時点でリトライ1回しています。これも照明の影響による認識ミス…を無くすためのプログラムが調子悪かったのだと思われます。






ここからは、過去の写真と動画を交えたエピソードなんかを。

大学3年の最初に、うちの学科では研究室に配属されます。
研究室に所属してから、もちろん何かテーマを決めて研究をするわけなのですが、特に強くやりたいテーマがあるわけでもなく、MCRでも1人でなにか作ることをずっとやっていたので、4年で本格的に研究を行う前に、複数人でなにか一つのものを作るという経験をしたいなーと思って、つくばチャレンジとの二者択一で選びました。当時はつくばチャレンジに大きな興味がなかったというのもあります。
最初は3人チームが3つ、という状態でスタートしました。
それぞれ、メカ、回路、ソフトを1人ずつ担当します。(私はソフトです)
ライントレースを主体として、補助的な位置推定にオドメトリを使う作戦です。(とか書いてますが、これも2転3転した結果です)

で、つくりはじめるのですが、主に前期はサークルで副部長をやって忙しかったこともあって、回路をひと通り動作するプログラムを作るだけでした。
メカ的な部分は担当者が全然やってないし、回路的な部分は、研究室の先輩が作った、ひと通りの機能が揃った既存の基板もあったのですが、担当の@akichanX(Twitter)が1から勉強したいと言っていることもあって、とりあえず動く物のみが出来上がっている状態。
大会までに3回の2研究室合同(同学科内の2つの研究室の3年生が取り組んでいます。)の中間発表会があるのですが、第1回の時の機体はこんな感じ。

SBSH0332.JPG

本来ならライントレースなんかも私がやる予定ではあったのですが、プログラムを組んで実機を動かせるかどうかが、私が把握していない状態だったので、本当に「いつの間にか@akichanXがプログラムつくって走ってた」状態。その後は事あるごとにチラチラ愚痴をつぶやかれたような気がします。気がするだけです。
上記の理由にプラスして、チームとしては完全分業制でしたが、メカも回路も予想していたレベルに到達していなかったので、今ひとつやる気も出ず、その時点でプログラミングするという行為に意味が無いように思いました。実際、私が作った関数的な部分はその時から変更がないですが、ライントレース系のプログラムは最終的に一新されています。

その後の回路担当である@akichanXの製作っぷりは半端ない改訂回数でした。そのへんは心配しながら見守りつつも、とても頑張ってました。
ただ、メカ関係は設計図すらない状態。そんな状況でゴタゴタあって、なんか機体が上がってきました。
それがこれ。

CIMG0137.JPG

回収ボールを収納し、あとで一気に放出する考えでしたが、とっても残念なメカが上がってきました。
一応期待していたのですが、とってもありえない…。うちのサークルで二足歩行ロボットを作る1年生にも完全に負けてる。

第2回の中間発表会はこれで出ました。その時は、ライントレースをして回収行動を開始する所までしかプログラムがありませんでした。
アホみたいに長いアームに加えて、安いMG945サーボなので、すぐに軸受も馬鹿になって、悪い制御と相まってハンチング…。
まさに「荒ぶるアーム」。今でも時々ネタで出てきます。
数日の調整で満身創痍になったのでマシンを放棄。その後メカ担当が研究から脱退。そのため私が同じコンセプトで、結構時間かけて設計をしました。
ですが、時間がないことや人員も2人だけになったということもあって、堅実に1個ずつ回収する方法に転換しました。
実際、ハードウェアはボールを検出するPSDセンサの取付部分と、ボールを回収するファンモータユニットの取り付け部分のみの設計のみで、既製品も利用したりして、点数が少ない加工もすぐ終わりました。

DSCF4278.JPG DSCF4280.JPG

DSCF4281.JPG DSCF4283.JPG

後はひたすらプログラミング。動かしてはプログラム変更して…の繰り返し。
私にとっては、テンプレートが出来上がってるマイコンカーと比べると、何倍もの労力をつぎ込んだつもりです。

2回目の学内中間発表ぐらいからでしょうか。少なくとも学内の他チームに負けないという意識は持っていました。大会前の数日は、他チームに負けたらしばらく引きこもってやろうかと思ったぐらいです。(と書くと、1/8の記事にちょっと反しますが。でも大会直前は「負けないように頑張る」じゃなくて「絶対勝てるから頑張る」しか考えてませんでしたね。)


当日は、会場の照明にカラーセンサが負けて、ボールの検出に不具合が起きてしまいました。(ボールをファンユニットが吸ったかどうかは、カラーセンサのみで検出しています。)
直前まで調整したのですが不完全だった模様。前日のうちに分かっていたのですが、一晩では冒険もできず、対策できませんでした。
予選、決勝ともに、カラーセンサの不具合からなる誤動作で競技終了です。照明がそこまで強くなかったら、パーフェクトも可能でした。(練習では何回も出来ていました)

イルミネーション関連は、ほぼすべて@akichanXの提案と製作。
私は手を回しても、プログラムが半端になって終わっちゃうんじゃないかと思っていたので…。
後付、しかも大会直前だったので、中身はどうしてもゴチャゴチャしてしまいましたが仕方ないです…。
それでも見た目はいい感じに仕上がったので、審査員評価にプラスになった部分も大きかったようです。
私がうまく制御しきれなかったのは残念ですが…。(直前はカラーセンサ対策で精一杯でした)

それと、山形電波高校の齋藤先生ともお会いして、色々お話させていただきました。(http://www2.jan.ne.jp/~csc/narashino10/narashino10top.htm
あっという間に終わったなという感じでしたが、なんとか最優秀賞もらえました。同じ研究室のもう1チームがデザイン賞を頂きました。競技点についても、私達のチームについで2位でした。

技術的に勉強できた点は幾つかあったのですが、やっぱり共同で1つのものを作る大変さと難しさ、そして可能性を勉強できたことが一番の収穫です。
あぁ、ハッピーエンドでよかったなぁ。

DSCF4318.JPG
posted by Tmk at 23:51 | Comment(0) | TrackBack(0) | MCR以外

2011年01月08日

今年はじめて

お久しぶりです。今年はじめての投稿になります。結局津田沼祭の記録以降、何も書かないまま新年を迎えることとなってしまいました。
暇がなかった、といえば嘘になりますが、あんまりMCRにかける時間が取れないでいます。多分まだしばらくとれないんじゃないかなー。私のポテンシャルが低いのが原因なのですが。



そういえばTwitterではつぶやいたり盛んに出てたりするのですが、今まで使用していたThinkPadT61に加えて、ThinkPadX60sを中古で購入しました。研究室の同期たちがPC買い替えラッシュの時に、私もサブノートぐらいほしいなと思いまして。
ドッキングステーションが付属して23kぐらいだったので、十分お買い得なんじゃないかと。
Inventorなんかでしっかり設計するとか、パワーを使う作業でなければ基本的にX60sで十分(Core Duo 1.5GHz+メモリ2G)なので、普段はこちらを持ち歩いています。拡張バッテリーを追加購入しても軽いので、今後とも(大会でも)お世話になることでしょう。



もちろん、MCRにかける時間が少なくなった代わりにちょくちょく他のこともやっています。とはいえ、たいしたことないことばかりです。
一番大きいのは、所属する研究室で取り組んでいる「知能ロボットコンテスト」
毎年大学内で大会を開催し(とはいえ、主催が習志野市で、外部の方々の参加も歓迎しております。http://www.narashino-cci.or.jp/topics/mono_challenge/20101212.html)、その際に成果を発表するといった形。

過去2回の大会では、うちの研究室から出場した機体は全チーム特典なしで終わってしまいました。
そんな研究室にとっていわく付きの大会で、私のチーム(私ともう1人 Twitter account @akichanX)が最優秀賞を受賞させていただきました。
去年の下半期はこれにだいぶ時間をかけたので、成果をあげることができて良かったです。

私的には、変に勝つことを意識するより、自分の理想としていることが大会で達成出来れば、それのおまけとして賞をもらえる…といった考えの時のほうが、いい結果が残せる気がします。気がしますが、過去に参加した「競技大会」では、何れもそうだったと記憶しています。
とはいえ、目標を「簡単にはできないけれど、きっと達成できるだろう」と自分で思う部分に設定して取り組むべきではないかなと思います。現状維持は衰退の始まりなので、ほんのちょっとだけでも、やったこと無いことを足すだけで十分です。

最期まで(競技結果が確定されるその瞬間まで)諦めないこと、大会前日〜は気持ちをポジティブに考えること。
私は、この2つは必ず意識するようにしています。意識するようになったのは大学に入ってからですが。
とはいえ、私の最近のパターンである「大会翌日は力尽きて動けない」というのもどうかとは思いますけど…。

…こんな話をなんで書いたかって、明日が高校生MCRの本番なので。私が初めて全国大会に行ったのは、5年前のこの時期です。当時から、「最期まで諦めないこと」というのは無意識のうちに行動に移していましたね…。試走会の後にひとりで必死に修理したのはいい思い出。
それなりに遅いだろうと思っていた自分のマシンが、全国の舞台では全力を出しても、それは想像していた以上に遅すぎるというのを実感させられたのもいい思い出。

高校生の皆さん、悔いのないように最後まで頑張ってください。


今日これから、知能ロボコンのレポート的なことを書こうと思いましたが、またあとで書くことにします。あと、サークルで製作している二足歩行ロボットの付属実験の結果についても書こうかなと思ったのですが、これもまた後で…。

皆様、本年もよろしくお願い致します。。
posted by Tmk at 03:54 | Comment(0) | TrackBack(0) | その他・活動記録