宇树ROS1开源模型在ROS2中Gazebo中仿真
宇树ROS1开源模型在ROS2中Gazebo中仿真
以GO1为例
1 CMakelists.txt更新语法
cmake_minimum_required(VERSION 3.8) project(go1_description) if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES “Clang”) add_compile_options(-Wall -Wextra -Wpedantic) endif()
find dependencies
find_package(ament_cmake REQUIRED) find_package(rclcpp REQUIRED) find_package(std_msgs REQUIRED) find_package(sensor_msgs REQUIRED) find_package(gazebo_ros REQUIRED) find_package(xacro REQUIRED)
安装URDF和Xacro文件
install(DIRECTORY urdf/ DESTINATION share/${PROJECT_NAME}/urdf )
安装启动文件
install(DIRECTORY launch/ DESTINATION share/${PROJECT_NAME}/launch ) ament_package()
2 packge.xml更新语法
xml version=“1.0”?
go1_description 0.0.0 The go1_description package unitree TODO ament_cmake rclcpp std_msgs sensor_msgs gazebo_ros xacro ament_lint_auto ament_lint_common
ament_cmake
3 新建launch文件
import os from launch import LaunchDescription from launch.actions import DeclareLaunchArgument, IncludeLaunchDescription from launch.launch_description_sources import PythonLaunchDescriptionSource from launch.substitutions import Command, LaunchConfiguration, PathJoinSubstitution from launch_ros.actions import Node from ament_index_python.packages import get_package_share_directory def generate_launch_description(): pkg_path = get_package_share_directory(‘go1_description’)
使用xacro命令生成URDF
xacro_file = os.path.join(pkg_path, ‘xacro’, ‘robot.xacro’) robot_description = Command([‘xacro ‘, xacro_file])
启动Gazebo
gazebo = IncludeLaunchDescription( PythonLaunchDescriptionSource([os.path.join( get_package_share_directory(‘gazebo_ros’), ’launch’, ‘gazebo.launch.py’ )]) )
发布机器人状态
robot_state_publisher_node = Node( package=‘robot_state_publisher’, executable=‘robot_state_publisher’, output=‘both’, parameters=[{‘robot_description’: robot_description}] )
在Gazebo中生成实体
spawn_entity = Node( package=‘gazebo_ros’, executable=‘spawn_entity.py’, arguments=[’-topic’, ‘robot_description’, ‘-entity’, ‘my_robot’], output=‘screen’ ) return LaunchDescription([ DeclareLaunchArgument( ‘world’, default_value=‘worlds/empty.world’ ), gazebo, robot_state_publisher_node, spawn_entity, ])
4 colcon编译包
cd ~/suo/unitree_ros/robots/go1_description
colcon build –packages-select go1_description
source install/setup.bash
5 启动仿真
ros2 launch go1_description spawn_robot.launch.py