はじめに
高専ロボコンで、機械班からサーボモーターを使いたいとの申し出があったので開発。
弊部のサーボモーターの制御・回路周りはロステクしたので新規開発。
せっかくなので知見として残しておきます。
※この記事は@srs様のROS2講座11 FeetechServo(STS3215)を動かすを大いに参考・引用させていただいています。心から感謝申し上げます。
STS3215の仕様について
サーボ本体
サーボ用インターフェイスボード
- このサーボの強み
- 安い(¥3000)
- ROS2から制御できる
- 駆動角制限なし(無限回転可能)
- UART/PWM両方の制御が可能
- 4.0~7.4Vの幅広い駆動電圧 (configから無理やり変更可能)
- 19.5kgf・cmのそこそこなトルク
- 小さい(長辺:45.23mm 短辺:24.73mm 高さ:35mm)
サーボの購入元:秋月電子
インターフェイスボードの購入元:秋月電子
↑のリンクに中国語のデータシートがあるので頑張って読もう!
...っていうのも酷なので設定するところだけ説明します!
初期設定
windowsPCで秋月のリンクからダウンロードしたものの中にFD.exe
があるのでそれを起動。
複数のサーボをつなげた状態で設定してもいいが、IDがかぶっていると通信不可になるのでひとつずつ設定するのが無難。
- 手順
- USBとV1をつないで電源電圧をかける。
- 左上COM(n)を選択
- BaudRで
1000000
を選択(100万bps) - open
- Search→少し待つ
- サーボをつなげていて、電源電圧を与えていれば下の表に出てくるのでそれを選択
- 上のリボンから
Programming
を選択 - ↑の画面になるので、下の表のValueの通りに変更(書いていないところは変更しなくてok)
Address | Memory | Value(変えるところ) | Area | R/W |
---|---|---|---|---|
5 | ID | 好きな数字[0~255] | EPROM | rw |
6 | Baudrate | (詳細は下へ) | EPROM | rw |
9 | Min Position Limit | 0 | EPROM | rw |
11 | Max Position Limit | 0 | EPROM | rw |
33 | Work Mode | (詳細は下へ) | EPROM | rw |
Work Mode(一番大事):
Value | 機能 | 備考 | 備考2 |
---|---|---|---|
0 | 多回転位置制御モード | -32236~32237の範囲で動作 (普通のサーボのモード) |
デフォルト |
1 | 等速回転モード | 無限回転可能 角度制御はできない |
足回り用 |
2 | PWMモード | PWMで動かすモード |
Baudrate:
Value | rate[bps] | 備考 |
---|---|---|
0 | 1000000 | デフォルト |
1 | 500000 | |
2 | 250000 | |
3 | 128000 | |
4 | 115200 | |
5 | 76800 | |
6 | 57600 | |
7 | 38400 |
4未満(115200bps未満)にすると動作が不安定になります。
RaspberryPi 3A, 4B, Nucleo-F446REではデフォルトの1000000bpsで問題ないと思います。
回路周り
こんな感じに青色のやつを剥ぎ取ってXTコネクタなどをつけるのが無難。
ROS2から動かす場合はUSBを直接つなげればOK
マイコンから動かす場合は5芯のやつをつなげればOK
(DTRは何も繋げなくてOK)
スイッチは必ず5V側に倒しましょう。
これで終わり。かんたん!!
制御周り
マイコンからの場合
秋月のファイルにArduino用ライブラリがあるのでそれを適当に改造して使う。
Mbedで使いたい場合もちょっと改造すればOK.
例:Serial --> BufferedSerial
ROS2からの場合
まず前提として先人@srs様のROS2講座11 FeetechServo(STS3215)を動かすをかならず見てから使用してください。
ほとんどがこのプログラムを改良したものになります。
(最初のworkmode[1]に対応させただけ・ちょっと機能追加しただけ)
事前準備
ROS2講座11 FeetechServo(STS3215)を動かす #事前準備を参照。
コード
下を参照。
ROS2 topic echo joint_states
でフィードバックの情報が読めます。
改良点はトルクを切る(手で回せる)状態にしたり、なんかいろいろできるようにしてあります。
適当コードですがどーぞ