Typing Board


Arduino Mega, Solenoidx38

キーボードのタイピングを行うTyping Boardという物を作った。よく見たりするロボットアームでのキーボード入力に比べて、ソレノイドを使うことで(ソレノイドブラスター)、高速に入力することが出来て人間の動きと同じように高速にタイピングすることができる。今のところ基本キーの1-10、a-z、エンターとスペースに対応している。ソレノイドの単価が割と高いのもあって、基本的なキーだけ用意した。シフトキーを押しながらの入力や、複数キーを使ったOS独自のコマンドをタイプするのも、このTyping Boardの仕組みを使えば簡単に実現する事ができる。

人が入力したキーに合わせてリアルタイムでタイプをしたり、入力するキーを一度に出力してタイプさせることもできる。また、BluetoothやZigbeeのモジュールを使うことでリモートタイピングも可能かな。

作ってみて分かったのが、メインで使っているキーボード(Macbook air)に”クセ”が付いていて、打刻するキー毎に少しづつ打刻圧を調整するための高さ、ストロークの時間長の調整が必要だった。あと、打刻するポイントによってストローク音が異なることから、打刻音でリズムと音が作れる。
実際の動きは動画をどうぞ。

ThinkpadとMacbook Airのキーボード入力の同期
IMG_7226

キーボードに設置した時の裏側

ソレノイドブラスターの配置

超会議2015、ギガヘボコン出てきた

ニコニコ超会議2015の企画でギガヘボコンがある、ということでエントリーしたのが1ヶ月ほど前。先着順で遅かったせいか、最初は入れなかったのだけど…キャンセルが出て繰り上げ出場できることに!!

自分のマシンはハンガーロボで、1回戦の初戦になった自分の対戦は「おにぎり vs ハンガー」という生活感がある異種格闘技戦に。

ギガヘボコンは「・ロボットの幅/奥行き/高さのいずれかが100cm以上あること。・ロボットの身長が50cm以上あること」という条件を満たしたロボット同士の相撲。”技術力の低い人限定 巨大ロボットバトル(通称:ギガヘボコン)”というタイトル通り、高度な技術を使わない巨大ロボット同士の戦いが…実際の出場ロボ達はこんな感じ。

準備している時は…

ロボが大量にあるとこれから戦うロボには全く見えない上に、冷静に見てみると”ゴミ置き場”か”何かの資材置き場”な感が漂ってくる。横のブースには凄いロボがある状態で、”Giga”ヘボコン達の戦闘力がどれくらいなのか、興味津々な感じに。

こっちはまともな夢のロボ。

自分は当初の案だと、”風船の空気圧で動くロボ”を考えたものの、実験してみたら全くビクとも動かない。というか風船の大きさでレギュレーションを回避するという、ヘボコンの「妥協と割り切り」なロボの趣旨に合いそうな姑息な戦法だったのだけど。ハンガーにロボットを吊るしてモーション作って動かしたら?とnoritsuna氏に言われ、手持ちのロボを吊るして動かしたらカッコイイかも…と思ったりして出来たのがハンガーさん。「妥協と割り切り」をキーワードに若干違う方向性に。

アイリスオーヤマのパイプハンガー(1,700円)を駆動部に、DCモーターを足としてつけて、ボクシングファイター(1,700円)を吊るして戦わせることに。目の前の的をポコポコパンチで蹴散らしてくれるはず。駆動部は元から付いていたキャスターにモータをつけて動かせるよーにしただけで、もう十分な感じ。実際の対戦だと、ロボットのポコポコパンチが宙を切ってしまい、どうやら作戦にミスがあったようだ。

何気に工夫を入れようと、赤外線センサーとArduino、DCモータドライバをつけて距離に応じて向かっていくというのも実際にやってみたりBluetoothとか無線というのも考えた訳だど、ムチャクチャ人混みの中だと経験的に無線は使えないからNGに。ただ、それらを実装すると、自分が移動しなくても、向こう(ハンガー)が服を持ってきてくれるという”リモートで動く夢のハンガー”ができる。

他のロボ達の戦いは…

動力がちびっ子が乗る車

pじゃなくqと、木魚

テ◯ガと網

ベイ◯ックスと玉

いろんな意味でカオスな感じ。試合が終わってヘボロボが勢ぞろい。まさにカオスな感じ。ちなみに、右にあるのぼりの赤いのもロボ(というかのぼり)。

みなさん、キレッキレのヘボさですげー面白かった。

将棋の読み

電王戦Finalが終わって数日経って、ふと将棋の「読み」ついて書きたくなった。

自分は下手の横好きでたまに将棋を指しているわけだけど、むかし「将棋に向かって座ってじっとしていて何考えてんの?」と聞かれたことが。確かに大会とか、TVで見ると将棋の盤面に向かってじっと座って、1手指すのに数分とか考えたりして「何考えてんの?」と思うのも無理ない気もする。

じっと座って考えている時は「読み」というのをしていて、たとえば、自分がこう指したら、相手はこう指してきて、さらに自分は…という事を延々と考えている。自分と相手の立場に立って、こういう順で指したら自分の方が良くなるか?をひたすら考える。PCが強いのは、計算量が膨大に使えてしかも電力の続く限り疲れを知らない。さらに感情的になる事も無いし(もちろん、指している時は、”えいやっ!!”とか、ここは引けないという事もある)。

計算量というのは、例えば以下の盤面。

これは自分が昔指して覚えているので、先手(盤の下)が自分で、後手(盤の上)は元奨励会のとある人のもの。自分は慣れない戦略を取ったせいで、陣形もバラバラでノーガード的な雰囲気もしてくる。けど、そんなに悪くは無いかな…とは思っていた。印象に残った棋譜はずっと覚えていたりする(大抵の段位者とかなら、勝負が終わったあと最初から再生して並べたり、目隠し将棋とかは出来ると思う)。

ここは後手の番で、動かす事ができる駒は持ち駒も入れて84通りもある。PC将棋でも平均して1回あたり80個の選択枝があるみたいで、例えば100手で勝負が決まるとすると、80x80x80…で約91桁分(100log80から)の計算量が必要になる。さすがにPCでも全部は読みきれないから、「枝切り」というので途中で読みを打ち切って、それ以上は読まないという実装をしている事も多い。
直近の5手だけ読むにしても、80x80x80x80x80 = 3,276,800,000でざっと32億通りかな。この中のほんの数個が良い手で、あとの32億手は悪手になる。選択肢だけから考えると、何本も並んだ針の穴を通すような”作業=読み”が必要になる。

ただ、人間の場合は「さすがに、その順は無いだろ…」といった手を最初から考えない事で、そんな数十億もの手を一気に省略することができる。
例えば上記の局面から、自分は△2七飛と指してくるだろうと考えていたし、実際そう指してきた。一見すると、次に△2六飛成りでなんとなくまずい、防げないかも…という気もしてくるけど、▲6五桂からの逆襲で△2七飛を空振りさせる事ができると読んでいた。

実際は、△2七飛▲4九飛△4五歩▲6五桂△同銀▲4五飛△8八角成▲同玉△3二角と9手ほど進んで、次の局面に。

ここで、次に▲4三歩とか▲4六飛▲1八角から飛車を取りにいく順や、▲2二角とかが見えて「これはまだまだ戦えるかも」と判断していた。この「この局面で自分の方が良いか悪いか?」という判断(大局観と言ったり)をしながら、1つづつ読んでいく事になる。その読んでいる間は頭だけ動いている状態で、すごく集中していると音は聞こえないし、数分考えていても感覚的には”ほんの一瞬”にしか感じられないような事がままある。自分がこう指したら、相手はこうかなー、「うーん、次はどう指すか、こっちの分岐はどうかしら?いや、ちょっと前に戻ってこの形だとどうかな。何か変だな…ちょっと違う手も考えてみるか…etc」という事を延々と。

実際この後は、▲4六飛△5四桂▲4五飛△2六飛成▲4四角△2四飛▲6二歩△5一金右▲4三歩△6六歩▲6五飛△6七歩成…と進んでいった。自陣の乱れっぷりと、少し破られたら即負けみたいなこの緊張感が堪らなく心地良かった。

将棋の最初の盤面はこんな感じでお互い同じ状態で始まる。

読みと判断(大局観)で優った方が勝つわけだけど、読みはまるで自分と相手との対話のようで、「この人だったらこうかな…」とか思いながら、1手づつ話しているような。勝負が終わって感想戦でお互い話してみると、「なるほどね」と思うことも多々ある。あと、鋭い着手だったり、やたら攻撃的だったり守りが堅かったり…性格なのか考えが盤面に出てきて本当に面白い。

5V Solenoid with Arduino

前にエントリでSparkfunの5Vソレノイドが安い&5Vで動くと書いたけど、他にトランジスタとかも使うわけで、安くて手頃なのが無いかしら…と何個か使ってみて良い感じの組合せを自分のメモとしても書いておく。

– 使うもの
Sparkfun 5V solenoid (650円)
整流用ショットキーダイオード(130円/10個)
NPNトランジスタ(100円/20個)
5.6K抵抗(100円/100個)
5Vでそんなに強くないけど使いどころかな。

– 配置はこんな感じ

– スケッチ

void setup(){
  pinMode(2, OUTPUT);
}

void loop(){
  digitalWrite(2, LOW);
  delay(1000);
  digitalWrite(2, HIGH);
  delay(100);
}

大量に並べてみると…