vla学习笔记(2) lerobot配置gazebo
一、写gazebo.launch.py直接复制下列文件并且修改对应的文件名称import os from launch import LaunchDescription from launch.actions import ExecuteProcess, RegisterEventHandler, TimerAction from launch_ros.actions import Node from launch_ros.substitutions import FindPackageShare from launch.event_handlers import OnProcessExit from launch.substitutions import PathJoinSubstitution import xacro import re def remove_comments(text): pattern r!--(.*?)-- return re.sub(pattern, , text, flagsre.DOTALL) def generate_launch_description(): robot_name_in_model lerobot package_name description_lerobot urdf_name lerobot_camera.urdf pkg_share FindPackageShare(packagepackage_name).find(package_name) urdf_model_path os.path.join(pkg_share, furdf/{urdf_name}) # gazebo world 路径 gazebo_world os.path.join(pkg_share, gazebo_world, cabinet.world) # 控制器yaml路径 moveit_config/config/ros2_controllers.yaml controller_config_path PathJoinSubstitution([ FindPackageShare(moveit_config), config, ros2_controllers.yaml ]) # 1. 启动Gazebo仿真环境 start_gazebo_cmd ExecuteProcess( cmd[gazebo, --verbose, gazebo_world, -s, libgazebo_ros_init.so, -s, libgazebo_ros_factory.so], outputscreen ) # 2. 独立controller_manager进程解决找不到服务的核心 controller_manager_node Node( packagecontroller_manager, executableros2_control_node, parameters[controller_config_path], outputscreen ) # 解析xacro/urdf清除注释避免解析异常 xacro_file urdf_model_path doc xacro.parse(open(xacro_file)) xacro.process_doc(doc) params {robot_description: remove_comments(doc.toxml())} # 3. robot_state_publisher 发布机器人描述与tf node_robot_state_publisher Node( packagerobot_state_publisher, executablerobot_state_publisher, parameters[{use_sim_time: True}, params, {publish_frequency: 15.0}], outputscreen ) # 4. 在Gazebo中生成机械臂模型 spawn_entity_cmd Node( packagegazebo_ros, executablespawn_entity.py, arguments[-entity, robot_name_in_model, -topic, robot_description], outputscreen ) # 自动加载控制器 # 关节状态广播器 load_joint_state_broadcaster ExecuteProcess( cmd[ros2, control, load_controller, --set-state, active, joint_state_broadcaster], outputscreen, ) # 手臂轨迹控制器 load_group_controller ExecuteProcess( cmd[ros2, control, load_controller, --set-state, active, lerobot_group_controller], outputscreen, ) # 腕部夹爪控制器 load_gripper_controller ExecuteProcess( cmd[ros2, control, load_controller, --set-state, active, lerobot_gripper_controller], outputscreen, ) # 时序延时模型生成完成后等待8秒再加载控制器 delay_after_spawn TimerAction( period8.0, actions[load_joint_state_broadcaster] ) # 广播器启动2秒后同时启动两组轨迹控制器 delay_after_broadcaster TimerAction( period2.0, actions[load_group_controller, load_gripper_controller] ) # 事件绑定 spawn_done_handler RegisterEventHandler( event_handlerOnProcessExit( target_actionspawn_entity_cmd, on_exit[delay_after_spawn], ) ) broadcaster_done_handler RegisterEventHandler( event_handlerOnProcessExit( target_actionload_joint_state_broadcaster, on_exit[delay_after_broadcaster], ) ) ld LaunchDescription() ld.add_action(spawn_done_handler) ld.add_action(broadcaster_done_handler) # 固定启动顺序Gazebo → controller_manager → robot_state_publisher → spawn模型 ld.add_action(start_gazebo_cmd) ld.add_action(controller_manager_node) ld.add_action(node_robot_state_publisher) ld.add_action(spawn_entity_cmd) return ld二、ros2_controllers.yaml# This config file is used by ros2_control controller_manager: ros__parameters: update_rate: 100 # Hz hardware_interface: type: gazebo_ros2_control/GazeboSystem lerobot_group_controller: type: joint_trajectory_controller/JointTrajectoryController lerobot_gripper_controller: type: joint_trajectory_controller/JointTrajectoryController joint_state_broadcaster: type: joint_state_broadcaster/JointStateBroadcaster lerobot_group_controller: ros__parameters: joints: - Shoulder_Rotation - Shoulder_Pitch - Elbow - Wrist_Pitch command_interfaces: - position state_interfaces: - position - velocity lerobot_gripper_controller: ros__parameters: joints: - Wrist_Roll - Gripper command_interfaces: - position state_interfaces: - position - velocity三、urdfrobot nameso_arm_100_5dof link namebase_link gazebo materialGazebo/Grey/material /gazebo /link joint namebase_link_joint typefixed parent linkbase_link/ child linkBase/ origin rpy0 0 0 xyz0 0 0/ /joint link nameBase inertial origin rpy0 0 0 xyz-2.45960666746703E-07 0.0311418169687909 0.0175746661003382/ mass value0.193184127927598/ inertia ixx0.000137030709467877 ixy2.10136126944992E-08 ixz4.24087422551286E-09 iyy0.000169089551209259 iyz2.26514711036514E-05 izz0.000145097720857224/ /inertial visual origin rpy0 0 0 xyz0 0 0/ geometry mesh filenamefile://$(find description_lerobot)/models/so_arm_100_5dof/meshes/Base.STL/ /geometry material namebrightyellow color rgba1.0 0.9921568627450981 0.00392156862745098 1.0/ /material /visual collision origin rpy0 0 0 xyz0 0 0/ geometry mesh filenamefile://$(find description_lerobot)/models/so_arm_100_5dof/meshes/Base.STL scale0.9 0.9 0.9/ /geometry /collision /link link nameShoulder_Rotation_Pitch inertial origin rpy0 0 0 xyz-9.07886224712597E-05 0.0590971820568318 0.031089016892169/ mass value0.119226314127197/ inertia ixx5.90408775624429E-05 ixy4.90800532852998E-07 ixz-5.90451772654387E-08 iyy3.21498601038881E-05 iyz-4.58026206663885E-06 izz5.86058514263952E-05/ /inertial visual origin rpy0 0 0 xyz0 0 0/ geometry mesh filenamefile://$(find description_lerobot)/models/so_arm_100_5dof/meshes/Shoulder_Rotation_Pitch.STL/ /geometry material namebrightyellow color rgba1.0 0.9921568627450981 0.00392156862745098 1.0/ /material /visual collision origin rpy0 0 0 xyz0 0 0/ geometry mesh filenamefile://$(find description_lerobot)/models/so_arm_100_5dof/meshes/Shoulder_Rotation_Pitch.STL scale0.9 0.9 0.9/ /geometry /collision /link joint nameShoulder_Rotation typerevolute origin rpy1.5708 0 0 xyz0 -0.0452 0.0165/ parent linkBase/ child linkShoulder_Rotation_Pitch/ axis xyz0 -1 0/ limit effort1000 lower-1.96 upper1.96 velocity5.0/ dynamics damping0.1/ /joint link nameUpper_Arm inertial origin rpy0 0 0 xyz-1.7205170190925E-05 0.0701802156327694 0.00310545118155671/ mass value0.162409284599177/ inertia ixx0.000167153146617081 ixy1.03902689187701E-06 ixz-1.20161820645189E-08 iyy7.01946992214245E-05 iyz2.11884806298698E-06 izz0.000213280241160769/ /inertial visual origin rpy0 0 0 xyz0 0 0/ geometry mesh filenamefile://$(find description_lerobot)/models/so_arm_100_5dof/meshes/Upper_Arm.STL/ /geometry material namebrightyellow color rgba1.0 0.9921568627450981 0.00392156862745098 1.0/ /material /visual collision origin rpy0 0 0 xyz0 0 0/ geometry mesh filenamefile://$(find description_lerobot)/models/so_arm_100_5dof/meshes/Upper_Arm.STL scale0.9 0.9 0.9/ /geometry /collision /link joint nameShoulder_Pitch typerevolute origin rpy0 0 0 xyz0 0.1025 0.0306/ parent linkShoulder_Rotation_Pitch/ child linkUpper_Arm/ axis xyz1 0 0/ limit effort1000 lower-1.745 upper1.745 velocity5.0/ dynamics damping0.1/ /joint link nameLower_Arm inertial origin rpy0 0 0 xyz-0.00339603710186651 0.00137796353960074 0.0768006751156044/ mass value0.147967774582291/ inertia ixx0.000105333995841409 ixy1.73059237226499E-07 ixz-1.1720305455211E-05 iyy0.000138766654485212 iyz1.77429964684103E-06 izz5.08741652515214E-05/ /inertial visual origin rpy0 0 0 xyz0 0 0/ geometry mesh filenamefile://$(find description_lerobot)/models/so_arm_100_5dof/meshes/Lower_Arm.STL/ /geometry material namebrightyellow color rgba1.0 0.9921568627450981 0.00392156862745098 1.0/ /material /visual collision origin rpy0 0 0 xyz0 0 0/ geometry mesh filenamefile://$(find description_lerobot)/models/so_arm_100_5dof/meshes/Lower_Arm.STL scale0.9 0.9 0.9/ /geometry /collision /link joint nameElbow typerevolute origin rpy0 0 0 xyz0 0.11257 0.028/ parent linkUpper_Arm/ child linkLower_Arm/ axis xyz1 0 0/ limit effort1000 lower-1.5 upper1.5 velocity5.0/ dynamics damping0.1/ /joint link nameWrist_Pitch_Roll inertial origin rpy0 0 0 xyz-0.00852653127372418 -0.0352278997897927 -2.34622481569413E-05/ mass value0.066132067097723/ inertia ixx1.95717492443445E-05 ixy-6.62714374412293E-07 ixz5.20089016442066E-09 iyy2.38028417569933E-05 iyz4.09549055863776E-08 izz3.4540143384536E-05/ /inertial visual origin rpy0 0 0 xyz0 0 0/ geometry mesh filenamefile://$(find description_lerobot)/models/so_arm_100_5dof/meshes/Wrist_Pitch_Roll.STL/ /geometry material namebrightyellow color rgba1.0 0.9921568627450981 0.00392156862745098 1.0/ /material /visual collision origin rpy0 0 0 xyz0 0 0/ geometry mesh filenamefile://$(find description_lerobot)/models/so_arm_100_5dof/meshes/Wrist_Pitch_Roll.STL scale0.9 0.9 0.9/ /geometry /collision /link joint nameWrist_Pitch typerevolute origin rpy-1.57079 0 0 xyz0 0.0052 0.1349/ parent linkLower_Arm/ child linkWrist_Pitch_Roll/ axis xyz1 0 0/ limit effort1000 lower-1.658 upper1.658 velocity5.0/ dynamics damping0.1/ /joint link nameFixed_Gripper inertial origin rpy0 0 0 xyz0.00552376906426563 -0.0280167153359021 0.000483582592841092/ mass value0.0929859131176897/ inertia ixx4.3328249304211E-05 ixy7.09654328670947E-06 ixz5.99838530879484E-07 iyy3.04451747368212E-05 iyz-1.58743247545413E-07 izz5.02460913506734E-05/ /inertial visual origin rpy0 0 0 xyz0 0 0/ geometry mesh filenamefile://$(find description_lerobot)/models/so_arm_100_5dof/meshes/Fixed_Gripper.STL/ /geometry material namebrightyellow color rgba1.0 0.9921568627450981 0.00392156862745098 1.0/ /material /visual collision origin rpy0 0 0 xyz0 0 0/ geometry mesh filenamefile://$(find description_lerobot)/models/so_arm_100_5dof/meshes/Fixed_Gripper.STL scale0.9 0.9 0.9/ /geometry /collision /link joint nameWrist_Roll typerevolute origin rpy0 1.57079 0 xyz0 -0.0601 0/ parent linkWrist_Pitch_Roll/ child linkFixed_Gripper/ axis xyz0 1 0/ limit effort1000 lower-2.75 upper2.75 velocity5.0/ dynamics damping0.1/ /joint link nameMoving_Jaw inertial origin rpy0 0 0 xyz-0.00161744605468241 -0.0303472584046471 0.000449645961853651/ mass value0.0202443794940372/ inertia ixx1.10911325081525E-05 ixy-5.35076503033314E-07 ixz-9.46105662101403E-09 iyy3.03576451001973E-06 iyz-1.71146075110632E-07 izz8.9916083370498E-06/ /inertial visual origin rpy0 0 0 xyz0 0 0/ geometry mesh filenamefile://$(find description_lerobot)/models/so_arm_100_5dof/meshes/Moving_Jaw.STL/ /geometry material namebrightyellow color rgba1.0 0.9921568627450981 0.00392156862745098 1.0/ /material /visual collision origin rpy0 0 0 xyz0 0 0/ geometry mesh filenamefile://$(find description_lerobot)/models/so_arm_100_5dof/meshes/Moving_Jaw.STL scale0.9 0.9 0.9/ /geometry /collision /link joint nameGripper typerevolute origin rpy3.1416 0 3.1416 xyz-0.0202 -0.0244 0/ parent linkFixed_Gripper/ child linkMoving_Jaw/ axis xyz0 0 1/ limit effort1000 lower-0.1792 upper1.5708 velocity5.0/ dynamics damping0.1/ /joint link nameEnd_Effector visual origin rpy0 0 0 xyz0 0 0/ geometry box size0.01 0.01 0.01/ /geometry material namered color rgba1.0 0.0 0.0 1/ /material /visual /link joint nameEnd_Effector_Joint typefixed parent linkFixed_Gripper/ child linkEnd_Effector/ origin rpy0 0 0 xyz0.0 -0.09 0.0/ /joint gazebo referencebase_link materialGazebo/Yellow/material gravitytrue/gravity selfCollidefalse/selfCollide /gazebo gazebo referenceBase materialGazebo/Yellow/material selfCollidefalse/selfCollide /gazebo gazebo referenceShoulder_Rotation_Pitch materialGazebo/Yellow/material selfCollidefalse/selfCollide /gazebo gazebo referenceUpper_Arm materialGazebo/Yellow/material /gazebo gazebo referenceLower_Arm materialGazebo/Yellow/material /gazebo gazebo referenceWrist_Pitch_Roll materialGazebo/Yellow/material /gazebo gazebo referenceFixed_Gripper materialGazebo/Yellow/material /gazebo gazebo referenceMoving_Jaw materialGazebo/Yellow/material /gazebo gazebo referencedepth_camera_link materialGazebo/Yellow/material /gazebo ros2_control nameGazeboSystem typesystem hardware plugingazebo_ros2_control/GazeboSystem/plugin /hardware joint nameShoulder_Rotation command_interface nameposition/ state_interface nameposition param nameinitial_value0.0/param /state_interface state_interface namevelocity/ /joint joint nameShoulder_Pitch command_interface nameposition/ state_interface nameposition param nameinitial_value0.0/param /state_interface state_interface namevelocity/ /joint joint nameElbow command_interface nameposition/ state_interface nameposition param nameinitial_value0.0/param /state_interface state_interface namevelocity/ /joint joint nameWrist_Pitch command_interface nameposition/ state_interface nameposition param nameinitial_value0.0/param /state_interface state_interface namevelocity/ /joint joint nameWrist_Roll command_interface nameposition/ state_interface nameposition param nameinitial_value0.0/param /state_interface state_interface namevelocity/ /joint joint nameGripper command_interface nameposition/ state_interface nameposition param nameinitial_value0.0/param /state_interface state_interface namevelocity/ /joint /ros2_control gazebo plugin filenamelibgazebo_ros2_control.so namegazebo_ros2_control parameters$(find moveit_config)/config/ros2_controllers.yaml/parameters robot_param_noderobot_state_publisher/robot_param_node /plugin /gazebo /robot四、最后效果图

相关新闻

概念、概要、详细设计编写心法

概念、概要、详细设计编写心法

一文讲清概念设计、概要设计、详细设计:别再把三种文档写混了设计文档不是越细越好,而是要在正确阶段回答正确问题:概念设计统一业务语言,概要设计搭系统骨架,详细设计画代码施工图。很多研发同学写设计文档时&#xf…

2026/7/20 22:52:40 阅读更多 →
python数据可视化技巧的100个练习 -- 26. 平行坐标图用于客户数据分析

python数据可视化技巧的100个练习 -- 26. 平行坐标图用于客户数据分析

重要性★★★★☆ 难度★★★☆☆ 你是一家零售公司的数据分析师。你的经理要求你分析客户数据以识别模式和趋势。你需要创建一个平行坐标图来可视化不同客户属性(如年龄、年收入和消费得分)之间的关系。 生成一个包含以下列的样本数据集:‘Age’(年龄)、‘Annual Inco…

2026/7/21 19:34:19 阅读更多 →
HarmonyOS7自定义样式跑马灯实战:Marquee 样式定制与视觉层次设计

HarmonyOS7自定义样式跑马灯实战:Marquee 样式定制与视觉层次设计

文章目录前言先把这页在干什么看明白状态字段不多,但分工要清楚哪几个函数最值得先看第一段关键代码:页面是怎么被带起来的第二段关键代码:真正决定交互手感的地方把页面跑起来之后,建议你这样操作一遍如果我把它迁进正式项目这个…

2026/7/21 17:09:47 阅读更多 →

最新新闻

PKUAutoElective项目架构演进:从v1.0到v6.0的技术升级历程

PKUAutoElective项目架构演进:从v1.0到v6.0的技术升级历程

PKUAutoElective项目架构演进:从v1.0到v6.0的技术升级历程 【免费下载链接】PKUAutoElective 北大选课网补退选阶段自动选课小工具 项目地址: https://gitcode.com/gh_mirrors/pk/PKUAutoElective PKUAutoElective作为北大选课网补退选阶段的自动选课小工具&…

2026/7/21 21:00:25 阅读更多 →
从入门到精通:Inkling多模态输入输出全流程详解(附代码示例)

从入门到精通:Inkling多模态输入输出全流程详解(附代码示例)

从入门到精通:Inkling多模态输入输出全流程详解(附代码示例) 【免费下载链接】Inkling 项目地址: https://ai.gitcode.com/hf_mirrors/thinkingmachines/Inkling Inkling是一款强大的多模态AI模型,能够接受文本、图像和音…

2026/7/21 21:00:25 阅读更多 →
2026年图像分析开源模型选型与实战指南

2026年图像分析开源模型选型与实战指南

1. 2026年图像分析开源模型全景图当我在2023年第一次接触YOLOv8时,完全没想到三年后的今天会有如此丰富的选择。2026年的计算机视觉领域,开源模型已经形成了完整的生态矩阵,从轻量级边缘计算到高精度云端推理,每个细分场景都有对应…

2026/7/21 21:00:25 阅读更多 →
Pandas数据分析实战:从基础操作到商业应用

Pandas数据分析实战:从基础操作到商业应用

1. Pandas数据分析实战指南:从入门到商业应用刚接触数据分析时,我总在Excel里手动处理数据,直到发现同事用三行Pandas代码完成了我半天的工作量。这个开源的Python库彻底改变了我的数据处理方式——它不仅能快速清洗杂乱的数据,还…

2026/7/21 21:00:25 阅读更多 →
C51单片机开发板自制指南:低成本模块化设计

C51单片机开发板自制指南:低成本模块化设计

1. 项目背景与需求分析在电子设计领域,C51单片机作为入门级芯片已有30余年历史,至今仍是高校教学和电子爱好者的首选。市售开发板虽然功能丰富,但往往存在两个痛点:一是集成度太高导致初学者难以理解底层原理,二是价格…

2026/7/21 21:00:25 阅读更多 →
MobX React Form入门教程:5分钟创建你的第一个响应式表单

MobX React Form入门教程:5分钟创建你的第一个响应式表单

MobX React Form入门教程:5分钟创建你的第一个响应式表单 【免费下载链接】mobx-react-form Reactive MobX Form State Management 项目地址: https://gitcode.com/gh_mirrors/mo/mobx-react-form MobX React Form是一个强大的响应式表单状态管理库&#xff…

2026/7/21 20:59:25 阅读更多 →

日新闻

Octane Render与C4D汉化版安装与优化指南

Octane Render与C4D汉化版安装与优化指南

1. Octane Render与C4D的黄金组合:为什么选择这个方案?在三维创作领域,渲染器的选择往往决定了作品的最终呈现质量和工作效率。作为Cinema 4D(C4D)用户,Octane Render的GPU加速特性与实时预览功能&#xff…

2026/7/21 0:00:19 阅读更多 →
GPMC接口设计:异步/同步模式与多路复用配置实战

GPMC接口设计:异步/同步模式与多路复用配置实战

1. GPMC接口设计:从硬件连接到软件配置的全局视角在嵌入式系统开发中,尤其是基于TI Sitara系列如AM263x这类高性能微控制器的项目里,外部存储器的扩展几乎是绕不开的一环。无论是存放大量非易失性代码的NOR Flash,还是作为高速数据…

2026/7/21 0:00:19 阅读更多 →
UE5 GAS框架下RPG被动技能系统:从核心原理到实战实现

UE5 GAS框架下RPG被动技能系统:从核心原理到实战实现

1. 项目概述:UE5 GAS RPG被动技能的核心价值在UE5里用GAS(Gameplay Ability System)做RPG游戏,主动技能像是你手里的武器,按一下打一下,逻辑直接,反馈也快。但被动技能,它更像是你身…

2026/7/21 0:00:19 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/21 8:48:31 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/21 5:34:47 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/21 8:25:39 阅读更多 →

月新闻