Skip to content

triorb_drive_pico

パス: triorb_drive/triorb_drive_pico
説明: ROS2メッセージを用いてモーター制御ECUと通信するためのパッケージ

triorb_drive_pico

ROS2メッセージを用いてモーター制御ECUと通信するためのパッケージ

Subscriber

励磁オン

  • Topic: (prefix)/drive/wakeup
  • Type: std_msgs/msg/Empty
  • Usage:
root@orin-nx-XXX:~/$ ros2 topic pub -1 /drive/wakeup std_msgs/msg/Empty 

励磁オフ

  • Topic: (prefix)/drive/sleep
  • Type: std_msgs/msg/Empty
root@orin-nx-XXX:~/$ ros2 topic pub -1 /drive/sleep std_msgs/msg/Empty

速度ベクトル指示による移動

  • Topic: (prefix)/drive/run_vel
  • Type: triorb_drive_interface/msg/TriorbRunVel3
  • Note: 前回適用された指示と比較して, 以下の条件を両方満たす場合はスキップする.
    • 0.2秒以下の間隔
    • 速度指示値velocityのx,y,wの差が0.001以下

移動距離指示による相対移動

  • Topic: (prefix)/drive/run_pos
  • Type: triorb_drive_interface/msg/TriorbRunPos3

モータードライバの設定変更

  • Topic: (prefix)/set/motor/params
  • Type: triorb_drive_interface/msg/MotorParams
  • Note: 全ての値を0にすると, 出荷時の設定を書き込む.

移動停止

  • Topic: (prefix)/drive/stop
  • Type: std_msgs/msg/Empty
  • Usage:
root@orin-nx-XXX:~/$ ros2 topic pub -1 /drive/stop std_msgs/msg/Empty

トルク設定変更

  • Topic: (prefix)/set/motor/torque
  • Type: std_msgs/msg/Float32
  • Usage:
root@orin-nx-XXX:~/$ ros2 topic pub -1 /set/motor/torque std_msgs/msg/Float32 "data: 100.0" # 10%

ライフタイムの設定

  • Topic: (prefix)/drive/set_life_time
  • Type: std_msgs/msg/UInt16
  • Note: ライフタイム[ms]を設定する. 速度ベクトル指示後, ロボットはライフタイム経過後にエラー扱いで停止する. この時間は速度ベクトル指示の度に0からカウントされる. 0を設定すると無効になる.
  • Usage:
root@orin-nx-XXX:~/$ ros2 topic pub -1 /drive/set_life_time std_msgs/msg/UInt16 "data: 1000" # 1000ms

運転モード

  • Topic: (prefix)/mutex/set_drive_mode
  • Type: std_msgs/msg/UInt8
  • Note: 速度ベクトル指示での制御を変更する.
  • 16: 速度制御. モーターは加速時間にしたがって加速し, 減速時間にしたがって減速する. 指示の与え方によっては意図しない回転成分が入るため非推奨.
  • 17: 押し当て制御. 負荷に押し当たった場合に加圧を続ける. トルクは100%に制限される.
  • 19: サイクリック制御(デフォルト). 他の制御方式と比較して, 意図しない回転成分が入りにくい.
  • Usage:
root@orin-nx-XXX:~/$ ros2 topic pub -1 /mutex/set_drive_mode std_msgs/msg/UInt8 "data: 16"

リフトアップ/リフトダウン

  • Topic: (prefix)/drive/run_lifter
  • Type: std_msgs/msg/String
  • Note: リフター付きモデル限定.
  • Usage:
root@orin-nx-XXX:~/$ ros2 topic pub -1 /drive/run_lifter std_msgs/msg/String "data: up"

Publisher

ロボットステータスの定期送信

  • Topic: (prefix)/robot/status
  • Type: triorb_static_interface/msg/RobotStatus
  • Note: 1.5秒間隔で送信される.
  • Note: Accepting move instruction, Generating mapフラグおよびvoltageは未実装
triorb@orin-nx-XXX:~/$ ros2 topic echo --once /robot/status 
header: 
  stamp: 
    sec: 1717491443 
    nanosec: 313522765 
  frame_id: robot 
voltage: 0.0 
btns: 0 
state: 53248 
error: 0

オドメトリの定期送信

  • Topic: (prefix)/triorb/odom
  • Type: geometry_msgs/msg/Vector3Stamped
  • Note: 0.2秒間隔で送信される.

バージョン情報の定期送信

  • Topic: (prefix)/triorb/version/drive
  • Topic: (prefix)/triorb/version/pico
  • Topic: (prefix)/triorb/version/core
  • Type: std_msgs/msg/String
  • Note: 10秒間隔で送信される.

現在の指令モードの定期送信

  • Topic: (prefix)/drive/mode
  • Type: std_msgs/msg/String
  • Value:
    • "idle": 停止中
    • "run_vel": 速度ベクトル指示による移動中
    • "run_pos": 移動距離指示による相対移動中
    • "lift": リフター動作中
  • Note: 1.5秒間隔で送信される.
  • Node: [注意] モーターライフタイムタイムアウト時は"idle"に戻らない

Service

速度ベクトル指示による移動(速度到達確認あり)

  • Topic: (prefix)/srv/drive/run_vel
  • Type: triorb_drive_interface/srv/TriorbRunVel3
  • Usage:
triorb@orin-nx-XXX:~/$ ros2 service call /get/motor/status triorb_drive_interface/srv/MotorStatus  
requester: making request: triorb_drive_interface.srv.MotorStatus_Request(request=std_msgs.msg.Empty()) 

response: 
triorb_drive_interface.srv.MotorStatus_Response(result=triorb_drive_interface.msg.MotorStatus(header=std_msgs.msg.Header(stamp=builtin_interfaces.msg.Time(sec=1709711017, nanosec=956667335), frame_id='serial'), last_error_value=0, last_error_motor=255, voltage=0.0, state=0, power=0.0)) 

移動距離指示による相対移動(移動完了確認あり)

  • Topic: (prefix)/srv/drive/run_pos
  • Type: triorb_drive_interface/srv/TriorbRunPos3
  • Usage:
triorb@orin-nx-XXX:~/$ ros2 service call /srv/drive/run_pos \
triorb_drive_interface/srv/TriorbRunPos3 "{request: {speed: {acc: 500, dec: 500, xy: 0.1, w: 0.0}, position: {x: 0.0, y: 1.0, deg: 0.0} }  }" 
## コマンド以上 

waiting for service to become available... 
requester: making request: 
triorb_drive_interface.srv.TriorbRunPos3_Request(request=triorb_drive_interface.msg.TriorbRunPos3(speed=triorb_drive_interface.msg.TriorbSpeed(acc=500, dec=500, xy=0.1, w=0.0), position=triorb_drive_interface.msg.TriorbPos3(x=0.0, y=1.0, deg=0.0))) 

response: 
triorb_drive_interface.srv.TriorbRunPos3_Response(header=std_msgs.msg.Header(stamp=builtin_interfaces.msg.Time(sec=1717490931, nanosec=365277011), frame_id='serial'), result=2) 

モーターステータス取得

  • Topic:(prefix)/get/motor/status
  • Type: triorb_drive_interface/srv/MotorStatus
  • Usage:
triorb@orin-nx-XXX:~/$ ros2 service call /get/motor/status triorb_drive_interface/srv/MotorStatus 
requester: making request: triorb_drive_interface.srv.MotorStatus_Request(request=std_msgs.msg.Empty())

response:
triorb_drive_interface.srv.MotorStatus_Response(result=triorb_drive_interface.msg.MotorStatus(header=std_msgs.msg.Header(stamp=builtin_interfaces.msg.Time(sec=1709711017, nanosec=956667335), frame_id='serial'), last_error_value=0, last_error_motor=255, voltage=0.0, state=0, power=0.0))

エラー履歴の取得

  • Topic:(prefix)/get/error/history
  • Type: triorb_static_interface/srv/ErrorList
  • Note: Responseに表示されるstampはpicoが起動してから経過した時間を表しており, Jetson内のタイムスタンプとは関係がない.
  • Usage:
triorb@orin-nx-XXX:~/$ ros2 service call /get/error/history triorb_static_interface/srv/ErrorList
waiting for service to become available...
requester: making request: triorb_static_interface.srv.ErrorList_Request(request=std_msgs.msg.Empty())

response:
triorb_static_interface.srv.ErrorList_Response(errors=[triorb_static_interface.msg.RobotError(header=std_msgs.msg.Header(stamp=builtin_interfaces.msg.Time(sec=0, nanosec=0), frame_id='pico_error0'), error=0), triorb_static_interface.msg.RobotError(header=std_msgs.msg.Header(stamp=builtin_interfaces.msg.Time(sec=0, nanosec=0), frame_id='pico_error1'), error=0), triorb_static_interface.msg.RobotError(header=std_msgs.msg.Header(stamp=builtin_interfaces.msg.Time(sec=0, nanosec=0), frame_id='pico_error2'), error=0), triorb_static_interface.msg.RobotError(header=std_msgs.msg.Header(stamp=builtin_interfaces.msg.Time(sec=0, nanosec=0), frame_id='pico_error3'), error=0), triorb_static_interface.msg.RobotError(header=std_msgs.msg.Header(stamp=builtin_interfaces.msg.Time(sec=0, nanosec=0), frame_id='pico_error4'), error=0)])

励磁オン

  • Topic: (prefix)/srv/drive/wakeup
  • Type: std_srvs/srv/Empty
  • Usage:
root@orin-nx-XXX:~/$ ros2 service call /srv/drive/wakeup std_srvs/srv/Empty

励磁オフ

  • Topic: (prefix)/srv/drive/sleep
  • Type: std_srvs/srv/Empty
  • Usage:
root@orin-nx-XXX:~/$ ros2 service call /srv/drive/sleep std_srvs/srv/Empty