えいあーるれいの技術日記

ROS2やM5 Stack、Ubuntuについて書いています

ラズピコWではじめるROS 2(micro-ROS・RaspberryPi Pico W)

クリスマスプレゼントにぴったり?なメカナムロボットを買った(電子工作日記) - えいあーるれいの技術日記の続きです。

今回は、Wi-Fiに繋がるRaspberryPi PicoWにmicro-ROSを載せちゃおうという試みです。


RaspberryPi Pico

RaspberryPi PicoはRaspberryPi財団が開発したマイコンチップ「RP2040」を搭載したボードです。

チップ自体はCortex-M0+という低価格・省電力重視仕様ですが、デュアルコアでベースクロック133MHzからさらにスピードを上げることができます。

突き詰めれば色々と遊べますね。

(実際、1GHzまでOCする強者も…🔥)

www.raspberrypi.com

ちなみに、「RaspberryPi(ラズパイ)」はシングルボードコンピュータを指すため、区別してラズピコと呼んでいます。


Pico W

RaspberryPi Pico W (ラズピコW)は、ラズピコに無線チップ「CYW43439」を外付けしたモデルです。

Wi-Fi (2.4GHz) とBluetoothに繋げられるモデルですが、1200円くらいするので、ESP32チップ単体と比べるとなかなか悩ましい価格です。

プラットフォームや消費電力で比較することになりそうです。


micro-ROSとは?

micro-ROSとは、ROS2ノードとマイコンを接続するプロジェクトです。

他のROS2↔︎マイコンのプロジェクトと比較すると、幅広くプラットフォーム・デバイスをサポートしており比較的構築が簡単です。

ROS2との接続には、ホストPC上にmicro-ros-agentというROS2ノードを立ち上げる必要があります。

micro.ros.org

micro-ROS自体はプラットフォーム非依存のライブラリなので、ArduinoだけでなくESP-idfやRaspberryPi-Pico SDKでも使えます。


ラズピコ自体はmicro-ROSでサポートされていますが、UARTのみとなっていました。

github.com

Wi-Fiは自分でサポートしないといけないのかなと思ってフォーク先を漁っていたら、ありました!ラズピコW用のリポジトリ🤩

github.com

これだと少々使いにくかったので、コードを整理してUARTとWi-Fiを切り替えられるようにしました↓

github.com

これで、rpi-pico-de-hajimeru-ros2ができますね😉


使い方(4輪メカナムロボットの場合)

リポジトリは以下のURLより

github.com

TwistでデータをsubscribeしてTimerを回してデータが来ていない場合は速度をゼロにするだけの簡単なプログラムです。

analogWriteで全てを解決してきた自分としては、クロックからPWM生成とか訳わからんすぎでしたね。(PWMの部分(自分用)


ちなみに、動作確認についてですが、動きはしたもののモータの回転速度が全然違ったり唐突に接続が切れたりでちょっとキレそうになっていました…

フィードバックがない上に制御よわよわなのでちょっと今の状態では厳しいかも‥と思い、一旦諦めです😖

もしかしたらXに動画上げるかも

進捗(特になしw)

モータをDynamixelに変更して再挑戦ですね‥(原型留めていないのでは?