東京工業大学 ロボット技術研究会

東京工業大学の公認サークル「ロボット技術研究会」のブログです。 当サークルの日々の活動の様子を皆さんにお伝えしていきます。たくさんの人に気軽に読んでもらえると嬉しいです。
新歓特設ページ        ロボット技術研究会 HP        ロボット技術研究会 twitter公式アカウント

井土

「ロボット技術研究会」通称「ロ技研」は、その名前の通りロボットの制作や研究はもとより、電子工作や機械工作、プログラミングなどの幅広い分野にわたるものつくり活動を行っています。

カテゴリ一覧: loading

新 玉乗りロボット

井土です。

去年あたりからちょくちょく玉乗りロボットを製作していました。
↓こんなのです。
tamanori_robot_overview

以前も玉乗りロボットを製作していたのですが、今作っているのはその改良版です。
ちなみに以前の玉乗りロボットに関する記事はこちらをご覧ください。
新しい玉乗りロボットはまだまだ制御関連で詰められていないところがたくさんありますが、最近とりあえず玉乗りができるようになりました。
実際に動いている動画はこちらになります。



最大の改良点はタイヤです。
以前はKORNYLAKのオムニホイールを使っていましたが、
今回はvstoneのなめらかオムニホイールを使っています。
この2つの大きな違いはオムニホイールの周囲の樽が1重であるか2重であるかの違いです。
1重のオムニホイールだと常にタイヤの接点と回転中心が同じ距離になるので、
タイヤが回転してもガタガタしません。

この画像を見ると違いがよくわかると思います。
omni
※画像はvstonさんから引用させていただきました
http://www.vstone.co.jp/robotshop/images/4571398310089_2.jpg

また以前はバスケットボールの上で動かしていたのですが、
今回は東急ハンズに売っていたプラスチック球ラバースプレー を塗って使っています。
なめらかオムニホイールは直径55mmなのでバスケットボールは大きすぎる気がし、
ちょうどいい大きさで安い玉を探していると東急ハンズにありました。
しかし、この玉もなめらかオムニホイールの樽も表面がつるつるなので全くグリップしません。
そこでラバースプレーを玉の表面に塗ることで解決しました。
玉の表面にラバースプレーを塗ってグリップを増す方法は熊谷先生も使っていた方法です。 

==========================================
まだ応募段階ですが、今年の8月に行われるMakerFaireTokyo2016にて
この玉乗りロボットを展示できたらと思っています。
もっと制御面を詰めていき、硬い机の上でも安定して玉乗りができるところを目指していきます。
また、外装をつけるなどして見た目も完成度を上げていけたらと思います。 

ロ技研ブログ:2015年まとめ

井土です。

どうやら会長が毎年年末にブログのまとめを書くことになっているらしいです。
ということで2015年に投稿された記事を勝手に分類しつつまとめておきます。

ちなみに2014年のまとめはこちらです。


◯作品がいくつかまとまっている(?)記事
展示会のまとめ記事とかです。
現在ロ技研では何をしているのかがなんとなく分かると思います。
ロ技研では何を作っているの?
そんな方はまずはこれらを見てください。

工大祭

毎年10月頃に行われる東工大の学校祭での展示のまとめです。
当日に展示を撮影した作品紹介動画があるので是非見てください。
作品の動いているところを見ることができます。

新歓展示
毎年春に新入生向けに行う展示です。
展示物の写真がたくさんあります。

MakerFaireTokyo2015
毎回出展をさせていただいている、MakerFaireTokyoでの展示の様子です。

rogy Advent Calendar 2015
12月にクリスマスまで毎日ブログ記事を書く企画です。
ジャンルにまとまりのないブログの記事の集合ですが、ブログ記事も作品です。


◯完成作品の紹介
完成している(たぶん)作品の紹介記事たちです。

機械+電子制御の作品(メカトロニクス系の作品)
鉄棒競技ロボット(大道芸ロボットコンテスト)
鉄棒で大車輪をするロボット
第26回ROBO-ONE
第27回ROBO-ONE  第11回ROBO-ONE Light
二足歩行ロボットの大会と出場機体の紹介
ロボミントン(NHKロボコン Maquinista) 軌道予測の補足
NHK学生ロボコン2015(バドミントン)の紹介とシャトルの軌道予測の話
4足歩行ロボットと台車を押す一足ロボット
  シリアルサーボを用いたロボットの紹介
 
機械メインの作品
遊星歯車
アクリルをレーザー加工機で加工して製作した遊星歯車
かわさきロボット競技大会
かわロボ出場機体と機械式マスタースレーブの紹介
クリスマスを祝おう!!
レーザー加工機・3Dプリンタ・NCフライスでクリスマスツリーをつくる
ソレノイドを使った工作
コアラのマーチを振る機械など
レーザー加工機で版画をつくる
レーザー加工機で木版画を作り、年賀状を印刷する

回路メインの作品
マイコンでライフゲーム
マイコンを使ってライフゲームをディスプレイに描画する回路
曲がる電光掲示板
マイコン内蔵フルカラーLEDを使った、折り曲げられる電光掲示板
ChargeStation
携帯などを充電する、自動制御の充電器
メダカ水槽の照明 
マイコンを使った自動制御の水槽の照明
ディスクリートのトランジスタだけで作った時計
フルカラーLEDで2048
はやりのゲーム、2048をLEDと加速度センサで再現

ソフトウェアメインの作品
PID制御で経路をトレースするシミュレータ
任意の経路をトレースする(しようとする)物体のシミュレータ
蔵本モデルシミュレータ
非線形振動子の同期現象のシミュレーション
Boidsシミュレータ
LOS追跡の話・集団の動きをシミュレーション
torqml
ロボットのシミュレーションデータを簡単に3次元可視化するソフトウェア
にんいろモザイク 
リアルタイムにフォトモザイクを生成するシステム
lifpgame
FPGAで描くlifegame
フィギュアと恋愛するシステム
ソニーのハッカソンでの作品
ミュージックサーバ
部室で稼働するBGMサーバ

ゲーム系
HIRED RESISTANCE
シミレーションRPG 工大祭展示の紹介
Infinity Masakari
 教員に鉞を投げて倒すゲーム
GetCoin!
敵キャラを倒し、落としたコインを拾い集めていく3Dゲーム
DistanceFieldを用いた2Dサンドボックスゲーム
Minecraftみたいなサンドボックス型ゲーム
Programmer PANIC!
横スクロールアクションゲーム
製作中RPG「天雷」とトーラス上の世界の可視化
RPG王国/数学の科学の工大祭での展示作品の紹介
ろくじゅうよんますけいさん
合宿を盛り上げたパズルゲーム
サイコロを振る
3D空間でサイコロを振るゲーム
ゲーム制作初心者がゲームを作り直してみた
製作中のシミュレーションRPGの改良


◯制作過程・技術紹介
作品の制作過程や技術的なTipsの紹介などです。
割とコアな記事もあります。

機械工作カッティングマシンの紹介

回路関連
OSH Parkで基板発注
モータドライバをつくる
KiCadのPython scripting機能を使ってみる

ロボット関連


物理
Fermi-Pasta-Ulamの問題
サマーチャレンジ
イオントラップの進捗状況

紙を折ろうぜ!
・Vimmerに消されるのを恐れずにEmacsを紹介する第1回 第2回
SNSで知る複雑ネットワーク 


◯ロ技研のイベント
だいたい毎年の恒例行事。参加は自由な感じです。

研究報告会
第61回研究報告会

年2回行われる発表会です。作ったものや開発した技術などを発表します。

rogyゼミ
第6回 第7回 第8回
不定期に開催される、ゆるい感じの部内の発表会です。
とりあえず喋りたい人がしゃべる感じ。
発表に使用したスライドの一部を記事から見ることもできます。

講習会

参加イベント
・F3RC(新入生向けのロボコン) ルール紹介 チーム紹介 結果報告 
・コミケ出展 夏C88 冬C89
・GAME^3 とは 第一回 第二回

遊んだ話
温泉旅行
スキー旅行
サバゲ1 サバゲ2
・13ゲーム勢オフ会 まとめ 第一話 第二話

その他
鈴森・遠藤研見学



◯お知らせ系の記事




2015年のまとめは以上です。
それではよいお年を〜〜 

KiCadのPython scripting機能を使ってみる

井土です。

KiCad Advent Calendar 2015
 14日目の記事です。
13日目はtd2skさんのWindows で KiCad をビルドする でした。

今回はKiCadのPythonでscriptを書いてみたというお話です。私自身も今回初めていじってみた機能なので特に詳しいわけではないのですが、script機能を使うきっかけになってもらえたらと思います。


1.KiCadのPython scripting機能とは
一言で言うと

KiCadの操作をマウスでポチポチやるのではなく、
プログラムを書くことで作業を自動化できる機能


のことです。(eagleにおけるulp)

しかもそのプログラムはただのpythonなので馴染みがある人が多かったり、
いろんな便利ライブラリを活用することもできそうです。

例として、先日miettalさんが
スイッチサイエンスPCBへの発注を手助けするscript
を作られていました。
こんな感じである意味KiCadに機能を付け足すということができます。

現在はpcbnew上でしか使うことができませんが、
いつかEeschemaもサポートされるらしいです。
pcbnew上でできることなのですが、私が把握してる範囲ではこんな感じです。
  • 基板上の物(部品,テキスト,線)のプロパティを取得・変更する
  • フットプリントの作成を支援する
  • KiCadの機能を呼び出す(ガーバー出力とか)

今回は基本となりそうな
・部品にアクセスする
・部品を移動する
あたりの機能を紹介していきたいと思います。

2.とりあえず使ってみる

まず、この記事の内容をつくるにあたって参考にしたところを載せておきます。
KiCad pcbnewの日本語公式ドキュメント
python scripttingのリファレンス
hanyaさんのブログ

今回は次のような回路を対象に話をします。抵抗とLEDが12個あります。
2015-12-14-171327_514x217_scrot

まずはこのボタンを押してpythonのconsoleを起動しましょう。
console

次のように打ちこんでみてください。

ここまで打つと「u'R1'」と表示されると思います。
このようにまずはBOARDを取得して、BOARDから弄りたいものを取得していじるのが基本的な流れになります。ここではboard.FindModuleByReference("R1")として部品のオブジェクトを取得しましたが、board.GetModules()を実行するとboardの持っている部品全てが出てきます。

部品はMODULEのオブジェクトとして管理されているので、
ここではr1というオブジェクトを通してR1の位置などを変更することもできます。
続けて次のものを実行してみてください。

こんな感じでR1が回転して移動すると思います。
2015-12-14-175414_352x153_scrot

角度はMODULEのSetOrientationから指定したい角度の10倍を渡すことで指定できます。
位置移動は直接(x,y)と渡すのではなく、pcbnew.wxPointMM(x,y)という形に変換してから渡します。wxPointMMは引数をmmとして解釈しますが、wxPointMilsをつかうとinchで渡せます。

MODULEは他にも色々なattributeを持っているので、リファレンスを見ながら色々試してみてください。


3.なにかを作ってみた
部品の移動や取得に関して、便利そうな機能をいくつか関数にまとめてみました。
https://gist.github.com/idt12312/a20f17893c3a1936b036

こんなことができます。
  • まとめて部品のリファレンスのシルクのサイズと太さを変更
  • 複数の部品それぞれを回転
  • 部品を直線上に並べる
  • 部品を格子上に並べる
  • 部品を円上に並べる
  • 正規表現で部品を検索
正規表現で部品を検索する部分についてはhanyaさんのブログを参考にしています。とても便利です。

先ほどのkicad_tools.pyを*.kicad_pcbと同じディレクトリにいれて、
pcbnewのコンソールからimport kicad_pcbと打つと使えます。

サンプルコードのようなものです。

最後の円形に並べるものを実行するとこんな感じになります。
確かに円形に並んで抵抗のリファレンスも大きくなっています。
手作業でちまちまやらなくていいので便利です。
2015-12-14-194249_949x929_scrot


4.最後に
実はKiCadには部品を円形や格子状に整列する機能が標準であります。pcbnewの配列ツールというものです。しかし今基板上あるものを整列する機能ではなく、格子上や円形に部品を新たに整列して配置する機能といった感じです。基板上にあるネットリストから読み込んだ部品を並べたい時もあるだろうと思い、今回のscriptをつくりました。エラー処理などをしていないので実用できるかと言われると微妙ですが、今のKiCadにはない機能を追加したことになるのかもしれないです。

足りないと思った機能をどんどんscriptというかたちで付け足して行けるのはとても楽しいです。こんな便利な機能が合ったらなぁと思った際にはKiCadのcommitterになって機能を追加するよりも、ちょろっとscriptを書いてみるほうが簡単です。
 

以上 KiCad Advent Calendar 2015 14日目の記事でした。
明日は masahirosuzukaさんです。

マイクロマウスの迷路探索

井土です。

rogyAdventCalendar2015 5日目です。

先日行われた第36回全日本マイクロマウス大会に友人のもりゅう氏が参加しました。

GgSBsy3s

このロボットの製作には一応私も協力をしており、迷路の探索アルゴリズムを担当しました。
今回は製作した探索アルゴリズムの概要を紹介したいと思います。

まずは同時に製作した探索シミュレータの動画を見てください。



マイクロマウスとは、迷路のスタートからゴールまでをいかに速く走れるかを競う競技です。迷路は競技直前まで知ることができず、迷路情報をロボットにプログラムすることも禁止です。ただ、迷路のサイズとスタート・ゴールの位置だけは事前情報として知っておくことができます。

競技には制限時間と走行できる回数に制限があります。スタートからゴールまでの時間は各走行ごとに測られ、一番タイムの短い走行のタイムがその人の記録になります。大抵の場合は1回目の走行で迷路をゆっくりと走って探索をし、壁がどこにあるかを記憶していきます。2回目以降の走行で1回目の走行で得た情報を元に最短経路を全力で走っていきます。


私が製作した迷路を探索し、最終的な経路を決定するアルゴリズムについて
  • どのようにして未知の迷路を探索していくか
  • どのようにして最終的に走行する経路を選択するか
の2つの部分に分けて大まかに説明をしていきたいと思います。


迷路の探索
探索にかかる時間を抑えたかったので、なるべく無駄の無い探索ができないかと考えました。
具体的には最短経路になり得そうな部分のみを探索して無駄を省こうとしました。

そこで次のようなアルゴリズムを考えました。

  1. 足立法でゴールに向かう
  2. 未探索の壁を通れるとして暫定のk最短経路を計算する
  3. k最短経路上の未探索壁を列挙
  4. 列挙した壁を調べに行く
  5. k最短経路上の未探索壁がなくなるまで2~4を繰り返す
*ここでいう最短経路とは迷路上の市街地距離のことです

足立法とはマイクロマウスにおいて迷路を探索する際によく使われるアルゴリズムです。絶対にゴールにたどり着けます。とりあえずゴールに一回は到達しておくことでタイムを残しつつ、1つの経路を確保します。

最短経路と言えば最も短い1本の経路のとこを指しますが、k最短経路とは短いものk本の経路のことです。(k=20とかでやっていました)ここでk本の最短経路を計算している理由は後ほどの最終的に走行する経路の決定についてのところで出てきます。

k最短経路を計算するアルゴリズムですが、Yen's algorithmというものを使いました。このアルゴリズムは来た道を戻って経路を稼ぐ経路を答えに含めないので今回の目的に適しています。Yen's algorithm中では2点間の最短経路を何度も計算するのですが、その最短経路の計算アルゴリズムは何でもいいです。なのでその最短経路は歩数マップをスタートからゴールまでたどることで求めました。
市街地距離であれば歩数マップから考えれば十分であり、実装も楽で計算も早いのでこうしました。

未探索の壁が無いものとして暫定のk最短経路を計算したとき、その経路上の未探索壁というのは
「もし壁がなくて通れたらこれが最短なんだけどなぁ」
という壁になっています。したがって今から壁があるかどうかを調べに行くべきです。実際に壁を見に行って未探索壁が一つ減ると、また状況が変化します。そこでもう一度暫定のk最短経路を計算し、また未探索壁を見に行きます。

見に行くべき未探索壁がなくなった時はk最短経路が確定したことになるので、そこで探索終了です。


最終的に走る経路の決定
マイクロマウスは走行タイムを競う競技です。探索時に最短経路を求めてはいるのですが、それはあくまで距離(市街地距離)における最短経路であって走行した場合に時間が最短になる経路ではありません。そこでなんとかして走行時間が最短となる(なりそうな)経路を探す方法を考えました。

まず、
距離が短いほど走行時間が短いだろう
という仮定を立てました。ただ、距離最短≠時間最短であるので
距離におけるk最短経路を時間における最短経路の候補としました。

k本の時間最短候補が求まったので、このk個の中から真の時間最短経路を選択します。
どうやって1本を選ぶかなのですが、k本それぞれについて実際にロボットがその経路を走行したとしたら何秒かかるかを計算します。直線の台形加速やカーブにかかる時間をロボットの実測値などに基づいて走行時間を計算します。また、ここではロボットが斜め走行できる場合は斜め走行をするとして考えていきます。k本すべての予想走行時間が計算できたらその予想走行時間が最短であるものを1本選びます。それを最終的に走行する経路として決定します。

以上のことをまとめると次のようになります。
  1. 距離に関するk最短経路を計算する
  2. 斜め走行できるところは経路を斜め走行に変更する
  3. 計算した経路のコスト(予想走行時間)を計算する
  4. コストの最も小さい経路を選ぶ  


最後に
来年は個人でロボットを一つ作ってマイクロマウスの大会にでます。


フルカラーLEDで2048(ゲーム)

井土です。

明日、明後日はMakerFaireTokyo2015です。
ロボット技術研究会としても展示をするので、ロ技研ブースにもぜひお越しください。

今回は展示予定のものの一つである
フルカラーLEDで作った2048
について紹介をします。

hikaru

タイトル通り、あの2048をLEDの光を使って再現したものです。


実際に動かすとこんな感じです。
操作は基板を傾けるだけで、傾けた方に光が移動していきます。
同じ色のものは合体でき、別の色に変化します。(例:赤+赤→青)



スマホのカメラなので全然色が分からなくなっちゃってますが、実物はめっちゃ綺麗です。
一応ゲームなのですが、なんとなく動かしてるだけでも楽しいです。
傾けると光が移動するので、まるで光を操っているかのような幻想的な感覚になります。



ところで2048というゲームはご存知ですか?
1年くらい前に流行ったゲームで、パネルを移動して同じ数字をくっつけて2048を作ったら勝ち?というやつです。
2015-07-31-024437_619x798_scrot

スマホゲームとかと思っている人も多いと思いますが、本家はここです。
http://gabrielecirulli.github.io/2048/

オープンソースであり、公開後に色々とパロディができたりandroidアプリになったりして割と流行っていたと思います。
本家では数字のパネルを動かして足し算していくものでした。
それをLEDの色で表現し、同じ色のをくっつけると色が変わるようにしてみたということです。


ちなみに基板はこんな感じです。

kiban


加速度センサが付いているので、重力の方向がどちらを向いているかを測ることでどっちに傾いたかを検出しています。

表示には秋月に売ってた「マイコン内蔵フルカラーLED」というものを使っています。
数珠つなぎにして、16個のLEDをマイコンのピン1本で制御しています。


それではMFT2015でロ技研ブースでお待ちしております。
ギャラリー
  • ABUロボコン結果報告
  • スマホから部屋の電気をつけてみた
  • MakerFaireTokyo2017に出展します
  • MakerFaireTokyo2017に出展します
  • MakerFaireTokyo2017に出展します
  • MakerFaireTokyo2017に出展します
  • MakerFaireTokyo2017に出展します
  • MakerFaireTokyo2017に出展します
  • たのしいロボット帝国 製作物紹介
記事検索
最新コメント