2018年9月5日水曜日

第8回ROBO-剣参加




第8回ROBO-剣に参加しました。前回に引き続き優勝、連覇となりました。

今回は前回のロボットを少しだけ、信頼性の向上のために改良しました。


ハードウェア面では、まずカメラの支柱のジョイント部を改良しました。
写真は途中経過のもののためありませんが、両方の中心線を通る点で(プリント部品の大穴が開いている部分)で1本のネジで固定します。
この部分は、ロボットを梱包する際に小さくするために付け外しを頻繁に行います。
もともと木ねじ2本で木材を直角に留めていただけだったものを、双方の部品がぴったりはまるジョイントの部品を3Dプリンタで作成してそれで位置決めしつつ固定するようにしました。これは、ネジで荷重を受けないようにするためです。実際、今まで使っていたネジ穴はゆるくなっていて、固定しても部材が少し動いてしまうほどになっていました。

また、USBケーブル1本でPCと接続できるようにUSBハブをロボットに搭載しました。実態としては束ねた配線とUSBハブを結束バンドで本体に固定しただけですが、ロボットから伸びている配線を減らしてスッキリさせておくのは故障率を下げ信頼性を上げるのに良いと思います。ついでに、上の写真にあるように、DS325(デプスカメラ)のケーブルガイドを取り付けて、人や他のロボット等に引っ掛かることがないようにしました。

ソフトウェア面では、小手や胴をうまく打てるようにするための大きな改良を試みていました。
具体的には、軌道生成方式の実験を進めていました。しかし、うまくいかないことがわかったため基本のアルゴリズムは前回までと同じとしました。振りかぶった姿勢から、竹刀先端を接触させるような逆運動学の解となる姿勢まで関節角度を補間して遷移するだけというものです。
唯一の変更として、振りかぶる姿勢を小手や胴の場合やや上腕をひねった姿勢とすることで、鍔などを回避する都合の良い軌道が生成されやすいようにしました。

また、前回は根本関節のサーボに不具合があって、そのため動作速度を抑えていました。速い打突を行おうとするとシリアルサーボ全体のバスで通信異常が増え、全体が動かなくなってしまっていたのです。これを交換したことで本来の動作速度が出せるようになりました。


またアーム部門とは別に、二足型部門が新たに行われました。こちらには今回私は参加しませんでした。ROBO-ONEの上位入賞経験者中心に選手が集まっていました。試験的な試みのため、ルールに改善点がいくつか見つかって良かった、というような形となりました。見栄えもする、それなりに面白い試合になっていたのではないかと思います。ただ技術的には、市販のロボット型ラジコンの制御システムを使ったロボットのみだったため、細かい操作が難しく、隙があってもなかなか有効打突が当てられないようなもどかしい場面もありました。

カンファレンスのスライドにも書きましたが、直径5cmの球に対してきれいに打撃を当てるには±15mm程度の位置精度が必要ということになります。これはROBO-ONE格闘競技と比べると数倍~10倍程度の開きがあるといえます。このような操作を行うにあたり、目視による操縦では離れたロボットを斜めから見るため狙いがつけづらいものです。また、ROBO-ONEで主流の市販ロボット型ラジコンキットの制御システムでは連続的に操作量を変化させての操縦(比例させる:ラジコンで言うところのプロポの語源)が十分サポートされていないということもあり、細かい操作が困難です。どちらかというと、スイングを変化させて狙うというよりは、ちょうど当たるところに来るのを待って打つというような形がよく見られたように思います。
またそれとは別に、本物の剣道のように軸足を中心として踏み込むと同時に打つというのは高度な二足歩行の技術が必要です。これも挑戦しがいのある課題として残ったのではないかと思います。

エキシビジョンとして、二足型の部の優勝ロボットとの異種試合をしました。アーム型ロボットは移動できないため、センサー(カメラ)の検知できる範囲だけに限定して動いてもらう、という形で行われました。準優勝同士、優勝同士、という形で2試合が行われました。

下の動画は、それぞれ準優勝の「ku剣」と「コビス」の試合からのものです。



私の方の結果は、逡巡が2本先取して勝ちとなりました。1本目は相手が転倒から起き上がった直後に当てるという形になってしまいました。これはルールで想定していなかったのですが、審判・審査員の判断により有効となりました。2本目は、相手の上段の構えの腕の隙間から偶然見えていた面を狙いに行ったのが有効打になりました。これは本来相手の腕に阻まれて当たらないのですが、障害物検知や回避のアルゴリズムがまだないので、そのような無理な打撃を出します。
このとき偶然相手が腕を下ろして面が空いたため、そこに命中しました。動きとしては、小手抜き面(※)のような形に見えたかも知れません。
※剣道において、相手が手首を狙って打ってくるのを手足の動きでかわして、相手が空振りしたすきに相手の面を打つ技術・一連の動き。

いずれも、自動制御により正確な打撃操作ができるという良い面が出たのではないかと思います。二足型・操縦型ロボットでも自動制御によるアシストをつける形にするのが一つの進化の方向だと思います、とコメントしました。

今回は参加チームが少なかったので、次回はより多くのチームが参加できるよう普及活動を考えたいと思いました。

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に移すことも検討していますが、時期は未定です。

第8回ROBO-剣参加

第8回ROBO-剣に参加しました。前回に引き続き優勝、連覇となりました。 今回は前回のロボットを少しだけ、信頼性の向上のために改良しました。 ハードウェア面では、まずカメラの支柱のジョイント部を改良しました。 写真は途中経過のもののためありませんが、...