2018年7月10日火曜日

第16回ROBO-ONEカンファレンス発表

土曜日の第16回ROBO-ONEカンファレンスで発表しました。「第7回ROBO-剣優勝ロボット『逡巡』」という題目でした。4月の第7回ROBO-剣で優勝した際に依頼を受けたものです。ロボットのハードウェア製作と制御の方法論、実装について解説しました。



もともとROBO-剣という大会自体が自動制御ロボット技術を指向したものでした。ROBO-剣は自律型と操縦型が混成で大会が行われており、逡巡は完全自律型で優勝した初めてのロボットです。そのため、認識や運動制御をメインの話にしました。

ロボットの自動制御というのは一種のAI分野の技術であるといえます。しかし世間一般でいう「AI」のイメージとはおそらく異なり、運動学計算、キャリブレーション等、とにかく地味な話が続きます。まずはこれができないとロボットを思うように動かせないからです。また、実はそれが現状ほぼこのロボットのすべてであるともいえます。センサーで観測した標的の位置に、アームを動かして接触させる、という最低限のシステムを愚直に構成しています。これら地味な部分を実装したシステムが完成して精度もそれなりに出るようになったので、なんとか試合ができるようになった、というところです。連続技、返し技、相手との読み合い等、高度な処理はまだこれからです。

カンファレンス参加者は、通常に比べて大学生が多かったそうです。また、かなりの割合が工学部の学生さんでした。
今の高校数学では行列は教えないそうで、1回生(第1学年)の教養科目(線形代数)で学ぶことになるのだと思います。スライドの説明で使っている数式は、基礎レベルの線形代数と微分積分で理解できるものです。もっとも、数値最適化という若干計算機科学に近い話も入っていますが。無味乾燥に見えるかもしれない数学もこういった応用があるということで、少しでも学生さんたちの動機づけになったことを願っています。

2018年5月1日火曜日

KHR-3HVを自律型ロボットにする工作例 - ハードウェア編

SpiritはRaspberry Pi 2とカメラを使ってKHR-3HVを自律型ロボットにしたものでした。ただ、少なからず機械工作・電子工作が必要でした。
最近はより小型のRaspberry Pi Zero (W)が販売されているので、より簡単に類似の改造をすることができます。以下に例を示します。


配線は次の図のようになります。

Raspberry Pi ZeroからUSB DUADアダプターのシリアルポートを介してKHR-3HVのコントロールボードRCB-4に各種コマンドを送信します。ここは本来KONDOのモーション作成ソフトウェアHeartToHeartで使われるポートですが、KONDO RCB-4リファレンスキットとしてコマンド仕様が公開されているので、これに従って次回ロボットを動かします。
Raspberry Pi Zeroのカメラで環境を把握(例:床の線を読む)、RCB-4のモーションでロボットを動かす、という自律型ロボットとして最低限の入出力機能を搭載することができました。

使用部品

  • 市販品
    • KHR-3HV 本体、バッテリ
    • Raspberry Pi Zero W
    • Raspberry Pi Zero 用ケース
    • USBケーブル A-microB 
    • モバイルバッテリー : 適宜。写真はELECOM DE-M04L-3015BK
    • USB OTGケーブル microB(M)-A(F) : Raspberry Pi ケースキットにも付属
    • KONDO DUAL USBアダプター (もしくは シリアルUSBアダプターHS)
    • 10cm程度のサーボ用ケーブル (DUAL USBアダプターとKHR-3HVの接続に使用)
    • Raspberry Pi用カメラモジュール
    • Raspberry Pi Zero用カメラケーブル (ケースキット付属のものでは長さが足りないため)
    • M2x8 タッピングビス (KHR-3HVに付属、樹脂への締め込み用)
    • M2 低頭ビス
    • 強力な両面テープ (屋外掲示用など)
  • オリジナル機械部品  --- 設計図DXF/STLファイル(ZIP)
    • ベースプレート (ABS 2mm厚の板を切削)
      大きな半径の円弧の方が背中側になります。



    • スペーサー (ABS 2mm厚の板を切削)
      カメラフレームとサーボホーンのネジが干渉しないように使用します。


    • カメラフレーム (3Dプリント)



以上です。

組み立て手順概略

ベースプレートとスペーサーを適当なネジで締結して組み立てた後、KHR-3HVの頭部パーツを外して空いた首のサーボ(あるいはダミーサーボ)のサーボホーン部分に取り付けます。その後カメラフレームをネジで固定します。
モバイルバッテリーとRaspberry Pi Zeroケースは両面テープでベースプレートに固定します。

注意事項

メカの干渉について

首の回転軸を使う場合もベース自体はフレームと干渉しないようになっていますが、このサイズを超える部品を上に乗せる場合は首を回すとバックパック等と干渉する可能性があります。適宜スペーサーとなるものを何か間に入れる等工夫が必要になります。首にモーターが入っていない場合は干渉を気にしなくてよいので配置により自由度があります。

カメラの取り付けについて

直立からの転倒時カメラフレームが地面に当たらないような位置関係を確認し、またケースの蓋が開いたりコネクタが抜けたりしないように補強する等の工夫も必要です。必要ならフレーム部品を追加して頭部を保護するように改造してください。

なお、Raspberry Pi Zeroの純正品ケースにはカメラ取付用の蓋も付属していますが、カメラの向きがこの搭載方法に合わないため使いませんでした。これはTeapotの例を見ると分かりやすいと思います。Teapotでは機体の構造上ちょうどケースを縦向きに搭載する格好になりました。カメラはこの向きの時に横長の視野(ランドスケープ)になります。床を動き回るロボットにはこの方が都合がよいのではないかと思います。ですがKHR-3HVでこの向きに乗せようとすると大きく上にはみ出す格好になり、機械強度の確保が難しく転倒で破損しやすくなると考え、やめました。

USBケーブル

L字型ケーブルを使うとすっきりするかもしれません。Raspberry Pi ZeroのUSBコネクタは電源とOTG用が2つ近くに並んでいて干渉し得るので、L字ケーブルを使う場合はL字の曲がる方向に注意して選定してください。

改善案?

Raspberry Pi ZeroのGPIOコネクタに出ているシリアルポートを使えばUSB DUALアダプターは省略できますが、その場合はRaspberry Piのこの機能を使う設定と、コネクタのはんだ付けに加えてケーブル、電圧変換回路を専用に作成する必要があるでしょう。私はまだ試したことがないので、本記事ではこれは範囲外とします。これを除けばはんだ付けなしで工作が完了します。

2018年4月22日日曜日

第7回ROBO-剣優勝

4月14日に行われた第7回ROBO-剣に参加しました。
初優勝、加えて画像処理テクニック賞を受賞しました。

今回も基本的なアルゴリズムは前回とほぼ同じだったのですが、対象物位置の計測とアームの機械およびハンドアイ系のキャリブレーション精度を向上させました。それにより打突の精度が上がり、良い結果につながったのではないかと思います。

ハードウェアと基本的なアルゴリズムは同じなのですが、実は見えないところで大きな変更を行っています。ソフトウェアをすべて書き直しました。今後の活用等を考えてロボット用フレームワークのROSを使用するようにしました。

プロセス間通信による分散処理・非同期処理のためのフレームワークとして活用した他、センサデータ取得や3次元点群の処理でROS用に作られた既存のモジュールを活用できました。
サーボの制御、ハンドアイ系のキャリブレーション、アームの制御、順・逆運動学計算、動作計画、といった部分は過去の自作プログラムを分割・移植して自作モジュールのノードをいくつか作る形で開発を進めました。


上の動画は、DS325から得られる頂点データ(ポイントクラウド)と、そこからの対象物検出結果を可視化したものです。ROS標準の可視化ビューアrvizを使用しています。以前はOpenGLを使って自前で描画していましたが、それ以外の部分に注力することができるようになりました。
また、深度画像センサからの情報(ポイントクラウド)を処理する基本的な操作を実装したPCL(ポイント・クラウド・ライブラリ)を使用しました。このPCLも元々ROSの一部だったもので、ROSのモジュールとして公開されているものです。
色と位置の両方を考慮したクラスタリングによりクラスタを生成、その中から対象物の色マーカー(赤・黄色・青)部分らしいものを選び、およその中心位置を求めるという操作を行っています。

なお、ROSで多関節マニピュレータといえば多くの解説書・入門書では動作プランニングフレームワークのMoveitと動力学シミュレータGazeboを取り上げています。今回私のロボットでは使用しませんでした。
今回私がROSを使うのがほぼ初めてだった上にROBO-剣の準備を始めたのが3週間前だったという状況で。最初は入門書にしたがってMoveitを使うつもりでした。ところが私のロボットのアプリケーションで要求する機能はこのフレームワークでは出来ないか、あるいは少なくとも入門書に書いてある使用方法を逸脱するためこの短期間では難しいことがわかりました。そのため途中からこれらを一旦保留し、とりあえず動くように前回までのプログラムをROSのモジュールとして移植するにとどめました。メリットは大きいと思うので今後これら既存の強力なモジュールとも繋げられるようにしていきたいと思います。

大会表彰式にて、次回ROBO-ONEテクニカルカンファレンスで発表して欲しいという依頼を受けました。大会前に慌てて書いた汚いプログラムを整理するのと並行して発表も準備していきたいと思います。

2018年3月18日日曜日

第13回チロルチョコロボット大会参加

第13回チロルチョコロボット大会に参加しました。
結果、総合成績1位でした。なお、同点により1位が2チームありました。
大会は3つの競技からなり、各々の競技単独ではどれも1位ではなかったのですが総合得点でトップの成績となりました。



昨年参加したロボット「Teapot」は関節に使っていたR/Cサーボモーターが壊れる等して再使用が難しく、かつ交換部品も入手できないものでした。また、ロボットの制御装置もマイコンを使ったものではなくラジコンの受信機を使用して全関節を直接操作するという方法で、操縦が難しいものでした。他にも色々と直したい部分があったので、すべて作り直しました。詳細は後日書きます。

Raspberry Pi Zero WとRaspberry Pi用カメラモジュールを組み合わせて、ゲームコントローラーによる無線操縦と無線LANによるカメラ映像の伝送を実現しました。ちょうど前年のラジコンプロポシステムと無線カメラを端末識別機能のある通信に置き換えた形です。

また、せっかく映像の伝送がデジタル化されてプログラムから容易に扱えるようになったので、半自動照準機能も試験的に搭載していました。これは、おおまかに標的の方向にロボットを向けた後に特定のボタンを押すと、微調整して精密に狙いをつけてくれるという機能です。
下の動画がその様子です。P制御特有の減衰振動から簡単なフィードバック制御を行っているらしいことがわかると思います。紙コップは大きいのでそこまで精度は必要なく、より速く照準できることを重視してゲインを高めにし、減衰振動が起こるぐらいに設定しました。実験環境では、認識さえうまくいけば70cm先の標的のど真ん中にほぼ確実に命中するところまでできました。
山口 辰久さんの写真
ですがその前の画像認識処理部分が不十分で、また実際の会場の環境を想定したものではなかったので実際の競技では誤った場所に標的を認識してしまい、ほとんど使えませんでした。それでも会場でシステムの説明をして色々な人に興味を持ってもらえました。
今回搭載した認識アルゴリズムは、競技場の1辺の端にコップが並べられることを利用して、競技場の端の線を検出し、その周囲で周りより明るいものをコップと認識するというものでした。
会場では床面と紙コップが明るさが同じぐらいであり、また背景にも色々なものが写るため単純な方法では競技場の縁を正確に認識できなかったという理由によりうまく行かなかったのではないかと考えています。

2018年2月12日月曜日

ROBOT JAPAN 15th 参加

ROBOT JAPAN 15th 参加


2月12日に行われたROBOT JAPAN 15thに参加しました。
  • ロボットダンス部門「Twin Ducks」 3位入賞
  • 一発芸部門「逡巡」 1位
「Twin Ducks」は「手乗り二足歩行ロボット」としてMaker Faire Tokyo 2017に出展していたロボットです。2台の同型ロボットによる音楽に合わせたペアダンスを行いました。

「逡巡」は元々ROBO-剣に出場していたロボットです。墨と毛筆で文字を書く「書き初め」のパフォーマンスを行いました。今回で3回目です。掛け軸用の長い紙に書けるように紙の巻取り装置を製作し、自ら紙を送りながら「一期一会」の4文字を書く動作を行いました。

なお、この巻取り装置部分は「スクロールバー」と名づけました。これはコンピューターのユーザーインターフェースに使われている「スクロールバー」と同じ語ですが、英語でscrollというのが元来(紙の)巻物の意味であり、かつ文字通り「棒(bar)」であることも掛かっています。

2018年1月3日水曜日

旧ブログへのリンク

2017年以前の投稿は@niftyココログ「山口自動機械 作業日誌」にあります。
http://kazeusagi2005.cocolog-nifty.com/diary/

@niftyココログの記事をBloggerに移すことも検討していますが、時期は未定です。

2018年1月1日月曜日

2017年、その他の製作物

@niftyのブログサービス(ココログ)を使用していましたが、スマートフォンで見た場合に先頭に広告が出る点で読者にとって不便さがあるので移行を検討しています。プロバイダのおまけで付いてくる追加料金なしのプランであるためではないかと思いますが。また、記事を作成するUIもココログの方は少し前の時代に作られたもので現在では少し不便に感じるところもあります。

3Dプリント洗濯ばさみ

洗濯ばさみです。左が市販品、右が自分で設計したものです。FDM方式3DプリンタのAfinia H480を使用してPLAで出力しました。積層面は写真で机に平行な方向にしました。(ほぼ自明かもしれませんが)2つの部品と、別途用意したC字型の金属ばねを組み立てます。
経年変化で樹脂が劣化して壊れた洗濯ばさみを処分する際に金属ばね部分だけが残ったので、試しに作ってみたものです。市販品よりも剛性が高く頑丈です。(過剰品質ともいえます)
このままだと市販の量産品と変わらないのですが、CADで修正するだけで自由な形状が作れる利点を活かして、もっと手になじむデザインの探求もしてみたいかもしれません。
手で握る部分に何か意匠を加えようとしたのですが、積層方向の都合上あまり細かい模様を綺麗に作ることはできないので断念しました。むしろ側面(写真で机と平行な面)に彫刻する方が良いかもしれません。

ハンガーの継ぎ手部分の部品も作りました。

スマートロックもどき

手乗り二足歩行ロボットの基板を流用して試作しました。

Wiiリモコン用拡張コントローラー

 

ラジアスゲージ 

小型家電のプラスチック筐体の角で丸みがついている部分など、ノギスでは測れないような円弧状個所の外径を測るための器具です。円弧はちょうど90度分になっているので90度のコーナーを丸めた形状までなら計測できます。使い方は、被計測物に窪みを順に当てていき、ぴったり合う大きさを探します。計測物の向こうを光にかざしながら見れば、少し大きさが違っていると隙間が三日月状に見えるのでそれを使って精度よく見分けることができるという仕組みです。
もちろん市販品もありますが、修繕部品を作るために0.5mm程度の精度で測れれば良いと思い、自作しました。写真では光沢の具合で金属のように見えるかもしれませんが、ABSです。

目覚まし時計電池ボックスの修理


20年以上使っている目覚まし時計ですが、電池ボックスのプラスチックが劣化して割れており接触不良が起こりやすくなっていたので修理しました。上のラジアスゲージはこのために作りました。

マイクロマウス迷路キーホルダー

ファスナーの取っ手


第16回ROBO-ONEカンファレンス発表

土曜日の 第16回ROBO-ONEカンファレンス で発表しました。「第7回ROBO-剣優勝ロボット『逡巡』」という題目でした。4月の第7回ROBO-剣で優勝した際に依頼を受けたものです。ロボットのハードウェア製作と制御の方法論、実装について解説しました。 もともとRO...