2021/12/15 よりサイトリニューアルしました

多関節デフォルメAIロボット「AIパワー君」

AIパワー君

 

新年あけましておめでとうございます。久々の投稿になります(半年ぶり。。)

googleアナリティクスもなんか仕様変更したのか、昔の設定ではサイトのアクセス数などが確認できなくなっていてもともと弱小だったこのサイトなんかもはやだれ一人見ていないのではないかと感じますが、今年からまたちょくちょく更新していこうかと思っています。どうぞよろしくお願いいたします。

 

*****

 

 

昨年、AIロボット「AIパワー君」を作成したのですが、結構苦労したので備忘録としてまとめておこうと思います。

出来上がりはこんな感じです。↓

 

ロボットの機能は下記の通り。

・chatgptと連携させて会話ができる

・音声での操作

・前後と左右旋回歩行が可能

・カメラを搭載しブラウザから歩行操作可能

・アナログコントローラーで各部関節のみの操作も可能

 

過去に作成した「パワー君」をベースとしています。↓

 

この記事が、会話できるAIロボットを作りたいと思っている方の参考になれば幸いです。

 

 

ロボットの構成

AIパワー君 ブロック図

ハード

・Raspberrypi ZERO2W

・WM8960 Audio HAT

・スピーカー × 2個

・PCA9685

・サーボモーター × 12個(SG90 × 10, ミニデジタルサーボ2g(正式名称不明)× 4)

・Lipo BT 2000mAh 放電レート2C × 1個

ソフト

プログラムはpythonで書いてます。

ブラウザからの操作についてはhtml,css,js,python cgiで書いています。

 

 

作成過程

印刷、塗装

外装は一部変更(micとスピーカーの穴を追加)したパワー君をベースとして印刷し、ホビー用スプレーのメタリックシルバー色で塗装しました。

メタリックのせいかラメが入っていて、スプレー時に空中に舞いまくるので要注意でした。

 

組立て

部品格納

RaspberryPi ZEROW2にWM8960を取り付けてスピーカーを接続。

WM8960は接続コネクタのピンが長かったの短くしました。(筐体に収まらないため)

 

配線

サーボモーターを取りつけて基板との配線。

接続のコネクタは場所を取るので全て取り外して直付けしました。

 

 

プログラム

コントローラー側、ロボット側のプログラムについては冒頭に張り付けましたURL(パワー君)のものとほぼ同一です。

今回はAIロボットということで、chatgptを利用し会話できるプログラムを追加しました。

 

 

こだわったポイント

・ロボットの電源ON,OFFをタクトスイッチ制御

・電源投入時にWEBサーバー、カメラストリーミング、AI会話プログラム、アナログコントローラープログラムを自動で起動

・音声でのロボット操作

 

タクトスイッチでの電源ON,OFFは /boot/config.txt に以下のコマンドを追加すればOKです。

dtoverlay=gpio-shutdown,gpio_pin=26,debounce=2000

pinは通常3を利用するそうですが、i2c使用時は使えないので、その場合は以下のコメントアウトを外すと違うピン番号を使う事が出来ます。

#dtparam=i2c_arm=on

最後の数字は2秒になります。スイッチを押して2秒後にシャットダウンになります。これはスイッチのエッジ検出を防ぐ為に秒数を設けています。

カメラストリーミングは起動のシェルスクリプトを作成し、/etc/rc.loal にパスを追加。

コントローラーのプログラムもパスを追加することで起動時にプログラムが走ります。

AI会話プログラムのみ、後述していますがrc.localにパスを追加してもダメでしたので、ターミナルを起動してプログラムを実行する方法にしました。

音声でのロボット操作は、指定したメッセージをmicから拾えば、chatgptにテキストを投げずにそのままサーボ駆動させています。

 

 

ハマったポイント

・mjpgstreamerがbullseyeに対応していない(Busterまで)

・WM8960のドライバが bullseye 以降しか対応していない

・ AI会話プログラム の自動起動が上手く行かない

・pythonプログラムのgpioセットアップ時、 WM8960 がエラーを吐く

 

カメラのストリーミングについては、個人的に使い勝手のいいmjpgstreamerを使用していたのですが、これが旧OSしか対応しておらず、また WM8960のドライバが bullseye 以降しか対応していなかったので先ずここでつまづきました。

パワー君が旧OS( Buster )で作成していたので、出来れば旧OSで進めたかったのですが、どうあがいてもWM8960の旧バージョン対応化が無理そうでしたので bullseye で進める事にしました。

色々さがしていると、下記サイトにて bullseye でのmjpgstreamerの起動方法が書いていましたので利用させて頂きました。↓

ポン吉のブログ様から引用

 

続いて、AI会話プログラムの自動起動ですが、電源投入時のプログラム自動起動はrc.localにプログラム名を追加するなど色々あるのですが、上手く行きませんでした。

そこで見つけたのが、「ターミナルを自動起動してからのプログラム実行」でした。この方法だと上手く起動してくれました。参考にしたサイトはこちら↓

https://qiita.com/tonosamart/items/f59daa481f90c85a8a99

最後に、AI会話プログラム実行後に WM8960 関係のエラーについてです。

エラー内容が音声関係だったのですが、色々原因を探っていくとgpioが起因している事がわかりました。

どうやらいくつかのgpioピン(i2c,spi以外のピン)もWM8960の制御に関わっているらしく、例えばgpio19を使おうとすると音声関係のエラーが出ます。この辺りは恐らく WM8960 のデータシートを見ると分かると思いますが、とりあえずgpio6,gpio13など使えば問題はありませんでした。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です