🐉

Steadywin-GIM8108-8を回す odrivetool編

2024/07/11に公開

概要

Nexis-Rというチームでロボカップレスキュー実機リーグに参加している者です。
大陸からSteadywin-GIM8108-8が届いたので、odrivetoolを使って回してみたのでその動作方法を紹介します。
https://x.com/robohase01/status/1811337428210536507
購入先
https://ja.aliexpress.com/item/1005007045730032.html?spm=a2g0o.order_list.order_list_main.5.3ee5585aahVTf3&gatewayAdapt=glo2jpn
公式サイト商品ページ
http://steadywin.cn/pd.jsp?id=134&fromColId=0#_pp=0_629_3
中国語版の电机使用帮助 -> GIM8108-8使用说明手册_rev1.3のところに技術的な説明書が書いてあります。

動作環境と用意したもの

  • Steadywin-GIM8108-8
  • Ubuntu 22.04
  • 電源装置 (SPS-3010 0-30V 0-10A)
  • USBケーブル (type A to C)

Odrivetoolインストール

sudo apt update
sudo apt upgrade
sudo apt install python3 python3-pip 
sudo pip3 install --upgrade odrive
echo "PATH=$PATH:~/.local/bin/" >> ~/.bashrc 

インストールが終わったら下記のように表示されれば、インストール成功

$ odrivetool
ODrive control utility v0.6.9.post0
Website: https://odriverobotics.com/
Docs: https://docs.odriverobotics.com/
Forums: https://discourse.odriverobotics.com/
Discord: https://discord.gg/k3ZZ3mS
Github: https://github.com/odriverobotics/ODrive/

Please connect your ODrive.
You can also type help() or quit().

試しに接続できて動いているか確認。以下のコマンドを実行すると入力電圧が表示される。

odrv0.vbus_voltage
In [0]: odrv0.vbus_voltage
   ...: 
Out[0]: 28.05198097229004

モータの設定

GIM8108-8使用说明手册_rev1.3とスペックシートを見ながら設定を行います。

設定項目

# モータ電流の制限値の設定 [A]
odrv0.axis0.motor.config.current_lim = 25

# 速度リミットの設定 [turn/s]
odrv0.axis0.controller.config.vel_limit = 30

# 上記の設定を有効にする
odrv0.axis0.controller.config.enable_torque_mode_vel_limit = 1

# キャリブレーション時の電流の上限値を設定 [A] (デフォルトで5A)
odrv0.axis0.motor.config.calibration_current = 2

# 放電電流の最大値の下限と上限の設定 [A] (今回は値を変更せずに確認のみ行う)
odrv0.config.dc_max_negative_current
odrv0.config.dc_max_positive_current

# モータ極ペア値の設定 (GIM8108-8のデータシートのNumber of Pole Pairsより21を使う)
odrv0.axis0.motor.config.pole_pairs = 21

# トルク定数(GIM8108-8のデータシートのTorque Constantより1.00を使う)
odrv0.axis0.motor.config.torque_constant = 1

# モータの温度保護設定の有効
odrv0.axis0.motor.motor_thermistor.config.enabled = 1
# モータの温度保護の下限値の設定 [℃]
odrv0.axis0.motor.motor_thermistor.config.temp_limit_lower = 20
# モータの温度保護の上限値の設定 [℃]
odrv0.axis0.motor.motor_thermistor.config.temp_limit_upper = 100

# モータ制御基板の温度保護設定の有効
odrv0.axis0.motor.fet_thermistor.config.enabled = 1
# モータ制御基板の温度保護設定の下限値の設定 [℃]
odrv0.axis0.motor.fet_thermistor.config.temp_limit_lower = 20
# モータ制御基板の温度保護設定の上限値の設定 [℃]
odrv0.axis0.motor.fet_thermistor.config.temp_limit_upper = 100

# モータの温度を取得する(今回は確認のみ)
odrv0.axis0.motor.motor_thermistor.temperature

# モータ制御基板の温度を取得する(今回は確認のみ)
odrv0.axis0.motor.fet_thermistor.temperature

# モータの制御のPIDゲイン設定(今回はマニュアルに記載されている数値を参照)
odrv0.axis0.controller.config.pos_gain=20.0
odrv0.axis0.controller.config.vel_gain=0.16
odrv0.axis0.controller.config.vel_integrator_gain=0.32

# モータのキャリブレーション (モータのキャリブレーション時にモータからビープ音がなり、一定の電流が流れる。)
odrv0.axis0.requested_state = AXIS_STATE_MOTOR_CALIBRATION
# キャリブレーション後にエラーが出ていないか確認をする
dump_errors(odrv0)
# モータのキャリブレーションデータの保存
odrv0.axis0.motor.config.pre_calibrated = 1

# エンコーダのキャリブレーション(エンコーダのキャリブレーション時にゆっくりとモータが正転・逆転動作をする。)
odrv0.axis0.requested_state = AXIS_STATE_ENCODER_OFFSET_CALIBRATION
# キャリブレーション後にエラーが出ていないか確認をする
dump_errors(odrv0)
# キャリブレーションデータの保存
odrv0.axis0.encoder.config.pre_calibrated = 1

# これまでキャリブレーションデータをモータ側に保存する
odrv0.save_configuration()

モータを回す(速度制御)

# 制御モードの設定 (0:電圧制御 1:トルク制御 2:速度制御 3:位置制御)
odrv0.axis0.controller.config.control_mode = 2
# 制御値の入力モード設定 (0:アイドル 1:ダイレクトコントロール 2:スピードランプ 3:ポジションフィルタリング 5:台形速度曲線制御 6:トルクランプ 9:MITコントロール)
odrv0.axis0.controller.config.input_mode = 1

# 制御ループを開始する
odrv0.axis0.requested_state=odrive.utils.AxisState.CLOSED_LOOP_CONTROL

# 速度指令値の入力を送る [turn/s]
odrv0.axis0.controller.input_vel = 10

# 制御ループをやめる
odrv0.axis0.requested_state = 1

番外編

# CANのIDの確認
odrv0.axis0.config.can.node_id

参考

http://steadywin.cn/pd.jsp?id=134&fromColId=0#_pp=0_629_3
https://note.com/kenjiishida/n/n95e1f4f2c2f0
https://qiita.com/MMM-lab/items/75073038918066600714
https://docs.odriverobotics.com/v/0.5.6/fibre_types/com_odriverobotics_ODrive.html#ODrive.Motor.Config.current_lim

Nexis-R

Discussion