ROS2 Packages for simulating Unitree Go2 in Gazebo ROS2 and navigating the robot to a desired goal using Nav2.
Tested on ROS2 Humble.
This repo includes the following packages:
go2_description
/xacro
contains the robot description, /meshes
contains the mesh files used./config
is added to contain the ros2 control parameters for joint level control and state feedback interfacechamp
packages
gait.yaml
and state_estimation
node. (Experimental changes in the trajectory_planner to change stance and swing time didn't show great results and threfore have been commented out).aws-robomaker-small-warehouse-world
no_roof_small_warehouse.world
, the models and the map used for navigation.ros2 launch champ_config gazebo.launch.py
ros2 launch champ_config navigate.launch.py
This hand held video recording has to be changed to screen recording
champ_config
gazebo.launch.py
champ_bringup
bringup.launch.py
robot_state_publisher
with the robot_description
from go2_description
xacro/go2_robot.xacro
champ_base
quadruped_controller_node
. This node subscribes to \cmd_vel
(and body_pose
) commands, generates gaits to achieve the body velocity and publishes joint trajectory msgs on joint_group_effort_controller/joint_trajectory
(joint_control_topic param).
gait.yaml
file. The nominal_height
parameter is reduced to better suit go2. This had a big positive impact in the performance (stability) of the go2 controller performance. champ_base
state_estimation_node
. This node subscribes to joint_states
and foot_contacts
, estimates base_link to base_footprint transform & odometry and publishes base_to_footprint_pose
&odom/raw
.
state_estimation_node
to simply double the linear velocity published in odom/raw
.ekf_node
(s) from the robot_localisation
package to fuse estimated raw odometry with imu. These nodes also publish the tf
(s) base_footprint
-> base_link
and odom
->base_footprint
champ_gazebo
gazebo.launch.py
gzserver.launch.py
and gzclient.launch.py
from gazebo_ros
packagespawn_entity.py
from gazebo_ros
package
using the robot description from /robot_description
topic.contact_sensor
node from the champ_gazebo
package. this node subscribes to /physics/contacts
and publishes to foot_contacts
(used by state_estimation_node
).joint_group_position_controller
and joint_group_effort_controller
in the ro2_control controller_manager.champ_config
navigate.launch.py
champ_navigation
navigate.launch.py
and provides map.yaml
and navigation.yaml
as launch arguments.
nav2_bringup
bringup_launch.py
with the map and params provided.rviz2
with the navigation2.rviz
configuration.The packages not mentioned so far ar champ
and champ_msgs
. champ
contains the library files (from https://github.com/chvmp/libchamp.git) needed for the quadruped_controller_node and state_estimation_node. champ_msgs
contains the custom msg types used in the aforementioned nodes.
That wraps the tour of this repo.