えいあーるれいの技術日記

ROS2やM5 Stack、Ubuntuについて書いています

ダイソーの500円バッテリーの充電回路をロボットに搭載した

※危険な工程があります。真似する際は様々な資料を参考に自己責任でお願いします。

f:id:Ray_ar:20210110165056j:plain
モバイルバッテリーの外観

 ダイソーで500円で変えるモバイルバッテリーを購入しました。意外とコンパクト。普通に使えそう。

 これは,M5 Atom用のバッテリーモジュールを自作するために購入しました。Switch-scienceとかでLi-Poバッテリーを充電するものがあります.900~1500円くらいで購入できます。

 分解してみました。

f:id:Ray_ar:20210110171854j:plain
分解後
 いや、これを500円て…それぞれ単品で買ったら2000円くらいするんじゃないかなぁ… 海外大量生産の力恐るべし。

 両極のはんだを取り除いて基板とバッテリーを分離させます。 それをピンヘッダにに接続してホットボンドで固定します。専用コネクタとかがあればそのほうがいいと思います。今回は頂いたバッテリーを使います。コネクタの形状がQIだったため、ピンヘッダにしています。逆刺し防止を考えるなら、RCYやXT30とかで作るといいと思います。

f:id:Ray_ar:20210110172448j:plain
接続後の動作確認

小さなバッテリーに換装しました。

これはミニロボットに取り付ける用のバッテリーコントローラにします。しっかりと絶縁をして、取り付けしていきます。

f:id:Ray_ar:20210110172723j:plain
配線

プログラムを書き込んだら完成!PS3で直接操作するロボットです。

注意したいのが、モータの電源はバッテリーから直接引く必要があります。電流が多量に流れて保護機能が働いてしまうためです。あと、一度電源をONにすると、モバイルバッテリー側から電源をOFFにする手段がないので、電源をUSBから抜くか、コネクタを抜くかのどちらかが必要です。結構面倒なうえに危険なので、こんなものを作るくらいなら買ったほうがいいと思います。

 

YOLOのtextファイルも一緒に水増しを行うプログラムを作った

 おそらく車輪の再発明をしているとは思いますが、画像の水増しプログラムを自作したので紹介します。

 研究でYOLO v3を使っていますが、使う水増しツールによって画像取得から実行までのフローがまちまちになりがちです。私はYolo_Labelを使っています。

https://github.com/developer0hye/Yolo_Label

 GUIが素晴らしいのですが、画像の水増しする分もアノテーションしないといけないのでとても面倒だなぁと感じていました。

 そこで、今回は「アノテーション後の画像とテキストを同時に水増しを行う」プログラムを作成しました。画像の水増しは24倍にしていますが、プログラムを変更すれば任意の水増しを行えます。

f:id:Ray_ar:20210109005436p:plain
プログラムの大まかなアルゴリズム

 アルゴリズムは、左右対称処理で書き出し(2倍)→コショウと塩ノイズ付加して書き出し(3倍)→明暗処理を行って書き出し(4倍)を行います。そのため、2x3x4=24倍になります。

 命名規則は写真の通りになっています。処理名称を語尾につなげていくことで区別することができます。

f:id:Ray_ar:20210109005807p:plain
命名規則

プログラムはGithubに上がっています。 github.com

よく考えたら、フィルタと書いてあるのにフィルタ処理を一切していなかった…

100円マウスは簡単に部品が取り出せる優良商品だった(?)

100円ショップ(Can Do)で100円の有線マウスを買いました。

f:id:Ray_ar:20210108090419j:plain
100円(税込み110円)のマウス

 今の時代はマウスすらも100円で変えてしまうのかー。と気になって買ってしまいました。私はゲーミングマウスや1000円くらいの無線マウスはそこそこ持っているので、絶対にいらないということはわかっていたのですが…

 普通の大きさのマウス(Microsoft Wireless Desktopシリーズ付属のマウス)と比べると少し小さめです。スクロールホイールが滑らかでないところやクリック音が大きいなどの値段相応のところもありました。

f:id:Ray_ar:20210108091302j:plain

 開封して僅か1分くらいでこれからも使わないことを悟った私はこの中身が気になったので分解して中身を見てみることにしました。

f:id:Ray_ar:20210108092044j:plain
マウスの基板とその回路

 マウスに使われているICはMX8733というもので、Alibabaでは購入できそうです。データシートはGoogleとかで「MX8733」と検索すればPDFが見つかります。

 MX8733は右・左クリック+スクロールホイールをサポートしているみたいです。8ピンDIPによく収めるなぁ…なんか合理的な配置をしていますね。左クリックが左方向にあるところとか。

 MX8733を分解してみました。

f:id:Ray_ar:20210108092939j:plain
分解後の基板

 ペンチでICを持ってICを基板から引きはがす方向にICを引っ張りつつはんだごてではんだを温めたらけっこう簡単に取り出せました。同じ要領でUSBケーブルとコンデンサを取り出しました。

 そのあとは、適当に転がっていたユニバーサル基板を使って再度はんだ付けを行って配線します。このICは光学センサが付いていたりピンピッチが2.54mmではなかったりするのでそこらへんはピンを180°曲げたり、無理やり変形させたりしました。タクトスイッチを付けたら…

f:id:Ray_ar:20210108094159j:plain
完成

連打専用ボタンが完成しました。

f:id:Ray_ar:20210108094254g:plain
動作確認

動作もしました。ArduinoとFETとかをつなげて有線自動連打ツールとかも簡単に実現しそうですね。

M5Atomは最小サイズのROS2マイコンになるのか!?

M5 Stack Atom Matrixを購入しました。

f:id:Ray_ar:20210104132936j:plain
M5 Atom Matrix

想像以上に小さくて驚きました。私はAmazonで購入しましたが、Switch-Scienceなどの専門ショップでも購入することができます。詳しいスペックはそこで確認するといいと思います。

本題

 今回は、このM5AtomMatrixがROS2で動くのか!?ということの動作確認を行います。2.4cm四方のマイコンでROS2ノードが動くとなると、狭い場所にも組み込みができる可能性があるということでいろいろ応用が利きそうな気がします。バッテリーがついていないのは少しネックになるのかも知れませんが…

 動作内容は、コンピュータからキーボード操作を介してTwist型のメッセージを送り、それをディスプレイ表示させるというものです。

動作プログラムは以下のgithubリンクに載せています↓。

github.com

動作の様子です。

f:id:Ray_ar:20210104134741g:plain
動作例

システムブロック図です。全てのコンピュータ・マイコンWi-Fiで接続されています。

f:id:Ray_ar:20210104135009p:plain
システムのブロック図

 システムブロック図では、Raaspberry Pi4がMicro-XRCE-Agentになっていますが、Raspberry Piである必要はありません。家では、Micro-XRCE-Agent用のRaspberry Piを常に起動させておくことで、いつでもマイコンをROS2に接続できるようにしています。そこで、環境構築済のものをそのまま使いました。

 図形については、表示方法がすぐに理解できなかったので、頭の悪い方法をとりました。1ピクセルずつ描画していく方法です。5x5のLEDを光らせることくらいESP32-pico君なんだから余裕でしょとは思いますが…

f:id:Ray_ar:20210104134842p:plain

上方向の三角を表示させる関数です。ArduinoでM5.dis用のアイコン生成スクリプト作るべきなんかなぁ

void up_icon()
{
  M5.dis.clear();
  M5.dis.drawpix(7, 0xf00000);
  
  M5.dis.drawpix(11, 0xf00000);
  M5.dis.drawpix(12, 0xf00000);
  M5.dis.drawpix(13, 0xf00000);

  M5.dis.drawpix(15, 0xf00000);
  M5.dis.drawpix(16, 0xf00000);
  M5.dis.drawpix(17, 0xf00000);
  M5.dis.drawpix(18, 0xf00000);
  M5.dis.drawpix(19, 0xf00000);
  M5.update();
}

いつするかは予定を決めていませんが、次はジャイロセンサとかの情報を送信できればなぁと思っています。

RTX2080Tiだと電源が耐えられなかったので、電源を買い替えた!!

 電源をSuper Flower製に買い換えました。

 以前 「いまさら」だけどRTX2080Tiを買った話 - えいあーるれいの技術日記 で述べたようにRTX2080Tiを買いました。普段の使用や自分がするゲームの範囲内(マイクラとか)であれば普通に安定していたのですが、機械学習の学習を回していると30分経ったくらいでいきなり再起動することで悩んでいました。せっかく2年前の最強グラボを持っていたのにその性能を発揮できないとは…

 実は、そのときApexgamingの650WのGOLD電源を使用していました。電源容量計算的には十分に足りるのですが、機械学習の学習とは、超絶激重ベンチマークを10時間とか20時間回すことと同等のことをしています。nvidia-smiでは、240~260Wで推移していますが(本当か?)、おそらく瞬間に流れる電流が大きすぎて唐突に電圧不足→再起動の不具合が起こったのだと思います。

 例えば、エアコンは起動直後が最も電気を使うといわれていますが、PCについても例外なく同様のことが起こります。特にRTX2080Tiは4352個のGPU CUDAコアを一斉に動かすため、それ相応のピーク電流が流れます。そして、大体の電源供給装置はピーク電流にとても弱いです。一気に電流を流したり、多くの電流を送ろうとすると、電圧が下がってしまうことがあります。大きな容量を持つ電源ほど大容量コンデンサを搭載するのは、電荷をあらかじめためておくことで電圧の低下を防ぎ、電圧の急昇降を防ぐという役割があります。

 機械学習は、分析(判定)→学習→分析→学習→分析… の繰り返しを行うため、負荷にウェーブがあります。すなわち電源ON/OFFが頻繁に起こる可能性があるということになります。

 ちなみに、Apexgamingの電源は最大出力に近づくについて電圧降下が起こるというレビューがあり、あまり評判はよくありません。(参考サイト: 【2020年版】おすすめな電源ユニット「10選」:データで客観的に解説 | ちもろぐ

 そもそもミドルクラスゲーミング用の電源を超ウルトラ激重ゲーミングパワーで動かすとは…

 購入したのはSuper FlowerのLEADEXⅢGOLD 850Wです。Super Flowerは、信頼性の高い電源として世界的には人気らしいです。先ほどの参考サイトでも、電圧降下しにくいというデータが出ていました。1万4000円くらいで購入できます。PC1つの電源としてみればまあまぁ高めですが、酷使する前提ならこの価格は妥当か少し安いくらいかもしれませんね…

内容物は、なかなか豪華。

内容物

そして光ります。マザボはROGなのでLED同期をしていますが、単体でも光ります。

購入した電源

6時間程度サンプルデータで機械学習を回しましたが、余裕でパスしました。機械学習の電源は強いものを買わないとなーと思いました。とりあえず満足です。

現在のPCの状況

 今のPCで光っていないのはSSDとPCケースだけという状況になっています。なんてこった。

SUPER FLOWER|スーパーフラワー Leadex 3 Gold-ARGB 650W Leadex3GARGB650 [650W /ATX /Gold]

価格:14,800円
(2022/5/23 23:36時点)
感想(0件)

SUPERFLOWER Leadex 3 Gold 850W Leadex3Gold850

価格:15,490円
(2022/5/23 23:36時点)
感想(1件)