2022年5月2日月曜日

室内移動ロボット「SRS007」、組み立て説明書自動生成SW「Roborecipe」

室内移動ロボット「SRS007」

室内移動ように設計したAGVです。

特徴として以下のようなものがあります

  • 大型の車輪を採用
    直径144mmの動輪、直径75mmの補助輪を採用することで、1cmの段差を超えることが出来る設計になっています。
  • 容易に作れるフレーム
    フレームはMDFのレーザーカット品で作ることが出来て、大規模な設備が必要ありません。
  • 拡張性の高い上物
    上部のフレームにはミスミフレームを使用していて、拡張性に優れています。
  • 一般流通部品を多く使用している電装設計
    電装では一般流通部品を多く使用していて、自前で用意しなければいけない基板もユニバーサル基板と手配線で作れます。
  • 豊富なセンサー
    LIDARやバンパーセンサーといった基本的なセンサーを備えています。

組み立て説明書自動生成SW「Roborecipe」

AVGを設計しても、その制作方法記述する一般的なフォーマットはありません。
量産品のような丁寧な説明書を作成するためには大変な手間がかかります。
個人の工作品レベルの物でも適用可能で、スクリプトから組み立て説明書を自動生成するSWがRoborecipeです。




2018年5月20日日曜日

6連発紙飛行機ランチャー

学生の時の授業の課題で作った作品の解説をします。

機能

紙飛行機を発射することができます。また弾倉に6発の紙飛行機をストックできるので最大で6連射することができます。
(本当は照準機能なども入れたかったのだが、時間の関係でギブアップ)

動画


仕組み

  • 紙飛行機の先にはシューターがついています。シューターは2個1対のタイヤがモーターにより高速に回転している部分です。 この高速に回っているタイヤが紙飛行機を加速させて射出します。
  • 紙飛行機を押し出すのにはサーボモーター(KRS4031)を使っています。これにレバーとガイドをつけて動画のように紙飛行機をまっすぐシューターに送っています。
  • マガジンには最大で6つの紙飛行機が載ります。マガジンはリニアスライドに載っていて、ステッピングモーターによって駆動します。マガジンの横にはタブがついていて、これをフォトインタラプタで読むことで正確な位置にセットします。
  • マイコンはRX78マイコンを使用しています(僕が唯一まともにRXマイコンを使用した作品です)。

2018年5月1日火曜日

HTC Viveを買いました。

皆さんご存知の通り、HTC ViveはVRで最もポピュラーなデバイスです。それを今回購入しました。といってもVRのゲームではなくロボット用の位置検出が目的です。


Viveの位置検出デバイスはLightHouseと呼び、ベースステーションとトラッカーから構成されます。ベースステーションはいわば灯台のような役割をするデバイスで、赤外線のレーザーが発射されています。これをトラッカー上の赤外線センサーが受け取り自分の位置を推定します。このyoutubeを見るとよくわかります。死角をなくしたり、精度を上げるためにベースステーションは2個を1組として使いますが、1個でも動作はします。逆に現在のViveでは3個以上のベースステーションは使用できません。
 Lighthouseを使うと大体1cm以下の精度で位置を検出することができます。
今までもHTC Viveが欲しかったのですが値段が枷になっていました。私はPCを持っていなかったので推奨スペック(VR Ready)のものも含めて
  • Vive本体:10万円
  • 持ち運びケース・三脚:1万円
  • PC(VR Ready):13万円
と合計24万円もしてしまいます。しかもこのデスクトップPCはだいぶ重く展示会などに持ち運ぶことは大変です。
最近Vive Proが発売されたためにVive本体は安くなりました。さらにドスパラの中古で購入するともっと安くなります(Viveは買って少し遊んで飽きるという人が多いので、中古でも結構状態が良いことが多いという印象があります)。また、VR ReadyでなくてもGTX10XX系のGPUが刺さっていればそこそこ動くという情報を入手。そこでこれもドスパラで中古PC+GTX1050の構成を購入
  • Vive(中古):6万円
  • リノベーションPC(URL):7万円
    •  Dell OptiPlex 9010 SFF
    • Intel Core i5 3470 3.20GHz
    • GTX 1050Ti
  • 持ち運びケース・:三脚:1万円
と14万円で購入することができました。
性能を測定したところ「VR可能」ですが、無事にSteamが動き(一部かくつくものもありますが)Unityも動きます。

2018年4月8日日曜日

DCard紹介

DCardはLEDマトリクスとスピーカーを名刺サイズの基板にまとめたプロダクトです。
オリジナル基板の上には7x30個の1608のチップLEDが並んでいます(これの実装が心が折れそうになる)。LPC1768(mbed)から制御して文字が流れます。

表面実装のスピーカーフィルタレスアンプで駆動しています。そんなにきれいな音質ではないけどそこそこの音が鳴ります。下の動画ではハッピーバースデートゥーユーが流れています。

RoboRecipe紹介

RoboRecipeはロボットの組み立て説明図を自動生成するツールです。
パーツのSTLファイルと組み立て方を記述するXMLからパーツリストとアセンブルリストをHTMLで自動生成します。コンセプトなどは以下のスライドで

生成したHTML
gitリポジトリ



SRS001紹介

SRS001

SRS001はロボカップジュニアサッカー用のロボットを元にしたロボットです。
オムニホイールでの全方向移動。ボールを保持するドリブラーとキッカーが付いています。ラジコンで操縦します。

作成の経緯

このロボットは何回か改修を行ったロボットです。
  • 元は高校時代にロボカップジュニア用に製作
  • 大学受験(1回目)が終わってから、高校を卒業するまでの1か月ほどの間にフレームをCNCフライスできれいに作り直す。
  • 上記の5年後にテスト用に電子回路を変更
という稀有な人生を歩んでいるロボットです。

駆動系

ダイセンのオムニホイールギヤードモーターを使用しています。ギヤ比は100:1で、これぐらい遅くないと狭い室内での操縦は難しいです。この2つは簡単に設置できるのですが、モーターのパワーが小さいこととエンコーダーが付かないことが玉にきずですね。

このタイヤを4つ使っています。
(下の写真はロボット裏側)

内部

このロボットはボトムプレート(左:下にモーターが付いている)とトッププレート(右:上部にマイコンやバッテリーが付く)のサンドイッチ構造をしています。2枚のプレートの間には電子基板やドリブラー、キッカー等の機構が入っています。

1.ドリブラー

ドリブラーはボールにバックスピンをかけて保持する機構です。一番下の動画でロボットがボールを押しているときだけでなく引いてもボールを離さないのはこれのおかげです。
ロボットの前面に小さいタイヤが付いていてこれが回転するだけの機構です。摩擦力を上げるためにシリコンゴムのタイヤが接着されています。

 2.キッカー

キッカーはボールを勢いよく蹴りだす装置です。ソレノイドに400Vの電圧を一気にかけててこを引き、板を前に出して蹴ります。ソレノイドの定価は12Vみたいですが、瞬間的な力を得るために400Vを掛けます。(最近のロボカップではルールが厳しくて高電圧を使えないみたいですね。)

 これを本体に以下のように設置します。板の部分がボールを蹴ります。

 3.電装系

タイヤとドリブラー用のモータードライバとキッカー用の昇圧回路が入っています。

センサー

実験用にPSD距離センサをサーボモーターで首する出来るようにしたものが付いています。

 動画

動作デモ
PC画面
初期はUIをMS VisualC#で作っていました。


2018年1月10日水曜日

ROSを使ったリモートシャットダウン

最近ROSでロボットを作っていて、電源OFFが少し煩わしいように思ってきたのでここをROSで改良します。

今私の環境では手元のPCとロボット に積んでいるRaspberry Piがあります。Raspberry Piは電源を繋げると勝手にONになります。しかしOFFにするときは
  1. sshでログイン
  2. パスワードを入力
  3. $ sudo shutdown now
  4. パスワードを入力
と4行を書く必要があります。

shutdownを行うROSnodeを書いて、ROSのリモートランチを使えば1行だけで記述をすることが出来ます。
しかしshutdownはsudo権限が必要なので単純に
system("sudo shutdown now");
とCで書いても実行されません。インタラクティブにパスワードを求められるのでコマンドでどうにかすることはできません。shutdownをユーザー権限でできるように権限の設定を変えても良いのですが、面倒な感じがします。実は"sudo -S"とやると標準入力からパスワードを入力できます。そこで以下のノードを作って、リモートから実行すると電源OFFが簡単にできます。

#include <stdlib.h>
int main(void)
{
    system("echo 'raspberry' | sudo -S shutdown now");
    return 0;
}