Skip to content

Merge dev into main - #15

Merged
agus-darmawan merged 169 commits into
mainfrom
dev
Oct 16, 2026
Merged

agus-darmawan merged 169 commits into
mainfrom
dev

Conversation

@agus-darmawan

Copy link
Copy Markdown
Member

Joins dev's history into main. No file on main changes: #14 already gave main exactly dev's
files (same tree, 273e0a4), so this merge only records dev's commits in main. dev itself is not
touched and does not get main's older commits.

After this merge dev is no longer ahead of main, and later dev → main PRs show only the new work.


Generated by Claude Code

… tags, keep map->odom planar

body was assumed identical to base_link although the Livox IMU sits ~14 cm in front of and above it.
Tag TFs older than tag_max_age_sec are ignored and odom->base_link is sampled at the detection stamp.
map->odom is now a pure x/y/yaw correction instead of inheriting odometry roll/pitch/z.
…rection

Adds a params file and launch argument for it.
obstacle_z_min 0.20 above base_link ignored everything lower than ~55 cm (kids, bags, planters).
… republish

path_loader republished WaypointPath every 2 s and the follower reset progress and the stop-point state machine each time, so it kept returning to the first stop point and cut dwells short.
spin_until_future_complete inside a service callback deadlocked the node, and drivers/set_auto_mode does not exist on the L1W. The mode services are now configurable and the node runs on a MultiThreadedExecutor.
… do not finish at the start

is_finished only checked the distance to the last point, which equals the start on a patrol loop. PathProgress keeps a forward-only index with a heading penalty so overlapping out-and-back corridors stay unambiguous.
… a lookahead terminal cost

The cost against the whole route made MPPI cut corners and lock onto the wrong leg of overlapping corridors (52 m off in a 28 m loop simulation) and scaled with route length. Default controller is now pure_pursuit.
It previously always steered toward the centre of the nearest gap, drifting the robot off a clear path. With no passable gap it now slows to a stop instead of flagging an emergency.
… its centre

emergency_distance 0.4 m from base_link left ~5 cm to the nose; safe_distance 3 m kept the robot slowing in every mall corridor.
…nstant emergency stop

A dead lidar/avoidance node or FAST-LIO used to leave the last command/pose in use. Emergency and degraded-state stops now bypass the 0.5 m/s^2 ramp that let the robot coast ~16 cm.
…mand

Also fixes the package.xml schema line, the stale description and builds rosidl_default_generators as a buildtool dependency.
…pPointEvent

- closed routes restart automatically (loop_route), open routes hold at the end
- after aligning at a stop point the follower calls inspection_services (std_srvs/Trigger) and waits for them up to inspection_timeout_sec
- navigation/stop_point_event reports arrived / inspected / departed / skipped
- stop points passed without reaching tolerance are skipped instead of blocking the rest
- helpers moved to utils/geometry.py and utils/command_filter.py, parameters declared from one table
…s anchored

Recorded routes carry odometry jitter that the controllers turned into left/right weaving. path_loader now dedupes, resamples to a uniform spacing and gradient-smooths each span between stop points, publishes the raw route on navigation/path_raw and warns when smoothing moves the route too far.
Each route point gets a speed limit from curvature (max_lateral_accel) and a backward braking pass into stop points and the route end, so the robot slows before corners and arrives at stops at approach_speed instead of braking hard. Controllers now take the target speed per tick.
…he route end

Inside approach_radius the follower hands over to FinalApproach, which strafes and turns at the same time on holonomic robots (the L1W takes linear.y) and falls back to turn-drive-turn otherwise. Dwell and inspection only start once the robot is within 5 cm / 3 deg (configurable), so every inspection is taken from the same pose. Open routes finish with the same approach and then hold.
…se the path reference

The heading penalty could pin the progress index before a sharp corner, so error-based controllers kept tracking the extended straight. Progress now also advances while the robot projects past the current segment, and PathProgress.reference() returns lateral/heading error, signed curvature and path yaw.
Both work on the path-relative error (lateral, heading) with v * curvature feedforward. In simulation on a smoothed 28 m loop they track with ~3 cm mean cross-track error versus ~5 cm for pure pursuit.
…ideways push for holonomic robots

AvoidanceResult gains lateral_bias; the potential field uses it so a legged robot can sidestep people and pillars instead of only turning. Avoidance parameters are declared from one table per algorithm.
…nd off-path detection

- an emergency stop now holds until the path stayed clear for estop_release_sec, removing stop-go chatter around people
- BLOCKED is reported when the robot cannot make progress for blocked_timeout_sec
- cross-track error above off_path_slow_distance caps speed, above off_path_stop_distance stops until navigation is restarted
Removes left/right twitching from controller and avoidance noise before the slew limiter; command_smoothing = 1 disables it.
agus-darmawan and others added 29 commits October 15, 2026 12:11
@agus-darmawan
agus-darmawan merged commit 8d1dd16 into main Oct 16, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants