はじめに
Pythonを使って、FEETECH社シリアルサーボ,SMSシリーズ,SCSシリーズ用インターフェースボード FE-URT-1 からSTS3032サーボを動かしてみた。
環境
- FEETECHサーボ用インターフェイスボード FE-URT-1
- FEETECHサーボ STS3032
- RaspberryPi5
STS3032動作モード
STS3032は、FEETECH社が製造する360度回転可能なシリアルバスサーボモーターで、以下4つの動作が可能である。以下4種類の動作をPC(Windows11)およびRaspberryPiから動かしてみる。
モード | 内容 | 説明 |
---|---|---|
0 | サーボモード | 360°の範囲で位置制御が可能 位置は0~4095の値で指定 |
1 | 連続回転・速度制御モード | 回転速度を指定して制御 速度は10~9999の値で設定(負の値で逆回転) |
2 | 連続回転・トルク制御モード | トルクを指定して制御 Time値を50~1000で設定(負の値で逆回転) |
3 | ステップモード | 指定した回転量だけ回転 最大±30719ステップ(約7.5回転)まで設定可能 |
FE-URT-1によるSTS3032動作確認(PC編 Windows11)
PC --[USB]--> FE-URT-1 --[Serial]--> STS3032
■ 接続確認
-
STEP1.FE-URT-1 マニュアルに従ってPC->FE-URT-1->STS3032を接続する
-
STEP2.FD.exe起動後、Com/BaudRをマニュアルに従って設定し「Open」をクリックして通信を確立する
-
STEP3.「Search」をクリックし接続されたサーボを検索する
■ 動作確認
-
Operation Mode 0
Mode=0では[Goal Position(Address=42)]で角度を指定している
-
Operation Mode 1
Mode=1では[Goal Velocity(Address=46)]で速度を指定している
-
Operation Mode 2
-
Operation Mode 3
- STEP1.Programmingを表示し、WorkMode=3、Min Position Limit/Max Position Limit=0にする
- STEP2.Debugに戻り「Goal」に目標量「Speed」に速度を設定し、Setを押下する
Mode=3では[Goal Position(Address=42)]で目標移動量、[Goal Velocity(Address=46)]で速度を指定している
FE-URT-1によるSTS3032動作確認(RaspberryPi編)
RaspberryPi --[USB]--> FE-URT-1 --[Serial]--> STS3032
■ 接続確認
STEP1.FE-URT-1 を Raspberry Pi の USB ポートに接続
STEP2.ログメッセージ確認->「attached to ttyUSB0」と出ているためOK
~ $ dmesg | grep ttyUSB*
usb 1-2: ch341-uart converter now attached to ttyUSB0
STEP3.デバイスファイルの確認
~ $ ls /dev/ttyUSB*
/dev/ttyUSB0
STEP4.通信テスト
~ $ minicom -b 115200 -D /dev/ttyUSB0
minicom へようこそ 2.8
オプション: I18n
ポート /dev/ttyUSB0, 07:11:23
CTRL-A Z を押すと、説明画面になります。
※Ctrl+A -> X で終了
~ $ git clone https://github.com/AkariGroup/feetech_setup.git
~ $ python -m venv --system-site-packages .feetech
~ $ source .feetech/bin/activate
(.feetech) ~ $ python feetech_setup/search_ping.py -p /dev/ttyUSB0
シリアルポートを開きました。
シリアルポートをbaudrate: 1000000 にセットしました。feetechサーボを探索します。
------------------------------------------------------------
Feetechサーボが見つかりました。Baudrate: 1000000, ID:001, モデル名:521
------------------------------------------------------------
シリアルポートをbaudrate: 500000 にセットしました。feetechサーボを探索します。
シリアルポートをbaudrate: 250000 にセットしました。feetechサーボを探索します。
シリアルポートをbaudrate: 128000 にセットしました。feetechサーボを探索します。
シリアルポートをbaudrate: 115200 にセットしました。feetechサーボを探索します。
シリアルポートがbaudrate: 76800に対応していません。スキップします。
シリアルポートをbaudrate: 57600 にセットしました。feetechサーボを探索します。
シリアルポートをbaudrate: 38400 にセットしました。feetechサーボを探索します。
スキャンが完了しました。
■ 動作確認
(.feetech) ~ $ pip install feetech-servo-sdk
(.feetech) ~ $ python feetech_setup/move_test.py -p /dev/ttyUSB0
シリアルポートを開きました。
シリアルポートをbaudrate: 1000000 にセットしました。feetechサーボを探索します。
baudrate: 1000000 にfeetechサーボID: 1を発見しました。
ENTERキーを入力すると、サーボID1が2048に動きます。
ENTERキーを入力をすると、サーボID1が少し動きます。正しいサーボが動くか確認してください。
ENTERキーを入力をするとサーボOFFします。
id:1 サーボOFFしました。
------------------------
テスト完了!
------------------------
move_test.pyのmain()内で--portオプションがPortHandlerへ渡せていないため、以下の通りコード修正が必要
- portHandler = PortHandler(DEVICENAME)
+ portHandler = PortHandler(args.port)
- Operation Mode 0/1/2/3
Github
参考
ドキュメント
サイト