スタックちゃん


R4.5.30 Avatarの顔作成

 スタックチャンの顔を自作してみたいと思ったので、meganetaaan さんの M5StackAvatar を再勉強。どんどん進化する Avatar の世界に微々たるものですがヨタヨタと追いかけていこうかと.....まずはライブラリの分析から。

 いろいろファイルがあって悩むところですが、顔自体の変更は M5Stack_Avatar\src\faces の中のファイルから DogFace.h を選択。

 ファイルには目、口、鼻、眉毛等を描く指示があるのだけど、素直に読み込んでいけばいいのに余計な固定観念があるので悩んでしまうところもあった。

 fillEllipse(x0 , y0 , rx, ry, color); は、 (x0,y0) を中心座標として左右に rx 、上下に ry の楕円を描くことを知った(^^;) 「機能:左上の点(x,y)と幅と高さを指定して楕円を描画」という理解は勘違いだったのか.....

 BoundingRect() はxy座標指定が一般数学とは逆になっており、 BoundingRect(y,x) となっているようです。これも悩みの一つだった。

 ということで、取り敢えずの最初の表情だけは自作できるようになったかな。あとは表情のファイルでの変更などが課題としてあるが、面倒そうなので先送りとする(^^;)

 スクリーンキャプチャーが再びできるようになったので(Avatar画面は不可)、加工してみた。


R4.2.17 アトムチャン完成形

 その後アトムチャンは成長を続け、完成を迎えています(^^)/ バッテリーは220mAhの小さなリポバッテリーを充電器付きの複数個で購入。胴体部分にスペースを作り、挟みつけるようにしています。取り外しが楽で、充電しやすい。

 発声の方もAquesTalkのライセンスを購入。制限なくそれなりに正しい発音をしてくれます。日本語だけでなく、工夫すれば中国語やドイツ語、ラテン語などが喋れます。通じるかどうかは分かりませんが。フランス語や英語のように流ちょうな発音をする言語は無理ですが、ローマ字的な発音でいいなら発生することができるようです。やってはいませんが、スペイン語やイタリア語なんかができるのではないかと思います。

ラテン語はここ

ドイツ語はここ

孟浩然の春暁を詠むのはここ

 現在は、出だしは、お気に入りの方丈記とカール・ブッセ、枕草子の最初だけをランダムに選んで喋ってくれます。以後は、動きをランダムにし、2ストロークごとに掻き集めた124の名言からランダムに喋ってくれます。PCの横で、時々スイッチを入れます。


R4.1.7 アトムチャン2号

 動力はサーボからホーンを経由して伝えるけれど、ホーンだけでは頭部の固定が弱いので、サーボの反対側にネジを出して支持棒として使うことにします。この時、一旦サーボの蓋を外して、内部に干渉しないように皿ネジを取り付けます。外側からこのネジを固定しますが、頭部ケースとはフリーにしておきます。

 ケース色を黒に変更。

ここで喋りながら動く様子を見ることができます。次の課題はバッテリー装着。


R4.1.5 アトムチャン2号

 一応の姿がこれ。頭部のケースは0.7mm厚のプラ板をアイロンで折り曲げ加工。

バッテリーと2個のサーボからの配線はピンソケットへ差し込むようにしました。この時、間違えて今回の設定では使ってはいけないGPIOピンを使って配線してしまい悩みました。結局、21と25ピンを使ってうまくいきました。


R4.1.3 アトムチャン2号

 Face表示とAquesTalkでの喋りができるか試したかったので、基板を挟んで組み立ててみました。ピンの配線も間違えずにできました(^^)/ しかし! サーボの配線をする前にSSD1306を直付けしてしまった(^^;) この後が面倒そう.....慌てないことが大事

ここで動きが見れます。

 SSD1306という有機ELディスプレイはメーカーによって矢印のピン配置が逆なんだよね。私はうっかり引っかかる素直な(?)タイプなので、注意しないといけない(^^;) 左側がVCCでなく、GNDだとGROVEポートとの配線が平行になっていいのだが(^^;) 両タイプをストックしておくといいのかも。


R4.1.3 アトムチャン2号

 今年もスタックチャンもどきのアトムチャンで4人目をいくかな。M5AtomECHOで喋りながら...と思っていたら声が出ない! 新年早々再手術だ。何回もスピーカ交換をやっているので、もとのところではなく直接にGPIOピンやICの足に半田付け(^^;)

 今回は、超マイクロサーボでなく、手持ちのSG90級で(^^)


R3.12.27 スタックチャンを作るには

 スタックチャンを作るにあたって、M5Stackと2個のサーボモーターは別として、外側ケースやサーボモーターの固定部品などは3Dプリンターで作られていましたが、今では、そういったものをBOOTHで購入することができます(^^)/ もっとも、安上がりに作るには手持ちの部品を使うに越したことはありません(^^;) 私の場合は下記の通り。

(1)M5Stack本体:使い古して液晶に接触不良現象有
(2)サーボモーター:以前にまとめて沢山購入したもので余っていたもの
(3)M5Stack用電池モジュール:どういうわけか購入していたもの
(4)Power Switch for M5Stack:以前購入していたもの

百均で購入したもの
(5)くつした整理カップ4個セットSサイズ → 外側のケース
(6)PPシート → サーボモーターを固定するもの
(7)5mm厚MDF材 → スタックチャンの足

 M5Stack本体のボトムを外す。M5Stack用電池モジュールのリチウム電池ボードを外した赤い外枠とPower Switchを組み合わせる。この時、スイッチが操作できるように赤い外枠を切りかけを作る。リチウム電池は、両面テープで接着されているボードから慎重に外しておく。

 M5Stackと赤枠Power Switchを組み合わせる。これを整理カップにそうにゅうして


R3.12.22 スタックチャン3人目 3

 2つのサーボを組み合わせているPPシートにバッテリーを差し込むホルダーを設けてよりコンパクトに。0.7mmほどのPPシートなので、ハサミで切れて加工しやすいです。失敗しても何遍も作れるし(^^;)

 スタックチャンの頭部が後ろに長かったので、15mmほど短くカット。中のケーブルも短くした方がきれいかな。

 上の画像には、ケースの側面に穴が開いています。右側の縦大小3つの穴は最初のホーンの取り付け。左側の1つは向こう側のホーンとセットにして両側でケース本体を支えるボルト用の穴。これを取り付けるとぐらつきがなくなります。

 さて、あとは動きなのですが、だいたいはランダムな動きにしています。ただ、特別な動き、円運動や楕円運動、見上げる・見下ろす等の動きを作っておきます。それを組み合わせようかなと計画中。自分自身の頭部の動きというものをきちんと把握していないので、難しいのでしょうね(^^;)


R3.12.7 スタックチャン3人目 2

 スケルトン仕様のスタックチャン。色を塗っても良かったのですが、内側が見えた方が後々のためにもいいかなと。

 しかし、セコハンのためにか水平サーボ不調。で、作り直しました。今度は白のPPシート。サーボのネジ止め部分を取り去っていたので、PPシートに小ビスでネジ止め。これでも強度は十分のようです。

 この後もうまく動かなかったのですが、結局専用基板を作ろうとして、下手に半田付けをしていたことが原因でした。もう、サーボから直にM5Stackにつないでいます。一応スイッチを必要としたので、そこはし一致基板を経由しています。


R3.12.7 スタックチャン3人目

 道具箱に、いろんな用途に使いまわしていたサーボモーターが余っていたので、スタックチャン3人目を計画。いろんな方のアイデアで楽に組み上げることができるのでやってみようと思い立てるわけです(^^)/

 2つのサーボモーターを下のように組み上げます。たしか百均の0.7mm厚の黒PPシートを使っています。

 そして、極めつけは、ふるおらいとさんが百均で見つけ出されたケース「くつした整理カップ4個セットSサイズ」。4個もあるので大胆に大穴開けてスタックチャン用として仮組してみました(^^)/

 ケースの縁は分厚いです。そこに、M5StackのUSBポートやリセットスイッチ、SDカードスロットなどの穴をあけなくてはなりません。私は半田コテを使いました、臭いけど。あとは良く切れる鋭角のカッターナイフで整形してます。

 ところが、この後スタックチャンのスケッチを書き込むと、リセットがかかるのです。このへんは、エキスパートの方々が解決方法を示してくださって、助かりました。


R3.12.1 アトムチャン マルチタスク?

 M5Atomを使ってトリックスLEDに漢字表示することで悩んでいるときに、「M5Atomがデュアルコアなのでマルチタスクができるよ!」と教えていただきました。! それなら、とアトムチャンでトライ。これまでは、サーボの動きの合間に顔の表情を変化させていましたが、同時に動きと表情を変化させられるかなということで。

xTaskCreatePinnedToCore(タスクの関数名,"タスク名",スタックメモリサイズ,NULL,タスク優先順位,タスクハンドルポインタ,Core ID); という関数で実装できるとのことなので、難しいことは考えず、やってみました。

xTaskCreatePinnedToCore(taskFace, "TaskFace", 2048, NULL, 0, NULL, 1);

 やってみると、確かに動きながらも顔が変化しています(^^) ここ

 しかし! 定期的に、リセットしてる(^^;) CoreIDを0にすると、SSD1306に表示される顔が乱れる。スタックメモリサイズを大きくすると、表情が固まる(^^;) 勉強が必要ですね。


R3.11.2 アトムチャン

 十日ほど前から、Nochiさんのスタンプチャンに刺激を受けて、Atomで作るアトムちゃん(もどき)を作ろうかと計画しました。(^^;) 声も出したかったので、AtomEchoでの製作を目指しましたが、どうも上手いこと書き込めないので断念。AtomLiteでの製作としました。以前はESP_FacesとAquesTalkは両立していたんだけれど(^^;)

 顔の表情は、NochiさんのESP32_Faces M5Atom Lite + SSD1306 128x64 OLED Versionを使わせていただきました。一応、頭部と2つのサーボの骨組みはこんな感じ。持っていたLiteは書き込みで失敗し使えなくなったので、新しいLiteを注文しました。サーボモーターは手元にあるSG90でも良かったのですが、コンパクトさを優先して、HobbyShopアルファさんからHK5320という1.7gのウルトラマイクロのものを購入。

 仮組ではこんな感じ。スタックちゃんよりは小型にできました。

 足をまともにして、スタックチャンの動きをそのまま使ってスケッチを書き込んでみると、動きました。ここで見ることができます。

 やはり問題は電源です。Groveポートから5Vを給電しました。USBポートからだとコネクタがごつくなるので、Groveポート最適です。最初は5V給電しましたが、デジカメ用3.7Vバッテリケースが余っていたので使っています。同じ規格のものが何枚かあるので便利です。ゆくゆくは小型のLi-poバッテリを使おうと思っています。

 ところで、ESP32_Facesによる顔の表情は、delayを長くしていると動きが鈍くなります。私の感覚では、delay(50)くらいなら大丈夫そうなので、例えばdelay(2000)とする場合、FOR文で40回 face.Behavior.Clear();face.Behavior.SetEmotion(eEmotions::Normal, 1.0);face.Update();delay(50);(この間にサーボを少しづつ動かす)を繰り返すといいようです。サーボと連動しました(^^)v 

 ESP32_Facesには18種類ほどの表情があるので、忘れないようにビデオにしました。英単語スペルがいくつか間違えていますが(^^;)

ここで見ることができます。


R3.8.30 スタックチャン2号その後

 ツイートすると、どうもこっちを更新しないでほったらかしにしてしまいます(^^;)

 その後、スタックチャンには多少の言葉を喋ってもらうようにしました。最初はアクエストークにしましたが、発音の制限があるので、ヒホさん開発のVOICEVOX を利用させていただいて「Voice:ずんだもん」で喋らせてみました。ただ、私のM5StackGRAYではスピーカー音質が良くないので、やっぱりCore2を使った方が良いかと思います。

ここで見ることができます。

 ボタンを押して喋るのは面倒なので、外部音を取り入れて、といってもある音量以上で反応するだけですが、発声するようにマイクを付けてみました。

 その様子は、ここで見ることができます。足元が木部むき出しだったので、赤い靴を履かせてみました。


R3.8.4 スタックチャン2号

 もう1つのスタックチャンがこちら。足を動かさず、首振り。上下左右に動かします。M5Stack本体とバッテリーモジュールにバッテリー取り去ったボトム、サーボモーター2個だけの材料です。

 表情はrobo8080さんの M5Stack_avatar_myFace-master を使わせていただいてます。有難うございます(^^)/

 加工が楽なので、百均のMDF材を使っています。足部に垂直にサーボ取り付け。これでスタックチャンを左右に動かします。GPIO5ピンに。その上に密着させてもう1つのサーボをGPIO2ピンに接続してスタックチャンを上下に動かします。サーボの電源は5VとGND。今のところ、サーボにもM5Stackにも異常は出ていません(^^) 上下動用サーボはスタックチャンの顔ケース左側にホーンで固定、右側に3mmボルトを伸ばしてフリーにしています。これにより、強度が出ました。足用のサーボには結束バンドでの固定がありますが、これは工作を簡略化したため(^^;)

 3種の動きをコーディングしました。サーボドライバボードを使わず、そのままM5StackでのPWM制御でサーボモーターを動かしていますが、上下左右をXY座標として位置を決めて指定するだけなので、そう難しくはないはずです。しかし、最後の運動は楕円運動のはずなのですが、反転して(?)星状の軌道に動いてます(^^;)

 この辺は、単純な計算方法のミスですね。脳みそが固くなってます(^^;)


R3.8.1 M5Stackによるスタックチャンを始める

 M5Stackによるスタックチャンなるマスコットロボットが始まっていた。小林竜太さんが提唱するスタックチャン2種がパソコン横に置くキャラクターとして可愛い。そこで、私もやってみた。最初は2足歩行の延長版としてちょっと歩けるロボット。

 左側のキャラ。右の黒いものは、もう一種のスタックチャン用ケース。皆さんは3Dプリンターで打ち出すけれど、持っていないので例の如く0.7mmプラ板をアイロンで曲げ加工。表情はrobo8080さんの M5Stack_avatar_myFace-master を使わせていただきました。

 最初は四股でも踏ませるかとやってみましたが、ぎこちない(^^;) 折角なら動きに応じて、M5Stack内蔵のMPU6886を使ってX方向の加速度で傾きを調べて表情を変えてみました。動力無しで斜面を歩き下る玩具が昔からあるので、その原理を応用して、左右の動きで前進させてみようかと足裏のアールを考慮中ですが完成のアイデアは浮かんでいません(^^;)

 以前から参考にさせていただいているrobo8080さんの記事を何度も見返して、ムーンウォーク(サイドウォーク)を実現しようと再度挑戦(以前もやってみたけどうまくいかなかった)。左右の脚のサーボの動きをどのようにスケッチ化するか悩みましたが、自分じゃ動きを理解してもいないし動けないのに(^^;)、こうだ! と試行錯誤。結果、滑りやすいマウスパッドの上で演技。ウーム...... 私にはできっこないムーンウォーク、健気にやっているスタックチャンに感謝(^^) 両脚間隔をもう少し開ければ大きな動きになるのかな?

 今回2つのサーボモーターを動かすのは、M5Stackの増設バッテリーとGPIO2とGPIO5とからのPWM信号。これなら低コストで実現できます。

 この分だと、もう1つのスタックチャンもできるかな? そうそう、aquestalk使って喋らせようと思いましたが、私のM5Stackは2台とも内部スピーカーを潰していたのでした、残念。