ProjectSalamander
salamander RobStride 4 軸の原点 (SetZero) 姿勢
base_yaw / shoulder_pitch / beam_pitch / wrist_yaw をどの物理姿勢で set_zero するか。URDF の 0 定義、adapter の invert / position_offset との関係、手順
要点: SetZero は「その姿勢でモータ角 = 0」を flash に書く。adapter が position_offset を足して関節値にするので、関節値 = URDF 角になる姿勢を選ぶ。機械ストッパで再現できる姿勢を使い、URDF 0 とのずれは position_offset で吸収するのが精度が出る。
関節ごとの原点姿勢 (2026-09-11 時点の設定)
| 関節 (CAN ID) | URDF 0 の定義 | SetZero する物理姿勢 | adapter 設定 | その姿勢で読める関節値 |
|---|---|---|---|---|
| base_yaw (1) | 正面 (home) | 試合開始 = rest 姿勢 (正面から +Z 側へ 90°) | position_offset: +π/2 | +π/2 (= rest.base_yaw) |
| shoulder_pitch (2) | crank 鉛直 | crank 鉛直 (現状、目視) | offset なし | 0 |
| beam_pitch (3) | beam 水平 = 上げ切りストッパ | 上げ切り (機械ストッパ) | invert: true | 0 |
| wrist_yaw (4) | パッド軸が横向き (base_yaw 0 で Y 方向) | パッド横向き | offset なし | 0 |
wrist_pitch / pad_stroke は M2006 で壁探し calib (mech_calibration) なので SetZero は不要。
注意
- base_yaw:
position_offset +π/2があるので SetZero 姿勢は「正面」ではなく rest 側 90°。正面 (home=0) は SetZero 姿勢から -Z 回りに 90°。rest が反対側 (正面から -Z 側) にある機体ならposition_offsetを -π/2 にする。 - shoulder: 鉛直は目視で 2〜3° ずれる (0.40 m 先で 15〜20 mm)。下げ切りストッパ (CAD -45°) で SetZero し
position_offset: -0.7853982を入れると再現性が出る。ストッパ角は実測して合わせる。 - beam: 上げ切りストッパで SetZero するのが正 (URDF 0)。下げ切り (rest +33.8°) で切ると全域 33.8° ずれる。
- RS05×3 / RS00×3 は起動時にモータ角 ±π を関節 ±π/3 で正規化するので、起動時姿勢は SetZero 姿勢の ±60° 以内に置く。
手順
# 1. adapter / launch を全部止める (同じ CAN を二重に開かない)
# 2. 各関節を上の姿勢に手で保持
ros2 launch fibril_robstride_adapter set_zero_all.launch.xml # 4 軸一括
ros2 launch fibril_robstride_adapter set_zero_all.launch.xml \
base_yaw:=false shoulder_pitch:=false wrist_yaw:=false # beam だけ
# 3. 4 軸とも "Set zero and save complete" → Ctrl-C → launch 再起動
ros2 topic echo /salamander/joint_states --once # 上表の値になっているか関連
- /docs/project/salamander/beam-shoulder-coupling
- docs/base_yaw_zero_calibration.md (リポジトリ内)
最終更新: