宇树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"?>
<package format="3">
<name>go1_description</name>
<version>0.0.0</version>
<description>The go1_description package</description>
<maintainer email="laikago@unitree.cc">unitree</maintainer>
<license>TODO</license>
<buildtool_depend>ament_cmake</buildtool_depend>
<depend>rclcpp</depend>
<depend>std_msgs</depend>
<depend>sensor_msgs</depend>
<depend>gazebo_ros</depend>
<depend>xacro</depend>
<test_depend>ament_lint_auto</test_depend>
<test_depend>ament_lint_common</test_depend>
<export>
<build_type>ament_cmake</build_type>
</export>
</package>
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