水中ROV(TUT-UAV2)について

水中ロボットコンペティション2018 in JAMSTECに向けて製作した水中ドローンについての記事です.しくみや回路構成,プログラムを公開しています.さらに詳しく知りたい方はコメント or Twitterでメッセージを送ってください.

水中ロボットコンペティションinJAMSTECとは?

毎年8月の最終週にJAMSTEC(海洋研究開発機構,横須賀市)の多目的プール(深さ3.3m)のプールで開催される大会です.今年の種目は一般フリー部門,ジュニア部門がありました.(昨年はAUV部門もあった).見学だけも可能(要予約).

“本イベントの目的は、自作の水中ロボットによる競技会やプレゼンテーションを通じて参加者の交流の輪を広げるとともに、工学的知識・技術を駆使して現実的な課題に挑む機会を提供することです。そして、社会に向けて水中ロボット研究の楽しさと重要性をアピールすることです。” 公式ホームページよりhttp://uwr.sakura.ne.jp/jam18/

個人的意見としてはJAMSTECのプールは深いので耐水が大変だが,淡水なので比較的機体が作りやすく浸水しても損傷は少ない(海水にくらべて,ラズパイ,Arduinoは浸水しても動作したがESCは死亡).プールなので波もなく,水が透き通っているのでロボットがよく見える.

機体の概要

機体はアルミフレーム製,クアッドコプタの形状をしている.それぞれの辺に上向きのスクリューが4つ,外側を向いて4つのスクリューがある.上向きの4つのスクリューでドローンの動作を行う.横方向の移動性を上げるためにさらに4このスクリューがついている.

ドローンモードについて

ドローンモードはクアッドコプタとして動作するモードです.上向きの4このスクリューで動作します.空中ドローンと同じ向きについています.この機体は水中では浮力が少なめにしているので沈みます.通常では沈むのでスクリューを回して上方向に推力を得てバランスを保ちます.制御には空中ドローン用のフライトコントローラSPracingF3を使用しています.制御用のArduinoMEGAでPPM信号を生成してフライトコントローラに信号を送っていて,バランスなどの機体制御はフライトコントローラで行っています.フライトコントローラを使うと面倒なPID制御をしなくて済むので楽ですが,細かい制御がしにくい欠点がある.

横方向の移動について

横方向の移動は外向きに設置した4つのモータで制御します.ドローンは機体を傾けて横方向の移動をするため,水中では水の抵抗があるほか空中ほど下方向の力がないため(浮力のせいで重力が少なく見えているため)移動性がわるい.そのため,横方向の移動をスムーズにするため,モータを付け加えています.

カメラについて

カメラはRaspberry Pi3にラズパイカメラを接続しています.ラズパイカメラと陸上のPCとは有線LANで接続します.ラズパイにはMJPGstreamをインストールして,ラズパイの起動時に自動的にMJPGStreamerが起動するようにしています.

メモ(思い出しているので若干わすれている操作があるかも)
1. IPの固定 http://d.hatena.ne.jp/licheng/20180128/p1
2. SSHの有効化 https://qiita.com/hikobotch/items/a33fc77114a4963cc68b
3. ラズパイカメラの有効化 https://www.mztn.org/rpi/rpi23.html (rasp-configのEnabledまで)
4. MJPGStreamerのインストール&自動起動設定 http://blog.wdm.jp/?p=405
5. 自動起動のつづき rc.localに権限を付与 https://i-think-it.net/centos7-rc-local-do-not-use-how-to-respond/

制御系統

制御系統はこんなかんじ

XboxコントローラからMacに入ってProcessingからシリアル通信でArduinoMEGAに信号を送る.Arduinoから水平方向のモータへ回すESCへ信号をおくるとともに,フライトコントローラにPPM信号を送る.PPM信号はドローンのプロポと同じ信号で,フライトコントローラからみればプロポが接続されているのと同じ状況を再現している.それと完全に独立してラズパイカメラがある.PPM信号については中国語だがこの画像がわかりやすい http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_535558.GIF

Prosessing部製作→ https://github.com/tachibananaoto

フライトコントローラの設定はPID制御のP値を少なくする.制御量が多くなりすぎてオーバーシュートを起こしているように感じたので.入力信号をPPMにする.ARMの範囲を1700-2200にする.など若干いじってる.

ArduinoはMEGAを使っている.ブラシレスモータはServo関数を使って制御する.Servo関数はArduinoのTimer1を使用している.また,PPM信号の生成も16bitのタイマが必要である.ArduinoUnoには16bitタイマが一つしかないので諦めて,MEGAを使うことにした.PPM信号の生成にはTimer3を使用している.

MacとArduinoMEGAのシリアル通信は5V,0Vレベルのシリアル通信を使っている.PCからUSBでUSBシリアル変換でシリアル信号を作った後,5mぐらいのテザーケーブルに信号を載せてArduinoMEGAのシリアル3に接続している.
USBシリアル変換はhttp://akizukidenshi.com/catalog/g/gM-08461/ がオススメ.Arduinoでも代用できる.

モータについて

ブラシレスモータはある程度の防水処理(https://openrov.dozuki.com/Guide/Guide+4+-+Motor+Mounting/66 のStep12から)をすれば水中で使えるので水中ロボコンには向いている.
モータはAmazonにうってる1000kVのモータを使用している.水中ロボットは回転数よりもトルクが求められるのでkV値が低いモータがよい.https://amzn.to/2MBNacu
ただ,このモータはネジが切られていないので別途アダプタを挿入する必要があり,軸がブレやすいの避けたほうがいいと教えてもらった.もとからM3とかM4とかのネジが切られているのをAmazonやHobbykingで買うのが良いとのこと.(有益な情報交換)

2000kVのモータを水中ロボットに使用したときはESCの発熱が大きくて使用時間が少なかった.(追浜ミーティングで対策を教えてもらった)

スクリューについて

楽天のAyardで買った模型用のスクリューを使用している. 直径は45mmのものを使っている.直径が大きくなるとトルクが必要になるので,kV値の低いモータを使ったほうが良い.たしか,OpenROVは750 kVのモータを使っている.
https://item.rakuten.co.jp/ayard/2308-45l/  
https://item.rakuten.co.jp/ayard/2308-45/
右回りと左回りを使っている.

(推力は直径の4乗に比例して,回転数の2乗に比例した気がする.)

ESCについて

ESCもまたAmazonで買ったものを使っている.https://amzn.to/2NaaDRH と https://amzn.to/2oohybV
基板に直接はんだ付けができるこれを次に買おうと思ってる.

ESCの初期化が厄介

ESCはスロットルの最大値と最小値を覚えさせる必要がある.
通常のキャリブレーションは
1. フルスロットルの信号を生成した状態でESCの電源を入れる.
2. 音がしたらスロットルを最小にして1秒ぐらいまつ.
この操作をする.
つまり,ESCが起動する前にスロットル大→小にするとキャリブレーションモードに入ってしまう.なので,ESCが起動するまではスロットルを小にすることを忘れてはいけない.

前回の水中ロボコンは泳いでいるときにこのモードに入ってしまってモータが動かなかったので,今回はArduinoが起動するごとにESCのキャリブレーションが行われるようにしている.このおかげで今年はESCに関する問題はなかった.(大きな収穫)

電源について

電源はテザーケーブルを使って陸上から送電している.電源ケーブルにはスピーカにもつかわれる1.25sqのケーブルを使っている.今回のモータとスクリューの組み合わせでは電流はトータルで10A程度なので問題ない.

陸上の電源はLiPo 3C,4100 mAhを使用している.30分は持つと思う.

頑張って作ったので見てほしいところ

ケーブルの防水

ケーブルの引き込み口の防水にはよく使われるケーブルグランド(ネジケーブルグランド)のIP68のものを使用している.外側のシースが丸いケーブルはこれだけである程度の防水ができるが,今回のように細いケーブルを束ねる場合は隙間から水漏れがあるので使えない.そこで,今回はボンドを使って隙間を埋めている.

タッパに直接穴を開けてコードを通し,ボンドで埋める方法だとケーブルが動いたときにボンドが剥がれてすぐに水が入るのでケーブルグランドを使っている

1. ケーブルの長さをある程度揃える.ケーブルグランドのケースと接触するネジの部分をマスキングテープで養生する(ボンドがくっつくとネジがしまらないので)
2. ケーブルグランドを貫通する場所のケーブル1本1本にセメダインスーパーXを塗る
3. ケーブルグランドにまとめて通してネジを思いっきり締めてケーブルを動かないようにする
4. 隙間にボンドを埋めて24時間以上乾かす

ボンドを使って防水をしている
電源ケーブルとテザーケーブルも同様にボンドを使っている

タッパの防水

タッパは100均の安いものではなく1個500円ぐらいする高級なタッパを使用している.安いやつだとパッキンがしょぼくて水がはいるし,水圧でひしゃげるし,蓋の開けしめがしにくい.高級なタッパを使ったほうがQoL(Quality of Life)が高い(メンテナンスが簡単だとロボットの修理が簡単にできて,ロボットが動く時間が長くなる.うまく動くと嬉しいので毎日がたのしくなる)

今回はさらに防水性を高めるためにグリスをタッパのパッキンの部分に塗っている https://amzn.to/2C3nWiq

タッパの下部の防水はOリングを使っている

タッパの両側から内径3mmのOリングで挟み込んでいる
ネジは鉄ネジを使ったので錆びてる

アルミ角棒の組み立て

アルミアングルが十字になるところはアクリルをレーザカットした部品を使用している.きれいにクロスさせることができるのが良い.最近だと全国各地にあるファボラボや中国の業者に注文する方法,誤自宅のレーザ加工機でカットする方法が主流.十字に接続しているのがアクリルパーツ.Fusion360で設計→dxfでエクスポート→レーザカット

レーザで切断したアクリルパーツはアクリサンデーでくっつけると細かなヒビが入るのが欠点.ヒビを入らなくするには焼きなまし?をする.

アルミ角棒と横方向モータの取り付け

横方向モータの台とアルミ角棒はアルミろう付けをしている.そのため,頑丈につけれていて,スッキリとした見た目.

ろう付けにはアルミ用のろうガスバーナ,万力などを使う.ロウ付けするアルミが大きくなると熱が逃げてしまうのでろう付けがきれいにできない.これぐらいのサイズが限界かな.

LANケーブルに電源を畳み込む

ラズパイカメラを独立させているので電源もロボットの電源と別に送電したい.かといって,LANケーブルともう一本別に配線するのはケースへの防水加工が大変なので避けたい.そこで,LANケーブルに電源を載せている.100 Mbpsで通信するときは橙/橙白,緑/緑白のペアしか使用していない.そのため,青と茶色のペアは空いている.そこで,青と茶色のペアに電源を乗せることで一本のケーブルで電力と情報を送っている.(写真は後日UP)

ダウンロード

Arduinoのダウンロードはこちら

 https://github.com/tut-cc/jam18_arduino_firmware

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください