Compare commits
base: seb:aa90ea2fa73f170e4d6c83d6b54a08b8ec0a9dee
seb:main
seb:sl-firmware/ota-esp32
seb:sl-perception/bd-1hyn-orin-autostart
seb:sl-jetson/bd-9kod-ota-ci
seb:sl-firmware/bd-66hx-esp32-uart-orin
seb:sl-perception/bd-p47c-here4-can-gps
seb:sl-perception/bd-wim1-orin-uart-esp32
seb:sl-jetson/here4-dronecan-driver
seb:serkan/parking-marking
seb:max/fix-anchor-dst-filter
seb:sl-jetson/issue-681-wss-rosbridge
seb:sl-jetson/issue-681-ios-gps-bridge
seb:sl-webui/fix-tracker-rename
seb:sl-webui/issue-681-ios-gps-rosbridge
seb:sl-webui/issue-681-fix-gps-topics
seb:sl-firmware/cleanup-legacy-hw
seb:sl-mechanical/cleanup-legacy-hw
seb:sl-controls/esp32-can-bridge-update
seb:sl-uwb/saul-tee-system-reference
seb:sl-perception/cleanup-legacy-hw
seb:sl-webui/esp32-final-rename
seb:sl-android/cleanup-legacy-hw
seb:sl-firmware/arch-esp32-migration
seb:sl-webui/esp32-protocol-specs
seb:sl-webui/issue-709-gps-tracker
seb:sl-perception/issue-696-slam-map-persistence
seb:sl-webui/robot-gps-map
seb:salty/uwb-tag-display-wireless
seb:sl-firmware/issue-694-can-watchdog
seb:sl-controls/issue-693-pid-tuning
seb:sl-uwb/issue-698-anchor-discovery
seb:sl-mechanical/issue-699-vesc-mount
seb:sl-jetson/issue-695-can-e2e-test
seb:sl-webui/issue-697-websocket-bridge
seb:sl-android/issue-700-ble-pairing-ui
seb:sl-uwb/issue-690-tag-ble-config
seb:sl-uwb/issue-689-tag-power-mgmt
seb:sl-firmware/issue-672-bme280-baro-temp
seb:sl-firmware/issue-682-hw-button
seb:sl-webui/issue-681-can-monitor
seb:sl-jetson/issue-651-vesc-health
seb:sl-firmware/issue-658-diagnostics-aggregator
seb:sl-controls/issue-652-smooth-velocity
seb:sl-perception/issue-646-vesc-odometry
seb:sl-controls/issue-644-vesc-can-driver
seb:sl-jetson/issue-643-canable-bringup
seb:sl-controls/issue-667-configurable-can-ids
seb:sl-jetson/issue-681-vesc-telemetry-publish
seb:sl-jetson/issue-683-read-cb-fix
seb:sl-jetson/issue-674-can-bus-orin
seb:sl-firmware/issue-597-can-driver
seb:sl-firmware/issue-678-pitch-threshold
seb:sl-jetson/issue-669-vesc-topic-fix
seb:sl-perception/issue-655-nav2-integration
seb:sl-uwb/issue-657-geofence-speed-limit
seb:sl-webui/issue-653-vesc-panel
seb:sl-android/issue-656-vesc-mqtt-relay
seb:sl-mechanical/issue-654-canable-mount
seb:sl-firmware/issue-645-vesc-telemetry
seb:sl-firmware/vesc-uart-transport
seb:sl-jetson/issue-631-system-monitor
seb:sl-controls/issue-632-encoder-odom
seb:sl-uwb/issue-634-uwb-logger
seb:sl-firmware/issue-629-uart-protocol
seb:sl-perception/issue-627-aruco-docking
seb:sl-webui/issue-630-main-dashboard
seb:sl-android/issue-633-voice-commands
seb:sl-mechanical/issue-628-cable-tray
seb:sl-firmware/issue-613-battery-voltage
seb:sl-jetson/issue-615-bag-recorder
seb:sl-controls/issue-616-steering-pid
seb:sl-perception/issue-611-obstacle-detect
seb:sl-webui/issue-614-settings-panel
seb:sl-uwb/issue-618-espnow-relay
seb:sl-android/issue-617-waypoint-logger
seb:sl-mechanical/issue-612-jetson-mount
seb:sl-controls/issue-600-slope-compensation
seb:sl-uwb/issue-602-anchor-calibration
seb:sl-jetson/issue-599-nav2-uwb
seb:sl-perception/issue-595-pose-fusion
seb:sl-android/issue-601-mqtt-ros2-bridge
seb:sl-mechanical/issue-596-rplidar-mount
seb:sl-webui/issue-598-gamepad-teleop
seb:sl-firmware/issue-565-fault-handler
seb:sl-controls/issue-584-motor-current
seb:sl-perception/issue-586-visual-odom
seb:sl-android/issue-585-video-bridge
seb:sl-webui/issue-587-map-view
seb:sl-uwb/issue-merge-uwb-tag-display
seb:sl-mechanical/issue-588-battery-holder
seb:sl-mechanical/issue-564-uwb-anchor-mount
seb:sl-jetson/issue-577-bringup-launch
seb:sl-uwb/issue-573-uwb-imu-fusion
seb:sl-perception/issue-575-safety-zone
seb:sl-webui/issue-576-event-log
seb:sl-android/issue-574-sensor-dashboard
seb:sl-controls/issue-550-pid-scheduling
seb:sl-uwb/issue-545-tag-firmware
seb:sl-jetson/issue-566-health-monitor
seb:sl-uwb/issue-544-anchor-firmware
seb:sl-perception/issue-546-uwb-ros2
seb:sl-webui/issue-562-diagnostics
seb:sl-android/issue-545-uwb-tag
seb:sl-mechanical/issue-561-rplidar-mount
seb:sl-firmware/issue-547-gimbal-servo
seb:sl-jetson/issue-548-gimbal-ros2
seb:sl-webui/issue-551-gimbal-webui
seb:sl-perception/issue-549-head-tracking
seb:sl-mechanical/issue-552-gimbal-mount
seb:sl-android/issue-553-voice-command
seb:sl-jetson/issue-503-audio-pipeline
seb:sl-controls/issue-533-battery-adc
seb:sl-firmware/issue-531-pid-autotune
seb:sl-perception/issue-532-depth-costmap
seb:sl-webui/issue-534-teleop-webui
seb:sl-mechanical/issue-535-phone-mount
seb:sl-android/issue-536-flash-script
seb:sl-firmware/issue-520-imu-calibration
seb:sl-webui/issue-504-integration-tests
seb:sl-android/issue-521-esc-debug-cleanup
seb:sl-jetson/issue-523-motor-daemon
seb:sl-controls/issue-522-usart6-truncation
seb:sl-mechanical/issue-524-usb-cdc-tx
seb:sl-perception/issue-469-terrain-classification
seb:sl-controls/issue-506-launch-profiles
seb:sl-android/issue-513-phone-joystick
seb:sl-firmware/issue-512-autonomous-arming
seb:sl-mechanical/issue-505-charging-dock
seb:sl-jetson/issue-502-headscale-vpn
seb:sl-firmware/issue-503-audio-pipeline
seb:sl-webui/issue-491-voice-router
seb:sl-controls/issue-489-docking
seb:sl-firmware/issue-488-bag-recording
seb:sl-perception/issue-490-sensor-fusion
seb:sl-jetson/issue-492-ota-update
seb:sl-controls/issue-475-nav2-config
seb:sl-android/issue-493-person-following
seb:sl-mechanical/issue-494-tts-personality
seb:sl-firmware/issue-480-map-persistence
seb:sl-jetson/issue-477-urdf
seb:sl-webui/issue-482-behavior-tree
seb:sl-perception/issue-478-costmaps
seb:sl-mechanical/issue-479-recovery-behaviors
seb:sl-android/issue-483-monitoring-dashboard
seb:sl-controls/issue-467-power-mgmt
seb:sl-perception/issue-468-object-detection
seb:sl-android/issue-470-curiosity
seb:sl-webui/issue-471-param-server
seb:sl-jetson/issue-473-event-logger
seb:sl-webui/issue-453-obstacle-map
seb:sl-jetson/issue-456-photo-capture
seb:sl-android/issue-458-wifi-handoff
seb:sl-perception/issue-454-gestures
seb:sl-controls/issue-455-smooth-velocity
seb:sl-firmware/issue-459-estop
seb:sl-mechanical/issue-457-sound-effects
seb:sl-jetson/issue-447-full-launch
seb:sl-firmware/issue-445-diagnostics
seb:sl-controls/issue-441-geofence
seb:sl-mechanical/issue-444-night-mode
seb:sl-webui/issue-443-social-memory
seb:sl-perception/issue-442-weather
seb:sl-android/issue-446-patrol
seb:sl-android/issue-420-termux-openclaw
seb:sl-mechanical/issue-432-led-controller
seb:sl-jetson/issue-431-tricks
seb:sl-webui/issue-429-emotion-engine
seb:sl-perception/issue-430-audio-direction
seb:sl-controls/issue-433-gamepad-teleop
seb:sl-firmware/issue-408-health-monitor
seb:sl-controls/issue-422-nav2-slam
seb:sl-jetson/issue-424-remote-monitor
seb:sl-perception/issue-423-multi-person
seb:sl-mechanical/issue-421-tts-service
seb:sl-webui/issue-413-sensor-hud
seb:sl-webui/issue-412-ops-dashboard
seb:sl-mechanical/issue-410-auto-dock
seb:sl-perception/issue-409-voice-commands
seb:sl-controls/issue-407-vesc-balance
seb:sl-jetson/issue-411-bag-recording
seb:sl-mechanical/issue-400-encounter-queue
seb:sl-firmware/issue-400-encounter-enrollment
seb:sl-jetson/issue-400-encounter-launch
seb:sl-perception/issue-393-real-wake-word
seb:sl-webui/issue-400-encounter-ui
seb:sl-controls/issue-394-face-bridge
seb:sl-webui/issue-392-meshpeer-fix
seb:sl-perception/issue-393-wake-word
seb:sl-firmware/issue-364-obstacle-avoidance
seb:sl-webui/issue-371-accessibility
seb:sl-mechanical/issue-300-watchdog
seb:sl-perception/issue-366-follow-me
seb:sl-firmware/issue-388-esc-abstraction
seb:sl-firmware/fix-bno055-include
seb:sl-controls/issue-384-pan-tilt
seb:sl-controls/issue-383-vesc
seb:sl-controls/issue-337-build-fix
seb:sl-firmware/issue-337-build-fix
seb:sl-controls/issue-371-accessibility
seb:sl-webui/issue-370-salty-face
seb:sl-perception/issue-325-battery-coulomb
seb:sl-jetson/issue-362-uart-verify
seb:sl-webui/issue-374-cage-kiosk
seb:sl-controls/issue-364-lidar-avoidance
seb:sl-perception/issue-375-camera-power-modes
seb:sl-perception/issue-350-velocity-ramp
seb:sl-webui/issue-369-display-setup
seb:sl-perception/issue-365-uwb-tracking
seb:sl-perception/issue-363-person-tracking
seb:sl-perception/issue-359-face-emotion
seb:sl-perception/issue-353-audio-scene
seb:sl-jetson/issue-355-sysmon
seb:sl-webui/issue-354-settings
seb:sl-perception/issue-348-obstacle-size
seb:sl-webui/issue-349-camera-viewer
seb:sl-jetson/issue-332-rosbag-recorder
seb:sl-perception/issue-342-hand-tracking
seb:sl-webui/issue-344-hand-viz
seb:sl-perception/issue-339-path-edges
seb:sl-webui/issue-340-diagnostics
seb:sl-perception/issue-326-obstacle-velocity
seb:sl-controls/issue-333-pure-pursuit
seb:sl-webui/issue-329-import-fix
seb:sl-perception/issue-322-person-reid
seb:sl-mechanical/issue-325-coulomb-counter
seb:sl-jetson/issue-320-camera-hotplug
seb:sl-controls/issue-321-battery-speed
seb:sl-webui/issue-319-teleop
seb:sl-mechanical/issue-185-phone-mount
seb:sl-perception/issue-184-wheel-odom
seb:sl-mechanical/issue-301-dust-cover
seb:sl-jetson/wake-word-detect
seb:sl-controls/velocity-smooth-filter
seb:sl-webui/node-list-viewer
seb:sl-jetson/issue-310-personal-space
seb:sl-perception/issue-307-sky-detect
seb:sl-webui/issue-308-temp-gauge
seb:sl-controls/issue-309-gain-schedule
seb:sl-perception/issue-296-terrain-rough
seb:sl-firmware/issue-300-watchdog
seb:sl-jetson/issue-299-topic-memory
seb:sl-webui/issue-297-motor-graph
seb:sl-controls/issue-298-geofence
seb:sl-firmware/issue-290-rgb-fsm
seb:sl-jetson/issue-289-volume-adjust
seb:sl-perception/issue-286-blur-detect
seb:sl-webui/issue-287-bandwidth
seb:sl-controls/issue-288-cliff-stop
seb:sl-mechanical/issue-264-cable-clips
seb:sl-jetson/issue-279-face-track-servo
seb:sl-webui/issue-280-battery-chart
seb:sl-controls/issue-278-imu-cal
seb:sl-perception/issue-274-color-segment
seb:sl-controls/issue-262-wheel-slip
seb:sl-webui/issue-275-log-viewer
seb:sl-jetson/issue-270-greeting-trigger
seb:sl-perception/issue-268-depth-holes
seb:sl-webui/issue-269-status-header
seb:sl-firmware/issue-263-fan-pwm
seb:sl-webui/issue-261-waypoint-editor-fix
seb:sl-perception/issue-260-vo-drift
seb:sl-jetson/issue-252-ambient-sound
seb:sl-firmware/issue-253-buzzer
seb:sl-perception/issue-249-floor-classifier
seb:sl-webui/issue-250-map-viewer
seb:sl-mechanical/issue-254-rain-shield
seb:sl-controls/issue-251-battery-speed
seb:sl-jetson/issue-242-vad
seb:sl-controls/issue-241-smooth-accel
seb:sl-firmware/issue-243-ultrasonic
seb:sl-webui/issue-240-conversation-history
seb:sl-perception/issue-239-lidar-clustering
seb:sl-webui/issue-234-audio-meter
seb:sl-perception/issue-233-qr-reader
seb:sl-controls/issue-235-compass
seb:sl-perception/issue-227-landmark-smooth
seb:sl-controls/issue-228-cmd-vel-mux
seb:sl-webui/issue-229-pose-viewer
seb:sl-controls/issue-223-motor-protection
seb:sl-perception/issue-221-pointing
seb:sl-webui/issue-222-network
seb:sl-firmware/issue-214-ina219
seb:sl-perception/issue-211-height-filter
seb:sl-controls/issue-216-odom-fusion
seb:sl-controls/issue-213-autotune
seb:sl-webui/issue-212-joystick
seb:sl-mechanical/issue-195-gopro-mount
seb:sl-firmware/issue-206-servo
seb:sl-perception/issue-201-person-reid
seb:sl-jetson/issue-205-thermal
seb:sl-controls/issue-203-watchdog
seb:sl-controls/issue-194-speed-limiter
seb:sl-jetson/issue-171-mesh-comms
seb:sl-perception/issue-198-camera-health
seb:sl-perception/issue-191-apriltag
seb:sl-firmware/issue-193-led-driver
seb:sl-jetson/issue-161-emotion
seb:sl-perception/issue-190-depth-filter
seb:sl-jetson/issue-167-multilang
seb:sl-firmware/issue-178-power-mgmt
seb:sl-webui/issue-183-battery-chart
seb:sl-webui/issue-177-camera-viewer
seb:sl-perception/issue-176-dynamic-obstacles
seb:sl-controls/issue-169-emergency
seb:sl-mechanical/issue-170-payload-bay
seb:sl-perception/issue-168-night-vision
seb:sl-firmware/issue-143-audio-amp
seb:sl-webui/issue-160-settings
seb:sl-controls/issue-158-docking
seb:sl-perception/issue-157-visual-odom
seb:sl-mechanical/issue-159-charging-dock
seb:sl-jetson/issue-140-gestures
seb:sl-webui/issue-145-mission-planner
seb:sl-controls/issue-142-terrain
seb:sl-perception/issue-141-scene-understanding
seb:sl-mechanical/issue-144-weatherproofing
seb:sl-firmware/issue-124-ota
seb:sl-mechanical/issue-138-sensor-rail
seb:sl-firmware/issue-135-bno055
seb:sl-webui/issue-139-fleet-dashboard
seb:sl-controls/issue-136-adaptive-pid
seb:sl-jetson/issue-137-voice-commands
seb:sl-perception/issue-134-multi-robot-slam
seb:sl-jetson/issue-125-battery-management
seb:sl-firmware/issue-120-serial-protocol
seb:sl-mechanical/issue-121-tank-chassis
seb:sl-webui/issue-126-telemetry-dash
seb:sl-perception/issue-123-map-persistence
seb:sl-jetson/issue-119-cmd-protocol
seb:sl-controls/issue-122-tank-driver
seb:sl-controls/issue-110-rover-driver
seb:sl-jetson/issue-108-integration-tests
seb:sl-mechanical/issue-109-rover-chassis
seb:sl-perception/issue-105-equirect
seb:sl-controls/issue-104-mode-switch
seb:sl-perception/issue-106-calibration
seb:sl-webui/issue-107-dashboard
seb:sl-firmware/issue-103-crsf-rc
seb:sl-jetson/social-speech-llm-tts
seb:sl-jetson/social-orin-dev
seb:sl-controls/tracking-fusion
seb:sl-controls/social-personality
seb:sl-firmware/social-expression
seb:sl-perception/social-enrollment
seb:sl-perception/social-face-detection
seb:sl-firmware/uwb-integration
seb:sl-perception/social-nav
seb:sl-perception/social-person-state
seb:sl-firmware/remote-estop
seb:saltyrover-dev
seb:sl-mechanical/rover-chassis
seb:sl-jetson/sidewalk-segmentation
seb:sl-controls/rover-drive
seb:sl-perception/route-record-replay
seb:sl-jetson/full-stack-launch
seb:sl-firmware/web-ui-overhaul
seb:sl-webui/issue-43-ui-overhaul
seb:sl-firmware/gyro-recal-button
seb:sl-firmware/crsf-elrs
seb:sl-firmware/robot-3d-model
seb:sl-firmware/yaw-fix
seb:sl-perception/orin-slam-update
seb:sl-jetson/command-protocol
seb:sl-controls/mode-switch
seb:sl-firmware/bme280-full
seb:sl-firmware/branch-strategy
seb:saltylab
seb:saltylab-dev
seb:saltyrover
seb:saltytank
seb:saltytank-dev
seb:sl-firmware/mag-baro-detect
seb:sl-firmware/status-leds
seb:sl-controls/gyro-calibration
seb:sl-mechanical/prototype-baseplate
seb:sl-firmware/fix-axis-orientation
seb:sl-controls/motor-driver
seb:sl-perception/bd-a2j-sensor-drivers
seb:sl-jetson/stm32-serial-bridge
seb:sl-firmware/fix-orientation-telemetry
seb:sl-firmware/bd-3ulu-usb-dcache-fix
seb:sl-controls/bd-3qh-safety-systems
seb:sl-controls/bd-18i-pid-tuning
seb:sl-controls/bd-2dv-imu-fusion
seb:sl-jetson/bd-1hcg-jetson-platform
seb:sl-mechanical/bd-1iy5-chassis-frame
seb:sl-firmware/bd-1lo-usb-cdc-fix
seb:sl-perception/bd-wax-slam-setup
..
compare: seb:73742fe726f6254aabee8d6d5635ac6067855548
seb:main
seb:sl-firmware/ota-esp32
seb:sl-perception/bd-1hyn-orin-autostart
seb:sl-jetson/bd-9kod-ota-ci
seb:sl-firmware/bd-66hx-esp32-uart-orin
seb:sl-perception/bd-p47c-here4-can-gps
seb:sl-perception/bd-wim1-orin-uart-esp32
seb:sl-jetson/here4-dronecan-driver
seb:serkan/parking-marking
seb:max/fix-anchor-dst-filter
seb:sl-jetson/issue-681-wss-rosbridge
seb:sl-jetson/issue-681-ios-gps-bridge
seb:sl-webui/fix-tracker-rename
seb:sl-webui/issue-681-ios-gps-rosbridge
seb:sl-webui/issue-681-fix-gps-topics
seb:sl-firmware/cleanup-legacy-hw
seb:sl-mechanical/cleanup-legacy-hw
seb:sl-controls/esp32-can-bridge-update
seb:sl-uwb/saul-tee-system-reference
seb:sl-perception/cleanup-legacy-hw
seb:sl-webui/esp32-final-rename
seb:sl-android/cleanup-legacy-hw
seb:sl-firmware/arch-esp32-migration
seb:sl-webui/esp32-protocol-specs
seb:sl-webui/issue-709-gps-tracker
seb:sl-perception/issue-696-slam-map-persistence
seb:sl-webui/robot-gps-map
seb:salty/uwb-tag-display-wireless
seb:sl-firmware/issue-694-can-watchdog
seb:sl-controls/issue-693-pid-tuning
seb:sl-uwb/issue-698-anchor-discovery
seb:sl-mechanical/issue-699-vesc-mount
seb:sl-jetson/issue-695-can-e2e-test
seb:sl-webui/issue-697-websocket-bridge
seb:sl-android/issue-700-ble-pairing-ui
seb:sl-uwb/issue-690-tag-ble-config
seb:sl-uwb/issue-689-tag-power-mgmt
seb:sl-firmware/issue-672-bme280-baro-temp
seb:sl-firmware/issue-682-hw-button
seb:sl-webui/issue-681-can-monitor
seb:sl-jetson/issue-651-vesc-health
seb:sl-firmware/issue-658-diagnostics-aggregator
seb:sl-controls/issue-652-smooth-velocity
seb:sl-perception/issue-646-vesc-odometry
seb:sl-controls/issue-644-vesc-can-driver
seb:sl-jetson/issue-643-canable-bringup
seb:sl-controls/issue-667-configurable-can-ids
seb:sl-jetson/issue-681-vesc-telemetry-publish
seb:sl-jetson/issue-683-read-cb-fix
seb:sl-jetson/issue-674-can-bus-orin
seb:sl-firmware/issue-597-can-driver
seb:sl-firmware/issue-678-pitch-threshold
seb:sl-jetson/issue-669-vesc-topic-fix
seb:sl-perception/issue-655-nav2-integration
seb:sl-uwb/issue-657-geofence-speed-limit
seb:sl-webui/issue-653-vesc-panel
seb:sl-android/issue-656-vesc-mqtt-relay
seb:sl-mechanical/issue-654-canable-mount
seb:sl-firmware/issue-645-vesc-telemetry
seb:sl-firmware/vesc-uart-transport
seb:sl-jetson/issue-631-system-monitor
seb:sl-controls/issue-632-encoder-odom
seb:sl-uwb/issue-634-uwb-logger
seb:sl-firmware/issue-629-uart-protocol
seb:sl-perception/issue-627-aruco-docking
seb:sl-webui/issue-630-main-dashboard
seb:sl-android/issue-633-voice-commands
seb:sl-mechanical/issue-628-cable-tray
seb:sl-firmware/issue-613-battery-voltage
seb:sl-jetson/issue-615-bag-recorder
seb:sl-controls/issue-616-steering-pid
seb:sl-perception/issue-611-obstacle-detect
seb:sl-webui/issue-614-settings-panel
seb:sl-uwb/issue-618-espnow-relay
seb:sl-android/issue-617-waypoint-logger
seb:sl-mechanical/issue-612-jetson-mount
seb:sl-controls/issue-600-slope-compensation
seb:sl-uwb/issue-602-anchor-calibration
seb:sl-jetson/issue-599-nav2-uwb
seb:sl-perception/issue-595-pose-fusion
seb:sl-android/issue-601-mqtt-ros2-bridge
seb:sl-mechanical/issue-596-rplidar-mount
seb:sl-webui/issue-598-gamepad-teleop
seb:sl-firmware/issue-565-fault-handler
seb:sl-controls/issue-584-motor-current
seb:sl-perception/issue-586-visual-odom
seb:sl-android/issue-585-video-bridge
seb:sl-webui/issue-587-map-view
seb:sl-uwb/issue-merge-uwb-tag-display
seb:sl-mechanical/issue-588-battery-holder
seb:sl-mechanical/issue-564-uwb-anchor-mount
seb:sl-jetson/issue-577-bringup-launch
seb:sl-uwb/issue-573-uwb-imu-fusion
seb:sl-perception/issue-575-safety-zone
seb:sl-webui/issue-576-event-log
seb:sl-android/issue-574-sensor-dashboard
seb:sl-controls/issue-550-pid-scheduling
seb:sl-uwb/issue-545-tag-firmware
seb:sl-jetson/issue-566-health-monitor
seb:sl-uwb/issue-544-anchor-firmware
seb:sl-perception/issue-546-uwb-ros2
seb:sl-webui/issue-562-diagnostics
seb:sl-android/issue-545-uwb-tag
seb:sl-mechanical/issue-561-rplidar-mount
seb:sl-firmware/issue-547-gimbal-servo
seb:sl-jetson/issue-548-gimbal-ros2
seb:sl-webui/issue-551-gimbal-webui
seb:sl-perception/issue-549-head-tracking
seb:sl-mechanical/issue-552-gimbal-mount
seb:sl-android/issue-553-voice-command
seb:sl-jetson/issue-503-audio-pipeline
seb:sl-controls/issue-533-battery-adc
seb:sl-firmware/issue-531-pid-autotune
seb:sl-perception/issue-532-depth-costmap
seb:sl-webui/issue-534-teleop-webui
seb:sl-mechanical/issue-535-phone-mount
seb:sl-android/issue-536-flash-script
seb:sl-firmware/issue-520-imu-calibration
seb:sl-webui/issue-504-integration-tests
seb:sl-android/issue-521-esc-debug-cleanup
seb:sl-jetson/issue-523-motor-daemon
seb:sl-controls/issue-522-usart6-truncation
seb:sl-mechanical/issue-524-usb-cdc-tx
seb:sl-perception/issue-469-terrain-classification
seb:sl-controls/issue-506-launch-profiles
seb:sl-android/issue-513-phone-joystick
seb:sl-firmware/issue-512-autonomous-arming
seb:sl-mechanical/issue-505-charging-dock
seb:sl-jetson/issue-502-headscale-vpn
seb:sl-firmware/issue-503-audio-pipeline
seb:sl-webui/issue-491-voice-router
seb:sl-controls/issue-489-docking
seb:sl-firmware/issue-488-bag-recording
seb:sl-perception/issue-490-sensor-fusion
seb:sl-jetson/issue-492-ota-update
seb:sl-controls/issue-475-nav2-config
seb:sl-android/issue-493-person-following
seb:sl-mechanical/issue-494-tts-personality
seb:sl-firmware/issue-480-map-persistence
seb:sl-jetson/issue-477-urdf
seb:sl-webui/issue-482-behavior-tree
seb:sl-perception/issue-478-costmaps
seb:sl-mechanical/issue-479-recovery-behaviors
seb:sl-android/issue-483-monitoring-dashboard
seb:sl-controls/issue-467-power-mgmt
seb:sl-perception/issue-468-object-detection
seb:sl-android/issue-470-curiosity
seb:sl-webui/issue-471-param-server
seb:sl-jetson/issue-473-event-logger
seb:sl-webui/issue-453-obstacle-map
seb:sl-jetson/issue-456-photo-capture
seb:sl-android/issue-458-wifi-handoff
seb:sl-perception/issue-454-gestures
seb:sl-controls/issue-455-smooth-velocity
seb:sl-firmware/issue-459-estop
seb:sl-mechanical/issue-457-sound-effects
seb:sl-jetson/issue-447-full-launch
seb:sl-firmware/issue-445-diagnostics
seb:sl-controls/issue-441-geofence
seb:sl-mechanical/issue-444-night-mode
seb:sl-webui/issue-443-social-memory
seb:sl-perception/issue-442-weather
seb:sl-android/issue-446-patrol
seb:sl-android/issue-420-termux-openclaw
seb:sl-mechanical/issue-432-led-controller
seb:sl-jetson/issue-431-tricks
seb:sl-webui/issue-429-emotion-engine
seb:sl-perception/issue-430-audio-direction
seb:sl-controls/issue-433-gamepad-teleop
seb:sl-firmware/issue-408-health-monitor
seb:sl-controls/issue-422-nav2-slam
seb:sl-jetson/issue-424-remote-monitor
seb:sl-perception/issue-423-multi-person
seb:sl-mechanical/issue-421-tts-service
seb:sl-webui/issue-413-sensor-hud
seb:sl-webui/issue-412-ops-dashboard
seb:sl-mechanical/issue-410-auto-dock
seb:sl-perception/issue-409-voice-commands
seb:sl-controls/issue-407-vesc-balance
seb:sl-jetson/issue-411-bag-recording
seb:sl-mechanical/issue-400-encounter-queue
seb:sl-firmware/issue-400-encounter-enrollment
seb:sl-jetson/issue-400-encounter-launch
seb:sl-perception/issue-393-real-wake-word
seb:sl-webui/issue-400-encounter-ui
seb:sl-controls/issue-394-face-bridge
seb:sl-webui/issue-392-meshpeer-fix
seb:sl-perception/issue-393-wake-word
seb:sl-firmware/issue-364-obstacle-avoidance
seb:sl-webui/issue-371-accessibility
seb:sl-mechanical/issue-300-watchdog
seb:sl-perception/issue-366-follow-me
seb:sl-firmware/issue-388-esc-abstraction
seb:sl-firmware/fix-bno055-include
seb:sl-controls/issue-384-pan-tilt
seb:sl-controls/issue-383-vesc
seb:sl-controls/issue-337-build-fix
seb:sl-firmware/issue-337-build-fix
seb:sl-controls/issue-371-accessibility
seb:sl-webui/issue-370-salty-face
seb:sl-perception/issue-325-battery-coulomb
seb:sl-jetson/issue-362-uart-verify
seb:sl-webui/issue-374-cage-kiosk
seb:sl-controls/issue-364-lidar-avoidance
seb:sl-perception/issue-375-camera-power-modes
seb:sl-perception/issue-350-velocity-ramp
seb:sl-webui/issue-369-display-setup
seb:sl-perception/issue-365-uwb-tracking
seb:sl-perception/issue-363-person-tracking
seb:sl-perception/issue-359-face-emotion
seb:sl-perception/issue-353-audio-scene
seb:sl-jetson/issue-355-sysmon
seb:sl-webui/issue-354-settings
seb:sl-perception/issue-348-obstacle-size
seb:sl-webui/issue-349-camera-viewer
seb:sl-jetson/issue-332-rosbag-recorder
seb:sl-perception/issue-342-hand-tracking
seb:sl-webui/issue-344-hand-viz
seb:sl-perception/issue-339-path-edges
seb:sl-webui/issue-340-diagnostics
seb:sl-perception/issue-326-obstacle-velocity
seb:sl-controls/issue-333-pure-pursuit
seb:sl-webui/issue-329-import-fix
seb:sl-perception/issue-322-person-reid
seb:sl-mechanical/issue-325-coulomb-counter
seb:sl-jetson/issue-320-camera-hotplug
seb:sl-controls/issue-321-battery-speed
seb:sl-webui/issue-319-teleop
seb:sl-mechanical/issue-185-phone-mount
seb:sl-perception/issue-184-wheel-odom
seb:sl-mechanical/issue-301-dust-cover
seb:sl-jetson/wake-word-detect
seb:sl-controls/velocity-smooth-filter
seb:sl-webui/node-list-viewer
seb:sl-jetson/issue-310-personal-space
seb:sl-perception/issue-307-sky-detect
seb:sl-webui/issue-308-temp-gauge
seb:sl-controls/issue-309-gain-schedule
seb:sl-perception/issue-296-terrain-rough
seb:sl-firmware/issue-300-watchdog
seb:sl-jetson/issue-299-topic-memory
seb:sl-webui/issue-297-motor-graph
seb:sl-controls/issue-298-geofence
seb:sl-firmware/issue-290-rgb-fsm
seb:sl-jetson/issue-289-volume-adjust
seb:sl-perception/issue-286-blur-detect
seb:sl-webui/issue-287-bandwidth
seb:sl-controls/issue-288-cliff-stop
seb:sl-mechanical/issue-264-cable-clips
seb:sl-jetson/issue-279-face-track-servo
seb:sl-webui/issue-280-battery-chart
seb:sl-controls/issue-278-imu-cal
seb:sl-perception/issue-274-color-segment
seb:sl-controls/issue-262-wheel-slip
seb:sl-webui/issue-275-log-viewer
seb:sl-jetson/issue-270-greeting-trigger
seb:sl-perception/issue-268-depth-holes
seb:sl-webui/issue-269-status-header
seb:sl-firmware/issue-263-fan-pwm
seb:sl-webui/issue-261-waypoint-editor-fix
seb:sl-perception/issue-260-vo-drift
seb:sl-jetson/issue-252-ambient-sound
seb:sl-firmware/issue-253-buzzer
seb:sl-perception/issue-249-floor-classifier
seb:sl-webui/issue-250-map-viewer
seb:sl-mechanical/issue-254-rain-shield
seb:sl-controls/issue-251-battery-speed
seb:sl-jetson/issue-242-vad
seb:sl-controls/issue-241-smooth-accel
seb:sl-firmware/issue-243-ultrasonic
seb:sl-webui/issue-240-conversation-history
seb:sl-perception/issue-239-lidar-clustering
seb:sl-webui/issue-234-audio-meter
seb:sl-perception/issue-233-qr-reader
seb:sl-controls/issue-235-compass
seb:sl-perception/issue-227-landmark-smooth
seb:sl-controls/issue-228-cmd-vel-mux
seb:sl-webui/issue-229-pose-viewer
seb:sl-controls/issue-223-motor-protection
seb:sl-perception/issue-221-pointing
seb:sl-webui/issue-222-network
seb:sl-firmware/issue-214-ina219
seb:sl-perception/issue-211-height-filter
seb:sl-controls/issue-216-odom-fusion
seb:sl-controls/issue-213-autotune
seb:sl-webui/issue-212-joystick
seb:sl-mechanical/issue-195-gopro-mount
seb:sl-firmware/issue-206-servo
seb:sl-perception/issue-201-person-reid
seb:sl-jetson/issue-205-thermal
seb:sl-controls/issue-203-watchdog
seb:sl-controls/issue-194-speed-limiter
seb:sl-jetson/issue-171-mesh-comms
seb:sl-perception/issue-198-camera-health
seb:sl-perception/issue-191-apriltag
seb:sl-firmware/issue-193-led-driver
seb:sl-jetson/issue-161-emotion
seb:sl-perception/issue-190-depth-filter
seb:sl-jetson/issue-167-multilang
seb:sl-firmware/issue-178-power-mgmt
seb:sl-webui/issue-183-battery-chart
seb:sl-webui/issue-177-camera-viewer
seb:sl-perception/issue-176-dynamic-obstacles
seb:sl-controls/issue-169-emergency
seb:sl-mechanical/issue-170-payload-bay
seb:sl-perception/issue-168-night-vision
seb:sl-firmware/issue-143-audio-amp
seb:sl-webui/issue-160-settings
seb:sl-controls/issue-158-docking
seb:sl-perception/issue-157-visual-odom
seb:sl-mechanical/issue-159-charging-dock
seb:sl-jetson/issue-140-gestures
seb:sl-webui/issue-145-mission-planner
seb:sl-controls/issue-142-terrain
seb:sl-perception/issue-141-scene-understanding
seb:sl-mechanical/issue-144-weatherproofing
seb:sl-firmware/issue-124-ota
seb:sl-mechanical/issue-138-sensor-rail
seb:sl-firmware/issue-135-bno055
seb:sl-webui/issue-139-fleet-dashboard
seb:sl-controls/issue-136-adaptive-pid
seb:sl-jetson/issue-137-voice-commands
seb:sl-perception/issue-134-multi-robot-slam
seb:sl-jetson/issue-125-battery-management
seb:sl-firmware/issue-120-serial-protocol
seb:sl-mechanical/issue-121-tank-chassis
seb:sl-webui/issue-126-telemetry-dash
seb:sl-perception/issue-123-map-persistence
seb:sl-jetson/issue-119-cmd-protocol
seb:sl-controls/issue-122-tank-driver
seb:sl-controls/issue-110-rover-driver
seb:sl-jetson/issue-108-integration-tests
seb:sl-mechanical/issue-109-rover-chassis
seb:sl-perception/issue-105-equirect
seb:sl-controls/issue-104-mode-switch
seb:sl-perception/issue-106-calibration
seb:sl-webui/issue-107-dashboard
seb:sl-firmware/issue-103-crsf-rc
seb:sl-jetson/social-speech-llm-tts
seb:sl-jetson/social-orin-dev
seb:sl-controls/tracking-fusion
seb:sl-controls/social-personality
seb:sl-firmware/social-expression
seb:sl-perception/social-enrollment
seb:sl-perception/social-face-detection
seb:sl-firmware/uwb-integration
seb:sl-perception/social-nav
seb:sl-perception/social-person-state
seb:sl-firmware/remote-estop
seb:saltyrover-dev
seb:sl-mechanical/rover-chassis
seb:sl-jetson/sidewalk-segmentation
seb:sl-controls/rover-drive
seb:sl-perception/route-record-replay
seb:sl-jetson/full-stack-launch
seb:sl-firmware/web-ui-overhaul
seb:sl-webui/issue-43-ui-overhaul
seb:sl-firmware/gyro-recal-button
seb:sl-firmware/crsf-elrs
seb:sl-firmware/robot-3d-model
seb:sl-firmware/yaw-fix
seb:sl-perception/orin-slam-update
seb:sl-jetson/command-protocol
seb:sl-controls/mode-switch
seb:sl-firmware/bme280-full
seb:sl-firmware/branch-strategy
seb:saltylab
seb:saltylab-dev
seb:saltyrover
seb:saltytank
seb:saltytank-dev
seb:sl-firmware/mag-baro-detect
seb:sl-firmware/status-leds
seb:sl-controls/gyro-calibration
seb:sl-mechanical/prototype-baseplate
seb:sl-firmware/fix-axis-orientation
seb:sl-controls/motor-driver
seb:sl-perception/bd-a2j-sensor-drivers
seb:sl-jetson/stm32-serial-bridge
seb:sl-firmware/fix-orientation-telemetry
seb:sl-firmware/bd-3ulu-usb-dcache-fix
seb:sl-controls/bd-3qh-safety-systems
seb:sl-controls/bd-18i-pid-tuning
seb:sl-controls/bd-2dv-imu-fusion
seb:sl-jetson/bd-1hcg-jetson-platform
seb:sl-mechanical/bd-1iy5-chassis-frame
seb:sl-firmware/bd-1lo-usb-cdc-fix
seb:sl-perception/bd-wax-slam-setup
11 Commits
aa90ea2fa7
...
73742fe726
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
| 73742fe726 |
feat: Add watchdog reset detection and status reporting (Issue #300)
- Detect if MCU was reset by IWDG watchdog timeout at startup - Log watchdog reset events to debug terminal (USB CDC) - Store watchdog reset flag for status reporting to Jetson - Watchdog timer configured with 2-second timeout in safety_init() - Main loop calls safety_refresh() to kick the watchdog every iteration The IWDG (Independent Watchdog) resets the MCU if the main loop hangs and fails to call safety_refresh() within the timeout window. This provides hardware-enforced detection of software failures. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> |
|||
| 87bb2999c2 |
feat: Implement VESC UART driver node (Issue #383)
ROS2 driver for Flipsky FSESC 4.20 Plus (VESC dual ESC) motor control. Replaces hoverboard ESC communication with pyvesc library. Features: - UART serial communication (configurable port/baud) - Dual command modes: duty_cycle (-100 to 100) and RPM setpoint - Telemetry publishing: voltage, current, RPM, temperature, fault codes - Command timeout: auto-zero throttle if no cmd_vel received - Heartbeat-based connection management - Comprehensive error handling and logging Topics: - Subscribe: /cmd_vel (geometry_msgs/Twist) - Publish: /vesc/state (JSON telemetry) - Publish: /vesc/raw_telemetry (debug) Launch: ros2 launch saltybot_vesc_driver vesc_driver.launch.py Config: config/vesc_params.yaml Next phase: Integrate with cmd_vel_mux + safety layer. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> |
|||
| 55915ed737 |
fix: Resolve all compile and linker errors (Issue #337)
Fixed 7 compile errors across 6 files: 1. servo.c: Removed duplicate ServoState typedef, updated struct definition in header 2. watchdog.c: Fixed IWDG handle usage - moved to global scope for IRQHandler access 3. ultrasonic.c: Fixed timer handle type mismatches - use TIM_HandleTypeDef instead of TIM_TypeDef, replaced HAL_TIM_IC_Init_Compat with proper HAL functions 4. main.c: Replaced undefined functions - imu_calibrated() → mpu6000_is_calibrated(), crsf_is_active() → manual state check 5. ina219.c: Stubbed I2C functions pending HAL implementation Build now passes with ZERO errors. - RAM: 6.5% (16964 bytes / 262144) - Flash: 10.6% (55368 bytes / 524288) Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> |
|||
| 0a6d5753a8 |
feat: Implement deaf/accessibility mode with STT, touch keyboard, TTS (Issue #371)
Accessibility mode for hearing-impaired users: - Speech-to-text display: Integrates with saltybot_social speech_pipeline_node - Touch keyboard overlay: 1024x600 optimized for MageDok 7in display - TTS output: Routes to MageDok speakers via PulseAudio - Web UI server: Responsive keyboard interface with real-time display updates - Auto-confirm: Optional TTS feedback for spoken input - Physical keyboard support: Both touch and physical input methods Features: - Keyboard buffer with backspace/clear/send controls - Transcript history display (max 10 entries) - Status indicators for STT/TTS ready state - Number/symbol support (1-5, punctuation) - HTML/CSS responsive design optimized for touch - ROS2 integration via /social/speech/transcript and /social/conversation/request Launch: ros2 launch saltybot_accessibility_mode accessibility_mode.launch.py UI Port: 8080 (MageDok display access) Config: config/accessibility_params.yaml Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> |
|||
| e36fa31f97 |
feat: Implement 360° LIDAR obstacle avoidance (Issue #364)
Implements ROS2 node for RPLIDAR A1M8 obstacle detection with: - Emergency stop at 0.5m - Speed-dependent safety zone (3m @ 20km/h, scales linearly) - Forward-facing 60° obstacle cone scanning - Publishes /saltybot/obstacle_alert and /cmd_vel_safe - Debounced obstacle detection (2 frames) - JSON status reporting Launch: ros2 launch saltybot_lidar_avoidance lidar_avoidance.launch.py Config: config/lidar_avoidance_params.yaml Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> |
|||
| 4960b642d7 |
feat(webui): Salty Face animated expression UI — contextual emotions (Issue #370)
Add animated facial expression interface for MageDok 7" display: Core Features: ✓ 8 emotional states: - Happy (default idle) - Alert (obstacles detected) - Confused (searching, target lost) - Sleeping (prolonged inactivity) - Excited (target reacquired) - Emergency (e-stop triggered) - Listening (microphone active) - Talking (TTS output) Visual Design: ✓ Minimalist Cozmo/Vector-inspired eyes + optional mouth ✓ Canvas-based GPU-accelerated rendering ✓ 30fps target on Jetson Orin Nano ✓ Emotion-specific eye characteristics: - Scale changes (alert widened eyes) - Color coding per emotion - Pupil position tracking - Blinking rates vary by state - Eye wandering (confused searching) - Bouncing animation (excited) - Flash effect (emergency) Mouth Animation: ✓ Synchronized with text-to-speech output ✓ Shape frames: closed, smile, oh, ah, ee sounds ✓ ~10fps lip sync animation ROS2 Integration: ✓ Subscribe to /saltybot/state (emotion triggers) ✓ Subscribe to /saltybot/target_track (tracking state) ✓ Subscribe to /saltybot/obstacles (alert state) ✓ Subscribe to /social/speech/is_speaking (talking mode) ✓ Subscribe to /social/speech/is_listening (listening mode) ✓ Subscribe to /saltybot/battery (status tracking) ✓ Subscribe to /saltybot/audio_level (audio feedback) HUD Overlay: ✓ Tap-to-toggle status display ✓ Battery percentage indicator ✓ Robot state label ✓ Distance to target (meters) ✓ Movement speed (m/s) ✓ System health percentage ✓ Color-coded health indicator (green/yellow/red) Integration: ✓ New DISPLAY tab group (rose color) ✓ Full-screen rendering on 1024×600 MageDok display ✓ Responsive to robot state machine ✓ Supports kiosk mode deployment Build Status: ✅ PASSING - 126 modules (+1 for SaltyFace) - 281.57 KB main bundle (+11 KB) - 0 errors Depends on: Issue #369 (MageDok display setup) Foundation for: Issue #371 (Accessibility mode) Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> |
|||
| d1aea87bd7 |
feat: SaltyFace web app UI for Chromium kiosk (Issue #370)
Animated robot expression interface as lightweight web application: **Architecture:** - HTML5 Canvas rendering engine - Node.js HTTP server (localhost:3000) - ROSLIB WebSocket bridge for ROS2 topics - Fullscreen responsive design (1024×600) **Features:** - 8 emotional states (happy, alert, confused, sleeping, excited, emergency, listening, talking) - Real-time ROS2 subscriptions: - /saltybot/state (emotion triggers) - /saltybot/battery (status display) - /saltybot/target_track (EXCITED emotion) - /saltybot/obstacles (ALERT emotion) - /social/speech/is_speaking (TALKING emotion) - /social/speech/is_listening (LISTENING emotion) - Tap-to-toggle status overlay - 60fps Canvas animation on Wayland - ~80MB total memory (Node.js + browser) **Files:** - public/index.html — Main page (1024×600 fullscreen) - public/salty-face.js — Canvas rendering + ROS2 integration - server.js — Node.js HTTP server with CORS support - systemd/salty-face-server.service — Auto-start systemd service - docs/SALTY_FACE_WEB_APP.md — Complete setup & API documentation **Integration:** - Runs in Chromium kiosk (Issue #374) - Depends on rosbridge_server for WebSocket bridge - Serves on localhost:3000 (configurable) **Next:** Issue #371 (Accessibility enhancements) Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> |
|||
| 41a71c19fc |
feat: Replace GNOME with Cage + Chromium kiosk (Issue #374)
Lightweight fullscreen kiosk for MageDok 7" display: **Architecture:** - Cage: Minimal Wayland compositor (replaces GNOME) - Chromium: Fullscreen kiosk browser for SaltyFace web UI - PulseAudio: HDMI audio routing (from Issue #369) - Touch: HID input from MageDok USB device **Memory Savings:** - GNOME desktop: ~650MB RAM - Cage + Chromium: ~200MB RAM - Net gain: ~450MB for ROS2 workloads **Files:** - config/cage-magedok.ini — Cage display settings (1024×600@60Hz) - config/wayland-magedok.conf — Wayland output configuration - scripts/chromium_kiosk.sh — Cage + Chromium launcher - systemd/chromium-kiosk.service — Auto-start systemd service - launch/cage_display.launch.py — ROS2 launch configuration - docs/CAGE_CHROMIUM_KIOSK.md — Complete setup & troubleshooting guide **Next:** Issue #370 (Salty Face as web app in Chromium kiosk) Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> |
|||
| 7dfc1b9ee1 |
feat: battery coulomb counter (Issue #325)
Add coulomb counter for accurate SoC estimation independent of load: - New coulomb_counter module: integrate current over time to track Ah consumed * coulomb_counter_init(capacity_mah) initializes with battery capacity * coulomb_counter_accumulate(current_ma) integrates current at 100 Hz * coulomb_counter_get_soc_pct() returns SoC 0-100% (255 = invalid) * coulomb_counter_reset() for charge-complete reset - Battery module integration: * battery_accumulate_coulombs() reads motor INA219 currents and accumulates * battery_get_soc_coulomb() returns coulomb-based SoC with fallback to voltage * Initialize coulomb counter at startup with DEFAULT_BATTERY_CAPACITY_MAH - Telemetry updates: * JLink STATUS: use coulomb SoC if available, fallback to voltage-based * CRSF battery frame: now includes remaining capacity in mAh (from coulomb counter) * CRSF capacity field was always 0; now reflects actual remaining mAh - Mainloop integration: * Call battery_accumulate_coulombs() every tick for continuous integration * INA219 motor currents + 200 mA subsystem baseline = total battery draw Motor current sources (INA219 addresses 0x40/0x41) provide most power draw; Jetson ROS2 battery_node already prioritizes coulomb-based soc_pct from STATUS frame. Default capacity: 2200 mAh (typical lab 3S LiPo); configurable via firmware parameter. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> |
|||
| 9c2f830c8e |
feat: Add FC↔Orin UART verification (Issue #362)
Implements UART bridge verification between Flight Controller (STM32F722) and Jetson Orin. Changes: 1. jetson/scripts/uart_test.py (12.7 KB) - Opens /dev/ttyTHS1 at 921600 baud - Sends jlink binary test frames (PING, VERSION, ECHO) - Verifies CRC16-CCITT frame integrity - Logs transactions with timestamps - JSON result export and optional MQTT publishing 2. jetson/ros2_ws/src/saltybot_bridge/launch/uart_bridge.launch.py - ROS2 launch file for serial_bridge_node on UART port - Configurable port (default /dev/ttyTHS1), baud rate (921600) - Bridges FC telemetry to /saltybot/imu, /saltybot/balance_state - Publishes diagnostics to /diagnostics Usage: Test: sudo python3 jetson/scripts/uart_test.py Launch: ros2 launch saltybot_bridge uart_bridge.launch.py Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> |
|||
| 4ab8dc8b64 |
feat: Integrate IWDG watchdog timer driver (Issue #300)
- Replace safety.c's direct IWDG initialization with watchdog module API - Use watchdog_init(2000) for ~2s timeout in safety_init() - Use watchdog_kick() in safety_refresh() to feed the watchdog - Remove unused watchdog_get_divider() helper function - Watchdog now configured with automatic prescaler selection The watchdog module provides a clean, flexible IWDG interface that: - Automatically calculates prescaler and reload values - Detects watchdog-triggered resets via watchdog_was_reset_by_watchdog() - Supports timeout range of ~1ms to ~32 seconds - Integrates seamlessly with existing safety system Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> |