2023年 SPRESENSE活用コンテスト への道② ーマルチコアー
HomeMadeGarbage Advent Calendar 2023 |4日目
2023年 SPRESENSE活用コンテスト への応募に向けて前回は本連載を開始しました。
目次
シリアルサーボSTS3032
前回はDYNAMIXELシリーズ XL330-M077-T を SPRESENSEのUART2ピンによるシリアル通信で動かしてみました。
ここではFeetech社のシリアルサーボ STS3032 をSPRESENSE で動かしてみます。
ArduinoライブラリSCServo (秋月の販売ページでもダウンロード可能)を使用してUART2で制御しました。
STS3032で足をバタバタさせています。
XL330の時と同様に自作のシリアル変換基板を挿入しています。
XL330と同様にSPRESENSEのUART2でのSTS3032動作が確認できました。#HMGspresense2023 pic.twitter.com/6zovEPuMYW
— HomeMadeGarbage (@H0meMadeGarbage) December 1, 2023
STS3032 もXL330 と同様にSPRESENSE で動かすことができました。
シリアルサーボの並列制御
最終完成品のロボットでは2種のサーボ (XL330, STS3032)をそれぞれ独立に制御したいと考えています。
具体的にはXL330でタイヤを回転させて、STS3032でロボットの足を制御したいのです。
この並列処理のためにマルチコアを使用する必要があるのはもちろん2種のシリアルサーボと通信するために2個のUART信号ラインが必要となります。
しかしSPRESENSEにはUSB通信用UART以外にはUART2しかありません。。。
UARTラインの増設のためにGPIOを用いるSoftwareSerialという手法がありますがXL330, STS3032の公式ライブラリはハードウェアシリアルにしか対応していません。
XL330, STS3032のいずれかをソフトウェアシリアルに対応するべくコード作成の必要に駆られ、凄くめんどくさくなって ふて寝してしまいました。。
ふて寝から覚めると。。。
果報は寝て待てとはこのことでしょうか。
ふて寝から覚めてX(旧Twitter) を眺めているとFeetechサーボ用のデータ書き込みコードが公開されておりました!
こちらの記事ではESP32からサーボに直接制御用データの書き込みをして受信はしない構成の為、 変換基板の必要のなく手軽にFeetechサーボを楽しむ方法が紹介されています。
STS3032での足制御の際には特にフィードバックの必要はないと考えており、こちらの送信だけの構成で全く問題ないので早速活用させていただきました。
二名川さんの記事を参考に
SPRESENSEのソフトウェアシリアルでSTS3032動作出来た。#HMGspresense2023 https://t.co/CuBALOsxeq pic.twitter.com/LQDISeCMNy— HomeMadeGarbage (@H0meMadeGarbage) December 2, 2023
ここではSPRESENSEのGPIO D7ピンをソフトウェアシリアルの送信ピンとして、記事を参考に直接STS3032にデータ送信して制御しています。
これで2種のサーボをUART2とソフトウェアシリアルの2系統で制御する環境が整いました。
マルチコア
ついに2種のサーボのマルチコア並列処理を実施します。
SPRESENSEには6つのCPUコアが搭載されており、Arduino IDE環境でもマルチコアのためのライブラリや記述方法の用意がされています。
以前にSPRESENSEのマルチコアを活用してバーサライタを作製しております。
各コアのコードをそれぞれ書いて書き込み時にコアを選択するというなかなか面白い記述方法です。
動作
第一関門のデュアルコアによるサーボ制御 達成!
動画では分かりにくいけど
Mainコア:ホイール用サーボ XL330をUART2で制御
Subコア1:足用サーボ SCS3032をsoftwareserialで制御#HMGspresense2023 pic.twitter.com/vrBL55Om7n— HomeMadeGarbage (@H0meMadeGarbage) December 2, 2023
以下のような構成で2種のシリアルサーボの並列制御が達成されました。
- Mainコア:ホイール用サーボ XL330をUART2で制御
- Subコア1:足用サーボ SCS3032をsoftwareserial (GPIO D7)で制御
おわりに
ここでは本連載の第一関門になるであろうと考えていた”2種のサーボの並列制御”を実現することができました。
今後もSPRESENSEのハード的制約などでいろいろな障壁が襲い掛かってくるような気がしてなりませんが、最終目標であるチョベリグ卓上ロボットの実現に向けて頑張りたいと思います (極力苦手なプログラミングで悩まない方向で。。)。
現状の課題を以下に挙げます。
- IMUセンシング
- コア間のスムーズなデータ共有
- リアルタイム無線通信