Unitree Go1 Quadruped¶
GO1 April Tag Follower¶
GO1 setup and SDK docs: see the Ingenuity Labs Guide Wiki's "Go1 Quadruped Robot" page.
The current experimental setup involves connecting the remote desktop and all onboard computers on the Go1 to the same wired network, for smooth data transfer with low latency while using the remote system's computational power. Images are manually sent from the Go1's head and body Jetson Nanos to the remote system (where ROS master is running) using an adjusted Unitree camera SDK plugin (see the MItHRIL turtlebot4 GitLab repository). Using the images in ROS nodes, final high-level commands are sent to the Go1 as UDP packets.
User PC¶
Install and set up the environment for ROS1 on your host machine, then build a catkin workspace:
mkdir -p catkin_ws/src # 'catkin_ws' can be anything
cd ~/catkin_ws/src
git clone -b v3.8.0 https://github.com/unitreerobotics/unitree_legged_sdk
git clone -b v3.8.0 https://github.com/unitreerobotics/unitree_ros_to_real
cd ~/catkin_ws/src
catkin_make
source ~/catkin_make/devel/setup.bash
Replace the unitree_legged_real package with the custom package containing the required controllers for AprilTag detection, from the MItHRIL turtlebot4 GitLab repository (Go1/go1 april tag experimental setup/unitree_legged_real), then build the workspace again.
Computer Architecture¶
Configure the wired network settings of your system per the wired networking section of the GO1 docs (on Ubuntu 22 this can be done via the GUI).
Go1 Setup¶
SSH into the head Nano to extract the image from the head (front) camera:
ssh unitree@192.168.123.13
Passkey: 123
Kill any existing process using the camera before launching the SDK:
ps -aux | grep point_cloud_node | awk '{print $2}' | xargs kill -9
ps -aux | grep mqttControlNode | awk '{print $2}' | xargs kill -9
ps -aux | grep live_human_pose | awk '{print $2}' | xargs kill -9
ps -aux | grep rosnode | awk '{print $2}' | xargs kill -9
Navigate to the executables of example_putImage.cc in the UnitreeCameraSDK. Note: every time you change code or configuration files, clean the previous build first (cd build && rm -rf *) and rebuild (cmake .. && make).
cd UnitreecameraSDK/bins
./example_putImagetrans
Repeat the same steps for accessing the left and right cameras from the body Nano (192.168.123.14): run example_putimage2 for the left camera and example_putImageTrans for the right camera.
Note: the controllers above are configured to the remote device IP
192.168.123.1by default. If your remote system's IP differs (check withhostname -I), update the config filestrans_rect_config.yamlaccordingly and recompile/rebuild on both the head and body Nanos.
Set Up ROS Master on the Remote System¶
Export ROS topics from the Unitree Go1's sports RPi (192.168.123.161) to the remote system:
export ROS_MASTER_URI=https://192.168.123.161:11311
export ROS_IP=192.168.123.1 # your machine's IP
Run GUI¶
A GUI script (from the MItHRIL turtlebot4 repository, Go1/go1 april tag experimental setup/run_gui.py) lets you run and kill various ROS nodes from the host machine.
Known Issues¶
Yaw issue: in an attempt to maintain a fixed lateral distance from the AprilTag, the Go1 tends to move toward or bump into the tag while following it. Proposed fix: use the AprilTag library's angle detection (tilt/inclination of the tag from horizontal) to adjust the commanded yaw speed of the Go1. TODOs and commented-out sample code for this were added to spot_scripts for reference.
Latency errors when running from a laptop: ensure the laptop's power settings are set to a power-efficient mode, and ensure the laptop is sufficiently charged (connect a charger while testing if possible).
Migration note: the source page linked to several GitLab repository paths under
code.engineering.queensu.ca/mithril/turtlebot4(the old GitLab hostname); confirm the equivalent paths resolve undercode.smithengineering.queensu.ca/mithril/turtlebot4, plus check the source page's Google Drive video link for a config-file reference.