From 46709919ed8132d98966b93a6e2c257c57e63ac0 Mon Sep 17 00:00:00 2001 From: Charles McCabe Date: Sun, 10 May 2026 12:27:21 -0400 Subject: [PATCH] fixed min curvature incompatibility --- sim_ws/Dockerfile | 2 +- .../map_preparation/utils/min_curvature.py | 19 +++++++++++++++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/sim_ws/Dockerfile b/sim_ws/Dockerfile index c818e18..62ff93e 100644 --- a/sim_ws/Dockerfile +++ b/sim_ws/Dockerfile @@ -63,7 +63,7 @@ RUN echo "export RCUTILS_COLORIZED_OUTPUT=1 " >> ~/.bashrc RUN echo -e "b() { \n source /opt/ros/humble/setup.bash\n cd /sim_ws || exit \n colcon build "$@" --packages-ignore range_libc particle_filter --symlink-install\n source install/local_setup.bash\n \n}" >> ~/.bashrc # Fix for 'no module name 'numba' with docker compose 2.40 -RUN pip3 install transforms3d gymnasium numba scipy pyglet pillow "matplotlib<=3.8" +RUN pip3 install transforms3d gymnasium numba scipy pyglet pillow "matplotlib<=3.8" "cvxpy==1.4" "scikit-image<0.20" # ----------------------------- diff --git a/sim_ws/src/scripts/map_preparation/utils/min_curvature.py b/sim_ws/src/scripts/map_preparation/utils/min_curvature.py index b8220f3..3439d05 100644 --- a/sim_ws/src/scripts/map_preparation/utils/min_curvature.py +++ b/sim_ws/src/scripts/map_preparation/utils/min_curvature.py @@ -305,9 +305,24 @@ def solve_min_curvature_raceline( ] prob = cp.Problem(cp.Minimize(cost), constraints) - prob.solve(solver=cp.OSQP, verbose=False, max_iter=10000, eps_abs=1e-6, eps_rel=1e-6) + solver_attempts = [ + (cp.ECOS, dict(verbose=False, max_iters=2000, abstol=1e-7, reltol=1e-7)), + (cp.OSQP, dict(verbose=False, max_iter=10000, eps_abs=1e-6, eps_rel=1e-6)), + (cp.SCS, dict(verbose=False, max_iters=2500, eps=1e-5)), + ] + + solved = False + for solver, solver_kwargs in solver_attempts: + try: + prob.solve(solver=solver, **solver_kwargs) + except cp.error.SolverError: + continue + + if alpha.value is not None: + solved = True + break - if alpha.value is None: + if not solved: print("[WARNING] Solver did not converge — returning centreline as fallback.") return p, np.zeros(N)