feat: Here4 DroneCAN GPS driver + NTRIP client (RTK ready) #726

Closed
sl-jetson wants to merge 0 commits from sl-jetson/here4-dronecan-driver into main
Collaborator

Summary

Ready for Here4 RTK GPS arriving Sunday. Closes Issue #725 (DroneCAN/WSS rosbridge PR was #725 — this is the Here4 implementation).

New packages

  • saltybot_dronecan_gps — DroneCAN driver for CubePilot Here4 RTK GPS

    • Subscribes uavcan.equipment.gnss.Fix2 (ID 1063) on can0 at 1 Mbps
    • Publishes /gps/fix (NavSatFix), /gps/vel (TwistStamped), /gps/rtk_status (String)
    • DroneCAN fix_type 0–6 → NavSatStatus + RTK label (NO_FIX / 2D / 3D / DGPS / RTK_FLOAT / RTK_FIXED)
    • Optional compass via uavcan.equipment.ahrs.MagneticFieldStrength
    • pip dep: python-dronecan
  • saltybot_ntrip_client — NTRIP RTCM3 corrections → DroneCAN RTCMStream

    • Connects to rtk2go.com:2101 (configurable), auto-reconnects on drop
    • Forwards corrections to Here4 via uavcan.equipment.gnss.RTCMStream
    • Publishes /ntrip/status (CONNECTED / DISCONNECTED / ERROR:…)
  • here4_gps.launch.py — launches both nodes with unified CAN + NTRIP params

Updated files

  • can_setup.sh — adds up dronecan mode (1 Mbps); VESC 500 kbps default unchanged
  • docker-compose.yml — adds here4-gps service with /dev/can0 passthrough + NET_ADMIN; resolves leftover merge conflict markers
  • outdoor_nav_params.yaml — adds here4_gps config section, updates RTK upgrade docs

Quickstart (Sunday when Here4 arrives)

# 1. Bring up CAN at 1Mbps
sudo ./jetson/scripts/can_setup.sh up dronecan

# 2. Set NTRIP creds in .env
NTRIP_MOUNT=RTCM3_GENERIC
NTRIP_USER=you@email.com

# 3. Start GPS stack
docker compose up -d here4-gps

# 4. Verify RTK
ros2 topic echo /gps/rtk_status   # → RTK_FIXED
ros2 topic echo /gps/fix

Test plan

  • can_setup.sh up dronecancan0 at 1000000 bps confirmed via ip -details link show can0
  • docker compose up here4-gps starts without errors
  • /gps/fix publishes once Here4 is powered on CAN bus
  • /gps/rtk_status shows RTK_FIXED after NTRIP connects
  • NTRIP reconnects automatically after simulated disconnect
  • /gps/vel publishes NED velocity
  • saltybot-outdoor goal tolerance tightens to 0.3m when rtk_status = RTK_FIXED

🤖 Generated with Claude Code

## Summary Ready for Here4 RTK GPS arriving Sunday. Closes Issue #725 (DroneCAN/WSS rosbridge PR was #725 — this is the Here4 implementation). ### New packages - **`saltybot_dronecan_gps`** — DroneCAN driver for CubePilot Here4 RTK GPS - Subscribes `uavcan.equipment.gnss.Fix2` (ID 1063) on `can0` at 1 Mbps - Publishes `/gps/fix` (NavSatFix), `/gps/vel` (TwistStamped), `/gps/rtk_status` (String) - DroneCAN fix_type 0–6 → NavSatStatus + RTK label (NO_FIX / 2D / 3D / DGPS / RTK_FLOAT / RTK_FIXED) - Optional compass via `uavcan.equipment.ahrs.MagneticFieldStrength` - pip dep: `python-dronecan` - **`saltybot_ntrip_client`** — NTRIP RTCM3 corrections → DroneCAN RTCMStream - Connects to `rtk2go.com:2101` (configurable), auto-reconnects on drop - Forwards corrections to Here4 via `uavcan.equipment.gnss.RTCMStream` - Publishes `/ntrip/status` (CONNECTED / DISCONNECTED / ERROR:…) - **`here4_gps.launch.py`** — launches both nodes with unified CAN + NTRIP params ### Updated files - **`can_setup.sh`** — adds `up dronecan` mode (1 Mbps); VESC 500 kbps default unchanged - **`docker-compose.yml`** — adds `here4-gps` service with `/dev/can0` passthrough + `NET_ADMIN`; resolves leftover merge conflict markers - **`outdoor_nav_params.yaml`** — adds `here4_gps` config section, updates RTK upgrade docs ## Quickstart (Sunday when Here4 arrives) ```bash # 1. Bring up CAN at 1Mbps sudo ./jetson/scripts/can_setup.sh up dronecan # 2. Set NTRIP creds in .env NTRIP_MOUNT=RTCM3_GENERIC NTRIP_USER=you@email.com # 3. Start GPS stack docker compose up -d here4-gps # 4. Verify RTK ros2 topic echo /gps/rtk_status # → RTK_FIXED ros2 topic echo /gps/fix ``` ## Test plan - [ ] `can_setup.sh up dronecan` → `can0` at 1000000 bps confirmed via `ip -details link show can0` - [ ] `docker compose up here4-gps` starts without errors - [ ] `/gps/fix` publishes once Here4 is powered on CAN bus - [ ] `/gps/rtk_status` shows `RTK_FIXED` after NTRIP connects - [ ] NTRIP reconnects automatically after simulated disconnect - [ ] `/gps/vel` publishes NED velocity - [ ] saltybot-outdoor goal tolerance tightens to 0.3m when rtk_status = RTK_FIXED 🤖 Generated with [Claude Code](https://claude.com/claude-code)
sl-jetson added 1 commit 2026-04-10 20:43:16 -04:00
New packages:
- saltybot_dronecan_gps: DroneCAN driver for CubePilot Here4 RTK GPS
  - Subscribes uavcan.equipment.gnss.Fix2 (ID 1063) on can0 at 1Mbps
  - Publishes /gps/fix (NavSatFix), /gps/vel (TwistStamped), /gps/rtk_status
  - Maps DroneCAN fix_type 0-6 → sensor_msgs NavSatStatus + RTK label
  - Optional compass via uavcan.equipment.ahrs.MagneticFieldStrength
- saltybot_ntrip_client: NTRIP RTCM3 → DroneCAN RTCMStream forwarding
  - Connects to rtk2go.com:2101 (configurable), auto-reconnects
  - Forwards corrections to Here4 via uavcan.equipment.gnss.RTCMStream
  - Publishes /ntrip/status (CONNECTED / DISCONNECTED / ERROR:<reason>)

New launch file:
- here4_gps.launch.py: launches both nodes with unified CAN + NTRIP params

Updated:
- can_setup.sh: adds 1Mbps DroneCAN mode (sudo ./can_setup.sh up dronecan)
  keeping 500kbps VESC default; CAN_BITRATE env var still overrides both
- docker-compose.yml: adds here4-gps service with /dev/can0 device passthrough
  and NET_ADMIN cap; resolves leftover merge conflict markers
- outdoor_nav_params.yaml: adds Here4 config section, updates RTK docs

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
sl-jetson closed this pull request 2026-04-20 19:17:39 -04:00

Pull request closed

Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: seb/saltylab-firmware#726
No description provided.