コンテンツにスキップ

core_body_controller

車体モータ制御パッケージです。/cmd_vel をオムニホイールのCAN指令に変換します。

概要

  • /cmd_vel(Twist)を受信し、4輪オムニホイールの逆運動学で各モータ指令に変換
  • レートリミッタで加速度制限を適用
  • 緊急停止機能
  • 車体回転制御(PID)

ノード

body_control_node

/cmd_vel をオムニホイールのCAN指令に変換するメインノードです。

target_angle_node

車体の回転角度を制御するノードです。IMUとエンコーダから姿勢を推定し、PID制御で目標角度に追従します。

  • 回転モード/rotationtrue): IMUベースのワールド座標系で目標角度を追従。マウス入力(cmd_vel.angular.z)で目標角度を更新
  • 非回転モード/rotationfalse): エンコーダベースで最寄りの90°角度に自動復帰

入力

body_control_node

トピック 説明
/cmd_vel geometry_msgs/Twist 速度指令(vx, vy, ω)
/system/emergency/hazard_status std_msgs/Bool 緊急停止フラグ

target_angle_node

トピック 説明
/rotation std_msgs/Bool 回転モード切替(プレイヤー操作)
cmd_vel geometry_msgs/Twist マウス入力からの角速度
imu sensor_msgs/Imu IMU角速度(ヨー推定用)
yaw_target_angle std_msgs/Float64 車体回転目標角度(外部指定)
body_omega std_msgs/Float64 現在の車体角速度
joint_states sensor_msgs/JointState エンコーダからの車体角度
/system/emergency/hazard_status std_msgs/Bool 緊急停止フラグ

出力

body_control_node

トピック 説明
/can/tx core_msgs/CANArray モータCAN指令
/body_omega std_msgs/Float64 現在の角速度

target_angle_node

トピック 説明
can/tx core_msgs/CANArray 回転モータCAN指令(ID=4)
rotation_flag std_msgs/Bool 現在の回転モード状態
target_omega std_msgs/Float64 目標角速度(デバッグ用)

パラメータ

パラメータ 説明
acceleration double 並進加速度制限
rotation_acceleration double 回転加速度制限
yaw_rotation_velocity double ヨー回転速度
auto_rotation_velocity double 自動回転速度

起動

ros2 launch core_body_controller body_controller.launch.py