如果你的配置不满足上述要求可以直接撤退了~ubuntu是2204和2404如果不清楚自己的配置的可以下滑看看。很高兴你能看到这里这证明你已经跟着本教程从强化学习理论-强化学习实战入门-强化学习打赢星际争霸了这条学习链正是从理论到实践从软件到硬件的过程。本教程基于我导师联合地瓜机器人和 Motrix开发的URDF Studio。经过几个月的精心打磨和爆肝coding全新的 URDF Studio 终于发布啦体验传送门https://urdf.d-robotics.cc/快来体验这是专为机器人领域开发者们量身打造的“终极兵器”你的痛点我们来解决 全格式兼容轻松解析与导入 URDF, MJCF, Xacro, SDF, USD/USDA。️ 全方位编辑碰撞体优化、惯量数据调整、可视化几何修改、位置微调统统拿下。✨ 硬核黑科技内置AI审阅、精准测量、一键快照还有超丰富的「机器人模型广场」等你探索‍ Pro模式支持代码直改轻松实现机器人模型拼接等高阶操作。功能多到一篇朋友圈根本装不下强烈建议各位亲自上手体验最后特别鸣谢 地瓜机器人和 Motrix 的鼎力支持也疯狂打call感谢团队小伙伴们的辛勤付出环境配置Issacsim需要的配置我是新配的ubuntu因此你可以完全跟着配置。至于如何安装ubuntu如何切双系统请自行B站搜索。性能检测首先看配置够不够不够可以直接撤退 秒省100%配置时间显卡性能输入nvidia-smi如果没驱动就要下载nvidia驱动下载nvidia驱动输入sudo ubuntu-drivers autoinstall下载完后重启电脑。再nvidia-smi然后检查内存和CPU性能内存检测输入free -hCPU检测输入lscpu硬件项目你的配置Isaac Sim 最低要求评价CPUi7-13700F (13代)i7 (7代) 或 Ryzen 5完美 (性能溢出非常强)内存32GB32GB完美 (刚好达标够用)显卡RTX 4060 TiRTX 4080 (16GB)及格/勉强 (需确认显存版本)安装issaclab创建conda环境conda create -n RL4Robot python3.10在这个网址下载developer.nvidia.com/isaac-gym/download可以在这里看documenthttps://docs.isaacsim.omniverse.nvidia.com/latest/installation/index.html执行下一步前强烈建议科学上网检测配置没问题就可以安装了我们用伟大的大七妙妙屋 提供的一键安装代码wget https://docs.robotsfan.com/install_isaaclab.sh -O install_isaaclab.sh bash install_isaaclab.sh选择自己适合的版本注意自己的ubuntu和配置。都yes就行弹出这个就是正常的然后选择安装路径默认是启动脚本的路径然后就去吃饭睡觉吧。我开了梯子还是慢死了如果不幸报错了就执行这个然后再执行脚本。git config --global http.postBuffer 524288000如果还是不行可以去使用“国内镜像”手动下载不要直接用脚本里的git clone我们手动用国内加速的链接下载。打开浏览器访问这个镜像站链接这是 GitHub 的国内加速代理https://ghproxy.net/github.com/isaac-sim/IsaacLab/archive/refs/heads/main.zip注意如果这个链接打不开请搜索“GitHub 文件加速”找一个在线工具输入https://github.com/isaac-sim/IsaacLab/archive/refs/heads/main.zip进行下载。下载完成后你会得到一个压缩包比如叫main.zip。第三步解压并改名在你的文件管理器或终端中操作解压main.zip。解压后你会得到一个文件夹名字类似IsaacLab-main。重命名把这个文件夹的名字改为IsaacLab去掉-main后缀。移动把这个IsaacLab文件夹移动到/home/lpa/RF/目录下。此时你的路径应该是/home/lpa/RF/IsaacLab安装issacsim创建虚拟环境conda create -n issacsim python3.8 -y下载pytorchpip install torch1.10.0cu113 torchvision0.11.1cu113 torchaudio0.10.0cu113 -f https://download.pytorch.org/whl/torch_stable.html到这个网址developer.nvidia.com/isaac-gym/download要点及这个I agree才能下载点击开始下载切换到下载目录下解压到自定义的文件夹中不要把pakage中的issacgym取出来。然后点进去找到python这个文件夹其中会有一个setup.py的文件。一般路径是“/home/lpa/RF/issacsim/IsaacGym_Preview_4_Package/isaacgym/python”在这里启动终端执行pip install -e .再执行cd examples执行python 1080_balls_of_solitude.py如果你报这个错说明你把issacgym从pakage文件夹中取出来了请放回去然后再cd到~/RF/issacsim/IsaacGym_Preview_4_Package/isaacgym/python下重新pip install -e .然后再运行出现下面画面即可。安装RSL-RL要先安装rsl-rl才能安装leggedgym切换到下载issacsim的目录cd ~/RF/issacsim下载git clone https://github.com/leggedrobotics/rsl_rl.git进来cd rsl_rl必须切换到102否则pytorch版本不匹配git checkout v1.0.2安装pip install -e .出现这个就是可以了。安装legged_gymhttps://github.com/leggedrobotics/legged_gym.git下载zip或者clonegit clone https://github.com/leggedrobotics/legged_gym.git解压到刚刚的文件夹依旧点进来找到这个带setup.py的文件夹在这里启动终端安装pip install -e .出现这个就是可以了。训练前要会看URDF那么我们来学学URDF吧URDFurdf是结构化描述语言和html很像只是urdf是描述机器人的结构的包括关节和连杆两个部分。连杆会用link/link包裹而关节会用joint/joint包裹。 连杆Link参数集每个连杆代表机器人的一个刚体部分主要包含以下三个核心参数集inertial惯性参数集origin连杆质心CoM相对于连杆坐标系的位姿。mass连杆的质量单位kg。inertia3x3的惯性矩阵包含 ixx, ixy, ixz, iyy, iyz, izz描述连杆的质量分布。visual外观参数集origin外观模型相对于连杆坐标系的位姿包含xyz平移和rpy旋转。geometry外观的几何形状支持长方体box、圆柱体cylinder、球体sphere或网格模型mesh。这个文件就是导出的dae模型文件material外观的颜色rgba或纹理texture。collision碰撞箱参数集origin碰撞模型相对于连杆坐标系的位姿。geometry碰撞检测的几何形状。为了减少计算量通常会使用比外观模型更简单的几何体。⚙️ 关节Joint参数集关节自身参数typefixed固定关节运动方式自由度为 0两个连杆之间没有任何相对运动完全刚性连接。典型应用常用于将传感器如激光雷达、摄像头、IMU固定在底盘上或者将机械臂的末端执行器与最后一个连杆连接。revolute旋转关节 / 铰链关节运动方式具有 1 个旋转自由度。连杆可以绕着指定的axis轴旋转但有角度限制必须在limit标签中设置lower下限和upper上限。典型应用机械臂的肩部、肘部关节或者舵机驱动的关节因为它们通常只能在一定的角度范围内转动。continuous连续旋转关节运动方式同样具有 1 个旋转自由度但它没有角度限制可以绕轴 360° 无限旋转。典型应用移动机器人的驱动轮、风扇叶片、或者机械臂末端需要无限旋转的关节。prismatic滑动关节 / 棱柱关节运动方式具有 1 个平移自由度。连杆可以沿着指定的axis轴做直线往复运动有距离限制需要在limit中设置lower和upper的米数。典型应用直线电机驱动的升降平台、伸缩臂、或者自动化产线上的直线滑台。关节用于连接两个连杆定义它们之间的运动关系主要包含以下参数集origin关节位姿参数集origin xyz... rpy...定义子连杆坐标系相对于父连杆坐标系的空间位置偏移和旋转角度。parent与child父子关系参数集parent link...指定父连杆的名称。child link...指定子连杆的名称。axis运动轴参数集axis xyz...定义关节运动的旋转轴或移动轴例如0 0 1表示绕 Z 轴运动。limit运动限制参数集主要用于旋转关节和移动关节lower/upper关节运动的下限和上限弧度或米。effort关节能施加的最大力或力矩。velocity关节的最大运动速度。具体而言limit参数需要通过说明书获取。 根节点Robot参数集这是 URDF 文件的根元素所有其他标签都必须包含在其中robot机器人定义参数集name机器人的唯一名称。material可以在根节点下全局定义材质颜色和纹理供各个连杆通过名称引用。gazebo用于指定与 Gazebo 仿真环境相关的特定配置如仿真插件、摩擦力参数等。 材质Material参数集用于定义机器人的视觉外观细节color颜色参数集rgba由红、绿、蓝、透明度四个数值组成每个值的范围是 [0, 1]。texture纹理参数集filename指定材质纹理图片的本地文件路径。URDF_STUDIOhttps://urdf.d-robotics.cc/欢迎大家使用我导的urdf网址在URDF广场可以找到自己想训练的模型点击“资产广场”这里有各种构型的机器人人形、四足、双足都有不仅有机器人还有环境和传感器往下滑还能根据企业筛选我们本次实验使用宇树的Go2点击“导入工作区”模型就加载出来了可以看到质心和透明紫色的碰撞箱右上角有各个参数的启用面板这是启用惯量展示的画面这是显示关节轴的画面这是显示坐标轴的画面当我们点击一个关节/连杆时在左右侧栏会弹出细节描述右侧栏可以看到当前选择的是一个关节碰撞箱的类型和尺寸以及在欧拉角和四元数下表达的旋转。再右侧可以拖动滑块改变关节角度我们调节模型也会跟着变化下面是模型的结构树也就是解析出来的urdf文件当我们把鼠标放在某个节点上就会高亮显示对应关节/连杆在模型上。你也可以通过这个加号添加连杆和关节。在左上可以看到参考的描述文件如果要导出urdf可以右击更简洁的方案是点击“源代码”然后点击“下载”或“复制”即可。上方还有工具栏比如可以使用测距测量两个连杆/关节之间的距离和变换当然也提供了非常多的AI辅助功能比如审阅urdf合理性、逆解、碰撞优化等。总之功能非常多上手也很容易。具体功能参考【URDF Studio使用教程-第一期快速上手】 https://www.bilibili.com/video/BV18fDiBjEJW/?share_sourcecopy_webvd_source2c56c6a2645587b49d62e5b12b253dca当然我们的实验仅考虑使用其URDF。准备训练将urdf重定向legged_gym/resources/robots/pyGo2/urdf在urdf_studio点击导出点击URDF然后点击导出ZIP然后找到这个目录/home/lpa/RF/issacsim/legged_gym/resources/robots把zip解压到robots文件夹中理论上urdf的路径是file {LEGGED_GYM_ROOT_DIR}/resources/robots/go2_description_urdf/go2_description/go2_description.urdf在envs中自定义配置文件在这个目录下找到a1的配置文件复制整个文件夹重命名为Go2/home/lpa/RF/issacsim/legged_gym/legged_gym/envs将a1的配置文件改为Go2_config用vscode打开。类名重定义将A1RoughCfg改为Go2CfgPPO类也要对应修改添加环境类然后添加环境类和我们用SB3很类似定义观察空间、动作空间等需要再次强调在Go2的URDF定义中我们讲解过Go2拥有24个关节但是24是 URDF 物理模型中为了计算碰撞、惯性等产生的所有运动副包含了一些虚拟关节或被动连接。在强化学习中我们只控制电机不需要去控制那些物理连接点。因此真正需要控制的电机个数就是12.num_envs 4096: 并行环境的数量这里设置为 4096 个用于加速训练。num_actions 12: 动作空间的维度有 12 个可控制的自由度num_observations 48: 观测空间的维度表示环境向智能体提供的状态信息有 48 个数值。num_privileged_obs None: 特权观测privileged observations的维度。class Go2Cfg( LeggedRobotCfg ): class env(LeggedRobotCfg.env): num_envs 4096 num_actions 12 num_observations 48 # 如果你没有 privileged obs 就保持 None #num_privileged_obs 36 num_privileged_obs None添加摄像机观察类然后再添加一个摄像机观察类就是初始相机的位置用过mujoco的肯定很熟悉class viewer(LeggedRobotCfg.viewer): ref_env 0 pos [1.0, 1.0, 0.3]修改初始化类接下来要修改初始化类也就是决定机器人的初始位姿。只修改初始位置即可0.4米有点高了pos [0.0, 0.0, 0.15] # x,y,z [m]设置地形mesh_type plane将地形设置为平坦地面。这是最基础的设置通常用于调试机器人是否能站稳或行走。如果要训练机器人适应复杂地形如楼梯、斜坡、崎岖地面通常会将其改为trimesh。measure_heights False关闭高度测量功能。class terrain(LeggedRobotCfg.terrain): mesh_type plane measure_heights False修改urdf引用路径file {LEGGED_GYM_ROOT_DIR}/resources/robots/go2_description_urdf/go2_description/go2_description.urdf记得把namea1改为Go2修改日志名称我们之后可以通过tensorboard查看训练的过程这个experiment_name就是日志的名字我们暂且叫咕咕嘎嘎。experiment_name gugugaga完整代码from legged_gym.envs.base.legged_robot_config import LeggedRobotCfg, LeggedRobotCfgPPO class Go2Cfg( LeggedRobotCfg ): class env(LeggedRobotCfg.env): num_envs 4096 num_actions 12 num_observations 48 # 如果你没有 privileged obs 就保持 None #num_privileged_obs 36 num_privileged_obs None class viewer(LeggedRobotCfg.viewer): ref_env 0 pos [1.0, 1.0, 0.3] class init_state( LeggedRobotCfg.init_state ): pos [0.0, 0.0, 0.15] # x,y,z [m] default_joint_angles { # target angles [rad] when action 0.0 FL_hip_joint: 0.1, # [rad] RL_hip_joint: 0.1, # [rad] FR_hip_joint: -0.1 , # [rad] RR_hip_joint: -0.1, # [rad] FL_thigh_joint: 0.8, # [rad] RL_thigh_joint: 1., # [rad] FR_thigh_joint: 0.8, # [rad] RR_thigh_joint: 1., # [rad] FL_calf_joint: -1.5, # [rad] RL_calf_joint: -1.5, # [rad] FR_calf_joint: -1.5, # [rad] RR_calf_joint: -1.5, # [rad] } class control( LeggedRobotCfg.control ): # PD Drive parameters: control_type P stiffness {joint: 20.} # [N*m/rad] damping {joint: 0.5} # [N*m*s/rad] # action scale: target angle actionScale * action defaultAngle action_scale 0.25 # decimation: Number of control action updates sim DT per policy DT decimation 4 class terrain(LeggedRobotCfg.terrain): mesh_type plane measure_heights False class asset( LeggedRobotCfg.asset ): file {LEGGED_GYM_ROOT_DIR}/resources/robots/go2_description_urdf/go2_description/go2_description.urdf name Go2 foot_name foot penalize_contacts_on [thigh, calf] terminate_after_contacts_on [base] self_collisions 1 # 1 to disable, 0 to enable...bitwise filter class rewards( LeggedRobotCfg.rewards ): soft_dof_pos_limit 0.9 base_height_target 0.25 class scales( LeggedRobotCfg.rewards.scales ): torques -0.0002 dof_pos_limits -10.0 class Go2CfgPPO( LeggedRobotCfgPPO ): class algorithm( LeggedRobotCfgPPO.algorithm ): entropy_coef 0.01 class runner( LeggedRobotCfgPPO.runner ): run_name experiment_name gugugaga在envs中自定义环境直接passfrom legged_gym.envs.base.legged_robot import LeggedRobot # 注意其实 cfg 通常是在 registry 里加载的这里不一定要 import除非你在类内部硬编码要用 # from legged_gym.envs.Go2.Go2_config import Go2Cfg class Go2(LeggedRobot): Go2 机器人环境类 继承自 LeggedRobot使用默认实现。 如果有特殊的奖励函数或逻辑可以在这里添加。 # 如果不需要额外的初始化逻辑直接 pass 即可 pass在envs的__init__.py脚本注册训练代码找到并用vscode打开__init__.py添加task_redistry注册训练任务from legged_gym.envs.Go2.Go2_env import Go2 from legged_gym.envs.Go2.Go2_config import Go2Cfg, Go2CfgPPO task_registry.register(Go2, Go2, Go2Cfg(), Go2CfgPPO())然后装一下tensorboard在此前课程已经讲过了pip install tensorboard小报错处理——numpy导致的float别名问题这是一个非常经典的NumPy 版本兼容性问题。你遇到的报错是因为 Isaac Gym 的torch_utils.py文件使用了旧版的 NumPy 语法而你的 Conda 环境中安装的是新版 NumPy1.20 或更高版本。️ 问题原因在 NumPy 1.20 版本之前np.float是float的一个别名。但从 NumPy 1.20 开始这个别名被正式移除了。报错代码行dtypenp.float原因Python 找不到np.float这个属性。✅ 解决方案你需要修改 Isaac Gym 源码中的一个文件将np.float替换为 Python 内置的float。打开code /home/lpa/RF/issacsim/IsaacGym_Preview_4_Package/isaacgym/python/isaacgym/torch_utils.py替换为float小报错处理——distutiles版本弃用这又是一个经典的 Python 版本兼容性问题你遇到的AttributeError: module distutils has no attribute version报错是因为你当前的 Python 版本较新已经弃用了distutils模块但 PyTorch 的旧版代码中还在使用它。code进来编写code /home/lpa/miniconda3/envs/issacsim/lib/python3.8/site-packages/torch/utils/tensorboard/__init__.py完全替换为下文import tensorboard # 1. 彻底注释掉旧的 distutils 导入 # from setuptools import distutils # LooseVersion distutils.version.LooseVersion # 2. 使用新的导入方式 from packaging.version import Version as LooseVersion # 3. 版本检查逻辑保持不变 if not hasattr(tensorboard, __version__) or LooseVersion(tensorboard.__version__) LooseVersion(1.15): raise ImportError(TensorBoard logging requires TensorBoard version 1.15 or above) # 4. 【关键修改】删除或注释掉下面这两行 del 语句 # 因为 distutils 没有被导入所以不能删除它。 # 而且 LooseVersion 后面还要用也不能在这里删掉。 # del distutils # del LooseVersion # del tensorboard # 5. 继续后面的导入 from .writer import FileWriter, SummaryWriter # noqa: F401 from tensorboard.summary.writer.record_writer import RecordWriter # noqa: F401开始训练这个CUDA要根据自己的显卡配如果不确定就直接用后面这段不加cuda配置。TORCH_CUDA_ARCH_LIST8.9 python legged_gym/scripts/train.py --taskGo2小报错处理——CUDA冲突问题如果你的显卡和issacsim的版本有冲突就会报下面的错如果报错了那很遗憾要重装torch这个版本问题很多。请在终端执行以下命令卸载pip uninstall torch torchvision torchaudio -y重装新版本pip install torch1.13.1cu117 torchvision0.14.1cu117 torchaudio0.13.1 --extra-index-url https://download.pytorch.org/whl/cu117在tensorboard查看训练过程我们之前experiment_name取名为gugugaga因此新开一个终端输入tensorboard --logdirlogs/gugugaga --port6006出现这个网站后打开就能看到了具体参数含义就不在此讲解了。