137 lines
6.5 KiB
YAML
137 lines
6.5 KiB
YAML
g20_thumb_calibration:
|
|
ros__parameters:
|
|
command_topic: /g20/cb_left_hand_control_cmd
|
|
state_topic: /g20/cb_left_hand_state
|
|
info_topic: /g20/cb_left_hand_info
|
|
camera_info_topic: /camera/camera/color/camera_info
|
|
image_topic: /camera/camera/color/image_rect
|
|
detections_topic: /apriltag/detections
|
|
tf_topic: /tf
|
|
# Use PnP translations as 3-D Tag centres and fit the directly observable
|
|
# root/MCP circles. The passive IP output follows the G20 URDF mimic
|
|
# relation below; its small residual T5 circle is diagnostic only. PnP
|
|
# orientations remain auxiliary quality checks. Command 255 is zero.
|
|
angle_estimation_mode: trajectory_center_3d
|
|
passive_ip_multiplier: 1.02
|
|
publish_debug_image: false
|
|
debug_max_rate_hz: 10.0
|
|
debug_scale: 0.5
|
|
|
|
# Default: send one end-to-end command per direction and pair every valid
|
|
# AprilTag frame with the timestamp-interpolated actual G20 state.
|
|
scan_mode: continuous
|
|
continuous_motion_mode: endpoint
|
|
repetitions: 1
|
|
# Used only by point-mode fallback and validation approach offsets.
|
|
command_step: 8
|
|
auto_start_tip: true
|
|
maximum_state_image_skew_ms: 150.0
|
|
continuous_endpoint_tolerance_u8: 2.0
|
|
continuous_endpoint_hold_seconds: 1.0
|
|
continuous_timeout_seconds: 90.0
|
|
continuous_invalid_timeout_seconds: 3.0
|
|
continuous_minimum_valid_frames: 40
|
|
continuous_minimum_state_span_u8: 240.0
|
|
continuous_minimum_bins: 32
|
|
continuous_maximum_bin_gap: 16
|
|
# Keep the responsive firmware speed, but pace it through the same
|
|
# 8-unit grid without waiting for static image captures at each point.
|
|
continuous_segment_minimum_seconds: 0.1
|
|
continuous_segment_timeout_seconds: 5.0
|
|
continuous_prepare_timeout_seconds: 30.0
|
|
preflight_frames: 150
|
|
minimum_detection_rate: 0.95
|
|
minimum_detection_hz: 15.0
|
|
maximum_hamming: 0
|
|
minimum_decision_margin: 30.0
|
|
# Trial threshold for small/far tags (historically observed at 32-38 px).
|
|
# Final acceptance is still guarded by static RMS and random validation.
|
|
minimum_edge_pixels: 30.0
|
|
# Current 30 px tags measure about 0.50-0.53 deg RMS while stationary.
|
|
# Keep a small practical margin here; final random validation stays at
|
|
# MAE <= 2 deg and P95 <= 3 deg.
|
|
# Match the preflight noise gate to the 3 deg robust capture gate below.
|
|
# The final calibration is still accepted only by the independent
|
|
# validation MAE/P95 limits, not by this readiness check.
|
|
maximum_static_std_deg: 3.0
|
|
pose_outlier_threshold_deg: 5.0
|
|
minimum_pose_inlier_rate: 0.90
|
|
pnp_minimum_valid_rate: 0.95
|
|
# 30-38 px tags are usable, but only if IPPE gives a tight image fit and
|
|
# a pose continuous with the preceding frame.
|
|
pnp_maximum_reprojection_error_px: 1.5
|
|
# All four tags keep a temporally continuous IPPE solution throughout the
|
|
# complete session. With 30 px planar tags, tiny reprojection differences
|
|
# do not reliably identify the physical branch and previously caused
|
|
# stationary T0 to flip by about 25 deg between scan and validation.
|
|
pnp_reprojection_tie_px: 1.5
|
|
pnp_maximum_pose_jump_deg: 35.0
|
|
pnp_maximum_translation_jump_m: 0.04
|
|
pnp_maximum_tag_tilt_deg: 75.0
|
|
# Preserve the branch through short detector gaps. A continuous sweep
|
|
# already pauses after 3 s without valid synchronised observations.
|
|
pnp_tracker_reset_seconds: 5.0
|
|
# Select all four IPPE branches as one kinematic chain. This prevents T4
|
|
# and T5 from independently changing mirror branches at the turnaround or
|
|
# during validation while still allowing real joint motion frame-to-frame.
|
|
pnp_group_relative_rotation_scale_deg: 5.0
|
|
pnp_group_relative_translation_scale_m: 0.01
|
|
# Reprojection remains a tie-breaker; temporal joint-chain continuity is
|
|
# deliberately dominant for the current 30-38 px planar tags.
|
|
pnp_group_reprojection_weight: 0.05
|
|
# Whole-sweep branch review. During a root sweep T3/T4/T5 should retain
|
|
# rigid relative poses; during a tip sweep T0/T3 should remain fixed.
|
|
pnp_trajectory_reprojection_scale_px: 0.1
|
|
pnp_rigid_rotation_scale_deg: 5.0
|
|
pnp_rigid_translation_scale_m: 0.01
|
|
# Judge the complete rigid trajectory against a robust sweep reference.
|
|
# Reject persistent drift at P95; keep a looser hard maximum so one noisy
|
|
# 30 px endpoint frame does not discard an otherwise sound sweep.
|
|
pnp_rigid_p95_accepted_drift_deg: 8.0
|
|
pnp_rigid_maximum_accepted_drift_deg: 15.0
|
|
# Centre-trajectory mode judges branch consistency by the Euclidean
|
|
# distance between rigid Tag centres. This is deliberately independent
|
|
# of the noisy planar-Tag orientation returned by PnP.
|
|
pnp_rigid_p95_accepted_distance_drift_m: 0.003
|
|
pnp_rigid_maximum_accepted_distance_drift_m: 0.006
|
|
|
|
# Three-dimensional centre-trajectory geometry gates. T0 stays on the
|
|
# palm as the translation anchor; T3/T4/T5 are the moving thumb points.
|
|
trajectory_maximum_plane_rms_m: 0.004
|
|
trajectory_maximum_radial_rms_m: 0.004
|
|
trajectory_minimum_radius_m: 0.005
|
|
trajectory_minimum_arc_deg: 15.0
|
|
trajectory_maximum_root_role_disagreement_deg: 5.0
|
|
trajectory_maximum_anchor_drift_m: 0.005
|
|
trajectory_static_translation_outlier_m: 0.005
|
|
trajectory_maximum_static_translation_rms_m: 0.002
|
|
|
|
# Static captures are now used only for sweep preparation and validation.
|
|
stable_frames: 5
|
|
capture_frames: 8
|
|
minimum_settle_seconds: 0.4
|
|
# This only confirms that the hand has stopped before an 8-frame robust
|
|
# median capture. The passive T4->T5 pair currently has about 2.3 deg
|
|
# peak spread over five 30 px PnP frames, while its two IPPE branches are
|
|
# separated by about 5.5 deg. A 3 deg gate accepts measurement jitter but
|
|
# still rejects a branch change. Final MAE/P95 limits remain unchanged.
|
|
maximum_stable_spread_deg: 3.0
|
|
# In centre mode the stationary capture gate is expressed in metres.
|
|
maximum_stable_translation_spread_m: 0.003
|
|
settle_timeout_seconds: 10.0
|
|
capture_timeout_seconds: 10.0
|
|
|
|
validation_command_count: 5
|
|
# The backlash approach point only waits for feedback to reach the target;
|
|
# it no longer performs an unnecessary image capture.
|
|
validation_approach_minimum_seconds: 0.2
|
|
validation_approach_timeout_seconds: 10.0
|
|
validation_position_tolerance_u8: 2.0
|
|
validation_seed: 20260727
|
|
maximum_validation_mae_deg: 2.0
|
|
maximum_validation_p95_deg: 3.0
|
|
maximum_coupling_drift_deg: 2.0
|
|
minimum_ip_coupling_r_squared: 0.98
|
|
maximum_monotonic_correction_deg: 2.0
|
|
maximum_hysteresis_deg: 5.0
|