「電子工作」カテゴリーアーカイブ

クローズドループ正弦波駆動 その1 ーブラシレスモータ駆動への道5ー

 

前回はオープンループでのブラシレスモータ正弦波駆動を確認しました。
矩形波駆動では出来なかった低速回転が実現され大変満足した次第です。

スマート靴占い 『 IしたoTんきになぁ〜れ 』

 

ここからはセンサを用いてモータの回転位置をフィードバックしたクローズドループ正弦波駆動に挑戦したいと考えております。

 

 

オープンループ正弦波駆動 BLE制御

クローズドループにとりかかる前に復習をかねて、BLEで回転速度や正転・逆転切り替えをできるようにしました。

正弦波駆動によってセンサレス矩形波駆動では実現できなかった低速回転が実現されています。

最新版のBlynkではBLEが使用できないので、以前のバージョンのBlynkレガシーを使用してBLE通信しています。

 

磁気エンコーダ

クローズドループに向けてモータの回転位置を把握するために磁気エンコーダ AS5048 を購入したしました。

 

AS5048はインターフェースがSPIで付属の磁石の回転を1周 14 bit (16384)でエンコードします。

 

付属の磁石は面の上下が磁極になっていました。
以下では磁石の磁場をマグネットビューアシートでみています。

 

 

専用の磁気エンコーダケースを設計し3Dプリントしてロータに磁石をつけてブラシレスモータと一体化しました。

 

ブラシレスモータは以下を使用。極数は14。

エンコーダ動作

エンコーダの電源とSPI配線をESP32に接続して、動作確認しました。

以下は手回し。

 

AS5048のライブラリとして以下を使用しました。
 https://github.com/eborghi10/AS5048A

 

オープンループで回して、エンコーダ値を見てみました。

エンコーダ値が1巡 (モータが1回転) する間にブラシレスモータのu, v, w相にはそれぞれ7周期の正弦波が印可されています。

これはロータの磁石が14個 (7ペア)のモータを使用したためです。

 

クローズドループ検討

矩形波駆動の時のように速度を指定して回転させる制御を実施したかったのですが現状うまくいっておらず勉強中のため、ここではモータの回転位置を可変抵抗で指定してモータを動かしてみました。

構成

前回のものに磁気エンコーダ  AS5048 を追加した構成となります。

 

Arduinoコード

 

疑似正弦波を生成するためにドライバ駆動ピン(IO25~27)はledcWriteを用いて20kHz PWM出力します。分解能は10ビット(0~1023) (L. 44-52)。

モータの回転位置rotData をデュアルコアのcore0で検出しています。
1周の分解能を14bitから9bit (512)にしています (L. 32)。

可変抵抗でモータの位置period を0~511で指定します  (L. 67)。

指定した位置とエンコーダによる実際の位置の差diff を導出し (L. 71)、その正負によって回転させるための正弦波のU相の位相のインクリメント・デクリメントを決定します(L. 73-77)。
V相とW相はそれぞれ120°づつ位相をずらします (L. 79, 80)。

正弦波の振幅は回転位置の差diffに比例させて定めます(P制御) (L. 86, 87)。
比例係数Kはもう一方の可変抵抗で調整できるようにしました (L. 68)。

上位の位相と振幅に従って正弦波を生成します (L. 89-95)。
正弦波の周期はモータが1周(分解能512)する間に7周期となるようにしています。

動作

動作は以下の通り、可変抵抗で指定した位置にモータが移動します。
手でずらしても指定の位置に戻ります。

比例係数Kは2.5ほどで安定動作しました。

参考

 

おわりに

ここでは磁気エンコーダを用いたクローズドループ正弦波駆動で位置指定による回転追従動作を確認いたしました。

回転速度を指定した回転動作は現在猛勉強中ですので、後日できましたら報告したいと考えております。

オープンループ正弦波駆動 ーブラシレスモータ駆動への道4ー

これまでは矩形波駆動によるブラシレスモータ制御を勉強し
前回は回転速度指定によるセンサレス クローズドループ矩形波制御を実現しました。

スマート靴占い 『 IしたoTんきになぁ〜れ 』

 

ここからはブラシレスモータの正弦波駆動について学びます。

 

 

疑似正弦波

正弦波駆動の下準備としまして、まずはESP32で正弦波出力の生成を確認しました。

正弦波を直接出力できませんので、PWMのデューティを時間で変化させて疑似的に正弦波を実現させます。

以下がESP32による疑似正弦波出力の様子です。

可変抵抗を2個接続して正弦波の周期と振幅も変えれるようにしました。

 

Arduinoコードのコア部は以下のような感じ

2個の可変抵抗で正弦波の周期 period と振幅 ampを指定して、正弦波の周期を48分割してPWMのデューティを計算してledcWriteで出力しています。

コレを位相を120°ずらして3出力にしてドライバ駆動すればモータを回せるはずです。

 

ドライバ基板作製

これまでの正弦波駆動ではパワトラ駆動にはハイサイドとローサイドの入力を指定できるプリドライバIC IR2101を採用していましたが、正弦波駆動のために1入力でハイサイドとローサイドの信号を内部でデッドタイム込みで生成してくれる IR2302 を採用いたしました。

ドライバのNMOSには 2SK4017 を用いました。

1chの構成は以下の通りです。1入力でドライバ駆動できます。

 

まずは1ch分を作製しました。

 

コレに先ほどのESP32による疑似正弦波を入力します。

 

問題なくドライバ出力が確認できましたので残りの2chも作製し、ドライバ完成です。

 

ESP32で位相を120°ずらした3信号を入力して出力を観測しました。出力は抵抗で1/3に分圧して観測しています。
問題なく疑似正弦波が出力していますが、使用したADALM2000のオシロではサンプリングが間に合わず平滑化され正弦波に観えています。

 

オープンループ正弦波駆動

ドライバもできたのでいよいよ正弦波駆動を実施します。

構成

構成は以下の通りです。

 

Arduinoコード

 

疑似正弦波を生成するためにドライバ駆動ピン(IO25~27)はledcWriteを用いて20kHz PWM出力します。分解能は10ビット(0~1023) (L. 20-28)。

可変抵抗で正弦波の周期と振幅を設定します (L. 32, 33)。

疑似正弦波を48分割して120°位相をずらして出力します (L. 37-46)。

動作

まずは振幅Maxで動作確認しました。
無事にモータの回転を確認できました。低速回転もできていますが遅すぎると停止します。

 

正弦波の振幅を小さく調整するとかなり低速でも回転できました。

 

おわりに

オープンループでのブラシレスモータ正弦波駆動を確認することができました。
矩形波駆動では出来なかった低速回転が実現され大変満足です。

以下では可変抵抗で回転位置をして動作させました。
センサレスなので絶対位置の精度は高くないはずですが、それなりに動いたので驚きました。

 

次回はセンサでフィードバックをかけてクローズドループでの正弦波駆動を楽しみたいと考えています。

今回は高速回転ができませんでしたが、センサ導入でできるようになるのでしょうか?
今のところ なんとなく正弦波駆動は高速回転に向かないような気がしています。
コントローラの速度にも依存するかもしれませんね。

引き続き勉強進めます。

センサレス クローズドループ矩形波制御 その2 ーブラシレスモータ駆動への道3ー

前回 ESP32をコントローラとしてセンサレス クローズドループ矩形波制御を実現しました。

スマート靴占い 『 IしたoTんきになぁ〜れ 』

ここでは更に検討進めましたので報告いたします。

 

 

オンデューティ指定

前回はモータの回転を駆動するドライバのハイサイドトランジスタのPWMオンデューティを指定して制御しました。

この方法では以下のようにモータの負荷によって回転速度は変わってしまいます。

 

そこでここではモータ回転速度を直接指定してのモータ制御を目指します。

またせっかくESP32を使用しているのでBLEで回転速度や正転・逆転切り替えができるようにしました。

 

最新版のBlynkではBLEが使用できないので、以前のバージョンのBlynkレガシーを使用してBLE通信しています。

 

回転速度指定

回転速度を指定して実際の回転速度と比較してドライバのオンデューティを制御します。

回転速度には以下の誘起電圧から検知される各モータ位置ステートの平均時間を用いました。

 

回転速度からオンデューティの算出には以下の書籍の5.5.11 回転数制御の節のPI制御の原理を参考にいたしました。

 

以下でオンデューティ$D_{ON}$を定め、係数$K_P, K_I$を動作させながら調整しました。

$$D_{ON} = K_P × (実測回転速度 – 指定回転速度) + K_I × \sum{(実測回転速度 – 指定回転速度) }$$

 

動作

BLEで回転速度を指定して、モータを回転させています。
負荷を与えてもドライバのオンデューティを変えることで回転速度を保っています。

 

Arduinoコード

 

前回のオンデューティ指定版と異なる点はBlynkレガシーによるBLE通信の導入と
回転速度からオンデューティを算出する機能です。

L. 149~155で指定回転速度 rotSpeedと実測回転速度 rotTimeAve を比較してPI制御でオンデューティvolPWM を算出しています。

 

おわりに

ここでは回転速度指定によるセンサレス クローズドループ矩形波制御が実現できました。

回転速度の正確性や応答性は別途評価用に外部エンコーダを導入して確認したいと考えております。

書籍で原理を学習し、実機を組んで原理に基づいてプログラミングすることでブラシレスモータについての理解がかなり深まりました。

今後は別の制御方法についても検証し理解をさらに深めたいと思います。

センサレス クローズドループ矩形波制御 その1 ーブラシレスモータ駆動への道2ー

前回はブラシレスモータをいじくりつつ、駆動ドライバ基板を製作して矩形波駆動でいわゆるオープンループ制御でのモータ回転を楽しみました。

スマート靴占い 『 IしたoTんきになぁ〜れ 』

 

ここではモータの回転をセンサレスでフィードバックするクローズドループ矩形波制御での駆動を目指します。

 

 

参考書籍

ここからは以下の電子書籍を参考に進めます。Kindle Unlimitedメンバーでしたら無料で読むことができます。

ブラシレスレスモータの制御方法が各種紹介されPICマイコンでの実例が記載されております。
原理説明も明確になされているのでかなり理解が深まりました。

書籍のChapter8 センサレス 制御(120 °通電方式) を参考に回転制御の実現を目指します。

 

モータ誘起電圧

ここではエンコーダなどの外部センサを用いずに回転位置を把握しながらの矩形波回転制御を目指します。

モータは前回に引き続き以下のセンサのないものを使用します。

 

センサレスの場合はブラシレスモータが回転したときに発生する端子の誘起電圧から回転位置を読み取る必要があります。

参考書籍のブラシレスモータ誘起電圧観測回路を製作し、実際の回転時の発生する電圧を観てみます。
以下が製作した誘起電圧観測用フィルタ回路です。

$v_u, v_v, v_w$でモータ端子の誘起電圧を観測します。

実動作時にはドライバによるPWMオン電圧がモータ端子には印可されますので、誘起電圧はフィルタを介して観測します。
参考書籍にならってフィルタのカットオフ周波数は1.78kHzとしました。
モータ回転制御時のPWM周波数は20kHzとしますので十分スイッチングの影響はカットされるはずです。

$v_n$は各端子間を抵抗で分圧してモータコイルの中間の電圧(中性点電圧)を観測します。

 

モータを電動ドライバで回してフィルタ回路を介して誘起電圧を観測してみました。

 
以下が観測波形。それぞれ120°位相が異なる電圧が観られました。

 

回転位置検出

次にモータに前回製作した駆動ドライバを接続した状態(電源はOFF)で電動ドライバでモータを回して、
誘起電圧$v_u$と中性点電圧$v_n$を観ました。

誘起電圧$v_u$と中性点電圧$v_n$と一致する点がコイルが永久磁石による磁束と直行せずに電磁誘導が起きない位置にあることを示しており、更にモータ端子の誘起電圧が$v_n$より大きいか小さいかでモータの位置を分類することができます。

 

フィルタ回路の出力をESP32のアナログ入力ピンに接続して、各誘起電圧と中性点電圧$v_n$を比較することでモータの回転位置を1周6分割で把握することができました。

 

各誘起電圧が中性点電圧$v_n$より大きければ1を出力し、各状態を分類することで6つの位置ステートに分けれました。

中性点との比較にはヒステリシスのあるコンパレータなどは用いず、ESP32アナログピンによるanalogReadで実施しました。
若干ノイズ的な比較出力もありますが$v_u > v_n、v_v < v_n、v_w > v_n$ならモータ位置①などと明確な場合分けによって6分割できました。
ステートの時間を観測すれば回転速度も把握できることになります。

以上、誘起電圧と中性点電圧比較によってモータの位置と回転速度を把握できるようになりました!

センサレス クローズドループ矩形波制御

いよいよモータ位置と回転速度に基づいて制御を実施します。

構成

ここでの駆動システムの構成は以下の通りです。

スイッチでモータの正転・逆転を変えれるようにしました。
またここではモータの回転速度ではなくドライバのハイサイドON時の20kHz PWMデューティを可変抵抗で指定するようにいたしました。
 

動作

制御の詳細説明の前に動作をご覧ください。

無事に回転制御できました!

可変抵抗による速度制御やスイッチによる正転・逆転切り替えも動作しました。

 

以下は動作時の誘起電圧$v_u$と中性点電圧$v_n$です。
スイッチングノイズの影響を受けておりますが、電動ドライバでモータを動かしたときと同様の波形で制御出来ております。

Arduinoコード

ESP32用に制作したプログラムを元に制御方法説明します。

 

モータ回転時の誘起電圧を検出できないと回転位置の把握ができないため、
コントローラ起動時にモータを少し回して誘起電圧を発生させています (L. 185-201)。

デュアルコアのcore0でモータの位置と速度を算出しています (L. 43-141)。
モータの位置ステートの切り替わり時にIO14をHIGHに立ち上げてIO12でそれを受けて割り込みでドライバを駆動するようにいたしました (L. 159)。

駆動するためのドライバのトランジスタON/OFFステートはスイッチ(IO39)のH/Lで正転用・逆転用に切り替えています (L. 80-116)。

回転速度rotTimeAve は各位置ステートの時間の平均で割り出しています (L. 128-136)。

ステートの切り替えの割り込みでドライバ駆動関数rot() (L. 210-263)が呼ばれます。
rotTimeAveの半分待った後 (L. 216) に位置ステートと正転/逆転に基づいたトランジスタON/OFF設定が実行されます。
位置ステートの時間の真ん中でモータが駆動して次の位置ステートに移行し回転が継続されます。

トランジスタのハイサイドONはledcWriteを用いて20kHz PWMで印可します。分解能は10ビット(0~1023)でオンデューティ設定します (L. 161-171)。
オンデューティは可変抵抗(IO13)で設定するようにしました (L. 224)。

 

おわりに

センサレス クローズドループ矩形波制御が実現できました。
モータの誘導起電力で回転位置や速度を判定しているため、低速では起電力が小さくモータを駆動できませんでした。

 

またここではモータを駆動するドライバのハイサイドトランジスタのPWMオンデューティを指定して制御しましたが、この場合モータの負荷によって速度は変わってしまいます。

次回は回転速度を指定するようにして、実回転速度からPWMオンデューティをコントロールするようにしたいと思います。

Arduino MKR WiFi 1010 ベランダ太陽光発電 温湿度センシング検討

2021/9/22からベランダに設置している、太陽光発電 気象観測システムが止まることなく無事に北海道の厳しい冬を越すことができたことを前回報告させていただきました。

RaspberryPi サーバ & WordPress ブログ を XSERVER に サーバ移転

 

長い冬が終わり気温が上がってきまして、ずーっと保留にしてきた比較的気温が高い時に発生する温度と湿度の値の跳ね上がり現象が現れ始めました。

 

腰を据えてこの問題と向き合いましたので報告いたします。

 

 

温湿度センサ交換

これまで温湿度センサはDHT11からDHT22にかえて運用してきましたが、いずれも値の跳ね上がり現象が発生しています。

Arduino MKR WiFi 1010 をソーラで楽しむ 3 -温湿度センサ変更-

新温湿度センサ SHT31 

凝りもせず再び温湿度センサを変えてみました。

https://github.com/adafruit/Adafruit_SHT31

 

 

しかし、結果は変わらず日中に値が上昇する結果となりました。。。

ということは日中お弁当箱の中は確実にこの温度になっているということです。

 

お弁当箱 加工

お弁当箱を百葉箱のように通気性がよく直接日光が当たらないように工夫しました。
側面に穴を複数開けて、フタにプラ板で天井を設けました。

あっさり解決しました。。w

屋根が効いたようです。早く気づけよという話ですね。。。

温湿度センサのDHT11とDH22  疑ってごめんなさい 😥 

 

引き続き運用続けます。

ブラシレスモータ駆動への道 爆誕

以前、デジタルおかもちをブラシレスモータを使用して製作しました。

デジタルおかもち

 

デジタルおかもちは要するに1軸のジンバルのようなもので2軸にも挑戦したいと思ったのですが、使用しているモータが重たいのでさすがに2個搭載は厳しいものがございます。

ちなみに使用したモータは自作の姿勢制御モジュールに使用しているものです。
ドライバとコントローラ内蔵で制御はデジタル信号だけで実施できるので非常に便利なモータです。

スマート靴占い 『 IしたoTんきになぁ〜れ 』

 

将来的に2軸のジンバルを自作してみたいので小型のブラシレスモータを自由自在に制御してみたいと強く思いましたので、ここに”ブラシレスモータ駆動への道”の開設を宣言します。

 

 

ブラシレスモータいじり

まずは小型のブラシレスモータと各種コントローラを購入して、自身とブラシレスモータとの距離を縮めることにいたしました。

センサのない3端子のみの小型で軽いブラシレスモータを2種類 購入しました。

コントローラ①

ESCを購入してブラシレスモータを回転させてみました。

 

PWM入力でモータ速度を制御できます。
ツマミ付きのPWM出力するコントローラも付属され、
50Hz 5%~10%のPWMを出力します。

無事にブラシレスモータを回転させることができましたがESCが何をしているか分からず(分解すればいいのだが。。)、回転方向も変えれず一方方向のみです。

コントローラ②

回転方向を変えれるコントローラも購入し試してみました。

 

問題なく動作しましたが回転方向の切り替え応答が遅かったです。

 
参考: Brushless Motor Controller Board

 

試しにこのコントローラを用いてIMUセンサ MPU6050で回転を制御する1軸ジンバルにしてみましたが
応答が遅くてダメダメでした。。

手動

乾電池を使用して手で印可方向を変えながらモータを回してみました。

 

手で印可方向を変えるのは大変なので、3Dプリンタで治具を製作しました。
単4電池がすっぽり入る円形の容器を出力し、フチに銅箔テープで3分割した電極を設けました。
電極とブラシレスモータの端子を3対接続して、中で電池を回せば先ほどの手動での作業が容易にできます。

 

電池の回転方向や速度に応じてブラシレスモータも回転しています。
要するにこの電圧印可方法をコントローラで自動化してあげればよいということが実感されました。

 

この道の目標

ブラシレスモータの回し方を実感としても理解できましたので、コントローラの自作を目指します。
現状以下のように段階を経て理解を深め良いコントローラの完成を目指します。

  • モータ駆動ドライバの実現
  • 簡単な矩形波駆動でモータの回転を確認する
  • センサレスでの回転速度制御実現
  • 正弦波駆動やベクトル制御など他の制御も学習する

 

駆動ドライバの製作

ブラシレスモータのコントローラ自作に先立ってまずはモータを駆動するドライバを製作します。

市販コントローラの検証

以下のコントローラのドライバ部を参考に検証します。

 

ドライバ のローサイド、ハイサイドは意外にも共にNch MOSFET (NCE6990) が使用されていました。

 

前段にはIR2101というICが載ってブートストラップでハイサイドトランジスタを 駆動していました。

ドライバ製作

検証したコントローラの部品をとって駆動基板を製作します。

1ch

まずは1ch分のMOSFETとIR2101をとって改めて基板に実装してみました。

ゲート抵抗 (100 ohm)やブートストラップのダイオードとコンデンサもそのまま移植しました。

 

駆動ICのIR2101の入力を制御して出力波形を観測しました。
ドライバの電源は12V、入力にはATOM LiteのIO出力(0-3.3V)を使用しました。

 

問題なく動作しました。
両サイドのトランジスタがONしないように1usecのデッドタイムを設けています。

 

3ch

同様に残りの2chも部品をとって3chの駆動基板を完成させました。

3ch分のハイサイド、ローサイド駆動用入力ピン6個と3個の出力ピンと電源(12V)・GNDピンがございます。

 

矩形波駆動

作製したドライバ基板を用いてブラシレスモータを回してみます。

駆動方法は矩形波駆動を用います。ちょうど先の動画の乾電池をくるくる回した方法を自動化するイメージです。

 

矩形波駆動は以下のように6個の印可ステートを順に変えてモータを回します。
このステートの変え方を逆にすればモータは逆転します。

参考: 矩形波駆動とは

動作

ATOM Liteの6個のIOをもちいて3chのハイサイド、ローサイドのトランジスタを上記の矩形波駆動のステートでON/OFFさせました。
ATOM Liteのボタンを押すと逆転します。

各ステートの時間は10usecで駆動しました。
かなり電流が流れるので回転はしていますが振動して元気ですww

 

PWM駆動

ハイサイドのオンをフルオンではなくPWM デューティ 12.5% (20kHz)にして電流低減を図りました。

電源電流も減って回転も落ち着きました。

自動での回転速度追従や負荷に応じたPWM制御などできるようになりたいです。

Arduinoコード

 

おわりに

ブラシレスモータをいじくりつつ、駆動ドライバ基板を製作して矩形波駆動でモータ回転を楽しみました。

徐々に学習を進めて この道の目標を達成しつつ ブラシレスモータのコントローラを完成させたいと考えています。

ここではいわゆるオープンループ制御を楽しみましたので
次回はモータの回転をセンサレスでフィードバックしての回転速度制御を目指します。

ネーデルガンダム大地に立つ!!

以前にリアクションホイールでバランスする二足歩行ロボットを製作しました。

シリアルサーボで足踏み -シリアルサーボと距離を詰めたい俺4-

 

その際にネーデルガンダムのようだという感想をチラホラいただきました。

 

指摘を受けるまでは全く知らないガンダムでしたが せっかくの縁ですし、
先日ガンプラ製作の基本を学びましたので ネーデルガンダムを作ってみようと思い立ちました。

ガンプラへの道 爆誕

 

 

ネーデルガンダム

ネーデルガンダムとは機動武闘伝Gガンダムに登場するオランダの風車のような形状のガンダムです。

 

嘘みたいなガンダムですが、ちゃんとした公式キャラクターのようです。ウケる

 

確かにボディ前面の風車がリアクションホイールのようにみえますねww

 

SHISEIGYO-1 DC

リアクションホイールで倒立するネーデルガンダムを製作します。

機構にはSHISEIGYO-1 DCを使用することにしました。

 

ミニ四駆で使用するダブルシャフトモータを使用していますので、軽くて模型に適応しやすいと考えました。

 

製作

ネーデルガンダムは模型キット化させていないようで(されていても買わないが。。。)、自作する必要があります。

SHISEIGYO-1 DC を機構として採用しホイール位置をそれほど高くできないのでSDっぽいフォルムにしようと考えました。

3Dプリンタ、プラ板、ガンプラの混交で製作しましたので報告いたします。

頭部

特徴的な形状の頭部はCADで設計し3Dプリンタで出力しました。
頭部外装、マスク、あごをデザインしてプリントしました。

 

ヤスリで3Dプリントの積層痕を削って整形し、マスクとあごは油性ペンで塗装しました。
目はプラモデルのランナーを削ってマスクに接着しました。
アンテナはプラ板を切って製作しました。

3DプリントPLAフィラメントによる出力品は非常に硬くてヤスリがけが大変でした。。

ちなみに目のグリーンは長男くんのエントリーグレードのνガンダムの目のゲートのタグを使用しました。

 

外装はヤスリ後にスジボリしてオレンジの油性ペンで塗装しました。
アンテナを黄色油性マーカで塗装し接着しました。

腕はエントリーグレードのガンダムの腕を利用しました。

 

片アーマにプラバンを追加して大きくしました。

 

前腕にもプラ板でアーマ装飾を追加

胴体

胴体の装甲は3Dプリンタで出力して、ヤスリで成型後に上部に装飾をプラ板で貼りました。
脇には腕を接続するジョイントを接着しました。

 

以下のようにコントロール基板とモータを固定します。

 

ホイールは風車の形で3Dプリントして重りとしてネジを付けました。

足は3Dプリンタで出力しました。リアクションホイールで倒立させるために足の接地面が直線上でRを持たせて配置されています。

足首はフレームとして焼鉄色で塗装しました。

 

装甲や装飾をプラ板で作って接着しました。
青は油性ペンで塗りました。

 

足をボディに接着

ボディの装甲はオレンジ色の油性ペンで塗装後 つや消しトップコートしてからアクリル黒塗料を薄く塗りました。

スカート

スカートはプラ板で作りました。

 

プラ板の接着には流し込み接着剤を使用しました。速乾性の為 非常に造形しやすいです。

完成

各パーツを接続して完成です!!

 

腕や足のバランスがおかしいけど。。。

まぁ。。よし

 

頭はかぶせてるだけ

 

動作

無事に倒立動作が実現できました!!

 

 

おわりに

プラモデル製作の基礎を学んだことにより、製作の幅が大きく広がりました。

引きつづきいろいろな技術を吸収して楽しい製作ライフを送りたいと思います!

 

追記

背中作りこみ (22/4/16)

背中の装甲も作りこんでみました。

 

 

乾電池駆動 (22/4/16)

単3電池 3本で駆動してみました。

問題なく動作しました!

SHISEIGYO-1 Walker 弐 を実現させたい俺2 ー歩行検討ー

前回は高トルク中華サーボで足を構築して、リアクションホイールでバランスをとるロボット(2号機)を検討しました。

SHISEIGYO-1 Walkerを実現させたい俺2 ー歩行検討1ー

 

サーボの大きさや動作角度の精度を鑑みて以下のようなガニ股型のロボットにいたしました。

 

ここでは歩行を検討いたしました。

 

 

歩行検討

重心を片足に載せて、他方の足を上げて進行方向に出し重心をシフトして他方の足を戻すを繰り返します。

歩幅は1cmと大きくないですが
流石 20kg・cmと高トルクのサーボなので、かなり高速の重心移動が実現できました。

 

足底をかまぼこ状にしてリアクションホイールでバランスをとっているので、床が傾いても足が滑らなければ平気でバランスして歩行します。

 

SHISEIGYO-1 Walker

1軸のリアクションホイールでバランスとりつつ 2足歩行するロボットは今回で2台目の製作となります。

 

1号機はシリアルサーボ KRS3301を使用しました。 トルクが足りず( 6.0kg・cm)、ゆっくりとした歩行しかできませんでした。

 

今回 高トルクのサーボの使用で速い重心移動が確認できましたので、次回は高トルクでかつ精度の高いサーボを使用して高速での足を交互に進める歩行を目指したいです。

KRS-2572あたりが最適でしょうか。価格も高いので少しづつ集めて製作進めたいと思います。


KRS-2572R2HV ICS - 近藤科学

 

おわりに

ここでは高トルクPWMサーボでのSHISEIGYO-1 Walker 2号機の歩行を検討しました。

課題は残りましたが、それは希望とも言え リアクションホイールによるバランス機構を用いてスムーズに2足歩行するロボットの実現確度はかなり自身の中で向上しました。目を閉じればもう姿が見えているほどです。

ただ理想と考えるサーボを導入するには資金が必要となりそうなのでコツコツ貯めていきたいと思います(過剰な労働は絶対にしたくないので)。

 

余談ですが。今回 SHISEIGYO-1 Walker 弐 をTwitterにアップしたところ、以下のようであると感想をいただきました。

  • チャップリン
  • どじょうすくい
  • タイムボカンエンディングテーマで出てくるマージョ一味

ガニ股がレトロな印象を与えているのでしょうね 😆 

そういえば平成以降ガニ股はとんと見なくなった気がいたします。
現在ガニ股は競合がいない状況ですので何かチャンスがあるかもしれません。

SHISEIGYO-1 Walker 弐 を実現させたい俺1 ーキックオフー

以前に姿勢制御リアクションホイールに足をつけて2足歩行ロボットを製作しました。

シリアルサーボで足踏み -シリアルサーボと距離を詰めたい俺4-

 

1号機のSHISEIGYO-1 Walkerはシリアルサーボ KRS3301を使用しておりました。

ゆっくりではありますが、リアクションホイールによる自律的重心移動動作を実現し2足歩行を実現できました。
但し、サーボのトルクが6.0kg・cm程度と低くホイールを重くできないなどの制約もありました。

ここでは足に使用するサーボモータをかえて2号機 (SHISEIGYO-1 Walker 弐) の製作を実施します。

 

 

サーボモータ入手

AliExpressで高トルクのサーボを購入いたしました。

 

アルミフレームもついて連結しやすく、簡単に足的なモノを構成できました。

ちなみに上の動画で使用してるコントローラは以下。
50HzのDuty 5~10%のPWM信号を出力します。

 

 

合計8個のサーボで両足を構成して、ESP32の評価ボードとモータドライバ PCA9685で動かしてみました。

 

 

屈伸動作は逆運動学で足高さを指定して動かしています。

SHISEIGYO-1 Walkerを実現させたい俺2 ー歩行検討1ー

 

SHISEIGYO-1 Walker 弐 製作

ESP32の評価ボードとモータドライバ PCA9685にIMUセンサMPU6050を加えて、更にブラシレスモータを制御します。

 

組立てました。
1号機のSHISEIGYO-1 Walkerより大きくなりました。
足は同様にかまぼこ状です。

 

倒立も実現できましたが、高さがあるためか少しフラフラしています。

ホイールは市販のアルミホイールを2枚重ねにしておもさが約125gありますが、サーボが強力なので全く問題ありません。
3枚重ねにして更に重くして試してみましたが、モータが熱くなって苦しそうなので2枚にしました。

調整

倒立がフラフラなので、極力ホイール高さを低くしてみました。
足の付け根を上げて、モータ固定位置を下げました。

 

だいぶ安定してきました。

 

BLEでESP32に信号をおくって手動で前後動作させました。

若干不安定で怖いです。。

再調整

色々足の構成を変えて、高さを低くして安定性の向上など目指しましたがあまりうまくいきませんでした。

 

足の高さを変えると足を交差させて足底を一直線にする際に他方の足に干渉してしまうなどの問題がありました。

またこのサーボの場合 角度指定の際にばらつきがあり(正方向と逆方向時に静止位置が異なったりする)、複雑な動作は難しいかなという結論に至りました。

 

方針変更

今回のサーボは高トルクですがサイズが大きく角度の精度も低いので、1号機のように足を交差させての歩行は難しいと判断しました。
以下のような構成にして歩行を目指すことにしました。

足をロールさせるサーボを減らして、足1本あたり3個のサーボ
合計6のサーボを使用して足を構成しています。

 

前後動作も比較的安定しているので、歩行動作にも可能性ありです。

 

ちなみに足底はかまぼこ状なのでホイール回転なしでは自立しません。

 

 

おわりに

ここでは高トルクの中華サーボでのリアクションホイール2足歩行ロボットの製作を開始しました。

製作の過程でサーボの特性を理解しつつ調整を重ねだいぶ方針が固まってきました。

次回は歩行を目指したいと思います。

それではまた。

Arduino MKR WiFi 1010 ベランダ太陽光発電 気象システム 無事越冬

2021/9/22からベランダに設置している、太陽光発電 気象システムが止まることなく無事に越冬できました。

Arduino MKR WiFi 1010 をソーラで楽しむ 1 -ベランダ気象データ測定-

 

 

 

気象システム

システムのおさらいです。
Arduino MKR WiFi 1010 に温湿度センサと気圧センサを接続し、LiPoバッテリを8Wソーラパネルで充電しながら運用しています。
10分おきに起床してLiPoバッテリ電圧とソーラ発電電圧と気象データ(温度、湿度、気圧)をUDP送信してスリープします。

 

  • Arduino MKR WiFi 1010

     
  • 温湿度センサー DHT22

     
  • 大気圧センサーモジュール BMP280

     
  • LiPoバッテリ 1200mAh

     
  • 8Wソーラパネル (6V用)

パワーマネージメント

Arduino MKR WiFi 1010には入力定格22VのパワーマネージメントIC BQ24195Lが搭載されており、コントローラ用のロジック電源生成とLiPoバッテリの充電動作を実施しています。

高い入力電圧耐圧のBQ24195Lのおかげで開放電圧10.8Vの8W出力のパネルソーラパネルを直接Vinに接続することができ、LiPoバッテリを充電しながらの長期運用が実現できました。

但しArduino MKR WiFi 1010のオフィシャルVin最大定格は6Vです。
実施の際は自己責任で宜しくお願い致します。

参考

 

無事に越冬

本システムをベランダに置いて2021/9/22から運用し、
2022/3/17まで止まることなく動き続けています(176日連続動作)。
引き続き運用していく予定です。

気温

気圧

湿度

LiPoバッテリ電圧

ソーラパネル電圧

 

データをブラウザでみえる化

お母ちゃんに気象システムからのデータをブラウザから見れるようにしてもらいました。

RaspberryPi サーバ & WordPress ブログ を XSERVER に サーバ移転

これで端末からいつでも気象情報をチェックできます。

 

氷点下時のバッテリ電圧

気温が-8℃以下になるとバッテリ電圧の低下がみられました。

気温

LiPoバッテリ電圧

 

ソーラパネルからの電圧は普段通り供給されているので、低温によるバッテリ電圧の低下といえます。

ソーラパネル電圧

 

バッテリ電圧低下時でも3.8V以上を保持しており、システム動作に異常はありませんでした。
気温が-10℃以下になると危なかったかもしれませんが、今冬は無事に超えることができました。

 

トンガ火山噴火 衝撃波

2022/1/15のトンガ火山噴火の衝撃波による気圧変化を本システムでも観測しました。

 

 

逆方向と2周目の3回のピークを観測しました。
これには非常に驚きました。

 

 

温湿度センサ

観測当初から見られた温湿度センサの値の跳ね上がり現象がここ最近再びみられるようになりました。

 

同様に湿度にもピークが出るので温湿度センサDHT22の何かに起因しているものと考えています。

 

こちらはセンサ交換も視野に入れつつ、原因検証すすめます。

 

おわりに

Arduino MKR WiFi 1010 ベランダ太陽光発電 気象システムの長期運用状況について報告いたしました。

すでに冬を超えて半年近く動作しています。
特殊機材の追加なしにマイコンとソーラとバッテリとセンサのみで実施できる非常に経済的なシステムであるといえます。

今後は温湿度センサのピーク値の原因解明と現行では10分おきのデータ取得周期を消費電力と相談しながら縮めていこうと考えております。

球体POVつくってみた -球体POV製作への道 その10-

先日、スリップリングを用いて姿勢制御モジュールとPOVの融合による新たな表現を検証いたしました。

姿勢制御装置とバーサライタの融合 ーリアクションホイールへの道50ー

 

ここでは姿勢制御POVの機構をそのまま流用して、長年の夢であった球体POVを作ってみました。
およそ6年かかった”球体POV製作への道”ついに完結です!

LEDテープ比較 Neopixel vs Dotstar -球体POV製作への道 その7-

 

 

筐体製作

6年前とは異なり、現在の私には良いブラシレスモータと素晴らしい3Dプリンタがございます。

直径10cmのリングを3Dプリントし、

 

SPI LEDテープ (41セル) をリングに貼り付けて、姿勢制御POVのホイールの代わりに固定しました。

 

簡単に球体POVが完成してしまいました。テクノロジーの進歩を感じずにはいられません。

構成

 

球体POV動作確認

まずはリングのみを載せて回転させてみました。
3Dプリントしたリング自体は軽いので問題なく高速回転できています。

 

リングの片側にLED (21セル) を付けて動作確認
ブラシレスモータのエンコーダ出力 (1周 100パルス) でLEDの色を変えて表示を確認しました。

問題なく1周100分割でRGBY 4色で点灯できました。

 

リングのもう一方に20セルのLEDを貼り付けます。他方のLEDの間にセルが配置されるように貼り付けました。

合計で41セルのLEDとなりましたが無事に1周100分割でRGBY 4色で点灯できました。
回転速度は約1400rpmです。24V ブラシレスモータはさすがに速いです。

 

LEDセルを増やしたことで表示密度も向上いたしました。

 

全白で表示させてLEDの位置による光の違いの有無の確認を実施しました。

LEDの場所 極に近いほど経路長が短くなるので 明るさに違いが出るかと思いましたが、 それほど差はありませんでした。
正面から見ると発光方向が傾くのでいい感じに 均等になっているのかもしれません。

表示画の経路長輝度補正の必要はいらないと判断しました。

 

動作

アスペクト比 2:1の地球の絵を表示してみました。
 Equirectangular-projection.jpg 

画像を100×47の画像に縮小し、各ピクセルの色を検出しLED用のファイルに変換し表示させました。

LEDセルは41ですがリング下部の接続部にはLEDがないので縦47ピクセルとしました。

それほど画素数は多くないですが、なかなかきれいに表示されました!

 

おわりに

ここでは前回に製作した姿勢制御POVを流用して、長年の夢であった球体POVを製作しました。

約6年前に球体POV製作への道を立ち上げて頓挫しておりましたが
この間に3Dプリンタを入手しハンディーバーサライタや姿勢制御モジュールを製作し、
技能の向上と良い部品とのめぐりあわせがあり この度容易に完成させることができました。

いろんな絵を表示させてみたいのですが なかなか球体を展開した画像を用意するのは難しいものですね。
画像生成方法も検討しないといけません。

 

追記

2022/3/13 絵の表示について

球体POVを製作されている やまたい@ものつくり さんから
球体中央は画像修正しなくてもいい感じに絵が表示できるというアドバイスをいただきました。

 

試しにうまい棒のアイツで試してみました。
以下のように真ん中に顔を配置してアスペクト比2:1の画像にして表示してみました。

 

なかなかいい感じ♪

 

小学館のアイツも同様に表示

 

本当に極端な加工なしでも絵だしできますね。
色々表示させて楽しみたいと思います。

姿勢制御装置とバーサライタの融合2 ーリアクションホイールへの道51ー

前回は 1軸 姿勢制御モジュール SHISEIGYO-1のホイールにLEDをつけてバーサライタ動作させてみました。

姿勢制御装置とバーサライタの融合 ーリアクションホイールへの道50ー

 

姿勢制御モジュールのホイールはバランス状況によって正転・逆転及び回転スピードが変わるので、安定した画の表示は出来ませんでした。

 

 

スリップリング

前回はホイールにLEDと制御用のマイコン(Adafruit Trinket M0)と回転検出用フォトリフレクタを載せてワイヤレスチャージモジュールで無線電源給電しました。

ここでは画の表示にホイールを駆動するブラシレスモータのエンコーダ出力を使用したいと考えました。
エンコーダによる回転検出値でLEDの点灯パターンを制御すればホイールの正転・逆転及び回転スピードが変わっても表示する画に影響はありません。
しかし問題はどのようにエンコーダ出力値をLED制御に反映させるかです。

そこで遂にスリップリングに手を出してしまいました。

 

スリップリングは回転部に電源線や信号線を接続できるコネクタです。

 

ここでは4線のスリップリングを用いて回転部のSPI入力LEDと接続します。

 

SHISEIGYO-1 POV 構築

購入したスリップリングをSHISEIGYO-1のモータに通したかったのですが、シャフトが短く埋もれてしまいました。。

 

マウントハブと平行ピンでシャフトを延長してスリップリングとフライホイールを固定しました。

 

凄く仰々しくなってしまいました。。

完成

スリップリングの回転部用の配線に11セルのLEDを接続し、他方の配線をSHISEIGYO-1のコントローラであるATOM Matrixに接続します。

 

ATOM Matrix (デュアルコア) で姿勢制御しつつモータエンコーダ出力(1周100分解能)に基づいてSPI LEDを制御します。

 

動作

まずはホイール1周を4分割して4色で発光
エンコーダで回転位置を検出してホイール速度や正転・逆転に依存しない表示を確認。

倒立動作も問題なく出来ています。

 

アニメーション表示

LEDのセル数が少なく回転速度も一定ではなくそれほど早くないので、きれいな表示は出来ていませんがスリップリングの使用によってかつてない表現が実現できました。

 

おわりに

ここでは初めてのスリップリング体験を堪能し、姿勢制御モジュールとPOVの融合による新たな表現を検証いたしました。

今後はスリップリングを用いたガチPOVの製作も検討したいなと考えております。

それではまた。

デジタルおかもち2

前回はサーボモータを用いてデジタルおかもちを製作しました。

デジタルおかもち

前回において以下の課題や疑問が生じました

  • サーボの応答が遅いのか
  • 制御が遅いのか
  • そもそも制御の思想自体が誤っているのか
  • 手で持って移動させているのが悪いのか(実際サーボの移動に影響されてリンギングすることもあった)

 

 

ブラシレスモータを試してみた

試しに姿勢制御モジュールSHISEIGYO-1のブラシレスモータでデジタルおかもちを試してみました。

なんと!すごくいい感じに1軸デジタルおかもちが実現できました!!

おかもち台は3Dプリントして姿勢制御モジュールのホイールの代わりに取り付けました。

 

SHISEIGYO-1で使用しているブラシレスモータにはコントローラとエンコーダが内蔵されています。

モータの回転方向やブレーキはデジタル制御でき、回転スピードはPWM信号で制御します。
エンコーダは1周100パルス出力され、ここでは4逓倍して使用しました。

 

ATOM Matrixに内蔵のIMU(MPU6886)の加速度(acc)と角速度(gyro)のセンシング値を用いてカルマンフィルタを通して筐体の傾斜$θ$と角速度$ω$を計測します。

計測値とエンコーダによるモータの回転目標位置$θ_{GOAL}$を用いて
以下のようにモータ回転PWM信号$M$を生成し、PD制御しました。

$$M = {Kp}_X × (θ – θ_{GOAL}) + {Kd}_X × ω  $$

$$   但し、Kp, Kd:係数$$

 

ブラシレスモータによるデジタルおかもち動作は前回のサーボモータに比べ非常に応答性がよく驚きました。
ブラシレスモータでもこのように目標位置にパタッと止める制御ができちゃうんですね!

大変勉強になりました!

 

前述の課題や疑問はブラシレスモータ版のデジタルおかもち体験を経て以下のようにステータスが変化しました

  • サーボの応答が遅いのか
    →おそい!ブラシレスモータ最高!
  • 制御が遅いのか
  • そもそも制御の思想自体が誤っているのか
    →制御思想やセンサは悪くなさそう
  • 手で持って移動させているのが悪いのか
    →モータの応用早いと手の揺れも吸収してくれる

 

エンコーダ未使用版 検討

SHISEIGYO-1の機構を流用して1軸デジタルおかもちを楽しみましたが、筐体の姿勢を検出してモータを制御するためには、モータの回転量を検出するエンコーダが必須になってしまいます。

ここではエンコーダを使わない方法を検証します。

おかもち台にIMUを仕込んで、平行になるようにモータを回転させる機構にすればエンコーダは必要なくなるはずです。

早速試してみました。

問題なくモータのエンコーダを使用せずにおかもち動作を確認できました。

 

おかもち台にはIMUセンサMPU6050をつけて、コントローラにはATOM Liteを用いました。

 

MPU6050で測定した加速度からおかもち台の傾斜を計測し角速度と共にカルマンフィルタを通しておかもち台の角度$θ$と角速度$ω$を計測します。

以下のようにモータ回転PWM信号$M$を生成し、PD制御でおかもち台が常に水平($θ = 0$)になるようにします。

$$M = {Kp}_X × θ + {Kd}_X × ω  $$

$$   但し、Kp, Kd:係数$$

 

おわりに

ここではブラシレスモータによる1軸 デジタルおかもちを検証しました。
ブラシレスモータの回転エンコーダなしでもIMUセンサに基づくブラシレスモータ制御が実現できました。

ブラシレスモータでもサーボモータのように任意角度に回転移動制御できるようになり、その応答性の良さに大変驚きました。

 

2軸のデジタルおかもちもブラシレスモータで実施したいのですが、ここで使用したモータは重すぎるため以下の軽そうなブラシレスモータを購入してみました。

回転させるためのコントローラが必要そうですが届き次第 勉強したいと思います。
エンコーダなしでの制御が確認できていますので2軸のブラシレスモータ デジタルおかもちの実現障壁もそれほど高くないと思っています。

それではまた。

デジタルおかもち

凄い動画がTwitterにありました。

 

リンクの記事によるとマジックペンを載せたロボットアームの先の台を、移動時にうまいこと傾けて倒れたり滑り落ちないようにしているとのこと

この台の制御をリアルタイムに実施しているのか、アームの移動動作に基づいてあらかじめシーケンス組んでいるのかは不明ですがいずれにしても凄いですね。

なんか自分でも試してみたくなったので動く台(デジタルおかもち)を作ってみました。
ロボットアームなど持っていないので自分の手でもって実験します。

 

 

1軸おかもち

サクッと1軸で動く台を作ってみました。
サーボモータRDS3115とATOM Matrixを使用しました。

 

ATOM Matrixは持ち手の下部につけて内蔵のIMUセンサ MPU6886のセンサ値を使用しました。
上の動画ではMPU6886の加速度から傾きを計算して、10回計測した値の平均を用いてサーボを動かしています。

1軸上での重力加速度の傾き分、サーボを動かしますのでゆっくり動かせば天板は常に平行になるように動きます。

素早く動かすと加速度がかかりますので、1軸上の加速度と重力加速度のベクトル和の方向と垂直になるように天板が傾きます。

 

2軸おかもち

サーボモータRDS3115を追加して2軸にしました。
1軸の時と直行する傾き検出を追加して2個目のサーボを制御します。

 

これで常に平行を保とうとする台が完成しましたので、さっそく物を載せてみました。

 

持ち手を傾けても天板は平行に保たれておりますが、加速移動時になんか挙動がおかしいです。

よくよく考えてみると持ち手を傾けた際に天板とセンサは違う方向を向いており、移動時の加速度がかかる方向が違いました。

センサの位置がまずいですね。

 

天板にセンサ移動

ATOM Matrixを持ち手の底面から天板に移動しました。

 

おかもちの座標は以下のとおり。

 

ATOM MatrixのIMUの加速度(acc)と角速度(gyro)のセンシング値を用いて
以下のようにX軸、Y軸のサーボの角度($θ$)を制御して天板水平方向の加速度がゼロになるように制御しています。

$$θ_X = θ_{X-1} + {Kp}_X × {acc_Y} + {Kd}_X × {gyro_X}  $$

$$θ_Y = θ_{Y-1} + {Kp}_Y × {acc_X}  – {Kd}_Y × {gyro_Y}  $$

$$   但し、θ_{X-1}, θ_{Y-1}:直前に算出した角度、 Kp, Kd:係数$$

これによって持ち手が傾いても天板は平行になるようにサーボが動き、移動時には加速度と重力加速度のベクトル和の方向に対して常に垂直になるように天板が傾くという魂胆です。

 

しかし、はやく移動させると積載物は落ちてしまいました。

 

サーボの応答が遅いのか
制御が遅いのか
そもそも制御の思想自体が誤っているのか
手で持って移動させているのが悪いのか(実際サーボの移動に影響されてリンギングすることもあった)
色々原因が考えられますが完ぺきなる おかもち は実現できませんでした。

 

おわりに

ロボットアームによるペンの移動に感化され、デジタルおかもちを製作してみました。

結果的には成功しませんでしたが、いつかロボットアームを手に入れたら先端に本機構のおかもちを取り付けて再検討実施したいです。

 

ロボット犬『Mini Pupperミニぷぱ』で 書道

これまでミニぷパに色々な動作や機能を実装し楽しんでまいりましたが、
ついに字を書けるようになりました!

 

 

動作

早速 凛々しい書道スタイルをご覧ください。

 

足に筆ペンを固定していますw

 

機構

基本的には以前ロボットアームで実施した機構と同じです。

Processing で制御 ーロボットアーム自作への道3ー

 

Processingのウィンドウ上の座標をミニぷパに送信して足の平面座標(x, y)として制御します。

マウスをクリックすると足の高さを下げて筆ペンを地面に接地します。
ドラッグで線や絵を描けます。マウスがクリックされていない時は足を20mm上げてペン先を浮かせています。

 

ProcessingからのUSBシリアルはATOM Liteで直接うまく受信できなかったので
前回のAIカメラ HuskyLensの時と同様に一旦Seeeduino XIAOで受信してATOMに座標情報を送りました。

姿勢制御装置とバーサライタの融合 ーリアクションホイールへの道50ー

姿勢制御モジュールのホイールにLEDを付けてバーサライタにしてみてはどうだろう。

思いついてしまったので どうなるかは考えずに作り上げることだけを考えて手を動かした。
ちょうど祝日 天皇誕生日。俺なりの祝いの儀式だ。

 

 

とにかく作る

1軸 姿勢制御モジュール SHISEIGYO-1のホイールにLEDをつけてバーサライタ動作させます。

回転部への給電はハンディバーサライタ PovRanianの機構をそのまま利用してワイヤレスチャージモジュールを使用します。

 

ワイヤレスチャージモジュール送信側をSHISEIGYO-1の筐体に固定。
電源は5V DCDC出力に接続しました。

 

ホイールにLEDやワイヤレスチャージモジュールの受信部を固定する治具を3Dプリントいたしました。

マイコンはAdafruit Trinket M0 を使用しました。

 

SPI入力のLEDを11セル前面に固定。
更にホイールに固定後に回転を検出するフォトリフレクタセンサも固定します。

 

ホイールを固定して完成!

筐体に貼ったマスキングテープの白マーカをフォトリフレクタで検出します。

 

動作

 

プログラム的にはフォトリフレクタセンサで回転時間を検出して、1周の時間を4分割してLEDを赤、緑、青、黄で光らせます。

姿勢制御モジュールの場合は回転速度常時変化するのでマーカ1個で回転検出するPovRanian形式だときれいな絵を出すのが難しいです。

ブラシレスモータのエンコーダ出力を利用できれば回転速度や正転・逆転に関係なく絵が出せそうですが無線では厳しいと思います。

いつかスリップリングを使用した有線でのバーサライタ動作も試してみたいです。

ロボット犬『Mini Pupperミニぷぱ』を AIカメラ HuskyLens で堪能

前回は9軸 IMUセンサ BNO055を用いてミニぷぱ制御を楽しみました。

ダイソー版 プラレール を改造したよ♪

 

ここでは更に AIカメラ HuskyLensを追加して ミニぷぱを賢くしちゃいます。

 

 

AIカメラ HuskyLens

HuskyLensは顔認識、物体追跡、物体認識、ライン追跡、色認識、タグ認識などの機能を有するAIカメラです。

 

 

ここではHuskyLensの設定で色認識データをI2C出力にして使用しました。

 

認識した色の座標位置でミニぷぱを制御します。

 

 

HuskyLensをミニぷぱに接続

前回製作したATOM Liteをコントローラに採用したミニぷぱにHuskyLensを接続します。

注意点

HuskyLensのI2C出力をATOM Liteに接続して素直に行きたかったのですが。。
毎度恒例の問題発生。

以下のHuskyLens Arduinoライブラリを使用してI2C通信したいのですが、ESP32には使用できませんでした。
 https://github.com/HuskyLens/HUSKYLENSArduino/tree/master/HUSKYLENS/examples/HUSKYLENS_I2C

かなりライブラリを修正しないといけない感じだったので直結は潔くあきらめて、Seeeduino XIAOで中継することにいたしました。

 

構成

 

HuskyLensとATOM Lite間にSeeeduino XIAOを挿入してI2C-Uart変換を実施しています。

 

 

部品

 

動作

赤色の横方向座標で旋回移動させてみました。

XIAOからのHuskyLensデータをATOM Liteを2コアにしてCore0で常時シリアル受信するようにして、サーボ制御との並行動作を実現しています。

 

これまで仕込んだ歩行動作なども問題なく実行できます。

 

おわりに

AIカメラ HuskyLensの追加によって ミニぷぱ がとても賢くなりました!

今回は色認識で制御していますが顔認識やライントレースなどもできそうです。

どんどん賢く 高機能になる 我が家のミニぷぱ

 

そのうちしゃべりだして立ち上がって二足歩行するかもしれませんね。

ロボット犬『Mini Pupperミニぷぱ』を BNO055で姿勢制御

前回まではラズパイ4でミニぷぱを楽しみました。

ロボット犬『Mini Pupperミニぷぱ』がやってきた

ここではまたマイコンによる制御に立ち戻って新たなIMUセンサを楽しみます。

 

 

BNO055

以前はコントロールにATOM Matrixを用いて、内蔵のIMUセンサ MPU6886を用いて姿勢制御も楽しみました。

重力方向軸の回転角度 Yaw角を検出して床を回転させても常に同じ方向に旋回する制御も実施したかったのですが、MPU6886ではYaw角のドリフトがかなり大きく断念しました。

ここでは違うIMUセンサを採用してYaw角旋回制御を目指します。

6軸IMUのMPU6886がYaw角がとれないことはしょうがないのですが、同じ6軸でもMPU6050ではオフセット校正を施すと割とドリフトの小さいYaw角を得ることができます。

MPU6050を使用しても良かったのですがここでは9軸IMUセンサ BNO055を使ってみようと思います。

BNO055は正直内部でどういった処理をしているのか不明なのですが、正確な姿勢角を得ることができます。

以下のサンプルコードで校正や補正なしですぐに姿勢角を得ることができます。
 https://github.com/adafruit/Adafruit_BNO055/blob/master/examples/rawdata/rawdata.ino

 

 

以下でIMUセンサを各種比較してますのでよろしければどうぞ

スマート靴占い 『 IしたoTんきになぁ〜れ 』

 

BNO055をミニぷぱに導入

以前のATOM Matrixの機構にBNO055を追加しても良かったのですが、MPU6886を搭載したATOM Matrixに更にIMUを追加するのが冗長でどうしても許せなかったのでコントローラにはATOM Liteを採用しました。

 

注意点

BNO055とはI2Cで通信するのですが、M5Stack ArduinoのM5Atom.hではI2Cピンを指定してAdafruit_BNO055ライブラリでのBNO055との通信ができませんでした。

 

そこでここではM5Stack Arduinoライブラリは使用せずESP32 ArduinoライブラリでATOM Liteを使用することにしました。ESP32 ArduinoライブラリではI2Cピンを自由に指定してもBNO055と通信が問題なくできました。

ここではBNO055との通信はWire.begin(25, 21)で実施し、
サーボドライバ PCA9685とはWire1 .begin(22, 19)で実施しました。
これで問題なく動作を確認できました。

 

宴会芸

BNO055導入によって、正確な姿勢角を得ることが可能となりました。

ここではカルマンフィルタなど使用せず姿勢角の生データをそのまま使用しました。
BNO055が優秀で非常に楽です。

 

Yaw角を検出して旋回動作させて一方方向を保持する動作をさせてみました。

いい感じ!!

 

以前仕込んだ動作も問題なくできています。

床を傾けた時の足の高さでの平行制御もBNO055の姿勢角のみのP制御ですがスムーズに実現できています。

 

おわりに

ここでは9軸 IMUセンサ BNO055を用いてミニぷぱ制御を楽しみました。

BNO055が有能すぎて夢だったミニぷぱ宴会芸も実現できました!!

ミニぷぱがドンドン賢くなってくので大変嬉しいです!
引き続き勉強進めます!

ロボット犬『Mini Pupperミニぷぱ』Pythonでモーション記述

前回はミニぷぱ正規の構成でラズパイ4にRaspi OSとNode-REDを導入して動作を確認いたしました。

ロボット犬『Mini Pupperミニぷぱ』がやってきた

 

ここでは、動作モーションを増やしてのコントロールを検討します。

 

 

モーション制御検討

Python

前回はNode-REDで動作を仕込みましたが、複数のモーションになると煩雑になるためPythonを採用することにしました。

サーボドライバ PCA9685用のPythonライブラリは以下を使用しました。
 https://github.com/adafruit/Adafruit_Python_PCA9685

ちなみにこのライブラリでも専用基板のサーボナンバー 1~12がPCA9685ノードの15~4に対応していました。基板上そういった接続なっているのかもしれません。

Node-RED Dashboard

ミニぷぱコントロールUIにはNode-RED-Dashboardを使用することにしました。
 https://flows.nodered.org/node/node-red-dashboard

これによってブラウザ上のボタンなどで制御可能となります。

動作

Node-RED-Dashboardのボタンで足の高さを指定しています。
ブラウザで動くのでスマホでもコントロールできます。

 

ミニぷぱモーション制御

Dashboard

Node-RED Dashboardのnumericノードで足の高さや上げ幅、歩幅などを指定します。
buttonノードで各種モーションを起動します。

モーションは初期姿勢、足踏み、ジャンプ、ランニングマンを用意しました。

Node-RED

Node-REDの構成は以下のとおり

 

動作指定ボタンを受けて各モーションのPythonコードを起動しています。

Python起動時にnumericノードで指定したパラメータをmsg.payloadで引数として渡しています。

Pythonコード

足踏み動作は以下のような感じで

 

参考

動作

 

前後左右への歩行を仕込もうと思ったのですがdashboardにはジョイスティックがなくボタンやスライダじゃきついなぁと思った時に
Blynkはラズパイもいけたことに気づきました。。。

次はBlynkでの動作検証します。

おわりに

ここではNode-RED DashboardとPythonを用いてモーションコントロールを楽しみました。

しかしNode-RED DashboardのUIではリアルタイムラジコンを制御するには少し物足りない印象でした。

Blynkがラズパイ対応していたことに今さら気づいたので次回検証進めます!

 

追記 (ディスプレイ表示)

どうもラズパイ4はBlynkに対応されてないようなので、ラズパイを用いた本構成の検討はコレで一旦休止しようと思います。

最後にせっかくなのでディスプレイ表示だけ確認しました。

ディスプレイには320×240ピクセルのST7789が使用されていることが以下で解ります。
SPIで制御されておりピン配もPythonコードから読み取ることができます。
 https://github.com/mangdangroboticsclub/QuadrupedRobot/tree/MiniPupper_V2/Mangdang/LCD

ST7789制御

以下を参考にST7789用Python環境を構築しました。

 

またRaspiコンフィグでSPIを有効にします。

Pythonコード

上記を参考にして320×240のJPEG画像を表示するPythonコードをこしらえました。

動作