水中ロボット「Easys」製作記

Qiitaの皆さま初めまして、Honazoと申します。

2023年に水中ロボットの製作に初挑戦した話をまとめました。


この記事は、[OpenEsys Advent Calendar 2023](https://adventar.org/calendars/8987) に載せる予定だった記事になります🗓️
クリスマスに向けて毎日ものづくりの記事を募る企画なのですが……もう年明けてますね～（今年もよろしくお願いします～）

https://adventar.org/calendars/8987

↑ものづくりに関連した面白い記事がありますので是非ご覧ください。

この記事では、水中ロボット製作の過程と製作した水中ロボット「Easys」をざっくり紹介していきます。これから水中ロボット製作や水中ロボコンに挑戦したい方々の参考になれば幸いです。

# 目次
[水中ロボットを作りたい](#水中ロボットを作りたい)
[製作](#製作) 
[水中ロボット](#水中ロボット) 
[動作と展示](#動作と展示) 
[今後の展望](#今後の展望) 

# 水中ロボットを作りたい

私が水中ロボット製作を始めた個人的な動機は以下の2つでした。
1. 水中の様な難しい環境でも動作できるものを作ってみたかった。
2. 周りに水中ロボットを作っている人がいて面白そうだった。 



水中ロボットやりたいな～とウダウダしていたところeg氏に声をかけられまして、[水中ロボコン出場](http://jam23.underwaterrobonet.org) を目標として製作を開始しました。

http://jam23.underwaterrobonet.org/




# 製作

### チーム

チームメンバーは私(https://twitter.com/skmmmp) とeg氏 (https://tamago117.github.io/portfolio, https://twitter.com/eg117117) とぬぺ氏(https://twitter.com/nupecuta) の3人です。

「つくばチャレンジ」という陸上の移動ロボットの大会に参加していたチームメンバーの一部です。

全員研究室が違うため常に一緒に作業というのが難しいことから、役割分担をして各々バラバラな時間と場所で進めて行き、定期的な遠隔ミーティングで足並みを揃えていく方法で進行していきました。

余談ですが、つくチャレ(筑波チャレンジ)の方では、2年かけてコース完走を果たしました🙌

https://x.com/eg117117/status/1726127248275849677?s=20


つくチャレ出走機体の記事↓(2022年時点)

https://zenn.dev/tamago117/articles/58001ff8399cc7

### コンセプト

水中ロボットの自作は初めてなのでまずは動くものを、という気持ちもありましたが、単に動くものを作ってみた～だけではなく、後続の水中ロボットMakerが誰でも再現できるようにする「オープンソース化」という目標を持って製作を開始しました。

そのため、構成部品は可能な限り入手しやすく、製作過程は公開された情報のみで再現できるように努めました。

### 部品選定

最初に、水中ロボットに使う部品をいろいろと買ったり作ったりして試し、実機に使いたい部品を選定しました。

既製品は主に[アリエク(aliexpress)](https://ja.aliexpress.com/)で探しました。怪しい格安商品が並ぶサイトですが、水中ロボットに使える部品の取り揃えは意外と多いです。

例えば、以下のスラスターはESC(Electric Speed Controlor)付属で1機4000円くらいで買いました。十分な出力です。

https://ja.aliexpress.com/item/4000001623522.html


https://x.com/skmmmp/status/1659200046263595016?s=20

<br/>

水中ロボットあるある～お風呂が試験場～

![無題の動画 ‐ Clipchampで作成 (5).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673980/dc45956e-a9eb-995d-81b9-6035b24b82d0.gif)



### 設計

機体と構成部品の設計は3DCADのFusion360を用いて共同で行いました。バージョン管理と共同編集の機能があり、遠隔での共同作業が可能です。

ソフトウェアはEG氏が、電装はぬぺ氏が主に担当し、設計してくれました。

### 実装

Fusion360で設計し共有された部品データは各々のご家庭にある3Dプリンターで手元に出力しました。

![IMG_20230808_175237172.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673980/e9186fba-3af1-d056-d275-50d51b304aa8.jpeg)


さらに製作が進み、各々が選定・製作したものを組み合わせる段階になると、会える日程を決めてその日のうちに一気に組み立てを進めました。



<br\>

水中ロボットあるある～密閉しながら蓋を封入するのが大変～



### 試験

ある程度形になったらまたお風呂に沈めます。
水密や重量バランスの確認をします。

![IMG_20230811_194044990.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673980/cc029793-9229-024c-5e7a-a9719fe0ef5e.jpeg)



<br\>

水中ロボットあるある～水中の浮力中性を取ると陸上で重くなる～

<img width=200 alt=DSC_09562.jpg src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673980/c4e3b2e4-ba6b-61e4-f5a7-415dcb73c334.jpeg>


↑ロボットに載せた重り



# 水中ロボット

完成した水中ロボット「Easys」について解説します。



## 機体構成

![スクリーンショット (1454).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673980/e1da6d8e-1670-65ff-ec1e-9a738a3f5e65.png)


Easysの外観は上↑の写真の通りです。カメラと電装を格納する円筒形の耐圧容器(ハル)、4基のスラスター、ハル下部のバッテリーボックスで構成されています。ハルを中心として3Dプリンタ製の外骨格で各要素を結合しています。

設計データは



### スラスター

![P8132759.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673980/99d27d2e-b7f2-011a-c043-2f07b5d1f6eb.jpeg)


Easysは4基のスラスターで移動します。用いたスラスターはアリエクで買ったESC付属の既製品で、前後両方向に出力できます。

耐圧容器の両側面に水平に2機、耐圧容器上部に八の字型に2機配置しています。

<img width=200 alt=609A7B56-E7C7-4E6B-AD79-C3D0A0C69250.png src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673980/813fbce1-1a4b-c317-cf0b-cfc26c764997.png>

水中ロボットの上下の向きは何もしなければ重力と浮力の引っ張り合いによって生じる復元性で一定に収束します。よって、4基のスラスターをEasysのように配置すれば、機体はピッチ・ロール2方向以外の位置・姿勢の4自由度を持ちます。(実際にはスラスターの推力や移動時に筐体に働くの水の抵抗などでピッチ・ロールは常に一定とはなりません。)

### 耐圧容器

![スクリーンショット (1455).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673980/6052088a-7591-0f40-d458-bfdb2d747eac.png)


耐圧容器はアクリルパイプの両端に3Dプリンター製の蓋をはめて密閉しています。
蓋の側面にはOリングが入る溝が作られていて、蓋とアクリルパイプの間にOリングが密着することで水が入らない様にしています。簡単な構造の様ですが同じ仕組みで水深100mの耐圧を実現している既製品もあります。


3Dプリンターで造形した蓋から水が染み入らないよう、積層ピッチを 0.2mm、充填率 100 % 、フィラメントの流れ量を 130 % に設定して印刷し、フィラメントが隙間なく充填されるように工夫しています。



### バッテリーボックス

電力は機体内に格納した充電済みのLi-poバッテリーから供給します。そのため、充電がなくなれば交換する必要があるので、開閉が難しい耐圧容器とは別に留め具で簡単に開閉できるバッテリーボックスを用意しました。（タカチ電気工業, BCAP101507）

<img width=200 alt=IMG_20231207_175422830.jpg src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673980/133fb7b1-44b2-f3bf-3e4f-84b5ad059b4a.jpeg>




## システム構成

### ソフトウェア

ソースコードはeg氏のGithubにて公開しています。

https://github.com/tamago117/Easys_ros

![スクリーンショット (1456).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673980/ca0cf83a-f130-7e5e-15e0-c6a52836b5ce.png)

ソフトウェアフレームワークとしてROS2を用いています。機体内に搭載したRaspberry Pi 4(ラズパイ)を制御機として使い、カメラやIMUのデータの受け取りやスラスターを制御するコントローラへの指令値の出力を行います。機体内のラズパイと地上の操作用PCの間をイーサネットの有線ケーブルで接続し、ROS2による通信で指令値やセンサデータの通信を行います。

![IMG_20231104_115140142.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673980/ddef07fc-79be-33d1-70e5-e972ac0ef9c1.jpeg)


操縦者は操作用PCに表示されたカメラ映像を見ながら、PCに接続したゲームパッドでスラスターの出力を操作できます。



### 電装

![DSC_0936.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673980/f5601f28-4ecb-f6d6-7596-0cdd1fe20cbf.jpeg)

Raspberry Pi 4を中心として構成されています。

カメラはUSB端子で接続できる普通のWebカメラをそのままラズパイに繋いでいます。
耐圧容器の前側の蓋はこのカメラが取り付けられるように設計されています。

https://www.amazon.co.jp/gp/product/B09KC272JC

IMUはBNO055を選定しました。

https://akizukidenshi.com/catalog/g/gK-16996/

4基のスラスターは付属のESCにPWMで指令値を入力します。PWMの生成にはPCA9685を使用した既製品サーボドライバを使っています。

https://www.amazon.co.jp/gp/product/B0C2N5JWSL

電源は4セルLi-poバッテリー(https://www.amazon.co.jp/gp/product/B081Q9FSKR) のDC14.8Vです。これをサーボドライバとラズパイに分配します。ラズパイには降圧コンバータ(https://www.amazon.co.jp/gp/product/B07KR8PDT3) で降圧して供給します。





### 画像認識



ROS2を用いているので既存のパッケージを簡単に導入できるうえ、ラズパイでは重たい処理を遠隔PCで実行することができます。Easysでは物体認識アルゴリズムyolov8を導入してみました。

![easyscam.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673980/0a509a56-53cc-1aff-4d5e-afd1f4211b3d.png)





# 動作と展示

### 撮影

完成後、実際にプールで動かしてみました！水中ロボコンで提出する為のビデオの撮影も行いました。

https://twitter.com/skmmmp/status/1694592490068992277?s=20

浴槽以外では初めての動作でしたが、問題なく動かすことができました。




### 水中ロボコン

水中ロボコンには幾つか部門があり、今回はビデオ部門に参加しました。

チーム名は「イソヒヨドリ」です。

製作したロボットの良さを紹介するビデオを事前に作成し、製作の技術力やアイデアの独創性などを評価する部門です。

https://www.youtube.com/watch?v=-WV4iyLn2Gg

↑製作したビデオ

初参加でしたが、なんと！ビデオ部門で優勝しました！！

http://jam23.underwaterrobonet.org/video/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673980/f307d80d-2ffb-e7d6-e8fb-51b2b2f1cb05.png)

他にも工夫が凝らされたいろんなロボットを見ることができ、とても楽しかったです～

### NT東京

展示にも幾つか参加しました。

NT東京は科学技術館で行われた「作ってみた」を展示するイベントです。

https://twitter.com/NT_tokyo_info

一緒に水中ロボコンに参加した仂㌠氏(https://misskey.io/@C4L4M4R) と水中ロボット組として展示しました。展示にはverde氏(https://twitter.com/verdeverne) にも手厚いサポートをいただきました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673980/9ee8b03c-46f6-d183-a7da-934ea4a33792.png)



NT東京では耐圧容器内に漏水してしまい動体展示があまりできませんでしたが、幅広いジャンルのMakerとお話しできて楽しかったです！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673980/08508d49-0d92-dca5-87f6-117782e0a427.png)

↑水没したEasysを乾かす自分とイカ先輩





### 国際ロボット展

国際ロボット展 (https://irex.nikkan.co.jp) でも、水中ロボネットの展示スペースをお借りて展示を行いました。NT東京の後、耐圧容器の接合部をパテで埋めてもう一度水密した結果、十分に動かすことができました。

![IMG_20231202_121508319.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673980/dc0abcaa-0322-bad4-8e78-96c10a318485.jpeg)



# 今後の展望

今年もチームで水中ロボットの製作を続けていきます。



### しっかりしたオープンソースの実現

Easysではオープンソース化を目指して誰でも再現できることを意識して設計したものの、特に水密の工夫など、共有できていない要素がまだ多くあります。
今後はEasys以上にシンプルに作れる後継機を作成したいです。




### 自己位置推定

Easysでは人が遠隔操作をしていましたが、将来的には自律で移動を行えるようにしたいです。
まずは、ロボットが環境に対する自身の位置を把握する自己位置推定を行えるようにする必要があります。水中ロボットの自己位置推定用のセンサーとしてDVLという超音波を用いたセンサが高精度でよく用いられますが、現状高価なので、より安価な手法を模索しています。




# 最後に

水中ロボットの製作に初挑戦し、Easysを製作しました。
今後はさらに進歩したロボットを制作したいです。

Easysや水中ロボット製作などについてもっと気になる事があればお気軽にお問い合わせください。


<br\>

最後に、水中ロボットの製作にあたり、先駆者の文献とアドバイスを参考にさせていただきました。本当にありがとうございます。

また、各イベントの出展にあたっては、水中ロボット製作者の先輩方に暖かく迎えていただいたうえ、準備や展示などで多大なご助力をいただきました。感謝申し上げます。

そして、水中ロボットを実現させてくれたEG氏、ぬぺ氏！本当にありがとう！
今後ともよろしくお願いします～

![P8132763.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673980/27d5d49b-6298-d01b-a822-34c9434f7b6f.jpeg)



# チームメンバー募集中！！

我々の製作チームでは新たなメンバーを募集しています！！
もし水中ロボットの製作に興味がありましたらチームメンバーのTwitterのDMなどにお気軽にお声がけください。