第 0 步|先把装备装好

为什么现在就要做这一步

做机器人程序,"锅灶"就是仿真引擎。没有它,你写的手指弯曲代码根本没人执行------那些 for 循环算出来的数字会安安静静躺在内存里,什么也不会发生。

"仿真引擎"这个词第一次出现,先说清它是什么:它是一段替你把物理演完的程序。你告诉它"这里有个方块、多大多重、重力朝哪、谁连着谁",它就把时间切成很小的片,一片一片往前推,算出每一刻每个东西在哪、多快、受多大力。整个上册你都在它里面练手,理由很实在:真机的手几万块,撞一下可能要修;仿真里的手撞一万次,按一下重跑就全还原。

生活里的比方

环境是一间房,不是一张桌子。

你电脑上已经有 Python 了,为什么还要再建一个?因为项目之间会打架。这个项目要 numpy 2.4,另一个项目要 numpy 1.24,同一个 Python 里只能装一个版本。conda 的做法是给每个项目一间独立的房:各装各的库,装坏了删掉重建,不会污染系统 Python。

这里有两个词顺手补齐。conda 是管包的管家,它同时管两件事:从哪儿下载包(渠道),以及包装在哪个环境里。环境就是那间房本身,房里有自己的一套 Python 和库。你走进哪间房,敲的 python 就是哪间房里的那个。

顺便分一下 conda 和 pip 的分工,这两个命令你以后天天要用。conda 管"整间房"------建环境、删环境、装 Python 本身;pip 管"房里的东西"------往已经建好的环境里装 Python 包。所以上面三条命令的顺序不能换:一条 conda 建、一条 conda 进、一条 pip 装。房还没建,pip 就没地方装。

这一阶段一共只要四个包:

mujoco:物理引擎,核心。负责算力、算速度和位置、算碰撞。

numpy:算矩阵和向量。仿真里的位置、速度、角度全是一串数,加减乘除靠它。

imageio:把画面存成 gif。

pillow:存 gif 要用。

三条命令:

复制代码
conda create -n dexterous python=3.11 -y
conda activate dexterous
pip install mujoco numpy imageio pillow -i https://pypi.tuna.tsinghua.edu.cn/simple

一条一条看:

conda create -n dexterous python=3.11 -y:新建一间叫 dexterous 的房。-n 是给这间房起名字,python=3.11 是要求房里装 Python 3.11,-y 的意思是"别弹问题问我,直接建"。房建好是空的,里面只有 Python 自己。

conda activate dexterous:走进这间房。从这一刻起,你敲的 python 和 pip 都是房里那一套,碰不到系统 Python。

pip install mujoco numpy imageio pillow -i https://pypi.tuna.tsinghua.edu.cn/simple :往房里装四个包。pip install 就是"下载并安装",后面跟的名字是包名,-i 后面写的是"去哪儿下载"。

命令后面的镜像地址是给国内网络用的。-i 是 index-url 的简写,默认去 PyPI 官网,国内连它经常很慢甚至超时,换成清华的镜像(官网的一份完整拷贝)就快多了。所以装不上的时候先怀疑网络,别先怀疑命令写错。

如果 conda 也被拦了,建环境那一步换成走清华的源:

复制代码
conda create -n dexterous python=3.11 -y --override-channels -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge

--override-channels 是"别用你默认配的那些渠道",-c 是"改用我给的这个渠道"。这两句是配套的:不加 --override-channels,conda 会两个渠道一起找,还是可能卡在被拦的那个上。

少任何一个包会怎样,心里先有个数:

少 mujoco:import mujoco 当场报错,第 1 步的脚本一行都跑不动。

少 numpy:脚本里那些角度换算、数组下标全都会报 ModuleNotFoundError: No module named 'numpy'。

少 imageio:数字照样算对,要等到"存 gif"那一步才崩。这时你容易以为物理算错了,其实只是最后一步缺东西。

少 pillow:imageio 存 gif 的时候要借它干活,缺了它同样只在存图那一步报错。

为什么正好是这四个包,一句话就能记住:MuJoCo 负责算,numpy 负责算数,imageio 和 pillow 负责留下证据。少了最后两个,你连"它到底动没动"都看不见。

装完验证一下:

复制代码
python -c "import mujoco; print('MuJoCo', mujoco.__version__)"

这行拆开看:python -c "..." 的意思是"别开文件,直接把引号里这行当程序跑";import mujoco 是试着加载刚装的物理引擎;mujoco.version 是引擎自己记录版本号的那个字符串。跑通并且打印出版本号,才说明这个包真的能被加载起来。

本机实测输出是 MuJoCo 3.13.0。查出来的版本是:Python 3.11.16、MuJoCo 3.13.0、numpy 2.4.6、imageio 2.37.4、pillow 12.3.0。

这几个数的来源说清楚:3.13.0 是上面那条命令里 mujoco.version 直接打出来的,属于引擎自己报的账;3.11.16 是你写了 python=3.11 之后 conda 实际装下的那个小版本;numpy、imageio、pillow 的三个版本号,是 pip 安装那一刻自己选中的版本。它们都不是谁算出来的,就是安装完那一刻躺在环境里的东西。所以换一天装、或者换了镜像源,这几个数可能就不一样了------不一样不代表你装错了。

但是"没报错"不等于"装好了"。 这一步真正的验收标准是跑出第 1 步那张 gif。为此有两个坑要提前知道:

MuJoCo 能 import、脚本能跑完,但离屏渲染没配好(Linux 上要 export MUJOCO_GL=egl,而且必须在 import mujoco 之前设)------于是训练照常"完成",模型却一路在学全黑图。不报错。

torch.cuda.is_available() 是 False 而你没注意(装成了 CPU 版),于是 GPU 训练变成 CPU 训练,慢几十倍。也不报错。

这里的 gif 是一张会循环播放的动图,由很多帧画面拼起来。为什么拿它当验收标准?因为"能算出数字"和"能看见东西在动"是两件事:相机没对准、抓到的帧全是黑的、gif 只存下一帧,这几种情况都不会报错,但一眼就能看出不对。

这两个坑后面还会咬你好几次,值得拆开讲。渲染是"把仿真里的三维世界画成一张图"。平时渲染是画到屏幕上给你看;但训练脚本往往跑在没有屏幕的机器上,或者你想让脚本自己抓帧存 gif,这时就要离屏渲染------不画到屏幕,画到内存里。Linux 上干这件事要指定一个后端,MUJOCO_GL=egl 就是告诉 MuJoCo"用 EGL 这个后端去画",EGL 是 Linux 上那套"不靠屏幕也能画图"的接口。为什么强调"必须在 import mujoco 之前设"?因为引擎是在被加载的那一刻就把后端选好并记下来的,你加载完再设,它不理你。

第二个坑里的 torch.cuda.is_available() 是在问"这台机器上的 NVIDIA 显卡能不能给我用来算"。CUDA 是 NVIDIA 显卡做并行计算的那套接口,PyTorch 要靠它才跑得快。装成 CPU 版的时候,这个函数礼貌地返回 False,脚本照样跑完,只是全部计算落到 CPU 上------慢几十倍,但一句报错都没有。所以"没报错"确实不等于"装好了"。

如果不对,先查这几处:conda 卡住就是官网被网络拦,换清华源;pip 慢就加 -i 镜像;画出来是纯色说明相机没对准,不是装错了。

为什么这三条对这三种现象:conda 卡住是卡在"下载渠道"上,换源正好是换渠道;pip 慢不是包坏了,是路远,加镜像就是换条近路;画出来是纯色说明仿真本身在跑、只是镜头拍的是一面空白墙,属于渲染和相机的问题,跟包装没装对没关系。

最后留一件要你自己动手才算过的事

用同一套命令,把环境名从 dexterous 换成另一个名字,建一间新房,走进去,再敲这一条:

复制代码
python -c "import mujoco; print('MuJoCo', mujoco.__version__)"

新房里没装 mujoco,你会看到 ModuleNotFoundError: No module named 'mujoco'。然后 conda activate dexterous 回到老房,敲一模一样的一条命令,这次能打印出版本号。

两条命令一字不差,一个报错、一个不报错。看到这个对比,你就亲手证实了"环境是一间房、敲的 python 是哪间房的 python"。这间空房留着不影响别的项目,不用急着清。

相关推荐
风合星语21 小时前
2026 机器人行业观察(三):机器人走进酒店和门店——完成一次演示,和顶一个班差在哪?
人工智能·机器人·具身智能·人形机器人·人机协作
AIGCmagic社区1 天前
LightNav-0:激发VLM空间智能,迈向通用具身导航
人工智能·具身智能·ai多模态
AIGCmagic社区1 天前
不训练机器人权重,Pigey把π0.5真机成功率从16.7%拉到97.3%
人工智能·aigc·具身智能·ai多模态
AIGCmagic社区1 天前
大模型要不要改机器人的每一步?GPT-6 Astra只动了14.4%
人工智能·具身智能·ai多模态
Bode_20021 天前
人机环交互的具身智能系统
人工智能·智能制造·具身智能
AIGCmagic社区1 天前
OpenWAM把世界动作模型预训练拆成可替换的受控实验
人工智能·aigc·具身智能
大江东去浪淘尽千古风流人物2 天前
【RoboDojo】机器人操作通用策略统一评估基准:42仿真+18现实任务×异构并行深度解析
机器人·transformer·具身智能·机器人学习·视觉表示·patch policy·robodojo
AIGCmagic社区3 天前
10个数据集143万段视频统一成一份契约,SolarWM世界模型开源数据引擎拆读
人工智能·具身智能·ai多模态
AIGCmagic社区3 天前
Show-Harness拆读,语义动作单元让VLM直接控机械臂,零样本跨任务89%
人工智能·aigc·具身智能·ai多模态