Skip to content

エンジン / RCS

Flight中のactive vesselにあるKSP標準ModuleEngines / ModuleEnginesFXModuleRCS / ModuleRCSFXを自動検出します。専用パーツへの置き換えは不要です。

入出力Topic

方向Topic内容
入力/ksp_vessel/actuators/propulsion/commandpylon_interfaces/msg/EngineCommandidで指定するEngine指令
出力/ksp_vessel/actuators/propulsion/statepylon_interfaces/msg/EngineStateid付きEngine状態
入力/ksp_vessel/actuators/rcs/commandpylon_interfaces/msg/RcsCommandidで指定するRCS指令
出力/ksp_vessel/actuators/rcs/statepylon_interfaces/msg/RcsStateid付きRCS状態

フェイルセーフとKSP制約

メインスロットル、RCS 6軸、module固有throttleは既定0.5秒で0になります。連続噴射中はタイムアウトより短い周期で、lease内のsequenceを毎回増やしてpublishしてください。enabledだけの起動・停止にはthrottle timeoutを設定しません。

再点火不可、停止不可、燃料切れ、stage条件、throttleLockedなどKSP標準moduleの制約が優先されます。

型付きEngine Topic

Engine IDはengine_<persistentId>_<moduleIndex>です。commandはReliable、stateはBest Effortで、どちらもdepth 10です。

EngineCommand field単位内容
header現行bridgeでは指令変換に使用しない
vessel_id / controller_id / lease_id取得済みauthority identity
sequence同じlease内で単調増加する番号
id対象Engine ID
enabledEngineの起動状態
target_thrustN目標推力
timeout_secsoverride時間。0ならbridge既定値
bash
ros2 topic pub --once /ksp_vessel/actuators/propulsion/command \
  pylon_interfaces/msg/EngineCommand \
  "{vessel_id: <vessel-id>, controller_id: manual, lease_id: <lease-id>, sequence: 2, id: engine_12345_0, enabled: true, target_thrust: 50.0, timeout_sec: 0.5}"
EngineState field単位内容
headerbridge受信時刻、frame_id = base_link
idEngine ID
nameアクチュエータ名
enabled / operational / flameoutKSP module状態
throttle0.0..1.0現在スロットル
thrust / max_thrustN現在推力 / 最大推力
command_active型付きoverride保持中か

エンジンTVC(推力偏向)

型付き EngineCommand で、対象エンジンの標準 ModuleGimbal に個別入力を渡せます。ModuleEnginesFX も対象です。追加パーツは不要です。

TVC Command field内容
has_gimbal_commandtrue でTVCを制御。false(既定値)で以前のTVC overrideを解除
gimbal_pitchKSP pitch入力、−1〜1
gimbal_yawKSP yaw入力、−1〜1
gimbal_rollKSP roll入力、−1〜1

これらは偏向角(rad)やROSの回転ベクトルではなく、KSPの操舵入力です。対象ジンバルだけが反応し、リアクションホイール・RCS・舵面へこの入力を送ることはありません。標準ジンバルの可動範囲、limiter、応答速度、lock、pitch/yaw/rollの有効設定を尊重します。ロールの効き方はノズル配置に依存します。

取得済みleaseを指定した例です。target_thrust はNで、TVCと同じメッセージで送ります。

bash
ros2 topic pub --once /ksp_vessel/actuators/propulsion/command \
  pylon_interfaces/msg/EngineCommand \
  "{vessel_id: <vessel-id>, controller_id: manual, lease_id: <lease-id>, sequence: 3, id: engine_12345_0, enabled: true, target_thrust: 50000.0, has_gimbal_command: true, gimbal_pitch: 0.2, gimbal_yaw: -0.1, gimbal_roll: 0.0, timeout_sec: 0.5}"

継続制御はtimeoutより短い周期で送信し、送るたびに sequence を増やしてください。同じsequenceの繰り返しは受理されません。非有限値や−1〜1の範囲外は拒否します。timeout、lease喪失、緊急停止、機体切替時は偏向を中立へ戻し、標準ジンバル制御へ復帰します。

TVC State field内容
gimbal_available対象エンジンのノズルに対応する標準ジンバルがある
gimbal_command_active対応するジンバルにTVC overrideがある
gimbal_pitch / gimbal_yaw / gimbal_rollジンバルへ渡した指令入力。実測偏向角ではない。overrideなしは0

TVC非対応エンジンは推力制御のみ動作し、gimbal_available はfalseです。複数のエンジンモードが同じジンバルを共有する場合、現在有効な指令のうち最大sequenceのTVC入力が優先され、stateは共有ハードウェアの指令を返します。Body Wrenchの自動配分はTVC角を最適化しません。TVCはこの個別Engine APIで指定してください。

型付きRCS Topic

RCS IDはrcs_<persistentId>_<moduleIndex>です。QoSはEngineと同じです。

RcsCommand field単位内容
header現行bridgeでは指令変換に使用しない
vessel_id / controller_id / lease_id取得済みauthority identity
sequence同じlease内で単調増加する番号
id対象RCS ID
enabledRCS moduleの有効状態
thrust_limitNmoduleの推力上限
timeout_secsoverride時間。0ならbridge既定値
bash
ros2 topic pub --once /ksp_vessel/actuators/rcs/command \
  pylon_interfaces/msg/RcsCommand \
  "{vessel_id: <vessel-id>, controller_id: manual, lease_id: <lease-id>, sequence: 2, id: rcs_12345_1, enabled: true, thrust_limit: 2.0, timeout_sec: 0.5}"
RcsState field単位内容
headerbridge受信時刻、frame_id = base_link
idRCS ID
nameアクチュエータ名
enabled / active / flameoutKSP module状態
thrust / max_thrust / thrust_limitN現在推力、最大推力、現在上限
command_active型付きoverride保持中か

例のidentityは、先に機体制御APIで取得したleaseへ置き換えてください。型付きcommandはownerだけが使用でき、対象moduleについてBody Wrench配分より優先されます。timeoutまたはactive vessel切替時はoverrideを解除し、元のEngine independent throttleまたはRCS設定へ戻します。

PyLoNを使ったROS2アプリケーション開発のためのガイドとAPIリファレンス