Releases: oscardvs/lupin
Releases · oscardvs/lupin
Release list
Lupin v1.1.0
Greenhouse mission + perception overhaul on top of v1.0.0: per-bloom flower
localization and rendering, an operator arm pose/sequence library, a hardened
mission state machine, the physical e-stop wired into the orchestrator, and a
stabilised OpenCV AprilTag pipeline. Demonstrated end-to-end in Gazebo (sim)
and on the physical MIRTE Master V2 (hardware).
Added
- Flower localization & render — new
FlowerPointmessage and
flowers[]/box_footprintfields onFlowerObservationand
TwinTagState.perception_aggregatorderives a tag-anchored planter-box
rectangle and scatters per-bloom points inside it from a pan/bbox cue; the
twin republishes them per tag; the HMI draws the box rectangle, a diamond
tag marker, species-coloured flower dots, and a 3D bloom health indicator. - Arm pose & sequence library (
arm_library_server, laptop-side) — named
pose CRUD, kinesthetic/teleop sequence recording with a waypoint cap, and
replay with scheduled gripper events and speed scaling. Newlupin_msgs
services (GetArmLibrary,SaveArmPose,ArmRecord,PlayArmSequence,
ArmLibraryEdit), HMI Pose Library and Sequence Recorder cards, and
voice-agent tools for the whole surface. - Mission monitoring —
ExplorationMissionruns a nearest-neighbour
monitoring sweep that completes aftertarget_cycles(default 1), with a
scan dwell so the per-pot patrol arm and flower detector get their window.
Mission events are classified so the HMI shows a tone rather than a raw
"orchestrator error". - Physical e-stop — the hardware emergency-stop button is bridged onto
/e_stop_state, and the HMI STOP now reaches the orchestrator e-stop. - LED control — manual LED control plus mission-state strip colours
(including EXPLORING/MONITORING and a distinct battery-low return colour),
an HMI-colocated light-strip bridge, and a BRG wire-order remap. - Sim — vision perception and per-pot arm patrol wired into
sim_full.launch.py, a three-colour flower scan layer (trough clusters +
bug anomalies + HSV detector), per-environment slam/nav2 launch wrappers,
amission_stacklaunch, and DEMO_DAY runbooks. - Single source of truth for arm joint limits and trajectory building
(arm_limits, mirrored by the frontendlib/arm.ts).
Changed
cmd_vel_mux→twist_mux— base-velocity arbitration moved to
twist_muxover/cmd_vel_{joy,manual,auto}(priorities 100/50/10) on both
thesimandhardwarebranches.- AprilTag detection moved from the standard ROS detector to OpenCV ArUco
for stability, publishing detections as JSON with an HMI overlay toggle
(no second bounding-box stream); Gazebo gains realtag36h11models in
place of the magenta placeholders. - HMI arm control — sliders seed from
/joint_statesfeedback behind a
strict Enable arming gate, report convergence-based status, and clamp to the
real asymmetric per-joint limits. - Mission FSM hardened — recoverable FAULT, working dock recall, nav/dock
timeouts and a safe freeze; battery docking is resumable into the
originating sub-machine and retries then pauses instead of silently
reporting DONE. hardware.launch.pymade wired-demo-ready (robot_iparg,leds:=false).
Fixed
- Metric frontier clearance so exploration goals clear Nav2's inflation layer.
- Twin UI greys out when
/twin/stategoes stale; tag markers are pinned at
the tag pose, not the robot pose. - Battery-percentage normalisation and an approach-footprint guard.
- Hardware clock-sync no longer wedges
ros2_control. - Sim stability: patched
gazebo_ros2_controlsocontroller_managerstarts,
restored the vendorplanar_movedrive (grounded spawn, no Ogre crash),
raised planter bodies above the lidar plane, and added a continuous
/amcl_posestand-in so the mission clears localization.
Lupin v1.0.0
First tagged release: the full FloraNova greenhouse digital-twin stack,
demonstrated end-to-end both in Gazebo (sim) and on the physical MIRTE
Master V2 (hardware). This tag marks main synced up to the hardware
branch.
Added
- Mission orchestration (
lupin_mission) — hierarchical state-machine
orchestrator (v2) drivingBOOT → READY → PREPARE → {INSPECTING | EXPLORING → MONITORING} → RETURNING → DONE/FAULT. Two mission types:
InspectionMission(fixed tag list, once) andExplorationMission
(frontier-discover N tags, then monitor them in a loop). Operator services
/mission/{start,pause,resume,abort,skip_current,dock}, 5 Hz
/mission/state, and an/e_stop_statesafety monitor. - Battery & docking —
BatteryMonitorwith battery-triggered return-to-dock
and a resumable manual/battery docking flow (/mission/dock). - Frontier exploration (
lupin_mission/frontier.py) — online frontier
selection over the live SLAM grid for autonomous tag discovery. - Navigation (
lupin_navigation) — Nav2 with the MPPI controller
(motion_model: Omnifor the mecanum base), slam_toolbox SLAM mode, saved
KRR-house map, and per-leg AMCL drift gating. WiFi cold-start lifecycle
reliability tuning (hardware). - Perception (
lupin_perception) — OpenCV ArUco AprilTag detector,
Ultralytics YOLO tulip/anomaly detector on the gripper cam, and a
perception_aggregatorfusing them into/perception/discovered_tags,
flower observations, and a/perception/confirm_tagservice. - Greenhouse bridge (
lupin_greenhouse_bridge) — ROS 2 wrapper around the
coursemdp-greenhousesimulator exposing~/get_tag_reading. - Digital twin (
lupin_twin) — aggregates/floranova/observationsinto
/twin/stateand an IDW/twin/get_fieldservice. - Web HMI (
lupin_web) — browser HMI on:8090(Vite + React +
shadcn/ui): Teleop, Arm, Voice (Gemini Live, 14-tool surface), Cameras,
Telemetry, Logs, and Map tabs over rosbridge. Showpiece redesign: aurora
background, URDF 3D twin, boot sequence, and data-reactive telemetry. - Teleop & control interface (
lupin_hmi) — PS4/Xbox + keyboard teleop,
cmd_vel_muxarbitration, arm preset/calibration servers, and
gripper/light-strip bridges. - Custom messages (
lupin_msgs) —Observation,MissionState,
TagReading,SensorReading,FlowerObservation,AnomalyReport,
TwinState/TwinTagState,DiscoveredTag/DiscoveredTags; services
GetTagReading,StartMission,ConfirmTag,GetField,CalibrateArm. - Bringup (
lupin_bringup) — one-shotsim_full.launch.py,
greenhouse_sim.launch.py+ deterministic greenhouse world generator, and
hardware bringup (hardware.launch.py,onboard.launch.py,
cameras.launch.py) with systemd units, FastDDS discovery-server setup,
Xbox BLE pairing fix, and post-boot clock sync (hardware). - Hardware integration (
hardware) — drive-inversion cancelled at source
via telemetrix pin-swap, operator-in-the-loop Hiwonder arm zero-offset
calibration, auto-home to a safe pose on boot, and the camera pipeline that
relaunches vendor cameras at config-driven low FPS. - Repository
LICENSE(Apache-2.0) and this changelog.
Project meta
- Three-branch model (
main/sim/hardware), Conventional Commits, and
buddy-checked MRs — see README. - Public documentation site: https://lupin-robot.vercel.app.