[Unitree Go2-W] ROS2 odometry and topic availability issues

Hi all,

I am a student currently working with a Unitree Go2-W robot, and we are facing some issues with the ROS 2 setup. We would like to clarify whether our setup is incomplete or misconfigured, or whether the observed behavior is expected.

Robot setup

Our current setup is:

  • Unitree Go2-W robot with the standard onboard hardware
  • Unitree L1 / UTLiDAR sensor
  • NVIDIA Jetson Orin dock / onboard NVIDIA computer
  • Intel RealSense D456 stereo camera mounted at the front of the robot
  • Manipulator arm purchased, but currently not mounted
  • ROS 2-based development setup, using DDS to inspect and run nodes
  • No additional 360° LiDAR currently installed

Basic robot operation works fine:

  • The robot starts normally.
  • We can control it with the controller.
  • We can access the Jetson via SSH.
  • The MYBOTSHOP web interface is reachable.
  • The go2-webserver module appears to be active.

However, we are seeing several ROS 2 issues, especially related to odometry and topic availability.

Main issue: visible ROS 2 topics, but missing / empty odometry

The main problem is that many ROS 2 topics are visible, but several important topics do not publish any messages. In particular, all odometry-related topics we found have message count 0.

We recorded several bags and attached the corresponding ros2 bag info outputs.

Observations

1. bag-info_domain0.txt

Recorded with:

ROS_DOMAIN_ID=0

In this domain, many sensor and robot topics are active. For example:

  • /front_realsense/depth/image_rect_raw
  • /front_realsense/color/image_raw
  • /utlidar/cloud
  • /utlidar/imu
  • /lowstate
  • /lf/lowstate
  • /lf/sportmodestate

However, the odometry / pose topics are visible but empty:

  • /utlidar/robot_odomCount: 0
  • /utlidar/robot_poseCount: 0

2. bag-info_domain10_launch.txt

Recorded with:

ROS_DOMAIN_ID=10

This was recorded directly after launching the robot, without manually activating additional modules in the MYBOTSHOP web interface.

At this point, only a small set of topics is visible, such as:

  • /go2_unit_38712/client_count
  • /go2_unit_38712/webserver/cmd_vel
  • /go2_unit_38712/e_stop

Most robot modules are initially inactive in the web interface, as shown in the attached screenshot webview_modules.png.

3. bag-info_domain10_all-modules-active.txt

Also recorded with:

ROS_DOMAIN_ID=10

For this recording, we manually activated all modules shown in the MYBOTSHOP web interface.

After activating the modules, several useful topics appear and publish messages, for example:

  • /go2_unit_38712/joint_states
  • /go2_unit_38712/platform/joint_states
  • /go2_unit_38712/sensor/imu/data
  • /go2_unit_38712/sportmodestate
  • /go2_unit_38712/tf
  • /go2_unit_38712/tf_static
  • /go2_unit_38712/robot_description

However, the odometry topics are still empty:

  • /go2_unit_38712/base/odomCount: 0
  • /go2_unit_38712/utlidar/robot_odomCount: 0

Also, /go2_unit_38712/utlidar/cloud has Count: 0 in this domain, while /utlidar/cloud publishes data in ROS_DOMAIN_ID=0.

Questions

Could you please help us clarify the following points?

  1. Which ROS 2 topic is the intended odometry source for the Go2-W?
    Should we use one of the following topics, or is there another expected topic?

    • /utlidar/robot_odom
    • /utlidar/robot_pose
    • /go2_unit_38712/base/odom
    • /go2_unit_38712/utlidar/robot_odom
    • another topic?
  2. Is it expected that these odometry topics are visible but publish zero messages?
    If not, what usually causes this behavior?

  3. Does odometry require a specific module, launch file, service, robot mode, or configuration to be active?
    For example, does it require a navigation, SLAM, state-publisher, hardware-controller, or domain-bridge module?

  4. Which ROS domain should we use as the canonical interface for development?
    We currently see different topic sets in ROS_DOMAIN_ID=0 and ROS_DOMAIN_ID=10. I guess some of the topics are just “copied” from domain0 onto domain10 using your domain_bridge module.

  5. Is there a Go2-W-specific robot description / URDF package available?
    We found a go2_description package inside your repo (https://github.com/MYBOTSHOP/qre_go2) containing the normal Go2 URDF, but we could not find a Go2-W-specific description package.

    Since our robot is the wheeled Go2-W version and we also purchased the manipulator arm, we would like to know whether there is an official or MYBOTSHOP-modified Go2-W URDF including things like the manipulator-arm or the jetson-mount…

  6. Could reinstalling or re-running the initial setup fix this?
    We already have access to the https://github.com/MYBOTSHOP/qre_go2 repository. Someone already performed the initial setup for the robot once, but we are not sure whether something was missed or broken. Maybe reinstalling or re-running parts of the setup is can help?

Attachments

We attached the following files:

  • bag-info_domain0.txt
  • bag-info_domain10_launch.txt
  • bag-info_domain10_all-modules-active.txt
  • webview_modules.png

If you need the full rosbag files, additional screenshots, SSH outputs, service logs, or a live topic/node dump, we are happy to provide them.

Best regards!

bag-info_domain0.txt (9.6 KB)
bag-info_domain10_all-modules-active.txt (2.6 KB)
bag-info_domain10_launch.txt (1.0 KB)

  1. Unitree has informed us last year that they would enable publishing of the odometry on /utlidar/robot_odom, however, it has been implemented yet. We recommend using FastLio2 or mola or some other lidar based odometry or camera odometry until it comes and/or if it comes.
  2. Yes
  3. No, generally it should auto come but for GO2-W its in development its recommend to use some sort of LIO in domain id 10 with namespace which auto populates all other topics.
  4. We recommend 10 and topics that you need from 0 can come via domain bridge but there is no hard and fast rule.
  5. It is there you just have to see through the high-level description and disable foot with env_var 0 and and enable wheel with env_var 1. You cana go through go2_description again cerfull and you will find it in either the launch file or the xacro file.
  6. Not exactly as same repo is used for GO2.

Alright, thanks for your reply!

It seems like the urdf is generated correctly with the recommended xacro settings :+1:.

I will try your other recommendations and come back to you if I encounter further problems :slightly_smiling_face: