feat: SaltyRover 4-wheel diff-drive control loop (#74) #77
Loading…
x
Reference in New Issue
Block a user
No description provided.
Delete Branch "sl-controls/rover-drive"
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?
SaltyRover 4-wheel differential drive controller
Adds
saltyrover_driveROS2 package for the stable 4-wheel chassis. No balance PID needed — reuses /cmd_vel interface, Nav2, person_follower from main.rover_drive_node
v_left = linear.x - angular.z × sep/2/rover/wheel_speeds:{"cmd":"drive4","fl":N,"fr":N,"rl":N,"rr":N}(N ∈ [-1000, +1000])rover_odom_node
/odom+ TFodom→base_linkTests: 52/52 passing
Kinematics, int scaling, JSON builder, full pipeline, ramp, odometry integration, quaternion conversion.
Adds saltyrover_drive ROS2 package — 4-wheel differential drive controller for the stable SaltyRover chassis (no balance PID required). rover_drive_node: - Subscribes /cmd_vel (Twist), converts to left/right wheel speeds - Tank-style kinematics: v_left = linear.x - angular.z × sep/2 - FL/RL share left speed, FR/RR share right speed (paired axles) - Publishes /rover/wheel_speeds (JSON: {"cmd":"drive4","fl":N,"fr":N,"rl":N,"rr":N}) - Trapezoidal ramp: accel 2.0 m/s², decel 4.0 m/s² (stable chassis allows faster ramps) - cmd_vel watchdog (0.5s timeout → zero speeds) - max_speed 3.0 m/s (±1000 STM32 ticks) rover_odom_node: - Dead-reckoning odometry from /cmd_vel (encoder-ready for future HW) - Publishes /odom (nav_msgs/Odometry) + TF odom→base_link - Forward Euler pose integration at 50 Hz 52/52 unit tests: kinematics, int scaling, JSON builder, full pipeline, trapezoidal ramp, odometry integration, quaternion conversion. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>