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

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

Feetech-SCSサーボをROS 2で動かせるようにする

最近、生成AI・LLMの進化が止まりませんが、LK-99という常温常圧の超電導と主張される物質の発表も話題になっていますね。

私もプロ並みに驚けるようになりたいですが、頭が悪いのかよく分からん状態なので、しっかりと勉強したいところです。


今回はfeetech-scsのLinux向けROS2ドライバをとりあえず動くところまで書き上げたので、みなさん遊んでコントリビュート頂けるとありがたいです。


Feetech SCS Servoとは?

Feetech SCS Servo とは、中国・深圳のFeetech RC Model Co.,Ltdが開発・販売しているシリアルサーボモータシリーズの一つです。

www.feetechrc.com

ROBOTISのDynamixelにインタフェースが近く、シリアルサーボの中では低価格帯なのが特徴的です。


中でもSG90に形が似ているSCS0009は他のどの廉価なシリアルサーボよりも小さく安価であるため、シリアルサーボのエントリーとしては最適でしょう。

ものづくり界隈で人気のスタックチャンにもSCS0009が使われていたりします。

ただし、サーボモータにはフィードバックの情報量や外力や温度などの耐性など様々な条件があるので、色々比較して最適なものを選定する必要があります。


ROS 2 対応させたい!

ROS2対応なサーボモータを使う場合は選択肢はほぼDynamixel一択ですが、価格の面からFeetechサーボを使う人も多いようです。

ROS2リソースの中のros2_controlは、汎用的な制御理論をロボットに適用させやすくする抽象化インタフェースであり、多くのロボットに適用させやすい環境を提供しています。

「多くのロボットに適用させやすい」の幅を広げるためにも、勝手ながらROS2対応ドライバを作ることにしました。

最近はROS2関連のソースコードも増えてきており、比較的楽に構築できたのはありがたいですね。


使い方

作成したドライバはこちらです。ROS2-Humble・Linuxにしか対応していません。

github.com

対応サーボはSCS0009のみですが、プロトコル的には他のサーボも対応していると思います。


リポジトリのルートディレクトリには次のros2pkgが入っています。

  • feetech_scs_interface:feetech_scsのコマンドを変換してシリアルポート経由で転送する最も基底のインタフェース。ROS2とはほぼ関係ない。

  • feetech_scs_example: feetech_scs_interface を使ったサンプル。ROS2とはほぼ関係ない。(joy_nodeとかと組み合わせた例も作りたいですね)

  • feetech_scs_hardware: feetech_scs_interfaceの HardwareInterfaceによる抽象化。めっっちゃROS2と関係ある。


feetech_scs_example にはとりあえず動作テストをしたい場合の便利ツールが入っています。すぐ試したい場合はこちらを使ってみてください。

ros2 run feetech_scs_example <対象exec> <ID> <port> <baudrate> で実行します。

ファイル名 説明
read_pos.cpp サーボモータの角度をdegreeで読み取る
read_spd.cpp サーボモータの各速度deg/s(?)を読み取る
write_spd.cpp サーボモータの速度を変化させる
set_pos.cpp サーボモータの角度を1度のみセットする
write_pos.cpp サーボモータの角度を0°→90°→180°→270°→0°に変化させる

pingも実装したつもりですが、なんかうまくいっていないので参考程度にしてください。


試す際は以下の製品と外部電源を購入してください。延長ケーブルはサーボモータ側についています。

サーボモータはスイッチサイエンス等で購入可能です。

外部電源は(ストールさせなければ)5V1.5Aが出力できるACアダプタとコネクタ・ケーブルを用意できればOKです。


HardwareInterface

ハードウェアインタフェースはros2_controlのコアとなる部分であり、ROS2との接続に重要な役割を果たします。

dynamixelコミュニティでHardwareInterfaceを作成されているので、そのパッケージを参考に構築しました。(とても勉強になりました。ありがとうございます🙏)

github.com

全く同じ使い方でdynamixel↔︎feetech_scsを取り替えられます。

ただ、 limit タグやpwmモードなどの動作がよく分かっていないところがあるので、角度変更のみ使える状況になっています。

適宜コントリビュートしていただけると幸いです。


次回は、作成したfeetech_scs_hardwareを使用してスタックチャンをros2_controlに対応させます。