しろうさぎのblog

元ロボカッパー(ジュニアBオープン)でレスコンに参加していました。次はロボカップSSLに参加予定です。気が向いたときにいろいろ書いていきます。

18回レスコン電装部紹介

どうもしろうさぎです

昨日の記事で結果等と報告しました。今回は、今年のロボットで私が作成した部分の紹介と説明をします。
IMG_7298

IMG_7265

IMG_7268
レスキュー活動を待つロボットたち


★共通部分
・TPIPとの接続
TPIPとSTM32との通信はRS232Cを用いました。RS232Cでは耐ノイズ性が高く問題なく使用できました。去年はI2Cを用いたためノイズで落ちることがありましたが今年は一切ありませんでした。TPIPとの通信でTPIPとPCが接続され、データが来ているのか確認するためにUDPのデータパケットの最後に数値の変化する1byteのデータを追加し、STM32のタイマー割り込みによってそのデータを参照し、変化しているのか確認することによって通信が確立されているのかを確認し、切断された場合暴走などをしないようにモータードライバーのENをLOWにしてフリー状態にし、サーボは直前の角度を保持するようにしました。また、ブザー等で通信切断を人間に伝えることもしました。このRS232C信号のドライバはRS232CインターフェースIC ADM3202ANを利用しました。このドライバでTTLに変換しSTM32で受け使用しています。UARTで受ける際にDMAを用いています。
ぱけっと
通信データの詳細
先に通信データ内容を決めることでソフト班に先にPC側プログラムを作ってもらうことができました。これによりロボットができる前に通信テストができました。(少し無駄なやり方があったりしますがそこは目をつぶってください)

・モータードライバー
モータードライバーは2年前に作製したものを今回も利用しました。
BTN8982TAAUMA1のハーフブリッジドライバを2つ使いフルブリッジドライバとして使用しています。通常版ではATTINYも追加することができ、サーボPWMによって動作させることもできますが今回はこの機能は使わずATTINYは外して使用しました。
定常50A、ピーク117Aを駆動でき、25KHzまでPWM周波数を上げることができます。なお、540モーターやRE40を動かすとき連続正転逆転を繰り返すと発熱でモータードライバーが死んでしまうため正転逆転を切り替える際に数ms入れることで保護をして利用しました。なお、TPIPとの通信が30Hz程度のため操縦者的には1フレーム止まってるのがわかるかどうかといったところのため操縦者への違和感や負担にはなっていないと考えています。
IMG_6553
左が通常版、右が小型版

・UI
すべての機体にUIとして有機ELキャラクタディスプレイを搭載し、ロボットの状態を確認できるようにしています。またスイッチを多数つけることでプログラムを切り替え、テストモードなどに切り替えられるようにしています。また1号機ではタクトスイッチを6個追加し、足回りのテストがTPIP無しでボタン操作でテストができるようになっています。


・電源系
ロジック系とサーボ用電源の5VはOKL-T/3-W12N-CをDIP化基板を自作し使用しています。サーボの電源に利用しても問題なく動作することができました。


・姿勢制御
JY901を6軸モードにして利用しました。メカナム機では姿勢が目標値から±5度以上変化したときにその偏差から比例的に回転速度を調節しながら修正をします。クローラー機では目標値から±5度以上変化したときその偏差から左右のモーターの出力を変化させてまっすぐになるように調整します。この出力の変化を対数的に変化させることで人間の感覚に近づけています。クローラーでの姿勢制御では連結瓦礫の移動時にかなり有効的に動作し、もし瓦礫がバンパーの端に当たってもロボットが回転せずに押すことができ、もしスリップして動けなくなってもそのまま下がり再度瓦礫にぶつかることで瓦礫を押すことができかなりの重さの瓦礫も移動させることができます。

・ソースコード
GitHubリンク
ここで公開しています。Readmeにありますが、私が作成した5台中4台+マスターのソースコードです。STM32Cube+Atollicにて開発を行いました。


★1号機
マスタースレーブによってアームを制御しているためロボット側とPCにつながった2台のSTM32で制御をしています。
1
システム図

IMG_7273
全体図
IMG_7274
詳細

近藤のICSサーボを動かすのにはここにあるように3ステートバッファを通して半二重通信をを行っています。ICSコマンドは近藤のHPに載ってるのを参考にしてライブラリ化して利用しています。

マクソンのエンコーダーの差動信号は高速コンパレータ(NJM2403D)を使用しています。これをSTM32のタイマーで読むことで速度制御に使用しています。

近藤シリアルサーボの電源として、DC1V~15V 最大8A可変スイッチング電源キット(降圧) SI-8010Y使用を使用し降圧することで使用しています。


★1号機マスター側
IMG_7281
全体
IMG_7280
回路部

5VのACアダプターから入力し、3端子レギュレーターで3.3Vに降圧し利用しています。ボリュームの信号を簡易簡易デジタルフィルタを通して、DMAでUARTを吐き出しそれをUSBシリアル変換機を通してPCに送っています。100kHz以上でフィルタが行われており、シリアルデータは9600mbpsで送っているため完全にマスターの動きを送ることができます。



★2号機
2
システム図
IMG_7270
全体
IMG_7272
詳細

エンコーダーはパンタグラフ機構のモーターに利用し目標値との差分を読み、比例的に変化させています。これによって滑らかに動かすことができます。パンタグラフ機構のモーターの回転数と高さは線形性がないためそれを数学的に線形性を持つようにしようとしましたが、めんどくさくなってやめました。実際操縦者的に線形であってもそうでなくてもあまり変わらないといわれ、それならということでやめました。

★3号機
3
システム図
IMG_7282
全体
IMG_7283
詳細

3号機の個体識別用のカメラ台の移動と、ジャッキを押し出す機構部のモーターにエンコーダを入れサーボ化していますが実際あまり意味はありませんでした。ジャッキを押し出す機構は全部出すか、全部しまうかの2択でした。

ジャッキとの接続は電源線2本(サーボ用とロジック用)とGND、信号線1本で行いました。信号は0、1でシーケンス的に行っています。たまにノイズやコネクタの接触不良などで誤作動してロボットの中でジャッキが展開し、サーボが過負荷で死ぬことがありましたが、ジャッキのケーブルを切り離してフィールドに置いていくために配線を減らす必要がありこのようになりました。

★4号機
4
システム図

IMG_7277
上から
IMG_7278
うしろから
IMG_7279
まえから

ほかの機体よりも面積を使うことで厚さを低くしています。CCS811 エアークオリティセンサモジュールを搭載しCO2濃度やTVOCsを読みとり、ある一定値を超えるとスピーカーでmp3プレイヤーに入れた合成音声を変え警告します。



とりあえずこんなもんです。

それでは今日はこの辺で。

第18回レスキューロボットコンテストに参加してきました

どうもしろうさぎです。

予選を突破して本選に参加してきました。

とりあえず結果ですが、

レスキュー工学大賞、ベストチームワーク賞、計測自動制御学会特別賞、inrevium杯をいただきました。


やったね!!!!!!!!!

ファイナルミッションで通信障害が起こり始めの2分くらいしかまともに動かず(相手側も同じ感じでどうしようもないやつ)、こりゃだめだなぁと思っていたのですがレスキュー工学大賞をいただけて本とうれしいです。レスキュー工学大賞は競技の得点だけでなく書類・競技・プレゼンなど総合して決定される賞であったことを改めて感じました。(というかファイナルミッションの得点ほんとにはいってる?)

ファーストミッションでは、イエローフラグが3本も出てしまいましたが、大体8分くらいで全3体のダミアンを救助することができました。261点で全体で2位でのファーストミッション突破となりました。ロボットは完璧に動いてくれてよかったです。

ファイナルミッションでは前述の通り2分しかまともに動かせておらず、ダミアンの目の色を2体とも当てて20点で審判団原点5点で15点で終了しました。通信状況的にもう10秒に一回データが行くか行かないか見たいな感じでした。特に通信が完全に通ってないとロボットをストップさせる安全機能が働いてほんとに動かせない状態でした。


この前かいたトルク制御や姿勢制御などのフィードバック制御を用いた操縦者アシスト機能がかなり評価されたようです。姿勢制御は去年から試験的に導入して今年は本格導入ということで5台中私が作った4台すべてに搭載していました。

ベストチームワーク賞は多分私コントロールルーム内であーだこーだいろんなことしゃべりながらやってたのがよかったのかもしれません・・・ww(ファイナルミッションのコントロール間通信なんてほとんど「通信ダメで――――す」しか言ってなかったし)


ファーストミッション動画です



そして、ファーストミッションの写真をば
スクリーンショット (60)
全体像

スクリーンショット (74)
連結瓦礫移動中

スクリーンショット (61)
ジャッキ挿入中

スクリーンショット (64)
ダミアン受け渡し中

スクリーンショット (67)
棒瓦礫除去中

スクリーンショット (69)
床ダミアン収納中


スクリーンショット (70)
2Fダミアン救助中


スクリーンショット (71)
2Fダミアン搬送中


IMG_7705
今年のロボットと盾や杯

これで3年間続けてきたレスコンも引退です。次はSSLのほうに参加する予定となっています。(まぁ院試やらがあってすこしづつといった感じだけど)最後の年にこのような最高の賞を取ることができてほんとにうれしいです。また、ついてきてくれたメンバー、顧問の先生、練習場所として部屋を貸してくれた先生、様々な支援をしていただいた朱雀技研やミスミ、最後にこの大会を運営しているレスコン運営には感謝です。

それでは今日はこの辺で。

疑似的なトルク制御について

どうもしろうさぎです。

去年はレスコンのロボットにJY901を用いた姿勢制御を導入しました。去年度は1台だけでしたが今年は4台にこの機能が搭載してあります。

まぁこの話はどうでもよいのですが、今年はトルク制御をしてみることにしました。せっかくMaxonのRE40を積んでいてエンコーダーもついているモーターを使っているのでこれを使ってやってみようと思います。

最初に結果から。

左がトルク制御ありで右がなしです。

瓦礫をメカナムで乗り上げるときにトルク制御無しの場合引っかかってしまっているのに対してトルク制御ありにした場合すんなり乗り上げて超えることができるのがわかります。

制御方法は、エンコーダーの値の微分値をそれぞれのモーターで取得します。(実際はモーターを動かす関数に入れtて呼び出されるごとにエンコーダーの値を読みだしてコピーをしたのち初期値に戻してあげるということをしています。このモーターを動かす関数はかなり高速に呼び出されているので微分値に近いものと考えてよいと思います。)この、微分値(この微分値をDX0~DX3とする)の最大値を求めて、(この値をDX_MAXとする)それぞれのモーターで誤差率を求めます。ここで、モーター0が最大値であったとして例を示します。実際には、誤差率
X_error0=0
X_error1=(DX_MAX-DX1)/DX_MAX
X_error2=(DX_MAX-DX2)/DX_MAX
X_error3=(DX_MAX-DX3)/DX_MAX
で求めることができます。これらすべてに1を足すことで、
X_error0=1
X_error1=(DX_MAX-DX1)/DX_MAX+1
X_error2=(DX_MAX-DX2)/DX_MAX+1
X_error3=(DX_MAX-DX3)/DX_MAX+1
によってそれぞれどのくらいの加算割合でトルクを増してあげるのかを計算します。このX_error0~X_error3をそれぞれのモーター出力に掛け算をしてあげることでトルク制御を行うという寸法です。

私たちはモーターに人間の制御的には最大デューティー比50%までしかかけていないので(スピードが速すぎてカメラでの操縦がほぼ無理になるのでこのくらいに落としてある)トルク制御で1つのモーターに2倍まで出力が加算されても大丈夫なようになっています。

ここでメカナム等でベクトル計算により360度自由に動くように計算しているのであれば、それぞれの出したいパワーの変数に先ほどのX_errorを掛け算してあげた後でベクトル計算をすれば問題なく使えるはずです(これはまだ未確認)。

RE40の分解能が高く、差動で出力が出ておりノイズはほぼないという仮定のもと制御させているので本来はローパスフィルタ等フィルタを通してから使う方が望ましいとは思います。

トルク制御は本来電流センサなどから行うものらしいですが、今回エンコーダーの値のみでおこなってみました。それでも疑似的にトルク制御を行うことは十分できることがわかりました。これは段差の乗り上げなどのレスコンなどの制御だけでなくてもその他多くのものに応用することができると思います。RCJなどでは衝突検出→適正トルクをかける、などにも使うことができると思います。

最後に、このトルク制御を入れて操縦者には使ってもらいたいのですが結構これらの制御をOFFにして使われることが結構あるんですよ。操縦者からすると違和感になったりしてしまうことが多いようです。操縦者に違和感なく操縦者の補助をするような補正制御を行えるようにしていく必要があると感じています。

それでは今日はこの辺で。


アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

記事検索
ギャラリー
  • LWIPでPingを有効にする。
  • LWIPでPingを有効にする。
  • STM32CubeでFreeRTOSで割り込み処理をする
  • STM32CubeでFreeRTOSで割り込み処理をする
  • 18回レスコン電装部紹介
  • 18回レスコン電装部紹介
QRコード
QRコード