2015年12月26日土曜日

ゆめしテロ(夢屋 Advent Calendar 2015 18日目)

はじまらない

実を言うとこの記事はもうだめです。
突然こんなこと言ってごめんね。
でも本当です。

2,3章後にものすごく
夢屋な写真があります。

それが終わりの合図です。
程なく飯テロが来るので
気をつけて。
それがやんだら、少しだけ間をおいて
終わりがきます。

はじめに

これは夢屋 Advent Calendar 2015 - Adventarの18日目の記事です。え、今日26日?

・・・ごめんなさい。

注意

この記事の公開を躊躇った理由でもありますが、 以下には「飯テロ」という非人道的行為について書かれています。 書いた本人は自爆しました。

飯テロを受けてもなおも正気を保っていられるのであれば以下の文章を読むといいでしょう。

飯テロについて

飯テロとは無防備な市民に対し、視覚や嗅覚など人間の五感などを刺激し、 脳内に飯を想起するように仕掛ける暴力的かつ非道極まりない行為である。 特にTwitterやよくあるSNSでは写真を共有する機能を用い、視覚的に刺激する手法がよく使われている。

これの防衛手段はその五感を閉じることしかない。

・・・いや、それでいいのか?

「汝平和を欲さば、戦への備えをせよ!」そう!市民よ立ち上がれ!武器を取れ! 飯テロには飯テロで応戦するのだ!

夢屋はおいしい料理店であるからにして、飯テロの武器は揃いやすい。 今回は夢屋で良い飯テロ写真を撮るために幾つか解説する。

夢屋で良い飯テロ写真を撮るための三箇条

以下の三箇条を守ればだいたい美味しそうな飯テロ写真が撮れます。 写真のとり方はしらん。

明るい席の下に座る

言わずもがな、写真を撮るためには良い光が必要です。 できれば照明が付いている席の真下に行きましょう。

サラダが付いているものを選ぶ

サラダさえ隠してしまうと夢屋のおかずは100割茶色いです。 全部茶色い写真はあまり強力な武器とは成り得ないでしょう。 これを回避するためにも変なものは頼まずにサラダを付いているものを選ぶようにしましょう。 まあ大抵の定食にはついていますが。

開店直後に行く

これは特に揚げ物の場合に言えます。 油が新しいと、揚げ物の発色はとても良い物になります。 閉店間際にいくとやはり油がだんだん劣化してくるらしく、多少酸化したような色になります。 飯テロ写真には発色の良いほうが良いわけですので、開店直後に行くのがもっともよいでしょう。

また、上記との明るい席を確保するためにも開店直後は特に空いているので良いと言えるでしょう。

これらを守ればあなたは強力な飯テロ写真を手に入れることでしょう。

おわりに

要するに何が言いたかったかといいますと、夢屋美味しいからガンガン行こうやってことです。

遅れたことについては今度おしょーゆにハイパースライディング土下座ラムアタックをするので許してください。

2015年12月9日水曜日

ゆめいやー(夢屋 Advent Calendar 2015 9日目)

はじめに

これは夢屋 Advent Calendar 2015 - Adventarの9日目の記事です。

夢屋のメイヤーの取り方について適当なことを言いたいと思います。

メイヤー is 何

自己位置暴露と記録のためのスマホアプリ「Swarm」はご存知でしょうか。 あいぽんアンドドイドに提供されています。 このアプリは、「チェックイン」という機能で自分の位置を友達に暴露することができます。

また、同時にTwitterにその情報を垂れ流すこともできます。

で、メイヤーとは、このアプリを使いその場所で過去30日間最もチェックインした人間に授けられる称号です。

現在のメイヤーとメイヤーを取る上で障害となってくること

こちらが、現在のメイヤー、メイヤーを取る上での最大の障害になる男、 夢屋アドベントカレンダーのオーガナイザー、 蒸しタオルを作るだけでフォロワーの腹筋を破壊する男、 ボゴソートで他人の進捗を阻害する男、 ドリンクバーを払い忘れて他の人に2人分のドリンクバーを払わせる男、 フロントガラスの曇りをなんとかしようとしてさらに曇らせる男、 駐車場で絶対にまっすぐに駐車できない男、 骨折して医者に激しい運動をするなと言われているのに激しい音ゲーをする男、 夢屋のメイヤーになっただけで写真を晒される男、など、様々な異名を持つJCの おしょーゆ 氏です(夢屋にて撮影)。

タッチパネルが下半分壊れているスマホッホにキーボードを繋げてツイッターをしています。 おたくっぽいですね。 そして、彼はプロなので、私がチェックインするとこんな感じにコメントを付けてくれます。

完全にプロですね。これはいよいよ彼を超えなければなりません。さあどうしましょう。

取り方1:物量戦術

至って簡単です。お財布に物を言わせ、JCのおしょーゆを超える回数行きましょう。

例えば今、アプリを開いて確認した所、今月おしょーゆは月に10回しか行っていません。

彼にしてはちょっと少ないように思えます。まあいいや。 では、それを超える10+1回行くとしましょう。 生卵定食(260円)を毎回頼んだとして、かかる料金はたったの月2860円です。 生卵定食おかず大(340円)にしても、たったの月3740円です。

簡単ですね。でも飽きそうです。

取り方2:鬼のいぬ間に戦術

おしょーゆもJCです。たまにはパパやママの顔が見たくなるので実家に帰るでしょう。 この時が狙い目です。 夢屋代は娯楽費と割りきっておしょーゆが実家から戻るまでの間、夢屋に通いつめましょう。

ただ、1ヶ月間実家に帰っていたと言っている間にもなぜかおしょーゆは夢屋に現れる事があります。 ココらへんの見極めですが、完全におしょーゆの気まぐれですので予測は無理でしょう。 大丈夫大丈夫大丈夫とつぶやきながら夢屋に行くべきでしょう。

大丈夫大丈夫メイヤー取れるって大丈夫だからヘーキヘーキ

おわりに

要するに夢屋美味しいからガンガン行こうやってことです。

おっと手が滑った

唐揚げ親子丼定食、(通称からおや)。通常の親子丼と違い、鶏が唐揚げになっている。 なにも増さずともボリューミー。おいしい。お気に入り。完食。ごっそさん

2015年12月7日月曜日

ロボット用ラインセンサーについての知見

はじめに

諸々思うところありまして、ライントレースをするロボットを作る上で必須となる、 「ラインセンサー」について、適当に書き散らすことにしました。

多くの人は漠然と「フォトリフレクタか何かを並べて使えばラインセンサーとして良い」と考えるでしょうが、 そのフォトリフレクタの使い方一つとっても大量の方式があります。 以下には1ヶ月ほどライントレースの製作だけを意識して行えば行き着く結論が書かれていますが、 何かと時間との戦いになるロボコン屋にはそんな無駄な作業を余裕はないでしょう。 思考を整理し加速させる材料となれば幸いです。

なお、ライントレースの入門自体は下に示す綺麗にまとめてくださった方の一連の記事を参照すると良いでしょう。

それと本記事は上記の一連の記事を一通り呼んだことを前提に書きたいと思います。 めんどくさいから。w

アナログ値をつかうか、二値化するか

ライントレースするロボットを用いる競技には、ランサー、マイコンカーラリーを始め、多種多様なものがありますが、 やはりその究極とはロボトレース競技に違いないでしょう。 あの上位陣のロボットが見せるなめらかな動きというのは、フォトトランジスタをAD変換した8bitから12bit程度のAD変換によって得られた値を うまいことゴニョっとして比例制御なりPID制御なりの操作量としてモニョっと入れてできているのですから、 究極の速さを求めるためのライントレースならアナログ変換値をつかうことは必須でしょう。

しかしながら、この手法はある程度以上競技台の質が確保されていないと調整しきれない場合が多いです。 例えばロボトレーサやランサーなどはかなりの質が確保されていますが、 大学ロボコンや適当な私設ロボコンなどでは競技台ごとや同じ競技台の中でも場所によって塗りが微妙に違ったり、 紙の上に印刷したりビニールテープを張ったりするだけだったりします。 この場合はアナログ値を使ったものではうまくいかないことが多いので二値化する方が良いでしょう。 また、そういう競技ではそこまで速度を追い求めるわけでもないはずですのでこれで十分なはずです、

基礎中の基礎

大抵のラインセンサというのはLEDで対象面を照らし、その反射光をフォトトランジスタやフォトダイオードで拾うという、 フォトリフレクタをいくつか並べた方式を用います。この方式は例えば白と黒で光の反射率が違うのを利用しています。

LED側の回路について

基本的なこと

基本的には、というか大抵の場合は以下の様になるでしょう。

とても単純です。抵抗値ですが、おそらくLEDの許容電流ギリギリになるように設定する場合が多いです。 これはLEDから発せられる光が十分に強くないと外乱光によるノイズの影響を受けやすくなるためです。

LEDをON/OFFできるようにする

このように回路を組むことでLEDをON/OFFできるようにする方法もあるでしょう。

ON/OFFできるようにするといくつかいいことがあります。例えばご利益が得やすい状況順に

  • 一瞬だけ光らせるのであれば定常的に光らせるより大きい電流を流すことができる(=明るく光らせることができる)
  • ON時とOFF時の差を取ることである程度外部の定常的な外乱光の影響を減らすことができる(特性が線形であればあるほど)
  • 節電できる
  • センサー同士が干渉している時、一つづつ動かすことで干渉しないようにできる

などがあります。ちなみに図ではFETでON/OFFしていますが、特に複数個数がある場合は、 シンクドライバIC とかを使うと回路がすっきりできます。

何色のLEDをつかうべきか?

何色の(どのくらいの波長の)LEDをつかうべきかということに関して、 まず考慮されるべきは、相方のフォトトランジスタ感度特性にあった波長であるかどうかです。 感度特性のピークに近くないと、どんなにLEDを光らせても反応しないなんてことがあるかもしれません。 また、予想される外乱光の波長とは別の波長であるかどうかが重要となってきます。 これは考えればせやなってなると思いますので特には書きません。

以上を鑑みると可視光でない波長が最適なように思えます。 現在、可視光でない波長を扱えるフォトトランジスタやLEDは赤外線のものが安価であるので、 特に赤外線が用いられるようです。

余談ですが、赤外線に近い赤色も動作や照射範囲を確認しやすいなどの理由で採用されることもあります。 照射範囲を調整しなければいけない場合は候補に入れても良いかもしれません。

余談:凝ってみた

LEDを品質よく光らせたいのであれば以下の様な回路を組んでも良いでしょう。

この回路はオペアンプで基本的な定電流回路を組み、その上で大電流がドライブ可能な様に FETでバッファを組んでいます。詳しくは解説しませんが、 LEDに流れる電流は

I = R1 × Vref

になります。([定電流回路 オペアンプ]とでもググればよろし)

多分こういうのが一番凝っている回路になるでしょうが、こんなに凝らずとも、 よほどのことがない限りソフト側で負担すべき程度の誤差になるでしょう。

フォトトランジスタ側の回路について

基本的にはこんな感じになるでしょう。

これで明るければ電圧がVcc寄りに、暗ければGND寄りに触れます。 出力電圧については、ほぼ

 =  × R

になります。抵抗値の選定などはこれを目安にやると良いでしょう。 しかしながら抵抗値を大きくし過ぎると反応速度が悪くなったり、 AD変換に必要なインピーダンスより大きくなったりするので 次の図のようにオペアンプを適切に挟んでやるといいでしょう。

非反転増幅回路による倍率は、

R1/R2

で定められます。

よく使われる抵抗値は、オペアンプを挟まない場合は1~10kΩ、 オペアンプを挟む場合は100~470Ωくらいになる場合が多いようです。 オペアンプの増幅は1(ボルテージフォロワ)~5倍程度が多い気がします。

ちなみにもっと反応速度が必要な場合、フォトダイオードを使う必要が出てきますが、 そんなもの使う人はこんな解説ページは必要ないので割愛します。

2値化前提の回路

上記のLED回路とフォトトランジスタ回路にコンパレータをつけるだけでもいいかもしれません。

しかし、そんなめんどくさいことをするよりも専用ICを使い (例えばこういうの)、 もっと簡単に回路を組み、ノイズ耐性も良好にする方法があります。

以下に光変調型フォトIC、S4282-51を使った回路を例示します。

この半固定抵抗は感度調整用です。 お前マジかみたいな気分になるけどこれ以外にやり方が思いつかない・・・。 半固定抵抗以外にも固定抵抗がついていますが、半固定抵抗が0Ωになってしまった場合の 最低限の保険のためについています。

そういえば現地での感度調整は回路屋の仕事です(半固定抵抗回すだけだけど)。 ソフト屋の仕事でゎなぃ。

その他の方式

画像処理

あらゆる意味で速度との勝負です。できるもんならやってみやがれ。

???「それも経験、さ。」

ラインイメージセンサ

要するにバーコードのあれですかね。面白そうではある。

カラーセンサ

床がカラフルであるときにそこまで速度が必要でないのであれば、 そこまで応答速度が早くないカラーセンサが候補に上がります。 ただ、照明の色相や競技台による微妙な差異をどうやって取り除くかは十分考える必要があります。

センサーの配置や距離について

使用するフォトリフレクタやLEDとフォトトランジスタの組み合わせによって、 ラインが書かれている面とセンサー間の距離には適正値が違います。 フォトリフレクタを使用する場合は、適正距離が書かれていますので、よく呼んで「わかり」を得ましょう。 LEDとフォトトランジスタの組み合わせをするのであればLEDの指向性(何度広がるか)を見て、 よく考え、実験して決めましょう。

また、距離によって床に当たる光量、床から帰ってくる光量が大幅に変わってくるのは周知の事実ですから、 これを一定にする努力も周知の事実であります(でも行われない)。 例えば、坂道のあるフィールド(ロボカップジュニアのレスキュー・ラインや大学ロボコンの特定のルール)や、 紙の上のフィールド(ロボットが走るとどんな工夫をしてあってもめっちゃたわむ)では対策が必須となります。 対策例としてはロボットにただネジ止めするのでなく、蝶番や、ちょっと凝って平行リンクを使って、 ロボットからの距離を変えられるようにすることで床からの距離を一定にするという方法があります。

戦うべき外乱光

我々が主に戦う外乱光は以下の通りとなっています。

室内灯

我々が室内にいる時は大抵50Hzとか60Hzの電源で動いている照明の恩恵を受けますが、 ロボットに恩恵をもたらすかというと殆どの場合NOです。 ラインセンサーから発せられる光に比べると光源との距離も鑑みて、十分弱いと思っていると、 大会会場の水銀灯はそれでもとても明るかったりします。 覆いをつけるなりなんなり対策しましょう。

ちなみに室内灯から受ける外乱光は50Hzや60Hzをではなく100Hzや120Hzです。

太陽光など

最悪です。電灯線由来の照明に比べ、すごく強い上に赤外線成分マシマシです。 まあ直射日光の元でロボコンをやったりしないでしょうが、 うっかりうっかりカーテンがあいてたりするとギャーってなります。

フラッシュ

・・・はい。つらい。

時間的にピンポイントすぎるので異常値を取り除くとかの処理が逆にし易いですが、 大抵影響を受けやすいロボコンはフラッシュ禁止になってます。

覆い

外乱光からラインセンサーをお守りするダサいけど効果的な手法です。 つけるに越したことはないです。変なこだわりを持たずに、ダメだと思ったら付けましょう。

余談:そのライントレースはそんなに品質が必要ですか?

どのような種類のロボットでも、綺麗に、速く、ライントレースすればするほど動作は美しく感じられます。 でも、特にライントレース以外の機能を持つロボットは、ある程度以上のライントレース速度や品質を求めるよりも、 他の機能の開発に限られている時間を回したほうがいい場合がかなーりあります。 車のシートにマイクロメートル単位の精度は要りませんね?陸上国家では帆走技術ツリーは要りませんね? 目的的な品質管理を心がけましょう。

とは言え、確実な競技には正確な足回りは必須です。 1000回競技を完遂して1000回とも1回も線を外れないのが最低合格ラインです。 がんばりましょう。

おわりに

Q.君最近よく更新するね。

A.書き溜めてたのを放出してるだけなんやなって

SECCON 2015 Online CTF write-up

はじめに

ロボコン屋がチームTonkatsuNabeに入ってお茶汲み枠でCTF出ようと思ったら すでにいたので文鎮枠で出たお話を書きます。

ぼくが解けた問題

(null)

ぼくが解けそうだった問題

Reverse-Engineering Hardware 1

もうやられてるだろうと思って寝てたら誰もやってなかったので昼前に起きて朝飯食べて そこから始めました。

どんな問題だったのか

写真を見て、回路を想像し、シミュレートするだけの問題です。やるだけの問題ですが、 写真を見るのがとにかくめんどくさかったので400点問題だったのでしょう。 写真でなく回路図やネットリストだったなら50点くらいの問題でした。

おそらくシミュレート方法くらいしか解けたチームのやり方に違いはないはずです。

ICとトランジスタとダイオードと

IC

ICの型番は写真をクワッと目をみると74HC74と書いてあります。7474ですよ皆さん! D-FlipFlopが2つ入ってるだけです。CLKも同じ所につながっています。 何もむずかしいことはありません。

トランジスタとダイオード

おそらくこの問題の唯一の教養部分でしょう。工学系、情報系なら1年生でお話されるはずです。

トランジスタとダイオードをは以下の図の様につながっており、これでOR+NOTでNOR回路となっています。 型番は推測ですが2SC1815と1N4148だったのではないでしょうか。 最初、これはトランジスタかFETどっちかなとか、 日本で一般的なECB配列か海外でありがちなEBC配列のどっちかなとかいろいろ悩みましたが、 ダイオードから伸びている抵抗の接続を見て、まあECB配列のNPNトランジスタかなと決定しました。

LEDですが問題を解くために必要ないので特に考えなくてよいでしょう。 多分NANDの出力にでもつながっていたのでしょう。

そういえば東工5類のAOでこのような問題が出たと聞いたことがあります。 最近の情報系の常識になるべきなのでしょう。

シミュレーション方針1:うおおおん俺はExcel戦士だ

最初、脳筋WindowsマンのぼくはExcelを開き、x方向に論理回路を、y方向に時間をとり、 ベーっと引っ張ってデータをぺっと貼ってシミュレートしようとしました。 ネットリストから想像した論理回路はこの時点で実装されました。 その後、Pythonのコードを読み始めたところ、素直に何かのコードに起こしたほうが楽やなって なったのでこの方法は流れてしまいました。ジャバーッ

シミュレーション方針2:Python書けねぇ

降ってきたぱいてょんのコードを元に、C言語でぱぱっと書きました。

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

char c = '@', flag[334];
int x1, x2, x3, x4, x5, x6, DA, DB, FF1, FF2;

static inline int nor(int a, int b){
    return !(a | b);
}

void set_FF(void){
    FF1 = DA;
    FF2 = DB;
}

void set_gpio(void){
    int nor_out1 = nor(DA, !FF2);
    int nor_out2 = nor(nor_out1, !FF1);
    int nor_out3 = nor(DB, FF2);
    int nor_out4 = nor(!FF2, !FF1);
    int nor_out5 = nor(nor_out4, !FF1);
    int nor_out6 = nor(!FF2, nor_out4);
    int nor_out7 = nor(nor_out5, nor_out6);
    x1 = nor_out7;
    x2 = nor_out3;
    x3 = nor_out2;
    x4 = nor_out1;
    x5 = FF2;
    x6 = FF1;
}

char encoder(void){
    set_gpio();
    char v = x1;
    v = 2 * v + x2;
    v = 2 * v + x3;
    v = 2 * v + x4;
    v = 2 * v + x5;
    v = 2 * v + x6;
    return v;
}

int main(void){

    for(int i = 0; i < 10; i++){
        if(c == 'Y'){
            DA = false;
            DB = true;
        }else{
            if((i & 1) == 0)DA = false;
            else DA = true;
            if((i & 2) == 0)DB = false;
            else DB = true;
        }

        c = encoder() + 32;
        flag[i * 2] = c;

        set_FF();

        flag[i * 2 + 1] = encoder() + 32;
    }

    printf("The flag is SECCON{%s}", flag);

}

頭悪そう。

FFのナンバリングはIC内のナンバリングに対応しています。 NORは左上にあるほど番号が若くなっています。 先に来ているのが基本的に左側のダイオード入力(なはず)です。

で、実行すると

The flag is SECCON{PPP9)&"KGPP9)&"KGPP9}

よしもらったぁッ!

>>>Incorrect<<<

ンゴオオオオオオオオオオオオオオオオ

この後、頭を抱えて1時間がすぎ、無事終了を迎えましたとさ。

ちなみに間違えはset_GPIO関数の後半部分で、以下のように直すと正しい答えが得られます

x6 = nor_out7;
x5 = nor_out3;
x4 = nor_out2;
x3 = nor_out1;
x2 = FF2;
x1 = FF1;

noob...

おわりに

2015年12月3日木曜日

coinsLTで発表したよ!

はじめに

coinsLT#11で発表してきましたのでいろいろな報告込で書こうと思いました。

雑用した

12月2日にcoinsLT#11が無事に行われました。 本来なら2038年に行われる予定でしたが、ぼくが先生に書類を書いて頂いてもらいに行ったり、 機材を持ってる人に「動員してくれ~」って頼みに行ったり、 発表者募ったり、宣伝してもらったりしたせいで23年ほど早めてしまいました。

後述の理由も込みで、近いうちにLTのやり方をマニュアル的な感じでまとめたいと思います。

発表した

発表してきました。自慢話とロボコンのシロウトがやりがちなミスをまとめたLTになっています。

coinsLTのこれから

さて、coinsLT#11ですが、けっして盛況だったわけではありませんでした。 実は中継越しに見ている人を込むと前回並みだったんではないかと僕は密かに思っているのですが、 その場に来てくれた聴衆の減り方を見ると、全学的なLTブームの終焉を感じ、これはこれで腑に落ちる部分もあります。 また、発表者の半数が半固定的になってきたのも含め、新鮮味に欠けて来た感じもあります。 つまり、最初我々が楽しんでいた遊び場は寂れ、半ば見飽きたものになってしまったわけです。

以上を鑑みて、coinsLTは基本的に次回以降を考えておりません。

まあただ、本当に新しくLTをやりたい人と聞きたい人が集まってしまった場合はやらざるを得なくなるかもしれません。 その時のために一応今回までぼくがどうやってcoinsLTをセッティングしたかくらいはまとめておこうかと思います。 自分でセッティングしちゃうかもしれないけどね。

おわりに

そういえば明日全学LTだそうですね。 誰が発表するんだろ。

追記:上のスライドで紹介してた「相締め」の正式名称がわかりました。どうも「ダブルナット」というそうです。もっとかっこいい名前をつけて欲しかった。

2015年12月1日火曜日

coinsLT(coins Advent Calendar 2015 - Adventarの1日目)

はじめに

これはcoins Advent Calendar 2015 - Adventarの1日目の記事です。

宣伝を書きます。

宣伝

12月2日にcoinsLT #11をやります!!!みんな来てね!!!

タイムテーブル?今からタイトル回収しに行きます!ごめんちw

ぼくですか?

coinsLTとは

LTとは5分間のショートプレゼンでいかに語りたいことを熱く語れるか争う競技です。 coinsとついているので内容はcoinsに関係があったりなかったりすることになっています。 coinsの人も発表してるしcoinsでない人も発表してます。 14年の6月に記念すべき0回目が行われましたが、 今回はついに11回目の開催となりました。雑用担当としては楽しい限りでしゅ。

そういえば続けていくつもりがあるならそろそろ後輩とっ捕まえてやり方を教えて雑用させたいですね。

余談:coins Advent Calendar 2015作ったンゴね

みんな書いてってくれよな

おわりに

やったぜ

修正報告

coinsLTの初回は#1じゃなくて#0でちた。すまんのw

2015年6月19日金曜日

ロボット「Futura I」のおおまかな説明

はじめに

この記事は知能ロボコンの公式サイトで ロボット「Futura I」の紹介 の ロボットの特徴欄に書かせていただいたものを解りやすい形(改行の挿入や画像の追加)で 再掲載することを目的に書かれました。それ以外には特に無いです。

足回り

オリエンタルモーター社製 42mm角ステッピングモーターにマイクロマウス用ホイールを 装着したもので構成された独立二輪機構の台車です。

従輪は、底板が地面すれすれですので、カグスベールで代用されています。

回収機構

腕が3本。つまりママボールを3つずつ回収して収納することが出来ます。 これによりボールゾーンとゴールゾーンの往復回数が減り、ボール1個あたりの回収ペースは早くなります。

ターレット

腕が取り付けられているターレットは、本体に対して回転するので、ロボットがどこを向いたままでも、 前方への操作どの腕のが可能です。例えば、前を向いたまま左手でボールを回収することも出来ますし、 走りがけで前の手のボールを右に放り投げることで収納することも出来ます。 これにより、車体を回転させる時間を短縮できるので回収ペースを上げる助けとなります。

ちなみに、ターレットと本体の分離および取り付けは径のあっているプラスドライバーひとつあれば、 20秒で行えるように作られているので、他人に機構を自慢する際に、とても便利になっています。

センサー

ボール発見センサー

CMOS測距センサーを3つ使用し、60度回転するだけで180度を見渡すことが出来ます。 これにより、ボール探索1回あたりの時間を1/3に減らすことが出来ます。

カラーセンサー

ボール照射に高輝度白色LED、受光に浜松ホトニクス製のデジタルカラーセンサーS9706を使用しました。 RGB情報を取得し、HSV情報に変換した上で色相をもとにボールの識別をします。 かなり正確にボールの色分けが出来ます。

ライントレース用フォトリフレクタ回路

このロボットではステッピングモーターを使用しているので、フィードバックなしでも それなりに位置決めができます。しかし誤差はどのようにしても生じるので、 このロボットではライントレースをして誤差を解消しています。

追記:フォトリフレクタはTPR-105Fを用いています。

アピールチャンス

フルカラーLED

フルカラーLEDがロボットの後部についています。 ロボットの内部状態によって色んな色になります。

スピーカー

MIDIっぽく矩形波を流せるできるスピーカーがついています。 いろいろ出来ますが、余力があればいろいろ実装する予定です(予定です)。

追記:このスピーカーは百均で買ってきたやつをちょこっと改造したものです。

おわりに

何かここから詳しく知りたいという要望があれば書きますので是非ご要望下さい。

余談ですが、実はこの記事の元はMarkdownで書かれています(見てわかるか)。 それでうまいことやろうと思ったらあそこのページだと改行が反映されないんですね・・・。

いやあ、MarkdownというかPandocスゴイですよ。オススメです。

2015年6月16日火曜日

知能ロボコン報告

はじめに

簡単にご報告させていただきます。

筑波大学WORD編集部、チーム名「WORDロボコン部」、ロボット名「Futura I」。 こんなロボットで出てました。そうしたら・・・

驚きです、最優秀技術賞などいただきましました。

前日まで

ロボットをつくっておりました。大会3日前までの動きは以下の様な感じになってました。

母校、しぶまく軍団に便乗し、仙台まで移動しました(お世話になりました)。 そのうちまた恩返しさせていただきます。

当日

一次予選

どうも赤いボールが黄色かったようで、赤ボールがすべて黄色ボールに入って行きました。 結果は26点です。

実はこの段階ではRGBをHSVに変換して、色相だけで判断していたのですが、 思ったより赤と黄色の色相の違いがなく、ボールを遠く掴んだ場合と近く掴んだ場合で 正しく判断で来なかったわけです。

より確実な色分け。これも今後の課題ですかね。

あと、「時間ですから」機能を搭載していたので最後2つだけ掴んでいたボールをギリギリゴール出来て (残り時間コンマ1秒もなかったと思います)、審判の方に「セーフ、セーフです。」と 言われた時は最高に脳汁が出ました。

この「時間ですから」機能については後ほど詳しく書こうかと思います。

焼き肉

しぶまく、しぶしぶ軍団とそのOBで焼肉会が行われました。 その時、きゃれっと君から「来年出場してギヤド絶殺マンになる」という宣言を頂きました。 私以外にも多数の後輩が聞いておりますので、これにて言質となるでしょう。

きゃれっと君 是非是非来年よろしくお願いします。

二次予選

とても調子がよく、47点となりました。

途中で変な動きがなければ満点だったかもしれませんがまあロボコンは起きたことがすべてですからね。

決勝

距離センサが不調になりまして、ところどころ謎の挙動をいたしました。 また、懸案だった「極稀に起きる上部モジュールと下部モジュールの通信エラー」が発生してしまいアームが誤作動、 結果ボールを弾いてしまい3つほどボールゾーンの外へ・・・。

距離センサとマイコン間通信のノイズ対策、今も昔も今後の課題ですね・・・。

結果は41点でした。

余談ですが、司会のお姉さんにコアな話をしたら、とてもコアな反応をしていただきましたので、更にコアな話をしたら更にコアな反応をしていただきました。楽しかったです。ありがとうございます。ぜひ来年もやっていただけたらなぁと思います。

閉会式

あち~とか思ってぼーとしてたら「回転してボールを入れるなど云々」て司会者の方が言い始めてびっくりました。

まだおわってない

皆さんは「お家に帰るまでがロボコン」だったと思いますが、私は学内誌「WORD編集部」として出場しましたので、 「記事を書くまでがロボコン」となっております。某情報科学類の方はぜひお楽しみに。

また、最優秀技術賞なんていただいたわけですからロボットの技術や工夫点を書いていこうと・・・思います。 まあ忘れてるかもしれないのでその時は「記事書けよオラッ」っていっていただければ幸いです。また、どこを詳しく書いて欲しいか言ってくれると詳しく書くかもしれません。

あと、競技の映像を探しております(一人で、常連でもないので、そこまで余裕がなくて・・・)。 お持ちの方には是非とも公開していただきたいです。

まあこのへんですかね・・・皆さんお付き合いありがとうございました。

2015年5月22日金曜日

新しい測距センサ、シャープ測距モジュールGP2Y0E03について

はじめに

どこにもあまりまとまって書かれていないのでまとめてみることにしてみた次第。 主にシャープ測距モジュールGP2Y0A21YKのリプレース on ロボットという観点で書きます。 例によってやっつけメモですが。

旧センサ、GP2Y0A21YKとの簡単な比較

旧センサ はこちら。
新センサ はこちら。

以下簡単な比較

旧センサ 新センサ
電源 5V系 3.3V系
出力 アナログ アナログとI2C
大きさ 消しゴムくらい 旧センサの半分くらい
実用レンジ 10~80cm 3~50cm
固定方法 ネジ止めなど ネジ穴がない。両面テープや抑えたりはめ込んだり?正しいやり方をわかっていない
ノイズ対策 直近に100uFくらいのコンデンサを挟む必要がある 特になくても動く気がする
センサ PSD CMOS

使用感

以下、定量的に観測したわけではないのでとくに価値はない情報となります

旧センサに比べ、物体に直角に近くないと正しい距離が出せない?

ロボットに搭載した時、ロボットが超信地旋回してボールの距離を測るわけですが、 ボールに対して直角でないと精度がかなり厳しいということがあるかもしれません。

旧センサもだけど、「角」が近く見える。

何かの物の角を見るとブツが近くにあるように見える。

まあ赤外線を使って三角測量をしているので、期待通りに赤外線をはね返さない物体は ちゃんと測定できないというお話ですが・・・。 けど、旧センサに比べて光量は明らかに落ちているのでまあそういう意味での性能の劣化はあるんでしょうね。

新センサについて情報があるページ一覧

日本語についてはこれ以上の情報が得られなかった・・・。 英語文献さがしたくねぇよぅ・・・。

http://developerpekeloper.blog134.fc2.com/blog-entry-197.html
http://www.geocities.jp/zattouka/GarageHouse/micon/Arduino/DMSU/DMSU.htm
http://www.geocities.jp/zattouka/GarageHouse/micon/Arduino/DMSU/DMSU2.htm
http://www.geocities.jp/zattouka/GarageHouse/micon/MPLAB/16F1827/DMSU/DMSU2.htm
http://cyberworks.cocolog-nifty.com/blog/2014/10/gp2y0e03-cb8b.html
http://cyberworks.cocolog-nifty.com/blog/2014/10/gp2y0e03-36ea.html
http://technology-memo.seesaa.net/article/406837556.html
http://blog.goo.ne.jp/mypapa8888/e/f2d62fd733ba06a8e48f1a426b6efd98
http://blog.goo.ne.jp/mypapa8888/e/d5cb1a109477d35523e93d71faacd987

おしまい

そういえば新センサってルンバみたいな小型掃除機に搭載する用途に作られたセンサですが 壁に対して斜めに距離を測ったりすると正確ではない問題ってどうなっているのでしょうか???

2015年4月18日土曜日

あいつは本気だ・・・殺らねば殺られる・・・

挑戦状を受け取ったので忘れないようにメモをとる感じです。まあいわゆる言質ですね。

2015年1月21日水曜日

RCサーボに関する知見

はじめに

さてさて、比較的多くのロボコンではRCサーボを使うのが手っ取り早い場合も多く、それ故使われる場面も多いです。 しかし、インターネットにあるRCサーボについての知見は散文的に記された文章しかなく困ったので、ゴニョゴニョ調べて色々書くことにしました。

細かいことが嫌いな人向けの細かいこと

ゆとりな情科生など、ハードをいじるのはロボコンしかやってない人にとってサーボというとRCサーボでしか無いのですが工学系の人にサーボサーボというと彼らにとってはACサーボモーターもDCサーボモーターもステッパもサーボモーターであり、大変お怒りになりますのでお気をつけて。 しかし筆者はサーボと言ったらRCサーボなのでこの記事でのサーボはRCサーボだと思ってください。というか文脈で判断してくれ。

あと、ここで取り上げるサーボは、PWM信号で制御されるものです。いわゆるシリアルサーボではないのであしからず(でもシリアルサーボって顧客の求めていたものって感じがしますよね)。

サーボの構造

なかの仕組みはこんなふうになってます。 マイコンからの位置情報とポテンショメーターで得られる角度情報を元にモーターのマイコンがモーターをどう制御するかを決定しています。

信号

どんな信号を入れればよいか、それはPWMである

図のようなPWM信号を連続的に入力します。 図中の周期とパルス幅をうまいことやるとサーボの角度指定ができます。 この周期とパルス幅というのがけっこう厄介で会社ごとに微妙に違いますが、一般的には周期は10msec~20msec、パルス幅は0.8msecから2.2msecが一般的です。

パルス幅について

パルス幅は以下のようになっています(一般的なのと微妙に違うのを協調してみました)。

メーカー ニュートラル1 可変範囲2 備考
フタバ 1520usec ±500usec トラ技2000年2月号P185より3
サンワ 1500usec ±600usec トラ技2000年2月号P185より
JR 1500usec ±500usec トラ技2000年2月号P185より
近藤科学 1520usec ±500usec トラ技2000年2月号P185より
GWS社 1500usec ±700usec 限界角が±90°のもの4
GWS社 1500usec ±600usec 限界角が±60°のもの5
TowerPro 1520usec ±500usec 諸説あり

TowerPro社(SG90などが有名)については、諸説あり、秋月のデータシートではニュートラルが1500となっていますが、それ以外では500~2400usecだったり、ニュートラルが1520usecだったりと、もう滅茶苦茶だよと言った感じです。さらにSG90だけで調べるとデッドバンド幅が1usecのものから10usecのものまで存在したり、そもそも寸法も違ったりと混沌を極めています。試した結果としては1520±500usecが一番近いかな、という感じがします。

というわけで以上を踏まえるとパルス幅を求めるにはこんなふうなコードを書くと良さそうという感じがあります。

const double limiting_angles = 90.0;    //稼働限界角
const double neutral_usec = 1500.0;     //ニュートラルのパルス幅
const double limiting_usec = 500.0;     //稼働限界角の加算すべきパルス幅
static inline int deg_to_usec(double deg){
    return ((limiting_usec / limiting_angles) * deg) + neutral_usec;
}

周期について

これも各社によって微妙に違いますが、周期自体は求められる範囲内なら回転角に一切影響を与えません。 例えばGWS社は7mec~23msecですが、10~20msecの間にしておけばどのサーボでも動きそうです。 筆者は大抵15msecにしています。

人によってはこの周期でトルクが変わるとかいう人もいますが、これについては有効なソースが発見できなかったので眉唾ものということで。 ただ、周期をかえるとサーボの鳴り方が多少変わるので、何かしら影響があるのかもしれません。 筆者は何に影響があるのか解明できませんでした。くそー

信号レベル

トラ技2000年2月号P185には「CMOS/TTLレベル」との記述が有りましたので、 おそらくCMOS、TTL両対応だと思われます。

私のすべての手持ちのサーボをテストしたところ、信号レベルは3.3Vで動きました。 サーボの電源電圧が4.8Vからのも多いので、5Vをある程度下回っても駆動するはずです。

デッドバンド幅

サーボモーターはパルス幅によって回転角を決定していることは前述しました。 しかし、パルス幅にきっちり従いすぎると精度的な問題でモーターが安定しません (ちょうどこれはコンパレーターを使った時に発生する問題に似てます)。 ですので、コンパレーターを使用するときに設けるシュミットトリガのように、 一度決まったパルス幅から±数usecを超えないと反応しない、というパルス幅が設けられています。 これを不感帯、デッドバンドとよび、この長さをデッドバンド幅といいます。

電気的なテク

電源投入次のビクッ対策

電源を投入してすぐに信号を送っていない場合は、サーボが少しだけ右回転します。 これを防ぐには電源を投入したらマイコンのポートからhiレベルを送ったり、プルアップしてあげたりして すぐにhiレベルが入り続けるようにすると良いようです。

以下のリンクが非常に詳しいです。 マイコンにRC用サーボモーターを繋ぐ際の電源投入時の挙動

いかにも立ち下がりエッジで角度を決めてそうな挙動ですよね。

冴えたやり方

サーボ一つにつき一つPWMを吐くポートが専有されてしまうのは由々しき事態です。 これの冴えた解決策を見つけましたので引用します。

ハード的ないろいろ

サーボが変形すると動かない

私の後輩がやりました。

「何もしてないのにサーボから煙が上がった。」

この時、サーボの取り付け精度があまりに悪く、多少変形していました (多少、というのはノギスで図らないと判らない程度です)。 変形していたため、ギヤボックスに変な負荷がかかったのだと重います。 取り付け精度を改善してもらったところ、ちゃんと動きました。

経験則に基づく憶測

ここからはソースは俺(定量的な計測はしていない)ゾーンになります。 参考にされても保証できません。

可変範囲をこえてもできるがリニアではない?

前述のパルス幅を少し超えても、回るサーボはあります。 しかしそれを超えると、パルス幅に対して角度がリニアに変化しない気がします。

機械的中点と電気的中点はちがうっぽい

パルス幅を前述のニュートラルにすると中央点に来ますが、どうもこれは機械的な中点ではないきがします。 ニュートラルはあくまで電気的中点なんでしょうか?

おわりに

各社、規格を統一してください(懇願)。 規格を統一しなくてもいいので、せめてデータシートやアプリケーションノートは解りやすいところに置いてください(懇願)。

書くの忘れたかもしれない参考文献など


  1. センターポジションになる値。

  2. ニュートラルポジションに加算した時、左右の限界角(通常±90度)になる値。

  3. 古いものは1310±500usec。

  4. http://www.gws.com.tw/english/product/servo/sat%20form.htm

  5. http://www.gws.com.tw/english/product/servo/servo%20form.htm