「robotics」タグアーカイブ

次期モデル Mini Pupper 2 に Raspberry Pi Compute Module 4 を搭載

すき 0
0

これまでは次期モデル Mini Pupper 2 をESP32のみで楽しんでまいりました。
前回はより製品版に近いとされる基板の動作を確認しました。

次期モデル Mini Pupper 2 新規基板を味見

 

Mini Pupper 2 の基板にはRaspberry Pi Compute Module 4 (CM4) も搭載可能です。

 

この度、CM4を提供いただきました。MangDang社様本当にいつもありがとうございます!!

ここからはCM4とESP32によるミニぷぱ動作を検証します。

ここで使用している基板は製品版と異なる場合があります。何卒ご了承ください。

 

CM4設定

提供いただいたCM4モジュールはeMMCのないモデルでした。
小さくてビックリ!!

 

早速搭載。

 

Mini Pupper 2基板にはSDカードスロットとmicro-HDMIコネクタが搭載されています。

 

Raspi OS(32bit)を書き込んだSDカードを入れて起動を試みたのですが、すぐにリセットしてしまう謎の症状に苦しみました。。

調査したところ以下でも同様の症状が報告されており、解決策として書き込みのあった
config.txt を修正 ( “dtoverlay=vc4-kms-v3d” -> “dtoverlay=vc4-fkms-v3d”) する方法で改善し無事に起動できました。

https://forums.raspberrypi.com/viewtopic.php?t=323920

CM4 – ESP32間通信確立

CM4の起動が無事できたので更にVNCとNode-REDの設定も実施し、ここではESP32-S3との通信を目指します。

基板上ではESP32-S3のUART1とCM4のUART3が接続されていましたので、以下を参考にCM4のUART3を有効化しました。
https://toki-blog.com/pi-serial/#UART3UART4UART5

無事にシリアル通信が可能になりました。

ミニぷぱ動作

CM4とESP32-S3 間の通信ができるようになったので、CM4から文字を送ってESP32に仕込んだ動作を起動してみました。

CM4上のNode-REDから文字をシリアル送信してESP32で文字に対応した動作でサーボを制御しています。

 

Alexa連携

ミニぷぱがラズパイOS (Node-RED) で使えるようになりましたのでAlexaとの連携も容易となります。

以下と同じ方法で連携してみました。

ラズパイで気圧測定

 

Node-RED Alexa Home Skill Bridgeでミニぷぱ動作用のデバイスを用意してAlexaアプリの定型アクションで起動発話を設定します。

 

Node-REDで動作用デバイスとモーションコマンドを連結させます。

動作

簡単にミニぷぱとAlexaを連携できました♪

おわりに

ここでは提供いただいたCM4モジュールをミニぷぱ基板に搭載してESP32との連動やAlexa連携を楽しみました。

これまでにCM4なしでESP32のみでミニぷぱ動作を実現していましたので、ここではCM4はESP32に組み込まれた動作を指定するのみの仕事しかしておりません。
しかしESP32で制御用のブラウザページを作りこむのはかなり大変だったので、ラズパイ(CM4)でかなり楽になりそうです。

ミニぷぱ動作においてCM4とESP32の役割の振り分けにはいろいろな方法が考えられそうです。
思いついたモノを上げると

  1. ESP32で各動作を組み込んでおいてCM4で起動 (今回の手法)
  2. CM4から足の座標をESP32に指定
  3. CM4から各サーボの角度をESP32に指定

ESP32のプログラム書き込みが面倒なので上の手法の2か3が良いのかなと現時点では思っています。
製品版の手法もウォッチしつつ検討すすめます。

 

次回はディスプレイやスピーカの動作確認を実施したいです。

次の記事

次期モデル Mini Pupper 2 に Raspberry Pi Compute Module 4 を搭載

次期モデル Mini Pupper 2 新規基板を味見

0
0

前回はMini Pupper 2の初期サンプル基板搭載の6軸IMUセンサ QMI8658C の値を取得して、平行姿勢制御を楽しみました。

次期モデル Mini Pupper 2 新規基板を味見

 

今回はより製品版に近い仕様であろう新規基板をいただきましたので動作確認いたします。

 

新規基板

初期サンプル同様に天板が基板になっています。
大きく異なるのがRaspberry Pi 4と同じSoC搭載のCompute Module 4 (CM4)が載ることでしょう。

ここまでは正直、ESP32とラズパイの共存のイメージが湧いていなかったのですが、
この基板をみて多くのインスピレーションとアイディアが溢れている状況です。

大きく役割を分けるとラズパイでディスプレイや音声などを制御してESP32でサーボをコントロールするといった感じになっています。


ESP32とラズパイの搭載でネットワークにつながるデバイスが2個存在することになるのでかなりひろい応用ができそうです。
センサ等の拡張性も高く繋げられないものはないと言っても過言ではないでしょう。

ただ現在、私はCM4を所有できていないので融合動作を体験できないのが残念です。
入手出来次第、すぐに体験したいです。楽しみ

ESP32動作確認

新規基板でラズパイなしのESP32のみの動作確認を実施します。

初期サンプルではESP32と接続するシリアル変換ICの実装とUSBコネクタがありましたが、新規基板では直結のコネクタのみとなっていました。
馴染みのないコネクタだったのでちょっと加工してUSBシリアルコネクタと繋げられるようにしました。
いちいち手動でブートモードにする必要はありますが問題なく書き込みができました。

製品版ではESP32書き込み専用ケーブルが同梱されるようになると想像します。

動作

ESP32周りは大きな変更はないので、初期サンプルのコードがほぼそのまま使用できました。
IMUセンサQMI8658C の値も取れてバランス動作バッチリです。

 

製品版では更に変更もあると思いますが、念のためESP32周りで初期サンプル基板と異なった点を以下にまとめておきます。

  • 書き込み用シリアル変換ICとUSBコネクタの廃止
  • 前方フルカラーLEDの廃止
  • シリアルサーボ通信UARTピンの変更
  • IMUセンサQMI8658C の実装向きの変更

おわりに

ここではMini Pupper 2の新規基板のESP32の動作確認を行いました。

とにかくラズパイとの融合動作を試したくてしょうがない状況です。
実基板をみて強くそう思いました。

これまではESP32にコントロールブラウザ画面を実装していましたが、
その辺はラズパイでやったほうが楽ですし更に高機能にもできそうです。

Mini Pupper 2はかなりおすすめのロボット犬になりそうです。
私は非常にワクワクしております。

次の記事

ラズパイで気圧測定

次期モデル Mini Pupper 2 でIMUセンサを堪能

0
0

前回はサーボのトルクフィードバックやポジションフィードバックを味見しました。

次期モデル Mini Pupper 2 でIMUセンサを堪能

 

ここでは毎度やるといっていたMini Pupper 2 搭載のIMUの検証をやっとこ実施しましたので報告いたします。

 

IMUセンサ

Mini Pupper 2にはESP32の他になんとIMUセンサも搭載されております。

いただいたサンプル基板には 6軸 IMUセンサ QMI8658C が搭載されていました。

 

Arduino用サンプルをESP32で使えるようにする修正にてこずりましたが、
やっとセンサの値 (加速度3軸、角速度3軸) を取得できるようになりました。


通信はI2Cを使用。

参考

 

平行制御

内蔵IMUの値を取得できるようになったので、以前 Mini PupperにATOM Matrix を載せて実施した平行姿勢制御を実施してみました。

ロボット犬『Mini Pupperミニぷぱ』を ATOM Matrix で堪能

 

前回同様にX軸、Y軸の加速度から傾きを算出して、角速度と合わせてカルマン・フィルタを通してPD制御で足の高さを制御しています。

おわりに

ここでは念願の基板搭載の6軸IMUセンサ QMI8658C の値を取得して、平行姿勢制御を楽しみました。

Mini Pupper 2にはESP32に加えてIMUセンサも標準搭載されるとのことですので、非常に楽しみです。
応用の幅も大きく広がりそうです。

次の記事

次期モデル Mini Pupper 2 でIMUセンサを堪能

次期モデル Mini Pupper 2 で初級ハプティック体験

1
0

前回はMini Pupper 2 で動作バリエーションによるダンスを楽しみ、
汎用性の高いコントロールシステムの作成を実施いたしました。

次期モデル Mini Pupper 2 で初級ハプティック体験

 

ここではサーボモータのトルクフィードバックについて確認しました。

 

トルクフィードバック

Mini Pupperの公式に以下のような動画が紹介されておりました。

おそらく次期モデル Mini Pupper 2の製品用カスタムサーボによる実験だと思われますが、
サーボの負荷を検出し、作用点での力の大きさとその方向を描画している様子です。

提供いただいたMini Pupper 2 超初期サンプルのサーボモータ SCS0009 にもトルクフィードバック機能がありましたので実験してみました。

サーボのアームに負荷をかけるとトルク値が上昇し、方向によって符号が変わりました。
細かい精度はないようですが(設定で変えられるのかな?)、コレは面白い応用ができそうです。

初級ハプティック体験

サーボのトルクが取得できましたので、Mini Pupper 2 サンプルの足に応用してみます。

サーボに一定以上のトルクがかかるとその方向に回転するようにしました。

 

負荷をかけた方向に足が動いている様子が分かります。

足を任意の方向に動かすには、サーボトルクを現状の姿勢と力の作用点からベクトル合成してなどなど
ややこしい演算が必要かと想像していましたが
サーボのトルク値オーバーでおのおの回転という簡単な動作で割と所望の動作をしてくれ大変驚きました。

トルクの検出精度の向上や応答の度合いの調整を更に施せば、良い感じのハプティックデバイスのような動作になる予感がいたしました。
製品版のカスタムサーボモータに期待したいところです。

おわりに

ここではサーボのトルクフィードバックを味見し初級ハプティック体験をいたしました。
Mini Pupperの動作に組み込めば、人間が強要するお手動作などの実装ができそうです。

毎度やるといっているMini Pupper 2 搭載のIMUの検証は本当に次こそは実施したいです!!!

追記

サーボ位置フィードバック

次の記事

次期モデル Mini Pupper 2 でIMUセンサを堪能

次期モデル Mini Pupper 2 でダンス

0
0

前回は提供いただいた新モデル Mini Pupper 2 の初期サンプルをArduino IDEで動作開発できるようにいたしました。

次期モデル Mini Pupper 2 の初期サンプルを味わう

ここでは更に動作のバリエーションを増やしてダンスに挑戦いたしました。

 

ダンスに挑戦

前回からサーボの初期位置の微調整を実施し足座標の精度を高めました。
更に動作バリエーションを増やしてダンスに挑戦

各種動作を組み合わせることで、ダンスっぽくはなりましたかね。。

APモードによる遠隔コントロール

ここまではMini Pupper 2のコントロールにはBLEを介してBlynk legacyで制御してまいりました。
Blynkは大きな改変がありBlynk legacyは使用できないユーザも多いため、共有しやすい方法を検討します。

Mini Pupper 2にはESP32-S3が搭載されていますのでESP32をアクセスポイントにしてブラウザでコントる方法を採用いたしました。
これであれば環境にWiFiが無くてもMini Pupper 2とスマホやPC間での通信で制御が可能です。

 

ブラウザ画面に以下のように動作ボタンとパラメータ設定項目を用意しました。

 

これでBlynkを用いず直接ESP32に接続してのコントロールが可能となりました。

おわりに

ここではMini Pupper 2 で動作バリエーションによるダンスを楽しみ、
汎用性の高いコントロールシステムの作成を実施いたしました。

前回やるといっていたMini Pupper 2 搭載のIMUの検証は次こそ実施したいです!!

追記

SHISEIGYO-1 Walke Jr. とお戯れ

ロボットの魅力

お散歩

 

次の記事

次期モデル Mini Pupper 2 で初級ハプティック体験

次期モデル Mini Pupper 2 の初期サンプルを味わう

2
0

なんとロボット犬 ミニぷぱの新モデル Mini Pupper 2 の初期サンプルを提供いただけました!

ここでは前機種との違いを実感しながら Arduino IDEで動作させるところまで記載いたします。

Clock Arm 時計を自作

今回提供いただいた Mini Pupper 2 は超初期サンプルとのことですので、製品版と大きく異なる可能性が高いことをご了承ください。

また比較対象の前機種のMini Pupperも早い時期にいただいたものですので流通版と異なる可能性があります。重ねて宜しくお願い致します。

 

超初期サンプル

いただいた神々しいサンプル。サイズや機構は前機種とほぼ変わっていない様子です。

 

Mini Pupper 2はラズパイとマイコンが共存する仕様のようです。
いただいた初期サンプルでは天板が基板になっていてESP32-S3が搭載されていました。
前回ラズパイ4を取っ払ってESP32で4足歩行動作を楽しんだ私的にはご馳走の仕様です。

足のサーボはシリアルサーボが採用されており、貼られる配線によりだいぶスッキリした印象を受けます。

ESP32-S3には技適マークがなかったので念のため (技適警察がうるせーし)  技適未取得機器を用いた実験等の特例制度に申請しました。

Arduino IDEで堪能

ESP32-S3が載っているということで、ここではMini Pupper 2サンプルをArduino IDEでコーディングしての動作を目指します。

ESP32-S3をArduino IDEで書き込みするためにはESP32ライブラリを2.05にバージョンアップする必要がありました。

 

サンプル基板には書き込み用USB端子とカラーLED Neopixel も搭載されていますので、書き込みテストしてみました。


環境が整えばこっちのものです。

足のサーボモータ

サンプルのシリアルサーボはFEETECH SCS0009と同等品でした。
秋月のサイトにアップされているライブラリで無事に動作確認できました。


12個のサーボモータを接続。
サーボのIDは1~12であらかじめ割り振った状態で提供いただけました。

 

足のサーボケースは前回のように3Dプリント品ではなくなり、ロール軸の受けがベアリングになり洗練されてます。

逆運動学で足制御

サーボモータが動かせるようになりましたので、足の動作を逆運動学で位置座標の指定で動かせるようにします。

座標は以下のように定義します。

 

大腿の長さ$L_1$は50mm、下腿の長さ$L_2$は56mmでした。
足のロール角を$θ_0$、大腿の角度を$θ_1$、下腿を動かすサーボの角度を$θ_2$とします。

 

ここでは足のつけ根のロール角$θ_0$と座標x, zを指定して足を制御することにします。

足を上げて(Z軸)、前後(X軸)するためのサーボ角度は以下で導出されます。

大腿のサーボの角度$θ_1$は余弦定理を用いて導出します。

${L_2}^2 = {L_1}^2 + {l_d}^2 – 2{L_1}{l_d}\cos{θ_1}’  $

${θ_1}’ = \cos^{-1} \left(\frac{{L_1}^2+{l_d}^2 – {L_2}^2}{2{L_1}{l_d}} \right) $

$$θ_1 = φ – {θ_1}’  = φ -\cos^{-1} \left(\frac{{L_1}^2+{l_d}^2 – {L_2}^2}{2{L_1}{l_d}} \right) $$

$$      但し、φ = \tan^{-1} \left(\frac{x}{z’} \right)$$

$$          l_d = \sqrt{x^2 + {z’}^2}$$

$$  高さを足のロール角で補正 z’ = \frac{z}{\cos{θ_0}}$$

 

下腿の角度$θ_2$も同様に余弦定理を用いて導出します。

${l_d}^2 = {L_1}^2 + {L_2}^2 – 2{L_1}{L_2}\cos{θ_2}’ = {L_1}^2 + {L_2}^2 – 2{L_1}{L_2}\cos\left({\frac{\pi}{2}+θ_2+θ_1}\right)= {L_1}^2 + {L_2}^2 + 2{L_1}{L_2}\sin\left({θ_2+θ_1}\right) $

$$θ_2 = \sin^{-1} \left(\frac{{l_d}^2-{L_1}^2 – {L_2}^2}{2{L_1}{L_2}} \right)-θ_1$$

 

以上で 足のロール角$θ_0$と足の前後(X軸)位置と上下(Z軸)位置の指定で足のサーボを制御できるようになりました。

動作

足先の座標指定での動作が実現されました。

 

初期姿勢は以下のように足が直角で伏せるような格好でサーボの角度が中間値 (512) になるようにしました。

各種動作

歩行などのモーションを仕込んで動かしました。
コントロールはBLE介してBlynk Legacyで実施。


以前作ったTPU製のマシュマロ靴を履いてウキウキの様子です。
若干まだサーボ位置にオフセットがある感じですがおいおい微調整します。

おわりに

ここでは提供いただいた Mini Pupper 2 サンプルでArduino IDEでの制御を楽しみました。

サンプル基板にはなんとIMUも搭載されているので次回はコチラを楽しみたいと思います。

次の記事

次期モデル Mini Pupper 2 の初期サンプルを味わう

ロボットの目の考察

3
1

ソニーが開発中のエンタテインメントロボットpoiq (ポイック) のまばたきが
まるでメカシャッターが組み込まれているかのように動きが素晴らしいです。

 

個人的にロボットの目は自発光ではない方が良いと考えておりましたが、
poiqの目の表現には大変驚かされました。

黒いスモークのカバーの直下に立体的な構造の目が配置され、内部で目の位置が動いたりまばたきして様々な表情を見せてくれています。

恐らくまばたきはディスプレイの画と調光のみで表現されいるのであろうと思い検証してみました。

 

検証実験

poiqの目の動作の謎に迫るべく、円形ディスプレイに目の画を表示して可変抵抗でまばたき動作やバックライト調光できるようにいたしました。

 

円形ディスプレイはGC9A01を使用しESP32でコントロールしています。

 

目の淵の立体構造は薄い すり鉢状の治具を3Dプリントしました。
円形ディスプレイの淵の白色の反射材としての機能も期待しております。

実験

円形ディスプレイ上にすり鉢立体治具を載せて、さらにハーフミラーフィルムを貼ったプラ板をかぶせて実験してみました。

 

ディスプレイに黒まぶたを表示するだけではバックライトの光が漏れるので、バックライトの調光も重要であることに気づきました。

以下はまばたきとバックライト輝度を連動させたものです。


かなりpoiqのまばたき動作に近づけました。

考察

poiqの目のまばたき表現がディスプレイの画と調光のみで表現されていると仮定し、簡易環境での検証を進めました。

ディスプレイの画とバックライトの調光と立体治具でなかなか良いまばたき表現が実現されましたので、
仮定は大きくハズしてはないと考えます。

ここではハーフミラーフィルムを使用しましたが、poiqでの黒スモークカバーを用いて目を閉じた際に真っ暗になり目の機構自体が見えなくなることも重要な要素であるとわかりました。

すり鉢状の立体機構も観る方向で目の見え方が変わり、表現の幅を広げています。
本実験では立体治具をディスプレイの反射材としても利用しましたが、poiqの場合はLEDを内蔵している可能性もあります。

上記に加えてpoiqでは目の表示がアニメーションで動き、目の機構自体もカバー内部でグングン動くので更に表現の幅が拡がっているのです。

 

ディスプレイ表示

今回の検証をするにあたってディスプレイにまばたき表示をする必要があったのですが、ちょっとてこずったのでここに記録します。

単純に目とまぶたの黒を重ねて表示しようとするとチカチカしてしまいます。

 

目とまぶたを重ねた画を作ってからディスプレイに表示したいのですが、
今まできちんとディスプレイ表示について学習してこなかったので今回(泣く泣く)勉強しました。

スプライト描画

ディスプレイで絵を重ねた際のチカチカ改善にはスプライト描画なるモノが必要であるという知識はありました。

以前 M5Stack Core2での表示を作りこんだ際に画像のチカチカを @TobozoTagadaさんに修正してもらったことがありました。

この修正時にコードを読み込んでスプライト描画を自分でも理解すればよかったのですが、おかげさまで動いたからいいやと放っておいたツケがまわってきた次第です。。

 

ディスプレイ表示には LovyanGFX を用いて以下の記事を参考に勉強しました。

 

スプライト描画によって無事にまばたき表示ができました。


目の画像はjpegをバイナリでコードに取り込んでsprite2に描画して、sprite1に描画した60×60の黒四角を拡大してsprite2に重ねて描画します。
黒四角の上下の位置は可変抵抗の値で可変にしました。
最終的にsprite2をLCDに表示します。

これによって絵を重ねた際のチラつきはなくなります。
保持できるスプライト描画のメモリには限度があるようでまぶたの黒四角サイズを240×240にすると動作しなかったので拡大表示を利用しました。

この辺のメモリサイズのことも勉強必要ですが、今回はこれ以上詰め込むと頭が爆発しますので今度にします。

 

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

0
0

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

 

動作

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

 

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

 

機構

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

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

 

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

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

 

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

次の記事

次期モデル Mini Pupper 2 の初期サンプルを味わう

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

0
0

前回は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の追加によって ミニぷぱ がとても賢くなりました!

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

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

 

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

次の記事

Clock Arm 時計を自作

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

0
0

前回まではラズパイ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ミニぷぱ』で 書道

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

0
0

前回はミニぷぱ正規の構成でラズパイ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コードをこしらえました。

動作

 

表示できました!
思えばラズパイにLCDつないでSPIで制御したの初めてかも
勉強になりました!

次の記事

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

ロボット犬『Mini Pupperミニぷぱ』ラズパイ4 Node-REDで味見

0
0

前回はATOM Matrixを用いて ミニぷぱの動作を楽しみました。

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

ここでは正規のラズパイ4と専用基板を用いて ミニぷぱを動かせるようにします。

 

 

ミニぷぱ専用基板

以前 ミニぷぱに同梱のラズパイ4にRaspi OSを入れて専用基板でのサーボモータ制御を試みたのですが、サーボに電源が供給されず断念しました。
(2022/2/16現在 専用基板の回路図は未公開)

そうしましたところ、ミニぷぱの開発元様よりサーボ電源のイネーブルピンの存在をご教示いただきました。

ラズパイのGPIO21、GPIO25がサーボ電源供給のENピンとのことです。
それぞれサーボモータドライバのPCA9685の16個分のサーボの半分ずつの電源スイッチとなっているようです。

PCA9685動作

サーボドライバ PCA9685 はI2Cがインターフェースとなっております。

 

Raspi OSでI2C通信を有効にします。

 

I2C有効後に専用基板を載せてi2cdetect で接続されているI2Cデバイスを調べてみました。

0x40がPCA9685です。0x70はなんだろ? 🙄 
https://github.com/mangdangroboticsclub/QuadrupedRobot/tree/MiniPupper_V2/Mangdang によると
専用基板にはI2Cは3系統あって正規のI2Cピン(i2c-1)にはPCA9685しか つながってないはずだけど?

i2c-1 : for pwm controller PCA9685
i2c-3 : for EEPROM
i2c-4 : for fuel gauge max17205

サーボ制御

ラズパイ4にNode-REDを導入して専用基板でサーボを動かしてみました。
以下のPCA9685用のノードで制御しています。
 https://flows.nodered.org/node/node-red-contrib-pca9685

ちょっとハマったのが専用基板のサーボ1を動かすためにはPCA9685ノードで15を設定する必要がありました。
専用基板のサーボナンバー 1~12がPCA9685ノードの15~4に対応していました。
PCA9685ノードがおかしいのか専用基板の配線がそのようになっているのかは不明です。

rpi-gpio outノードでGPIO21、GPIO25をHighにしてサーボに電源供給しています。

 

無事に専用基板でサーボを動かせるようになったので、いよいよミニぷぱ制御に挑戦です!

 

ミニぷぱ 足制御

ESP32やATOM Matrixで行っていた時と同様に逆運動学でミニぷぱの足を制御します。

とりあえず1本動かしてみた。

 

Node-REDで足の高さを指定して制御しています。

IK 右前足ファンクションで足の高さをうけて各サーボの角度を導出しています。

 

足踏み

足1本を制御出来ればこっちのもんです。同じように残り3本も制御できるようにして足踏み動作してみました。

足踏み動作実現!
久しぶりに外装も全て取り付けて可愛さが復活しました。
ディスプレイも表示させたいな 🙄 

 

しかしNode-REDで動作シーケンス組むのは結構大変だったな。。。

歩行動作とかも仕込みたいので実装手法は検討が必要そうです。

 

おわりに

ついにラズパイ4と専用基板でミニぷぱを動かせるようになりました。

引き続きもろもろ検証して自由自在に動かせるようにしたいと思います。

次の記事

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

ロボット犬『Mini Pupperミニぷぱ』ATOM Matrix で動作再検討

0
0

前回はコントローラにATOM Matrixを採用してIMUセンサによるバランス制御を実現しました。

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

ここではさらに動作の検証を進めましたので報告いたします。

 

バク転

↑このロボットのようにバク転できたらいいなと思い、試してみました。

 

できるわけねーか。。

次だ 次

 

歩行改善

他の4足歩行に比べて、歩行がぎこちないのでロボット犬との距離が以前に比べ縮まった現在、
改めて歩行動作を検討してみました。

これまでは対角線の2本を上げている間に接地している2本を動かして歩行しており、足上げと前後運動が分断し かつ足上げの時間が長く前後運動も等速ではありませんでした。

足上げの時間を短くし、足の前後運動を等速したところ非常にスムーズな歩行が実現されました。
機体のブレも小さく移動もスムーズです。これが正解の歩行方法のようですね。
生き物らしさは失われた気もしますが 🙄 

ランニングマン

4足歩行ロボットといえばSPOTのこの動作ですよね。
そうランニングマン!

 

ミニぷぱでも実現したく以下動画で勉強しつつ。。

 

ランニングマン動作を作りこんでみましたが。。

う~ん。。。イマイチ。。
よくよく見るとランニングマンは全足が一瞬浮く時間があって、その際に足を引いてるのですよね。。

ちょっとミニぷぱでは厳しいのかな?
引継ぎ勉強いたします。

おわりに

ここではATOM Matrixを用いて ミニぷぱの動作を再検証いたしました。

 

だいぶ4足歩行ロボットの理解が深まりましたので、次はミニぷぱ正規の専用回路の動作を検証しラズパイ4での制御に挑戦したいです。

次の記事

ロボット犬『Mini Pupperミニぷぱ』ラズパイ4 Node-REDで味見

ロボット犬『Mini Pupperミニぷぱ』を ATOM Matrix で堪能

0
0

前回はミニぷぱのコントローラにESP32を採用し、足を自由自在に制御できるようになり4足歩行についての理解を深めました。

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

ここではコントローラにIMUを内蔵したATOM Matrixを使用してみましたので報告いたします。

 

 

ATOM Matrix

4足歩行について理解が深まりましたので、次は以下を再現してみたいと考えました。

恐らくIMUセンサで姿勢を検出して足の高さを制御して、機体を平行に保っているものと思われます。

 

これまでのESP32を使用した機構にIMUセンサを追加しようとも思ったのですが、
ESP32-PICOとIMUセンサ MPU6886がコンパクトに内蔵されたATOM Matrixを使用することにしました。

コントロール基板

SHISEIGYO-1 専用基板PCA9685モジュールを用いてコントローラを構築しました。

 

注意点

ATOM MatrixとPCA9685モジュール間のI2C通信として
Wire.begin(22, 19); //SDA, SCL
を使用しました。

ATOM内蔵の MPU6886は
Wire1.begin(25,21);  (https://github.com/m5stack/M5Atom/blob/master/src/utility/MPU6886.cpp)
でI2C通信しているのでPCA9685モジュールとの干渉は心配ありません。

但し、M5Atomライブラリを用いて
M5.begin(true, true, true);   (Serial Enable, I2C Enable, Display Enable)
でI2Cを初期化してしまうと
Wire.begin(25, 21, 100000UL);
が実行されPCA9685モジュールと干渉してしまうので
M5.begin(true, false, true);
とする必要があります。

アドレスが違うので同じI2Cピンを用いても良いのですがMPU6886とPCA9685モジュールの既存のライブラリを使用したく、そのライブラリでWre設定がなされてるので通信ピンを分けました。
今後 高速化のためにコアを分けることも見据えております。

動作

ATOM Matrixでも問題なく歩行動作を確認できました。

 

平行制御

いよいよIMUセンサをもちいて機体を平行に保つ制御を実現させます。

ATOM MatrixのIMUの座標軸は以下のようになっています。

X軸とY軸の姿勢角をセンシングして足の高さを制御します。
それぞれの軸の姿勢角と角速度にはカルマン・フィルタを用いました。
 https://github.com/TKJElectronics/KalmanFilter

1軸制御

まずは1軸 (Y軸)での制御を実現させます。
なかなか制御がうまくいかず。。

 

いろいろ制御方法を試行錯誤してる際にサーボが暴走しPCA9685モジュールの逆起電力防止PMOS燃えて動かなくなりました。。煙出たから。。。

しょうがないのでPMOS外してショットキーダイオードをぶち込みましたww
あくまで再購入品が届くまでの応急処置です(しかし こういったイレギュラーな状況下での対応にエンジニアの差というものが出ます)。

 

P制御

センシングしたY軸の角度$θ_Y$から機体を平行にするための足の移動量$h_Y$を以下で算出し制御してみます。

$$h_Y = h_{Y-1} + {Kp}_Y × \sin{θ_Y} $$

$$   但し、h_{Y-1}:直前に算出した移動量、 {Kp}_Y:係数$$

姿勢角から高さ変化量を導出して随時足して目標値に収束させます。
sinをとる必要はなさそうですが何となくそうした。

 

地面の傾きに追従して機体を平行に保とうとしますが、まだぎこちないです。

 

PD制御

さらにY軸の角速度$ω_Y$もフィードバックさせてみます。

$$h_Y =h_{Y-1} + {Kp}_Y × \sin{θ_Y + {Kd}_Y ×ω_Y / 100.0}   但し、{Kd}_Y:係数$$

係数${Kd}_Y$が大きい値にならないように100.0で割っています。

 

かなりヌルヌルと追従できるようになしました!

2軸制御

同様にX軸についてもセンシングして足の高さを制御し、2軸での平行追従制御を実現させました。

 

おわりに

IMUを内蔵したATOM Matrixをコントローラに採用することで、やってみたかったバランス制御が実現できました。

IMUのYaw角センスで旋回制御して常に同じ方向を向くのもやってみたかったのですが、MPU6886のドリフトが大きく実現できませんでした。
違うセンサでいつか実施したいですね。

次の記事

ロボット犬『Mini Pupperミニぷぱ』ラズパイ4 Node-REDで味見

ロボット犬『Mini Pupperミニぷぱ』ESP32で歩行動作検討2

0
0

前回はESP32で4本の足の制御を実現し4足歩行を学びました。
ここでは更に深堀します。

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

 

 

電源コードレス化

前回は5V ACアダプタから電源供給していましたが、ミニぷぱのバッテリを使用してコードレス化を目指しました。

ミニぷぱには2セルの7.4V LiPoバッテリが搭載されています。

構成

LiPoバッテリからPCA9685モジュールのサーボ電源 (V+) と5V DCDCコンバータに給電し、
PCA9685モジュールのロジック電源 (VCC) とESP32にはDCDCの5V出力で給電します。

相変わらずのブレッドボード。。

部品

動作

電源コードがなくなったので、これでどこにでも行けます。

 

本当に散歩してきました。かわいい。
毎日したい

 

歩行検討

これまでは足の移動を座標指定しサーボが最速で動ける速度で直線的に動かして
遅延時間を設けて動作周期を変えていました。

ここでは足を細かく時間分割して正弦波形で動かすようにしてみました。
正弦波で足を動かすことによって足の方向転換時の加速度を低減を狙っています。

足踏み

足の高さを正弦波形で変えます。

線型的に足を移動して遅延で周期を設けた場合と正弦波形での移動では
正弦波のほうが機体のブレが小さくなりました。

歩行

方向時の足の位置やロール角も正弦波形で動かしてみました。

動作周期が短い場合にはさほど効果を感じませんでしたが
周期を長くするとマイルドな足移動が効いてきました。

正弦波形で動かしているというよりは時間分割で細かく座標していることが大きく効いたようです。
しかし、無駄な加速度は機体のブレに繋がるので正弦波でオールオッケーということにいたします。

 

Arduinoコード

今回作成したESP32用のArduinoコードを以下で公開いたします。
 https://gist.github.com/homemadegarbage/c31722700b58e631aec13b39db416e0b

ESP32によるミニぷぱの制御は当然 オフィシャルなものではありませんので
実施の際には自身でコードを理解・修正し自己責任で宜しくお願い致します。
過度なサポート要求もお断りさせていただきます。

コードの概要は以下の通りです。

Blynk

スマホのBlynkアプリを用いてBLE通信で歩行動作指示を送ります。

以下のESP32のBLE用サンプルコードを参考にプログラミングしました。
 https://github.com/blynkkk/blynk-library/blob/master/examples/Boards_Bluetooth/ESP32_BLE/ESP32_BLE.ino

 

以下はミニぷば用Blynkスマホアプリ画面

歩行時に上げる足の高さ(WALK HEIGHT)や歩幅(STRIDE)、旋回時のロール角度(TILT)などを指定しています。

ボタンで足踏み(STEP)やジャンプ(JUMP)動作を起動

ジョイスティックで前後(walkAd, walkBack)や旋回(walkL, walkR) 歩行します(ヴァーチャルピン V20使用)。

PCA9685

PCA9685モジュールで12個のサーボを制御します。
ESP32からI2CでPCA9685モジュールにサーボの角度指示をします。

PCA9685用のArduinoライブラリは以下の秋月電子のサイトで公開されているものを使用しました。
 https://akizukidenshi.com/catalog/g/gK-10350/

 
サンプルコードを参考に以下のように12個のサーボを制御しました。

逆運動学

足の移動は以前検証した通り、足のロール角と足の前後位置と上下位置を指定して、
逆運動学によってロール角以外のサーボの角度を算出します。

得られたサーボ角をPCA9685用のサーボ制御関数 [servo_write()]に代入してそれぞれのサーボを動かします。

足の座標とサーボ角度算出の式は以下の通り

 

腿の長さ$L_1$は50mm、下肢の長さ$L_2$は56mmでした。
足のロール角を$θ_0$、腿の角度を$θ_1$、下肢を動かすサーボの角度を$θ_2$とします。

 

ここでは腿のつけ根のロール角$θ_0$と座標x, zを指定して足を制御することにしました。

足を上げて(Z軸)、前後(X軸)するためのサーボ角度は以下で導出されます。

腿のサーボの角度$θ_1$は余弦定理を用いて導出します。

${L_2}^2 = {L_1}^2 + {l_d}^2 – 2{L_1}{l_d}\cos{θ_1}’  $

${θ_1}’ = \cos^{-1} \left(\frac{{L_1}^2+{l_d}^2 – {L_2}^2}{2{L_1}{l_d}} \right) $

$$θ_1 = φ – {θ_1}’  = φ -\cos^{-1} \left(\frac{{L_1}^2+{l_d}^2 – {L_2}^2}{2{L_1}{l_d}} \right) $$

$$      但し、φ = \tan^{-1} \left(\frac{x}{z’} \right)$$

$$          l_d = \sqrt{x^2 + {z’}^2}$$

$$  高さを足のロール角で補正 z’ = \frac{z}{\cos{θ_0}}$$

 

下肢の角度はサーボの角度$θ_2$と平行になるように$θ_1$とも連動しています。
こういうの平行リンクっていうんでしょうか。
同様に余弦定理を用いて導出します。

${l_d}^2 = {L_1}^2 + {L_2}^2 – 2{L_1}{L_2}\cos\left({\pi-θ_2+θ_1}\right) = {L_1}^2 + {L_2}^2 + 2{L_1}{L_2}\cos\left({θ_2-θ_1}\right) $

$$θ_2 = \cos^{-1} \left(\frac{{l_d}^2-{L_1}^2 – {L_2}^2}{2{L_1}{L_2}} \right) + θ_1$$

以上より右前足の逆運動学の計算関数は以下のようになります。

サーボ角度指定の際に初期位置を補正するoffset[]も加算しています。

残り3本の足についても同様に関数を用意して制御します。

足移動

ここでは足移動の際に正弦波形で細かく座標移動を行いました。

時間分割による座標変化のコードは以下の書籍のサンプルコードを参考にしました。

 
書籍のサンプルコードは以下でダウンロードできます。
_710_humanoide_BNO055_KO_mega_walking.inoを参考にしました。
 https://www.ohmsha.co.jp/book/9784274222115/

例えば、足踏みの場合は以下のようになります。

periodで周期の1/4時間を指定して足の高さを正弦波で上下しています。

それぞれの動作も同様に正弦波で移動させています。

 

おわりに

コントローラにESP32を採用し、足を自由自在に制御できるようになったため
4足歩行についての理解が非常に深まりました。

本当に素晴らしいキットをいただいたことを幸せに思います。

ラズパイによる正規の制御の学習進めたいと思います!

あー楽しいね!

次の記事

ロボット犬『Mini Pupperミニぷぱ』を ATOM Matrix で堪能

ロボット犬『Mini Pupperミニぷぱ』ESP32で歩行動作検討1

0
0

前回はラズパイ4とミニぷぱ専用基板での制御を一旦諦め、邪道ですがESP32での逆運動学による足制御を実施しました。

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

前回は足1本のみで動作確認しましたが、ここでは足4本を動かして歩行動作を確認しましたので報告いたします。

 

 

ESP32で4本足制御

12個のサーボをPCA9685モジュールに接続してESP32で制御します。

 

相変わらずのブレッドボードww
電源は5V ACアダプタで供給

部品

動作

前回同様にBlynkアプリで足の位置をスマホで指定してBLE通信でサーボを制御しています。

 

これで遂に4本の足を自由自在に動かすことができるようになりました。

 

歩行動作検討

正規のミニぷぱの歩行動作を参考にしつつ4足歩行を実現させます。

足踏み

足踏みは対角の足を交互に上げ下げすることで実現できました。

前進後進

足踏みを応用して、対角の足2本を上げている間に接地している足を後ろ(もしくは前方)に動かすことで歩行できました。

横移動

左右への横移動は 対角の足2本を上げている間に接地している足のロール角を一方に傾けることで実現できました。

ジャンプ

機体を下げて、急峻に足を伸縮させてジャンプ動作を確認することができました。
カスタムサーボのトルクの高さをうかがうことができます。

 

おわりに

ついに4足歩行を自身の手で実現することができました。

これまで4足歩行がどのように実現されるか分かっておりませんでしたが、動画でロボット犬の歩行の様子を凝視したり 実機で色々試したりすることで大変理解が深まりました。

さらに学習をすすめ ぷぱっていこうと思います。

次の記事

ロボット犬『Mini Pupperミニぷぱ』を ATOM Matrix で堪能

ロボット犬『Mini Pupperミニぷぱ』逆運動学で足制御

0
0

前回は足を自由に動かすための準備として、ラズパイ4のOS吟味等実施しました。

ロボット犬『Mini Pupperミニぷぱ』カスタマイズ下準備

ここではさらにカスタマイズを進めて足を逆運動学で自由自在に制御できるようになりましたので報告いたします。

 

 

PCA9685検証

専用基板にはサーボドライバPCA9685が載っており、ラズパイからI2Cでサーボを制御していることが前回わかりました。

 

そこでラズパイ4に専用基板を載せて、Node-REDからPCA9685を制御してサーボを動かしてみようと考えました。

PCA9685用Node-REDノードは以下を使用
 https://flows.nodered.org/node/node-red-contrib-pca9685

しかし、専用基板からバッテリを接続して起動しましたが、サーボの電源には電圧がフルで共有されず動かすことができませんでした。。。

恐らく、専用基板にロードスイッチかDCDCのイネーブルピンなどの起動制御があるのだと思いますが、
現状 回路図が未公開なのでラズパイによるサーボ制御は一旦保留とします。

 

ESP32とPCA9685

こうなったら一旦ラズパイ4は忘れて、慣れ親しんだESP32でPCA9685を制御しちゃいましょう。

 

ESP32開発ボードと以下のPCA9685モジュールを使用しました。

 

いつもの組み合わせなので簡単にサーボを制御できます。
BlynkをつかってBLEでスマホから制御しています。

 

ミニぷぱの右前足のサーボ3個を繋げてみました。

それぞれのサーボの角度を指定して自由に動かすことができるようになりました。

 

逆運動学で足を制御

右前足を位置座標を指定して動かせるようにします。

座標は腿のつけ根を原点として以下で定義します。

 

腿の長さ$L_1$は50mm、下肢の長さ$L_2$は56mmでした。
足のロール角を$θ_0$、腿の角度を$θ_1$、下肢を動かすサーボの角度を$θ_2$とします。

 

ここでは腿のつけ根のロール角$θ_0$と座標x, zを指定して足を制御することにしました。

足を上げて(Z軸)、前後(X軸)するためのサーボ角度は以下で導出されます。

腿のサーボの角度$θ_1$は余弦定理を用いて導出します。

${L_2}^2 = {L_1}^2 + {l_d}^2 – 2{L_1}{l_d}\cos{θ_1}’  $

${θ_1}’ = \cos^{-1} \left(\frac{{L_1}^2+{l_d}^2 – {L_2}^2}{2{L_1}{l_d}} \right) $

$$θ_1 = φ – {θ_1}’  = φ -\cos^{-1} \left(\frac{{L_1}^2+{l_d}^2 – {L_2}^2}{2{L_1}{l_d}} \right) $$

$$      但し、φ = \tan^{-1} \left(\frac{x}{z’} \right)$$

$$          l_d = \sqrt{x^2 + {z’}^2}$$

$$  高さを足のロール角で補正 z’ = \frac{z}{\cos{θ_0}}$$

 

下肢の角度はサーボの角度$θ_2$と平行になるように$θ_1$とも連動しています。
こういうの平行リンクっていうんでしょうか。
同様に余弦定理を用いて導出します。

${l_d}^2 = {L_1}^2 + {L_2}^2 – 2{L_1}{L_2}\cos\left({\pi-θ_2+θ_1}\right) = {L_1}^2 + {L_2}^2 + 2{L_1}{L_2}\cos\left({θ_2-θ_1}\right) $

$$θ_2 = \cos^{-1} \left(\frac{{l_d}^2-{L_1}^2 – {L_2}^2}{2{L_1}{L_2}} \right) + θ_1$$

 

以上で 足のロール角$θ_0$と足の前後(X軸)位置と上下(Z軸)位置の指定で足のサーボを制御できるようになりました。

動作

実際導出した式で足を動かしてみます。

スマホから前後(X軸)位置と上下(Z軸)位置を指定し、サーボ角を導出して制御します。

 

ロール角を動かしても前後(X軸)位置と上下(Z軸)位置は保たれています。

 

おわりに

ラズパイ4と専用基板での制御を一旦諦め、邪道ですがESP32での足制御を検討しました。

逆運動学でやっと自由に動かせるようになったので、コレを4本に展開して
歩行の学習に入りたいと思います。

実に楽しみです!

次の記事

ロボット犬『Mini Pupperミニぷぱ』ESP32で歩行動作検討1

ロボット犬『Mini Pupperミニぷぱ』カスタマイズ下準備

0
0

前回は提供いただいたロボット犬『Mini Pupperミニぷぱ』のネットワーク環境の調整などを行いました。

ロボット犬『Mini Pupperミニぷぱ』もろもろ調整

 
基本動作は確認することができたので、4足歩行を勉強して動作のカスタマイズをしたくなってました。

カスタマイズに向けていろいろ調べましたので報告します。

 

 

画像カスタマイズ

以下を参考にディスプレイ画像を変えてみました。
 https://docs.google.com/document/d/1F9AL1InhVXOyn0aPAk4QtorclZ2lEJLl/edit

320×240のpng画像を準備して同名ファイルと入れ替えるだけでできました。

 

下準備

次にいよいよ ミニぷぱの構成や制御方法を勉強して4足歩行方法の理解やオリジナル動作追加など実施したいと思いましたが。。。

ミニぷぱプログラム

制御プログラムは以下あたりをまさぐればよいのでしょうが、正直よくわかりませんでした。

https://github.com/mangdangroboticsclub/QuadrupedRobot/tree/MiniPupper_V2/Mangdang

https://github.com/mangdangroboticsclub/QuadrupedRobot/tree/MiniPupper_V2/StanfordQuadruped/src

ミニぷぱ回路構成

専用基板の回路図はまだ公開されていないようで、
どのようにサーボを制御しているのか明確にすることができませんでした。

https://mangdang-minipupperdocs.readthedocs-hosted.com/en/latest/reference/PCB.html

基板を観るとサーボドライバICのPCA9685が載っていたので、ラズパイ4からI2CでPCA9685に信号を送ってサーボを制御していることが分かります。

 

ラズパイ4と戯れる

ミニぷぱをソフトウェアや回路から追いかけて理解するのは現状私には難しいことが分かりましたので、
まずはラズパイ4との距離をつめることにします。

Ubuntu 20.04

最新キットはUbuntu 21.10で動作しておりますが、前回 VNCのパスワードが消滅するなどの不具合がありましたので、Ubuntu 20.04の動作を観てみようと思いました。

Ubuntu20.04 server をRaspberry Pi ImagerでWiFi 設定済みでイメージ焼いて
GUIも無事インスト―ルできましたが なぜかGUIではWiFiが使えず。。

一旦保留にします。

Raspi OS

ラズパイ4は今回初めて触るので普通にRaspi OSを入れて楽しむことにしました。

慣れ親しんだNode-Redをインストール。
 https://nodered.jp/docs/getting-started/raspberrypi

Node-RedからラズパイのGPIOをPWM制御してサーボを動かしてみました。

 

おわりに

足を自由自在に動かせるようになれば、四足歩行を体験的に学習できると考えましたが
現状 専用基板の回路図も公開されておらず、コードも複雑でどこに手を付けてよいのかわかりません。

引き続きラズパイ4をいじって自分なりにサーボを動かせるようになって足の制御を目指そうと考えておりますが、
ESP32などに浮気するかなどと よからぬ雑念がよぎっていることも確かです。

公式の情報公開も追いかけつつ勉強進めます!

次の記事

ロボット犬『Mini Pupperミニぷぱ』逆運動学で足制御

ロボット犬『Mini Pupperミニぷぱ』もろもろ調整

0
0

前回は提供いただいたロボット犬『Mini Pupperミニぷぱ』を組み立てて基本動作の確認を行いました。

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

ここではもろもろ確認・調整を実施しましたので報告いたします。

 

 

サーボ動作確認

ミニぷぱ専用カスタムマイクロサーボの動作が気になったのでみてみました。

マニュアルではサーボの初期位置を気にすることなく組立てが進められ、
軸も360°回転し続けたので何か特別なサーボで特別な制御なのではと思ったのです。

確認してみたところサーボはPWMのパルス幅によって位置が決められており、
その範囲も180°といたって普通のPWMサーボでした。
軸が回り続けるのは不思議ですが。。

恐らく出荷時はサーボの軸位置が約0°になっていて、組立て時に大きく動かなければ問題ないということなのでしょう。
しかし、場合によっては補正時や実動作時に可動範囲超えることもあるんじゃないでしょうか?
要注意です。

 

休憩

可愛いからみてください。
SHISEIGYO-2 Walkerと一緒に撮影しました。

 

IP固定

ミニぷぱ起動時にスムーズにSSH通信などを実施するために
IP固定しました。

Ubuntuのシステム設定画面で簡単に実施できました。

 

VNC設定

外部PCで画面共有して色々いじりたいのでVNC設定を実施しました。

こちらもUbuntuのシステム画面で設定できます。

 

Windows PCの UltraVNCで画面共有を確認することができました
(なぜかVNC Viewerだと画面が真っ黒でうまく表示されなかった)。

VNCパスワード消滅

上記のようにVNC設定して一旦リブートするとVNCパスワードがリセットされてしまいアクセスできない問題が発生しました。
毎度起動のたびにパスワードが空白になってしまうのです。

ここでUbuntuのバージョンは21.10ですが、20.04なら問題ないとの情報をいただきSDにUbuntu 20.04のイメージを焼いてみましたが、使用しているラズパイ4では起動しませんでした。

イメージファイルは以下でDL
 https://drive.google.com/drive/folders/17XOR7FHEMkts_zZtZtuQ-QxEJ68U8ZkW

↓Ubuntu 20.04のイメージファイルでは”This board requires the new software”と出て起動しなかった。

 
VNCについてはTigerVNCなど別ソフトを試すか、
今後ROSを使用するならUbuntu 20.04のほうがいいとのことなので、最新モデル向けのUbuntu 20.04イメージファイルの更新を待つことにします。

ROSなるものを使用するとなんかすごいことができそうなのです。
今のところ全くよくわからないけど。。

 

筐体完成

前回の組立て時に M1.4精密ネジが同梱されておらず一部筐体が未完成でした。

 
ホームセンターでネジ (M1.4 × 3mm)を買ってきました。

 
ばっちり完成!めちゃくちゃカワイイ!!

 

おわりに

ここではサーボの単体動作確認と、よりよくミニぷぱを使用し勉強するためにネット環境調整を実施しました。

一部問題もありますが随時更新したいと思います。

次は足を自由自在に動かせるようになりたいです。
今のところ全くどうやって動いているのか理解できていません。

勉強します!

次の記事

Clock Arm 時計を自作

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

0
0

なんと ロボット犬『Mini Pupperミニぷぱ』の組み立てキットを提供いただけました!

 

ミニぷぱ は2022年2月現在 Makuakeにて予約販売中です。

 

 

Mini Pupperミニぷぱ

ミニぷぱ はラズパイ4搭載の四足歩行ロボットです。
12個のサーボモータで歩行します。

提供いただいたモデルの対応OSはUbuntu21.10でした。

 
キットにはコントローラとラズパイ4が同梱されており非常に嬉しかったです。
今はラズパイが全然入手できないですからね。
初めてのラズパイ4を思いがけず手にすることができました♪

無線コントローラもこのキットで勉強すれば今後色々応用できそうです。

参考資料

組立てやソフト設定などは以下を参考に実施しました。

 

組立て

以下を参考に組み立てを実施しました。

マニュアル通り、バッテリ充電を開始しラズパイ用OS(Ubuntu21.10)をSDに焼きました。
32GBのSDカードが同梱されていました。イメージ焼きは2時間以上かかるので先にやっておいたほうがいいと思います。

キット自体は3Dプリント品や成形品やカーボンファイバー品など色々な素材で構成されておりメチャクチャ面白いです。
今後の自身のものづくりにも非常に役に立つと思います。

使用されている12個のサーボはカスタム品でした。
メタルギアが使用されているようで通常のマイクロサーボよりずっしり重いです。

足組立て

足がよくできていて組み立ててみて勉強になりました。

 

こんな風に付け根にサーボ2個組めば、くの字に足を動かせるんですね。
支えの金属棒のボールジョイントもいいなぁ。

 

この足の構造はいつか自作の二足歩行ロボット SHISEIGYO-2 Walkerに応用したいと思います。

 

注意点

配線長が9cmのサーボが4個、15cmのサーボが9個 (予備1個) 同梱されており、
足を以下のように作成しました。

このようにしないと配線が短くて基板に接続できない場合があります。

ボディ組立て

ボディフレームと足を組んで、サーボ配線を専用基板に接続します。
かなりギッチギチです。

 

ラズパイ用のファンも専用基板に接続しました。

 

ネジがない

外装を取り付ける際にM1.4という小さいネジが必要だったのですが、同梱されていませんでした。。

とりあえずテープ固定や一部外装なしでしのぎます。

完成

 

ソフトウェア

バッテリの電源を入れてラズパイを起動します。
以下を参考に初期設定を実施しました。

初期設定のためにラズパイにマウスとキーボードとディスプレイを接続します。

ここで問題が発生しまして。。ラズパイ4のHDMI端子はmicro HDMIだったのですが 我が家にはmicro HDMI変換コネクタがなかったのです。。
ちょっと焦りましたが、困ったときの近所のダイソー。駆け込んだところ販売していました。110円!
ダイソーに売ってないものはないと言われています。

無事ディスプレイを接続でき、Ubuntuの起動、WiFI設定が実行できました。

校正

組立て時にサーボの初期の位置調整などは一切せずに組み立てておりますのでオフセットの校正作業が必要になります。

どうもミニぷぱのカスタムサーボは可動範囲が360°な気がします。
手でいつまでもぐるぐる回せました。

デスクトップに校正用のソフト(Calibration Tool)があり起動します。

 

Ubuntu21.10では伏せの姿勢になるように各スライダを調整して”Update”をクリックして校正します。

 

動作

コントローラとペアリングしてミニぷぱを動かします。
以下を参考に実施しました。

 
メチャクチャ機敏に動いています!

方向転換もヌルっと実施してくれて驚きました。

 

おわりに

ここでは ミニぷぱ の組み立てからコントローラによる動作確認を実施しました。
筐体の素材の使い分けや足の構造など非常に勉強になりました。
本当に良いものをいただき感謝の限りです。大切にします。

無事に動いて安心しましたが、制御内容はまだまだ謎です。
4足歩行ってどうやるんですかね?どのように前後左右に移動しているのか良く分かりません。
専用基板の回路構成もまだ理解出来ていないですしラズパイへの接続も把握していません。
どうやってコントローラとペアリングしているのでしょうか?

調べて勉強するべきことがまだまだたくさんあります。
楽しんで実施していきたいと思います。

 

ひとまず直近では以下をやりたいです。

  • ミニぷぱ IP固定
  • VNC接続

SSH接続だけだと不便なのでVNCはやっておきたいですね。
まずはUbuntuの勉強かな。

引き続き頑張ります!

次の記事

ロボット犬『Mini Pupperミニぷぱ』もろもろ調整