宇树ROS1开源模型在ROS2中Gazebo中仿真

news/2025/3/15 23:31:31/

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(DIRECTORYurdf/DESTINATION share/${PROJECT_NAME}/urdf
)# 安装启动文件
install(DIRECTORYlaunch/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_directorydef generate_launch_description():pkg_path = get_package_share_directory('go1_description')# 使用xacro命令生成URDFxacro_file = os.path.join(pkg_path, 'xacro', 'robot.xacro')robot_description = Command(['xacro ', xacro_file])# 启动Gazebogazebo = 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

在这里插入图片描述

6. 最终效果

在这里插入图片描述


http://www.ppmy.cn/news/1579427.html

相关文章

C语言零基础入门:嵌入式系统开发之旅

C语言零基础入门&#xff1a;嵌入式系统开发之旅 一、引言 嵌入式系统开发是当今科技领域中一个极具魅力和挑战性的方向。从智能家居设备到汽车电子系统&#xff0c;从智能穿戴设备到工业自动化控制&#xff0c;嵌入式系统无处不在。而C语言&#xff0c;作为嵌入式开发中最常…

用CSS画一条0.5px的线

上次面试前端被问到了这个问题&#xff0c;感觉有点懵懵的&#xff0c;我就回答了一个scaleY(0.5),这个是真的没想到&#xff0c;希望有需要的朋友可以去看看。随便记住一种就行。 1.第一种方式&#xff1a;通过缩放1px的线条实现视觉上的0.5px效果&#xff0c;兼容性较好。 …

外层元素旋转,其包括在内的子元素一并旋转(不改变旋转中心),单元测试

思路&#xff1a;外层旋转后坐标&#xff0c;元素旋转后坐标&#xff0c;计算偏移坐标 <template><div class"outbox"><label>角度: <input v-model.number"rotate" type"number" /></label><br><div c…

Linux驱动开发实战(五):Qt应用程序点RGB灯(保姆级快速入门!)

Linux驱动开发实战&#xff08;五&#xff09;&#xff1a;Qt应用程序点RGB灯&#xff08;保姆级快速入门&#xff01;&#xff09; 文章目录 Linux驱动开发实战&#xff08;五&#xff09;&#xff1a;Qt应用程序点RGB灯&#xff08;保姆级快速入门&#xff01;&#xff09;前…

Oracle中In和Exists区别分析

在Oracle中&#xff0c;IN和EXISTS都是用于子查询的条件判断&#xff0c;但它们在执行逻辑、性能和应用场景上有显著区别。以下是两者的主要差异&#xff1a; 1.执行机制 IN IN 先执行子查询&#xff0c;将子查询的结果集缓存到内存中&#xff0c;生成一个静态列表。 主查询的…

本地化语音识别CapsWriter结合内网穿透远程会议录音秒变文字稿

文章目录 前言1. 软件与模型下载2. 本地使用测试3. 异地远程使用3.1 内网穿透工具下载安装3.2 配置公网地址3.3 修改config文件3.4 异地远程访问服务端 4. 配置固定公网地址4.1 修改config文件 5. 固定tcp公网地址远程访问服务端 前言 今天我要给大家推荐一个绝对能让你 produ…

【Javascript网页设计】个人简历网页案例

代码如下: <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>个人简历 - 张三…

文件系统 linux ─── 第19课

前面博客讲解的是内存级文件管理,接下来介绍磁盘级文件管理 文件系统分为两部分 内存级文件系统 : OS加载进程 ,进程打开文件, OS为文件创建struct file 和文件描述符表 ,将进程与打开的文件相连, struct file 内还函数有指针表, 屏蔽了底层操作的差异,struct file中还有内核级…