Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

92 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Unitree-go2w

slide: https://tzf230201.github.io/unitree-go2w-autonomous-carrier/

web server : http://192.168.0.90:8080/

Unitree

Results

The images below show the SLAM result and the real environment used in the experiment.

SLAM map result

image_3 shows the map produced by the SLAM pipeline.

Real environment

image_4 shows the real-world location corresponding to the SLAM experiment.

Packages

Package Description
FAST_LIO_ROS2_HesaiLidar_XT16 FAST-LIO2 with native Hesai PandarXT-16 support (no Livox dependency required)
HesaiLidar_ROS_2.0 Default Hesai LiDAR ROS 2 driver
go2w_fast_lio2 Launch & config for FAST-LIO2 + Hesai driver on Go2W
go2w_description Go2W URDF/xacro robot description
go2w_joints_state_and_imu_publisher Joint states & IMU publisher for Go2W
go2w_cmd_vel_control Velocity control for Go2W
pointcloud_to_laserscan Convert 3D point cloud to 2D laser scan
om6dof_perception YOLOX + RealSense RGB-D detection, 3D bounding boxes, EoE distance, and web preview
om6dof_pick_and_place MoveIt pickup, visual tracking/searching, direct 3D approach, and automatic upper-surface fallback for low objects

OM6DOF perception pickup

The Kublab web monitor can start OM6DOF perception, select a YOLO target such as bottle, track it with the wrist camera, search low/medium/high views, and run a guarded pickup. Pickup approaches along the live three-dimensional EoE-to-object ray, re-centres pan/tilt at each standoff, and only then performs the final straight advance and grasp.

When a low object's centre is outside the normal front-pick Z bound, the backend can use the upper surface of its YOLO 3D bounding box and descend from above. This fallback still enforces X/Y bounds, a minimum object Z, a minimum EoE Z, wrist-branch continuity, and a complete hover-to-grasp IK check.

Detailed operation, services, safety behaviour, and tuning parameters are in om6dof_pick_and_place/README.md.

How to Use this Repo

1. Go to workspace

cd ~/ros2_ws/src/

2. Clone this repo

git clone --recurse-submodules https://github.com/tzf230201/unitree-go2w-autonomous-carrier.git

3. Check out ROS 2 branch for LIO-SAM

cd LIO-SAM
git checkout ros2
cd ..

4. Install dependencies

sudo apt install ros-humble-perception-pcl \
       ros-humble-pcl-msgs \
       ros-humble-vision-opencv \
       ros-humble-xacro \
       ros-humble-pcl-conversions
sudo apt-get install libboost-all-dev libyaml-cpp-dev

5. Build packages

cd ~/ros2_ws

# Build hesai_ros_driver first
colcon build --packages-select hesai_ros_driver

# Source, then build fast_lio (native Hesai support, no Livox SDK needed)
source install/setup.bash
colcon build --packages-select fast_lio

# Source, then build remaining packages
source install/setup.bash
colcon build

6. Run FAST-LIO2 with Hesai PandarXT-16

source ~/ros2_ws/install/setup.bash
ros2 launch go2w_fast_lio2 hesai_lidar_xt16_fast_lio2.launch.py rviz:=true

This launches:

  • Hesai LiDAR driver (default, publishes /lidar_points)
  • FAST-LIO2 with native Hesai handler (lidar_type: 5)
  • Go2W robot description & joint state publisher
  • RViz2 (optional, disable with rviz:=false)

7. Run go2w_nav2 SLAM and navigation

The go2w_nav2 SLAM launch now starts the required navigation stack around FAST-LIO2:

  • go2w_fast_lio2 is launched automatically by default with FAST-LIO RViz disabled
  • /Odometry is projected into a planar /odom
  • FAST-LIO point cloud is converted into /scan
  • slam_toolbox, Nav2, RViz, and go2w_cmd_vel_control are launched together

Run:

source ~/ros2_ws/install/setup.bash
ros2 launch go2w_nav2 slam.launch.py

If you already launched FAST-LIO2 in another terminal, disable the internal include:

source ~/ros2_ws/install/setup.bash
ros2 launch go2w_nav2 slam.launch.py launch_fast_lio:=false

Useful options:

# Disable Nav2 RViz
ros2 launch go2w_nav2 slam.launch.py nav2_rviz:=false

# Disable cmd_vel bridge to the robot
ros2 launch go2w_nav2 slam.launch.py launch_cmd_vel_bridge:=false

How to use RViz:

  • Wait a few seconds until FAST-LIO2, SLAM, and Nav2 are all active.
  • Use 2D Pose Estimate to set the robot initial pose on the map.
  • Use 2D Goal Pose to send a navigation goal.
  • When navigation is successful, Nav2 publishes /cmd_vel, and go2w_cmd_vel_control forwards it to /api/sport/request.

Important notes for successful go2w_nav2 operation:

  • go2w_nav2 depends on valid /scan, /odom, /map, and TF between map -> odom -> base_footprint.
  • The package includes a planar odometry projector and pointcloud-to-laserscan converter because Nav2 and slam_toolbox expect 2D navigation data.
  • The Nav2 behavior tree XML files must be set correctly. If they are empty, RViz goals are accepted but immediately fail with Behavior tree threw exception: Empty Tree.
  • If a goal is received but the robot does not move, check whether /navigate_to_pose/_action/status becomes 6 (ABORTED).
  • If old processes are still running, restart the launch completely after rebuilding:
source ~/ros2_ws/install/setup.bash
ros2 launch go2w_nav2 slam.launch.py

(Optional) Livox LiDAR support

If you want to use a Livox LiDAR instead, install Livox SDK2 and livox_ros_driver2:

# Install Livox SDK2
cd /tmp
git clone https://github.com/Livox-SDK/Livox-SDK2
cd Livox-SDK2
mkdir build && cd build
cmake .. && make -j$(nproc)
sudo make install

# Build livox_ros_driver2
cd ~/ros2_ws
colcon build --packages-select livox_ros_driver2 \
  --cmake-args -DROS_EDITION=ROS2 -DHUMBLE_ROS=humble

# Rebuild fast_lio (will auto-detect livox_ros_driver2 and enable Livox support)
source install/setup.bash
colcon build --packages-select fast_lio

Legacy Navigation Result

Legacy Nav2 result

image_2 shows the Nav2 result from the older version using LIO-SAM (see Realeases V1) of the program and is kept here as a reference.

Acknowledgement

About

Japan's Moonshot Project demo

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages