Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
140 commits
Select commit Hold shift + click to select a range
34d5516
add target frequency member variable and setup input port to SonarFol…
Jscar-6 Jun 3, 2026
455ed8b
add target frequency filtering based on what already in sim
Jscar-6 Jun 4, 2026
aaf8782
fix spelling and add default tolerance of 500Hz and add ROS2 paramete…
Jscar-6 Jun 5, 2026
5eb186f
Add logic for echo/passing pinger to check for more than one switch i…
Jscar-6 Jun 5, 2026
bac344e
Split go_to_pinger into header/source and added frequency filter to s…
Jscar-6 Jun 16, 2026
cc1763c
Add HoneOverTarget down-cam XY centering node and HoneOverTable subtree
daviddgonzalez Jun 22, 2026
ca8e7a0
Document down-cam sim topic override for HoneOverTable
daviddgonzalez Jun 22, 2026
ea1d8eb
Rename HoneOverTarget centering node to CenterCamera
daviddgonzalez Jun 23, 2026
f6e949e
Add SelectTarget pure selection logic and unit tests
daviddgonzalez Jun 23, 2026
45ec47c
Generalize HoneOverTable subtree into reusable HoneOverTarget
daviddgonzalez Jun 23, 2026
1919810
Add role state to mission_planner Context
daviddgonzalez Jun 23, 2026
7e0503e
Add CenterCameraTest tuning harness mission
daviddgonzalez Jun 23, 2026
21fe6a0
Add OctagonTableMission surface-and-center stage
daviddgonzalez Jun 23, 2026
562e537
Add SelectTarget node, registration, and role param
daviddgonzalez Jun 23, 2026
fbd8e89
Update down-cam README to CenterCamera/HoneOverTarget naming
daviddgonzalez Jun 23, 2026
fcb1b6c
Add SelectTargetS3 subtree and register it
daviddgonzalez Jun 23, 2026
fbda46a
Avoid double-hyphen in mission XML comments for strict XML parsers
daviddgonzalez Jun 23, 2026
471b230
Declare ament_cmake_gtest test_depend and clarify exclude port
daviddgonzalez Jun 23, 2026
a498837
Merge gripper-task-5 into gripper-task-5-s3s4
daviddgonzalez Jun 23, 2026
8786340
Add timed frame saving w/ parameter for YOLO dataset
Jscar-6 Jun 24, 2026
77ad673
Add manual with burst frame capture to down-cam collection
Jscar-6 Jun 24, 2026
cf9939f
Ignore .vscode
Jscar-6 Jun 24, 2026
30f37c3
2026 octagon
wingdeans Jun 23, 2026
409f4a6
add octagon box/cylinder models
wingdeans Jun 23, 2026
e1bb424
Posiiton and place all elements on table
Jscar-6 Jun 24, 2026
664a30a
Add S4 approach & grasp design spec for Task 5
daviddgonzalez Jun 26, 2026
c003812
Port ActuateServo leaf onto gripper-task-5
daviddgonzalez Jun 26, 2026
3cc603b
Add ApproachAndGrasp subtree for Task 5 S4
daviddgonzalez Jun 26, 2026
99ac498
Add OctagonGraspMission harness for Task 5 S4
daviddgonzalez Jun 26, 2026
ad62d58
Make Task 5 props dynamic for grasping
daviddgonzalez Jun 26, 2026
d11e8fd
Add Servo gripper service to GripperControl sim plugin
daviddgonzalez Jun 26, 2026
2f60998
Add proximity attach/detach to GripperControl sim plugin
daviddgonzalez Jun 26, 2026
8df8c9b
Add pool test protocol design (S2+S3 staged poolside testing)
daviddgonzalez Jun 26, 2026
ac5a2e0
Address review: grasp config diagnostics and stale-entity guard in Gr…
daviddgonzalez Jun 26, 2026
b8540f6
Add S4 approach & grasp implementation plan
daviddgonzalez Jun 26, 2026
7acf51a
Add pool-test mission wrappers (hone-only, select-only, fused) and re…
daviddgonzalez Jun 27, 2026
671994d
Add pooltest.sh core harness (CLI, gates, countdown, bag/tee, dry-run)
daviddgonzalez Jun 27, 2026
ad70fe2
Implement pooltest.sh stages: preflight, calib, hone, select, combine…
daviddgonzalez Jun 27, 2026
899697a
Implement pooltest.sh Stage 5 dead-reckon constant measurement
daviddgonzalez Jun 27, 2026
35f17a2
Add pool_tests README: checklist, roles, required models, glossary
daviddgonzalez Jun 27, 2026
9d89f51
Address review: note full_s2 needs the table model; clarify README ru…
daviddgonzalez Jun 27, 2026
c06e737
Make ensure_role dry-run friendly so select/combined rehearse without…
daviddgonzalez Jun 27, 2026
f0bab6f
Address code review: protect bag recording on Ctrl-C, verify bag star…
daviddgonzalez Jun 27, 2026
8882732
Station-keep during SelectOnly, consistent single-stage exit, and rea…
daviddgonzalez Jun 28, 2026
d694eba
Add down-cam YOLO model (octagon_sim.pt)
Jscar-6 Jun 29, 2026
bac1d6d
Seed OctagonGraspMission with a real grab class (nut_cylinder), not t…
daviddgonzalez Jun 29, 2026
bde752f
Add S4 grasp confirmation by scale and grasp-target config
daviddgonzalez Jun 30, 2026
18ffca8
Sync main into gripper-task-5 and add nav-channel test ops
daviddgonzalez Jun 30, 2026
d335e6e
Merge remote-tracking branch 'origin/jack-task5-downcam-yolo' into gr…
daviddgonzalez Jun 30, 2026
9a52b21
Merge remote-tracking branch 'origin/main' into gripper-task-5
daviddgonzalez Jun 30, 2026
01cdefe
Align grasp_targets allowlist with real world prop names
daviddgonzalez Jun 30, 2026
1f78f8f
Add Task 5 sim testing guide for the unified gripper-task-5 branch
daviddgonzalez Jun 30, 2026
d345608
Add SelectFaceSymbol pure logic (role+count -> symbol) with gtest
daviddgonzalez Jun 30, 2026
c932b11
Task 1 review: trailing newline + all_symbols sync comment
daviddgonzalez Jun 30, 2026
550dd12
HoneBearing: optional multi-label 'labels' port for face-any honing
daviddgonzalez Jun 30, 2026
41933da
HoneBearing: explicit <vector> include
daviddgonzalez Jun 30, 2026
e5732b8
Add SelectFaceSymbol BT leaf (role+items -> target_symbol)
daviddgonzalez Jun 30, 2026
954f2d5
Add FaceOctagonImage subtree (face-correct with face-any fallback)
daviddgonzalez Jun 30, 2026
82ac6f9
Add OrientToOctagonImage S7 stage subtree (select -> face -> turns, s…
daviddgonzalez Jun 30, 2026
bffcdd5
Add OctagonFaceMission standalone S7 harness
daviddgonzalez Jun 30, 2026
7be8fef
Add marker_for_role helper + tests for S5 basket selection
daviddgonzalez Jul 1, 2026
395a27b
Clarify marker_for_role comments (caller supplies defaults, not the h…
daviddgonzalez Jul 1, 2026
13a7556
Add SelectBasket BT leaf (role -> basket marker) for S5
daviddgonzalez Jul 1, 2026
9a70b7e
Add TransportAndPlace (S5) BT subtree
daviddgonzalez Jul 1, 2026
ce57375
Add OctagonPlaceMission test mission for S5
daviddgonzalez Jul 1, 2026
8d920b5
Address S7 code review: HoneBearing wait semantics, single-source sym…
daviddgonzalez Jul 1, 2026
05bb066
Merge s7-orient-to-image into gripper-task-5: consolidate S7 stage
daviddgonzalez Jul 1, 2026
f3c6ba9
Merge remote-tracking branch 'origin/345-pinger-improvements' into gr…
daviddgonzalez Jul 2, 2026
53b45a6
Add spiral search-pattern geometry with unit tests
daviddgonzalez Jul 2, 2026
ef997b9
Add DescendUntilDetected BT node
daviddgonzalez Jul 2, 2026
9c0f74b
Add SearchForTarget spiral-search BT node
daviddgonzalez Jul 2, 2026
07a366d
Add OctagonRestoreMission: pinger-homed, calibration-free table acqui…
daviddgonzalez Jul 2, 2026
7a9004f
Fix OctagonRestoreMission: reachable search fallback + grasp knobs
daviddgonzalez Jul 2, 2026
514f489
Plumb score_level/do_pinger/role onto the mission blackboard for the …
daviddgonzalez Jul 2, 2026
414398b
Add CollectOneObject + CollectObjects (S6) octagon collection loop
daviddgonzalez Jul 2, 2026
0e64b4a
Add OctagonLoopMission standalone S6 harness
daviddgonzalez Jul 2, 2026
0e4946b
Add OctagonMission capstone: wire S1->S7 with score_level dial + do_p…
daviddgonzalez Jul 2, 2026
87d1474
pooltest: add loop (S6) and full (capstone) stages + document score_l…
daviddgonzalez Jul 2, 2026
42bb729
Refactor octagon acquisition to calibration-free (HomeOnOctagonPinger…
daviddgonzalez Jul 3, 2026
1bfe3b7
CenterCamera: tolerate detection flicker via miss_frames (MissGate)
daviddgonzalez Jul 5, 2026
1c59d53
pooltest: gate topic checks on aliveness, not rate (--probe-timeout)
daviddgonzalez Jul 5, 2026
454b2fc
setup.bash: make pub_wrench one-shot publishes zenoh-safe
daviddgonzalez Jul 5, 2026
515e527
Extend the detection frame gate to DescendUntilDetected, DetectTarget…
daviddgonzalez Jul 5, 2026
32db423
Add sim-time RosTimeout/RosDelay decorators; migrate missions off wal…
daviddgonzalez Jul 6, 2026
8c2e136
SearchForTarget: reuse detection_gate::contains_label for label matching
daviddgonzalez Jul 6, 2026
b6763b0
setup.bash: send the STOP wrench on every pub_wrench exit path
daviddgonzalez Jul 6, 2026
22d5e00
Expand sub9.urdf at build time instead of at launch
daviddgonzalez Jul 6, 2026
6b68e11
Reduce duplication across mission_planner BT nodes + launch
daviddgonzalez Jul 7, 2026
a7fa486
Fix down-cam node name collision and dropped-frame crash
daviddgonzalez Jul 7, 2026
b41bbac
front_cam: back off on repeated failed reads
daviddgonzalez Jul 7, 2026
ea4d12e
Add ray-cast target-projection geometry with unit tests
daviddgonzalez Jul 14, 2026
eef9b31
Add LockTargetXY world-frame centering node (stage 1)
daviddgonzalez Jul 14, 2026
683c920
Fix LockTargetXY down-cam basis: align cam_right/cam_down with Center…
daviddgonzalez Jul 14, 2026
cf056f7
LockTargetXY: world-frame (metres) success gate with settle guard
daviddgonzalez Jul 15, 2026
2fd2f86
LockTargetXY: correct down-cam basis from sim measurement (validated)
daviddgonzalez Jul 15, 2026
0c04466
Add LockGraspTest motion harness + richer LockTargetXY logging
daviddgonzalez Jul 15, 2026
caba321
pooltest: fix stop_bag hang that stranded finished runs
daviddgonzalez Jul 15, 2026
cebc0f7
sim: spawn sub over the octagon table, settle props onto it
daviddgonzalez Jul 15, 2026
1eb364b
sim control: damp the undamped sway and pitch axes
daviddgonzalez Jul 15, 2026
29e2cd0
LockTargetXY: hold level and fixed depth; add world-error integrator
daviddgonzalez Jul 15, 2026
9889e27
rviz: show the odom TF frame
daviddgonzalez Jul 15, 2026
884fa0e
Add task5_sim.launch.py one-command Task 5 sim bring-up
daviddgonzalez Jul 15, 2026
1285fb3
sim: give sub9 metacentric height so it self-levels
daviddgonzalez Jul 19, 2026
c0c9c14
pool_tests: add sim_bringup.py — settle before anchoring the EKF
daviddgonzalez Jul 20, 2026
22707b0
sim: raise metacentric height to 8 cm for approach-pitch stability
daviddgonzalez Jul 20, 2026
adf8b71
mission: relative move falls back to odom, not world origin
daviddgonzalez Jul 20, 2026
5820e7b
run_task: declarative task table, CLI skeleton, and --list
daviddgonzalez Jul 27, 2026
0ee7231
run_task: centralize exit codes, move role into the task table, test …
daviddgonzalez Jul 27, 2026
cece4f3
run_task: guard on the run_task executable, not the package prefix
daviddgonzalez Jul 27, 2026
c21b2ad
run_task: derive BT time budgets from declared timeouts, guard the table
daviddgonzalez Jul 27, 2026
504f5fb
run_task: parse mission console.log into outcome + stage table
daviddgonzalez Jul 27, 2026
556f254
run_task: unscope last_node from tree IDs, clear SKIPPED stages
daviddgonzalez Jul 27, 2026
883afb7
run_task: add innermost_node, the near end of the failure cascade
daviddgonzalez Jul 27, 2026
57c377a
run_task: core collector maths for timing, motion, and drift
daviddgonzalez Jul 27, 2026
9a52603
run_task: detection and model-pose probe summarisers
daviddgonzalez Jul 27, 2026
9780b81
run_task: task 5 ground-truth scorer with mesh-derived basket geometry
daviddgonzalez Jul 27, 2026
23cc923
run_task: terminal report, stats.json, and exit-code mapping
daviddgonzalez Jul 27, 2026
7483186
sim_bringup: settle until the sub is measurably still, not for N wall…
daviddgonzalez Jul 27, 2026
0b501a5
sim_bringup: count distinct odometry messages in the settle gate, not…
daviddgonzalez Jul 27, 2026
06a2d6a
sim_bringup tests: pin that a missing twist is never a still sample
daviddgonzalez Jul 27, 2026
c830a63
missions: center S2 with the world-frame lock, not the pixel hone
daviddgonzalez Jul 27, 2026
245846f
run_task: command planning, stale-stack detection, run dir naming
daviddgonzalez Jul 27, 2026
3bd15b2
run_task: live collection, monitoring, teardown, and CLI wiring
daviddgonzalez Jul 27, 2026
a0ab46f
run_task: gate the bring-up against a sim that starts paused
daviddgonzalez Jul 27, 2026
8de5fb5
run_task: stop the mission running blind, and stop the false placemen…
daviddgonzalez Jul 27, 2026
9f2b567
run_task: document the one-command sim run (calib acceptance run: RTF…
daviddgonzalez Jul 27, 2026
d24fa18
gitignore run_task run artifacts, as pooltest_runs already is
daviddgonzalez Jul 27, 2026
621e095
detection: rank table candidates by box area, not confidence
daviddgonzalez Jul 28, 2026
2569182
detection: pass select="largest" on the table tuning harnesses too
daviddgonzalez Jul 28, 2026
4933364
detection: add opt-in minimum-box-area filter to the detection gate
daviddgonzalez Jul 28, 2026
7784c9a
detection: pin SizeGate edge cases, clamp box dims, tighten comments
daviddgonzalez Jul 28, 2026
7e5956c
detection: name the sample the SizeGate floor was sized against
daviddgonzalez Jul 28, 2026
87e8126
detection: let the presence nodes reject implausibly small boxes
daviddgonzalez Jul 28, 2026
202632f
detection: apply the box-area floor to the centering nodes too
daviddgonzalez Jul 28, 2026
157b23b
detection: correct the fail-closed contract now that callers rely on it
daviddgonzalez Jul 28, 2026
9111ec3
detection: gate the down-cam table presence checks on box area
daviddgonzalez Jul 28, 2026
659df15
detection: say why LockTargetXY needs the area floor
daviddgonzalez Jul 28, 2026
ce3611c
detection: warn that a forgotten min_area_frac fails silently
daviddgonzalez Jul 28, 2026
398729f
detection: fix the '--' I put inside two XML comments
daviddgonzalez Jul 28, 2026
be4b946
detection: drop the S2 confidence floor to 0.20 while the model is bad
daviddgonzalez Jul 29, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -192,4 +192,10 @@ cython_debug/

bag_files
src/mil_common/perception/vision_stack/

# Poolside test run artifacts (bags, logs, forms)
pooltest_runs/
# run_task sim run artifacts (stats.json, logs, traces)
task_runs/
src/subjugator/mission_planner/logs/mission_debug.txt
.vscode/
567 changes: 567 additions & 0 deletions docs/superpowers/plans/2026-06-25-octagon-approach-grasp.md

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
{
"planPath": "docs/superpowers/plans/2026-06-25-octagon-approach-grasp.md",
"tasks": [
{
"id": 6,
"subject": "Task 1: ApproachAndGrasp subtree (XML)",
"status": "completed",
"description":
"**Goal:** A reusable grasp subtree that centers over target_label, descends, closes, lifts, and records grabbed_label.\n\n**Files:**\n- Create: src/subjugator/mission_planner/subjugator_missions/xml/approach_and_grasp.xml\n- Modify: src/subjugator/mission_planner/subjugator_missions/xml/sub9_missions.xml\n\n**Acceptance Criteria:**\n- ApproachAndGrasp subtree per spec (Precondition target_label!='' -> RetryUntilSuccessful -> center/open/descend/close/settle/lift -> SetBlackboard grabbed_label)\n- knobs supplied by caller; included in sub9_missions.xml; mission_planner builds\n\n**Verify:** source scripts/setup.bash && colcon build --packages-select mission_planner\n\n```json:metadata\n{\"files\":[\"src/subjugator/mission_planner/subjugator_missions/xml/approach_and_grasp.xml\",\"src/subjugator/mission_planner/subjugator_missions/xml/sub9_missions.xml\"],\"verifyCommand\":\"source scripts/setup.bash && colcon build --packages-select mission_planner\",\"acceptanceCriteria\":[\"ApproachAndGrasp subtree defined per spec\",\"included in sub9_missions.xml\",\"mission_planner builds\"]}\n```"
},
{
"id": 7,
"subject": "Task 2: OctagonGraspMission harness + smoke test",
"status": "completed",
"blockedBy": [
6
],
"description":
"**Goal:** A standalone mission that seeds target_label and runs ApproachAndGrasp; smoke-tests instantiation.\n\n**Files:**\n- Create: src/subjugator/mission_planner/subjugator_missions/xml/octagon_grasp_mission.xml\n- Modify: src/subjugator/mission_planner/subjugator_missions/xml/sub9_missions.xml\n\n**Acceptance Criteria:**\n- OctagonGraspMission seeds target_label, calls ApproachAndGrasp with knob literals; included; reaches Ticking tree with no parse/registration error\n\n**Verify:** ros2 run mission_planner mission_planner_node --ros-args -p mission:=OctagonGraspMission ; publish one /odometry/filtered ; see 'Ticking tree', no 'Unknown mission'\n\n```json:metadata\n{\"files\":[\"src/subjugator/mission_planner/subjugator_missions/xml/octagon_grasp_mission.xml\",\"src/subjugator/mission_planner/subjugator_missions/xml/sub9_missions.xml\"],\"verifyCommand\":\"ros2 run mission_planner mission_planner_node --ros-args -p mission:=OctagonGraspMission (publish one /odometry/filtered)\",\"acceptanceCriteria\":[\"OctagonGraspMission seeds target_label and calls ApproachAndGrasp with knob literals\",\"included in sub9_missions.xml\",\"reaches Ticking tree with no parse/registration error\"]}\n```"
},
{
"id": 9,
"subject": "Task 3: Make Task 5 props dynamic (world)",
"status": "completed",
"description":
"**Goal:** Pink_Bin, Yellow_Bin, Yellow_Cup, Pink_Spoon become non-static with inertia so the gripper can lift them; table/octagon stay static.\n\n**Files:**\n- Modify: src/subjugator/simulation/subjugator_gazebo/worlds/robosub_2025.world\n\n**Acceptance Criteria:**\n- 4 props static=false + inertial (mass 0.3, ixx/iyy/izz 0.0005); table/octagon stay static; subjugator_gazebo builds\n\n**Verify:** source scripts/setup.bash && colcon build --packages-select subjugator_gazebo ; GUI: props rest on table, movable\n\n```json:metadata\n{\"files\":[\"src/subjugator/simulation/subjugator_gazebo/worlds/robosub_2025.world\"],\"verifyCommand\":\"source scripts/setup.bash && colcon build --packages-select subjugator_gazebo\",\"acceptanceCriteria\":[\"4 props static=false + inertial\",\"table/octagon stay static\",\"subjugator_gazebo builds\"]}\n```"
},
{
"id": 8,
"subject": "Task 4: GripperControl advertises Servo \"gripper\" service",
"status": "completed",
"description":
"**Goal:** The sim gripper responds to the same /gripper Servo service ActuateServo calls, mapping angle -> joint open/closed.\n\n**Files:**\n- Modify: src/subjugator/simulation/subjugator_gazebo/include/GripperControl.hh\n- Modify: src/subjugator/simulation/subjugator_gazebo/src/GripperControl.cc\n- Modify: src/subjugator/simulation/subjugator_gazebo/CMakeLists.txt\n\n**Acceptance Criteria:**\n- advertises subjugator_msgs/srv/Servo 'gripper'; angle 0->closed, 85->open (OPEN_ANGLE=85, clamp); callback sets targets directly; subjugator_msgs added to CMake dep; builds\n\n**Verify:** colcon build --packages-select subjugator_gazebo ; GUI: ros2 service call /gripper subjugator_msgs/srv/Servo '{angle: 85}' opens, '{angle: 0}' closes\n\n```json:metadata\n{\"files\":[\"src/subjugator/simulation/subjugator_gazebo/include/GripperControl.hh\",\"src/subjugator/simulation/subjugator_gazebo/src/GripperControl.cc\",\"src/subjugator/simulation/subjugator_gazebo/CMakeLists.txt\"],\"verifyCommand\":\"source scripts/setup.bash && colcon build --packages-select subjugator_gazebo\",\"acceptanceCriteria\":[\"advertises /gripper Servo service\",\"angle 0->closed, 85->open with interpolation\",\"subjugator_msgs added to CMake deps\",\"builds\"]}\n```"
},
{
"id": 10,
"subject": "Task 5: Proximity attach/detach in GripperControl",
"status": "completed",
"blockedBy": [
8,
9
],
"description":
"**Goal:** On close, hold the nearest allowlisted prop within attach_radius of the gripper link so it lifts with the sub; on open, release it.\n\n**Files:**\n- Modify: src/subjugator/simulation/subjugator_gazebo/include/GripperControl.hh\n- Modify: src/subjugator/simulation/subjugator_gazebo/src/GripperControl.cc\n- Modify: src/subjugator/simulation/subjugator_description/urdf/sub9_sim.urdf.xacro\n\n**Acceptance Criteria:**\n- SDF allowlist + attach_radius + gripper_link_name parsed; nearest allowlisted model within radius held on close, released on open (edge-triggered); held prop lifts with sub in GUI (kinematic-follow via SetWorldPoseCmd); table/octagon never held; builds\n\n**Verify:** GUI: gripper over Pink_Bin, '{angle: 0}' -> bin follows as sub rises; '{angle: 85}' -> drops\n\n```json:metadata\n{\"files\":[\"src/subjugator/simulation/subjugator_gazebo/include/GripperControl.hh\",\"src/subjugator/simulation/subjugator_gazebo/src/GripperControl.cc\",\"src/subjugator/simulation/subjugator_description/urdf/sub9_sim.urdf.xacro\"],\"verifyCommand\":\"source scripts/setup.bash && colcon build --packages-select subjugator_gazebo subjugator_description\",\"acceptanceCriteria\":[\"SDF allowlist + attach_radius parsed\",\"nearest allowlisted prop held on close, released on open\",\"held prop lifts with sub in GUI\",\"table/octagon never held\",\"builds\"]}\n```"
}
],
"lastUpdated": "2026-06-25"
}
Loading
Loading