Skip to content

Teleop Control and Docs Restructure

2026-02-09

Two things today: getting browser-based robot control working through Foxglove, and restructuring the docs site from 7 tabs down to 4.

Teleop Control

The goal is to drive the Carter robot from a browser using Foxglove Studio. There are two paths to this:

teleop_twist_keyboard (working)

Added ros-jazzy-teleop-twist-keyboard to the Dockerfile. Run it in a tmux session inside the container and it publishes geometry_msgs/Twist directly to /cmd_vel. WASD-style control, sends zero velocity on key release so the robot actually stops. This works reliably.

Foxglove Joystick Extension (in progress)

Installed the foxglove-joystick extension for browser-based joystick control. This publishes sensor_msgs/Joy messages, which need converting to Twist via teleop_twist_joy.

Added to the container:

  • ros-jazzy-teleop-twist-joy (required adding the standard ROS 2 apt repo to the Dockerfile -- NVIDIA's base image only includes their own repos)
  • 70-teleop-twist-joy.sh entrypoint that starts the Joy-to-Twist converter with deadman switch disabled
  • A seed burst of Joy messages at startup to register the schema with the foxglove bridge

The Dockerfile also needed a fix: NVIDIA's base image ships with a broken yarn apt repo (expired GPG key) that causes apt-get update to fail. Added rm -f /etc/apt/sources.list.d/yarn.list before the update.

The ROS1 vs ROS2 Schema Bug

The joystick extension kept failing with "Unknown message definition for /joy". After debugging through multiple approaches (persistent publishers, burst seeding, checking GitHub issues), found the root cause in PR #13:

The original extension advertises with sensor_msgs/Joy (ROS1 schema name). ROS2 requires sensor_msgs/msg/Joy. The foxglove bridge rejects the advertise because it doesn't recognize the schema.

Built the fixed extension from MSSergeev's fork which adds ROS2 auto-detection, 20 Hz configurable publish rate, and axis deadzone filtering. The .foxe file is ready to install -- will test next session.

Docs Restructure

Reorganized the site from 7-8 nav tabs to 4:

Before After
Getting Started, Isaac Sim, Isaac ROS, Workstation, Networking, Project, Blog, commands.md Getting Started, Simulation, Infrastructure, Project

Related sections are now nested as subfolders with bold section headings in the sidebar:

  • Simulation contains Isaac Sim and Isaac ROS
  • Infrastructure contains Workstation, Networking, and Commands
  • Project contains Progress, About, and Blog

Created landing pages for Simulation and Infrastructure with grid cards linking to subsections.

New Documentation Pages

  • ROS 2 Topics -- all topics published by the Carter Warehouse scene (sensors, robot state, control, TF, system)
  • ROS Nodes -- all nodes in the Isaac ROS container (auto-start and on-demand) with data flow diagram
  • Updated the Dockerfile page to match current state (ROS 2 repo, teleop packages, entrypoints)