feat: outdoor nav — OSM routing + geofence (#59) #67
Loading…
x
Reference in New Issue
Block a user
No description provided.
Delete Branch "sl-perception/outdoor-nav"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Implements Phase 2d: outdoor autonomous navigation for SaltyBot. Uses SIM7600X GPS (
/gps/fix) from PR #65 and Nav2 stack from PR #49.saltybot_outdoorpackage:osm_router_node— Overpass API query (footway/cycleway/path/pedestrian), haversine A*, Douglas–Peucker simplification, flat-earth ENU projection; publishes/outdoor/route(Path for RViz) +/outdoor/waypoints(PoseArray for follower)gps_waypoint_follower_node— subscribes/gps/fix+/outdoor/waypoints; quality-adaptive goal tolerances (2 m cellular, 0.30 m RTK); sendsNavigateThroughPosesto Nav2; services/outdoor/start_navigation//outdoor/stop_navigationgeofence_node— ray-casting polygon boundary check at 2 Hz; publishes/outdoor/abort+ zero/cmd_velon violation;/outdoor/reload_fenceservice for hot-reloadoutdoor_nav.launch.py— dual EKF (odom+mapframes) +navsat_transform_node+ all nodes; Nav2 NOT started here (runs insaltybot-nav2container)outdoor_nav_params.yaml— outdoor Nav2 overrides: 1.5 m/s, nostatic_layer, 2 m GPS goal toleranceekf_outdoor.yaml—robot_localizationdual-EKF config; fuses wheel odom + IMU (local), adds GPS odometry (global)geofence_vertices.yaml— template with usage instructionsRTK upgrade path: SIM7600X ±2.5 m → u-blox ZED-F9P ±2 cm via NTRIP over cellular; set
use_rtk:=true, tolerances auto-tighten to 0.30 m.docker-compose.yml: fixes malformedsaltybot-surroundblock; addssaltybot-outdoorservice (depends onsaltybot-nav2, OSM tile cache on NVMe).Closes #59.
Test plan
docker compose up -d saltybot-outdoor— verify all nodes startros2 topic echo /outdoor/gps_status— verify SIM7600X fix reportedros2 param set /osm_router goal_lat <lat> && ros2 param set /osm_router goal_lon <lon>ros2 service call /outdoor/plan_route std_srvs/srv/Trigger '{}'— verify Overpass query + waypoints publishedros2 topic echo /outdoor/route— verify nav_msgs/Path in RVizros2 service call /outdoor/start_navigation std_srvs/srv/Trigger '{}'— verify Nav2 receives goalfence_verticesingeofence_vertices.yaml, verify abort on exit/gps/fixstatus=2, tolerance auto-tightens🤖 Generated with Claude Code