【学习笔记】各种强化学习环境
0. 写在前面
0.1 强化学习综述/资料(更新中)
鹏程实验室: 中文报道:学术分享丨具身智能综述:鹏城实验室&中大调研近400篇文献,英文原文:Aligning Cyber Space with Physical World: A Comprehensive Survey on Embodied AI
文章对比了现有的几款强化学习平台的功能,包括是否支持:物理仿真器、图形渲染、机器人库、深度学习支持、大规模并行计算、强化学习、大规模并行仿真、多机器人系统、机器人仿真。
0.2 github代码仓库(更新中)
1. Gymnasium
官方课程学习相关网址:
- Gymnasium Documentation
- Gymnasium Github
一些博主的教程:
文字教程:【学习笔记】Gymnasium入门
视频教程:Install Gymnasium (OpenAI Gym) on Windows
Isaac Gym的官方文档Gym Documentation首页写道:
Gym 的所有开发都已转移到 Gymnasium,这是 Farama 基金会的一个新软件包,由过去 18 个月维护 Gym 的同一开发团队维护。如果您已经在使用最新版本的 Gym (v0.26.2),那么您只需将 import gym
替换为 import gymnasium as gym
即可切换到 v0.27.0,无需额外步骤。Gym 将不会收到任何未来的更新或错误修复,并且不会对 Gymnasium 中的核心 API 进行进一步的更改。
Gym Documentation
Gymnasium Documentation
2. Isaac Gym (成功运行案例)
安装教程:Ubuntu22.04 1650显卡4G安装isaacgym&legged_gym
IsaacGymEnvs
是一个基于 NVIDIA Isaac Gym 的开源 Python 环境库,专为机器人训练提供高效的仿真环境。Isaac Gym 是由 NVIDIA 开发的一个高性能物理仿真引擎,专为机器人学和强化学习等应用设计。它利用 GPU 加速,支持大规模的并行仿真,使得多智能体强化学习和机器学习任务的训练速度大大提升。
2.1 运行训练
设置机器人数量为1024,不显示(打开后会报内存错误,估计是显卡内存太小)
python legged_gym/scripts/train.py --task=anymal_c_flat --num_envs=1024 --headless
报错:ValueError: too many values to unpack (expected 2)
(gym) xj@xj:~/isaacgym/legged_gym$ python legged_gym/scripts/train.py --task=anymal_c_flat --num_envs=1024 --headless
Importing module 'gym_38' (/home/xj/isaacgym/python/isaacgym/_bindings/linux-x86_64/gym_38.so)
Setting GYM_USD_PLUG_INFO_PATH to /home/xj/isaacgym/python/isaacgym/_bindings/linux-x86_64/usd/plugInfo.json
PyTorch version 2.2.2
Device count 1
/home/xj/isaacgym/python/isaacgym/_bindings/src/gymtorch
Using /home/xj/.cache/torch_extensions/py38_cu121 as PyTorch extensions root...
Emitting ninja build file /home/xj/.cache/torch_extensions/py38_cu121/gymtorch/build.ninja...
Building extension module gymtorch...
Allowing ninja to set a default number of workers... (overridable by setting the environment variable MAX_JOBS=N)
ninja: no work to do.
Loading extension module gymtorch...
Setting seed: 1
Not connected to PVD
+++ Using GPU PhysX
Physics Engine: PhysX
Physics Device: cuda:0
GPU Pipeline: enabled
/home/xj/anaconda3/envs/gym/lib/python3.8/site-packages/torch/functional.py:507: UserWarning: torch.meshgrid: in an upcoming release, it will be required to pass the indexing argument. (Triggered internally at /opt/conda/conda-bld/pytorch_1711403382592/work/aten/src/ATen/native/TensorShape.cpp:3549.)return _VF.meshgrid(tensors, **kwargs) # type: ignore[attr-defined]
Traceback (most recent call last):File "legged_gym/scripts/train.py", line 47, in <module>train(args)File "legged_gym/scripts/train.py", line 42, in trainppo_runner, train_cfg = task_registry.make_alg_runner(env=env, name=args.task, args=args)File "/home/xj/isaacgym/legged_gym/legged_gym/utils/task_registry.py", line 147, in make_alg_runnerrunner = OnPolicyRunner(env, train_cfg_dict, log_dir, device=args.rl_device)File "/home/xj/isaacgym/rsl_rl/rsl_rl/runners/on_policy_runner.py", line 29, in __init__obs, extras = self.env.get_observations()
ValueError: too many values to unpack (expected 2)
(gym) xj@xj:~/isaacgym/legged_gym$
【已解决】安装rsl_rl时,git clone后,必须:git checkout v1.0.2
,将版本切换到v1.0.2
:
gym) xj@xj:~/isaacgym/legged_gym$ cd ..
(gym) xj@xj:~/isaacgym$ cd rsl_rl/
(gym) xj@xj:~/isaacgym/rsl_rl$ git checkout v1.0.2
Note: switching to 'v1.0.2'.You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:git switch -c <new-branch-name>Or undo this operation with:git switch -Turn off this advice by setting config variable advice.detachedHead to falseHEAD is now at 2ad79cf Update README.md
后面就能正常运行了
训练结束
2.2 测试训练结果
走的确实挺好的~~
终端:
Isaacgym窗口:
界面自己停了:
2.3 IsaacGymEnv报错修改(python train.py task=Ant)
源码地址:IsaacGymEnvs
训练文件是:
python train.py task=Ant
报错:
(gym) xj@xj:~/isaacgym/IsaacGymEnvs/isaacgymenvs$ python train.py task=Ant
下面这个报错问题不大,先不管。。。
Error: FBX library failed to load - importing FBX data will not succeed. Message: No module named 'fbx'
FBX tools must be installed from https://help.autodesk.com/view/FBX/2020/ENU/?guid=FBX_Developer_Help_scripting_with_python_fbx_installing_python_fbx_html
安装fbxsdk_python的方法 (也不用管)
要修改的错是这里:
AttributeError: module 'numpy' has no attribute 'int'.
`np.int` was a deprecated alias for the builtin `int`. To avoid this error in existing code, use `int` by itself. Doing this will not modify any behavior and is safe. When replacing `np.int`, you may wish to use e.g. `np.int64` or `np.int32` to specify the precision. If you wish to review your current use, check the release note link for additional information.
解决方法:
参照AttributeError: module numpy has no attribute int .报错解决方案,
numpy.int
在NumPy 1.20
中已弃用,在NumPy 1.24
中已删除。
方案一:重新安装numpy,降numpy版本
pip uninstall numpy
pip install numpy==1.22
方案二:改代码(不推荐)
修改后正常训练了,终端也输出了训练数据:
2.4 示例详解:FrankaCubeStack
Isaac Gym内包含的示例代码的原理、训练结果、性能等,都在论文中进行了详细解释Isaac Gym: High Performance GPU-Based Physics Simulation For Robot Learning,或者查看国内博主的中文教程第2章 IsaacGymEnvs安装,里面介绍了参数设置的含义,训练注意事项等,很全面~
参数配置文件路径:
# 所有任务的共有参数配置文件
isaacgymenvs/cfg/config.yaml
# FrankaCubeStack任务的参数配置文件
isaacgymenvs/cfg/task/FrankaCubeStack.yaml
上面修改后,没有报错了~
2.4.1. 训练:
从随机参数模型开始训练:
python train.py task=FrankaCubeStack
训练时禁止显示图形界面:
python train.py task=FrankaCubeStack headless=True
如果显卡不太行:为了避免渲染消耗显存,可以减少环境数量num_envs=64
或者更少。默认是8192(文件cfg/task/FrankaCubeStack.yaml
中的代码numEnvs: ${resolve_default:8192,${...num_envs}}
):
python train.py task=FrankaCubeStack headless=True num_envs=64
2.4.2. 训练中断后继续
训练中断后,导入预训练模型继续训练:
python train.py task=FrankaCubeStack checkpoint=runs/FrankaCubeStack_09-12-14-22/nn/last_FrankaCubeStack_ep_500_rew_773.4196.pth headless=True
2.4.3. 测试
假如已经训练好了,要加载经过训练的模型并仅进行推理测试模型好坏(无训练),代码是什么呢?
测试也是用train.py
这个脚本,设置test=True
就可以了;如果想可视化环境,设置headless=False
:
python train.py task=FrankaCubeStack test=True checkpoint=runs/FrankaCubeStack_09-12-14-22/nn/last_FrankaCubeStack_ep_500_rew_773.4196.pth headless=False num_envs=64
2.4.4. 视频获取
isaac gym实现了标准 env.render(mode='rgb_rray')
gym API 来提供模拟器查看器的图像。 此外,可以利用gym.wrappers.RecordVideo
来帮助录制显示智能体运行过程的视频。 官方给出了示例代码如下,该文件应在视频文件夹中生成视频。
python train.py task=FrankaCubeStack test=True checkpoint=runs/FrankaCubeStack_09-12-14-22/nn/last_FrankaCubeStack_ep_500_rew_773.4196.pth headless=False num_envs=64 capture_video=True
报错及修改参见我的另一篇博文:解决:ubuntu22.04中IsaacGymEnv保存视频报错的问题
成功写出视频:
rl-video-step-0
2.5 之后就是精读代码,学习方法了。
3. Isaac Sim (笔记本硬件不支持,暂停)
3.1 安装和检查
官方文档:Isaac Sim Documentation
中文教程:【Isaac Sim】Ubuntu 22.04 安装 Isaac Sim 详细教程
- Isaac Sim是建立在Omniverse平台之上的一个应用程序,所以要先安装Omniverse。
(Omniverse Launcher类似于一个软件商店?) - 检查电脑系统配置和对 Isaac Sim 的兼容性
NVIDIA Omniverse 提供了 Isaac Sim Compatibility Checker 软件,用于检查 Isaac Sim 对电脑系统配置和兼容性的要求。 - 如果系统支持的话, 在交易所(Exchange)中搜索 Isaac Sim
3.2 先检查一下我的系统是否支持 Isaac Sim
对配置要求分了4个等级,其中,深绿色(优秀)、浅绿色(良好)、橙色(足够,建议更高)和红色(不够/不支持)
我的(笔记本)的RAM和GPU不够,官网给的最低配置要求(见下表):
RAM 32GB*
GPU GeForce RTX 3070
Element | Minimum Spec | Good | Ideal |
---|---|---|---|
OS | Ubuntu 20.04/22.04 Windows 10/11 | Ubuntu 20.04/22.04 Windows 10/11 | Ubuntu 20.04/22.04 Windows 10/11 |
CPU | Intel Core i7 (7th Generation) AMD Ryzen 5 | Intel Core i7 (9th Generation) AMD Ryzen 7 | Intel Core i9, X-series or higher AMD Ryzen 9, Threadripper or higher |
Cores | 4 | 8 | 16 |
RAM | 32GB* | 64GB* | 64GB* |
Storage | 50GB SSD | 500GB SSD | 1TB NVMe SSD |
GPU | GeForce RTX 3070 | GeForce RTX 4080 | RTX Ada 6000 |
VRAM | 8GB* | 16GB* | 48GB* |
3.3 硬件不支持的情况下安装了Isaac Sim会怎么样?
是运行卡顿?还是根本无法运行?
目前是能安装、能打开,后面找一个示例程序,看能不能成功运行。。。
文字教程:【具身智能利器】NVIDIA Isaac Sim 仿真平台体验测评。
看这个结果应该是有些问题,我在场景中创建了地面和胶囊,但是无法显示,和上面教程不一样。。。。
终端的一些提示,目前还看不懂,,,,
2025-01-08 08:14:12 [1,116ms] [Error] [gpu.foundation.plugin] No device could be created. Some known system issues:
- The driver is not installed properly and requires a clean re-install.
- Your GPUs do not support RayTracing: DXR or Vulkan ray_tracing, or hardware is excluded due to performance.
- The driver cannot enumerate any GPU: driver, display, TCC mode or a docker issue. For Vulkan, test it with Vulkaninfo tool from Vulkan SDK, instead of nvidia-smi.
- For Ubuntu, it requires server-xorg-core 1.20.7+ and a display to work without --no-window.
- For Linux dockers, the setup is not complete. Install the latest driver, xServer and NVIDIA container runtime.2025-01-08 08:14:24 [12,926ms] [Warning] [omni.hydra.rtx] HydraEngine rtx failed creating scene renderer.
4. PyBullet
4.1 安装
文字教程:Ubuntu安装PyBullet | PyBullet 导入Ur5 | PyBullet简单使用 | 关于机械臂强化学习仿真引擎的选择 | PyBullet入门操作
官方网站:
安装没问题:
pip3 install pybullet
跑官方示例报错:
python -m pybullet_robots.panda.loadpanda
报错:
(gym) xj@xj:~$ python -m pybullet_robots.panda.loadpanda
pybullet build time: Nov 28 2023 23:51:11
RuntimeError: module compiled against API version 0x10 but this version of numpy is 0xf . Check the section C-API incompatibility at the Troubleshooting ImportError section at https://numpy.org/devdocs/user/troubleshooting-importerror.html#c-api-incompatibility for indications on how to solve this problem .
Traceback (most recent call last):File "/home/xj/anaconda3/envs/gym/lib/python3.8/runpy.py", line 194, in _run_module_as_mainreturn _run_code(code, main_globals, None,File "/home/xj/anaconda3/envs/gym/lib/python3.8/runpy.py", line 87, in _run_codeexec(code, run_globals)File "/home/xj/anaconda3/envs/gym/lib/python3.8/site-packages/pybullet_robots/panda/loadpanda.py", line 1, in <module>import pybullet as p
ImportError: numpy.core.multiarray failed to import
这位博主说是因为opencv与numpy版本冲突,方案解决numpy.core.multiarray failed to import(numpy不降级方案)是
在另一个环境里重新安装、并运行示例后报错:
(gymenv) xj@xj:~$ python -m pybullet_robots.panda.loadpanda
pybullet build time: Nov 28 2023 23:48:36A module that was compiled using NumPy 1.x cannot be run in
NumPy 2.2.1 as it may crash. To support both 1.x and 2.x
versions of NumPy, modules must be compiled with NumPy 2.0.
Some module may need to rebuild instead e.g. with 'pybind11>=2.12'.If you are a user of the module, the easiest solution will be to
downgrade to 'numpy<2' or try to upgrade the affected module.
We expect that some modules will need time to support NumPy 2.Traceback (most recent call last): File "<frozen runpy>", line 198, in _run_module_as_mainFile "<frozen runpy>", line 88, in _run_codeFile "/home/xj/anaconda3/envs/gymenv/lib/python3.11/site-packages/pybullet_robots/panda/loadpanda.py", line 1, in <module>import pybullet as p
Traceback (most recent call last):File "/home/xj/anaconda3/envs/gymenv/lib/python3.11/site-packages/numpy/core/_multiarray_umath.py", line 44, in __getattr__raise ImportError(msg)
ImportError:
A module that was compiled using NumPy 1.x cannot be run in
NumPy 2.2.1 as it may crash. To support both 1.x and 2.x
versions of NumPy, modules must be compiled with NumPy 2.0.
Some module may need to rebuild instead e.g. with 'pybind11>=2.12'.If you are a user of the module, the easiest solution will be to
downgrade to 'numpy<2' or try to upgrade the affected module.
We expect that some modules will need time to support NumPy 2.Traceback (most recent call last):File "<frozen runpy>", line 198, in _run_module_as_mainFile "<frozen runpy>", line 88, in _run_codeFile "/home/xj/anaconda3/envs/gymenv/lib/python3.11/site-packages/pybullet_robots/panda/loadpanda.py", line 1, in <module>import pybullet as p
ImportError: numpy.core.multiarray failed to import
意思是numpy版本高于2.0,而程序使用numpy1.0编译的。解决方案是改代码或者降numpy版本,最简单的是降Numpy版本。
这个环境里我的numpy版本是numpy 2.2.1
,因为上面试了低于1.22的不行,所以这次尝试高一点的版本:conda install numpy==1.26
再次运行:python -m pybullet_robots.panda.loadpanda
最终在另一个环境里成功打开了示例(下图),表明安装成功。
同时终端打印:
(gymenv) xj@xj:~$ python -m pybullet_robots.panda.loadpanda
pybullet build time: Nov 28 2023 23:48:36
startThreads creating 1 threads.
starting thread 0
started thread 0
argc=2
argv[0] = --unused
argv[1] = --start_demo_name=Physics Server
ExampleBrowserThreadFunc started
X11 functions dynamically loaded using dlopen/dlsym OK!
X11 functions dynamically loaded using dlopen/dlsym OK!
Creating context
Created GL 3.3 context
Direct GLX rendering context obtained
Making context current
GL_VENDOR=NVIDIA Corporation
GL_RENDERER=NVIDIA GeForce GTX 1650/PCIe/SSE2
GL_VERSION=3.3.0 NVIDIA 550.120
GL_SHADING_LANGUAGE_VERSION=3.30 NVIDIA via Cg compiler
pthread_getconcurrency()=0
Version = 3.3.0 NVIDIA 550.120
Vendor = NVIDIA Corporation
Renderer = NVIDIA GeForce GTX 1650/PCIe/SSE2
b3Printf: Selected demo: Physics Server
startThreads creating 1 threads.
starting thread 0
started thread 0
MotionThreadFunc thread started
ven = NVIDIA Corporation
ven = NVIDIA Corporation
4.2 尝试一个强化学习的仓库:panda-gym
panda-gym 基于 PyBullet 引擎开发,围绕 panda 机械臂封装了 reach、push、slide、pick&place、stack、flip 等 6 个任务,主要也是受 OpenAI Fetch 启发,发表在了 NeurIPS 2021 的 workshop 上。本文以 v2.0.0 为例,安装同样很简单:
pip install panda-gym==2.0.0
如果想修改现有代码,或者自定义更多的任务,可以下载源码后,以 -e 方式安装:
git clone https://github.com/qgallouedec/panda-gym.git
pip install -e panda-gym
安装完成后运行 examples/reach.py,可检查是否正常。
这一节我的硬件都是是win11+python3.8。
4.2.1 安装和测试
比如机械臂强化学习实战(stable baselines3+panda-gym),这个是转载自知乎的机械臂强化学习实战(stable baselines3+panda-gym)。前者是学习笔记,包含报错和修改经验,知乎的原文更专业。
panda-gym的官方文档:https://panda-gym.readthedocs.io/en/latest/index.html
panda-gym的github链接:https://github.com/qgallouedec/panda-gym
pip install panda-gym
时也会同时安装pybullet和gymnasium:
用import gym
的代码版本会报错:
No registered env with id: PandaReach-v2
KeyError: 'PandaReach-v2'
应该替换为官网的下面代码进行测试,就可以了。
import gymnasium as gym
import panda_gymenv = gym.make('PandaReach-v3', render_mode="human")observation, info = env.reset()for _ in range(1000):action = env.action_space.sample() # random actionobservation, reward, terminated, truncated, info = env.step(action)if terminated or truncated:observation, info = env.reset()
弹出显示屏:
显然,由于选择的动作随机,目前没有任何学习。要访问学习任务的部分,请参阅使用章节Train with stable-baselines3。
4.2.2 报错和修改
gymnasium和gym能导入的环境不一样,如果环境不存在的话会报错。
4.2.2.1 正确的版本
总结:
gym 0.17.3 # 用于PandaReach-v2
gymnasium 1.0.0 # 用于PandaReach-v3
stable-baselines3 1.3.0
panda-gym 2.0.0 # 官网可训练版本,与stable-baselines3兼容
panda-gym 3.0.7 # 自动安装版本,与stable-baselines3不兼容
比如:
gymnasium是新版本,环境包括"PandaReach-v3"
import gymnasium as gym
import panda_gym # 显式地导入 panda-gym,没有正确导入panda-gym也会出问题
env = gym.make("PandaReach-v3")
gym是旧版本,环境包括"PandaReach-v2"
import gym
import panda_gym # 显式地导入 panda-gym,没有正确导入panda-gym也会出问题
env = gym.make("PandaReach-v2")
经过试验,发现gym的版本只能在vscode界面运行,相同环境在pycharm报错。pycharm环境只能正确运行v3版本的环境配置。
可以用如下代码打印所有环境:
import gym # 或者import gymnasium as gym
import panda_gym
all_envs = gym.envs.registry.all()
for env_spec in all_envs:print(env_spec.id)
4.2.2.2 报错的版本
参考:gym.error.UnregisteredEnv: No registered env with id: PandaReach-v2或类似env丢失问题解决。
gymnasium和gym导入环境不存在的话会报错,比如:
训练代码:
import gymnasium as gym
import panda_gym
from stable_baselines3 import DDPGenv = gym.make("PandaReach-v2")
model = DDPG(policy="MultiInputPolicy", env=env)
model.learn(30_000)
报错:
发生异常: DeprecatedEnv
Environment version v2 for `PandaReach` is deprecated. Please use `PandaReach-v3` instead.File "C:\CodeFeng\VALIDATE_PANDA_GYM\train_with_sb3.py", line 5, in <module>env = gym.make("PandaReach-v2")
gymnasium.error.DeprecatedEnv: Environment version v2 for `PandaReach` is deprecated. Please use `PandaReach-v3` instead.
SB3 is not compatible with panda-gym v3 for the moment. (See SB3/PR#780). The following documentation is therefore not yet valid. To use panda-gym with SB3, you will have to use panda-gym==2.0.0.
SB3目前与panda-gym v3不兼容。(SeeSB3/PR#780)。因此,以下文档尚未有效。要在SB 3中使用panda-gym,您必须使用panda-gym==2.0.0。
官网说SB3与panda-gym v3不兼容,必须使用panda-gym==2.0.0,所以安装pip install panda-gym==2.0.0
,再训练
但是报新的错:环境PandaReach
不存在。。。
发生异常: NameNotFound
Environment `PandaReach` doesn't exist.File "C:\CodeFeng\VALIDATE_PANDA_GYM\train_with_sb3.py", line 5, in <module>env = gym.make("PandaReach-v2")
gymnasium.error.NameNotFound: Environment `PandaReach` doesn't exist.
前面说过,gymnasium环境包括"PandaReach-v3"
,gym环境包括"PandaReach-v2"
,而官网提示train with sb3肯定能用于PandaReach-v2
,因此,此处把import gymnasium as gym
换成import gym
:
import gym
import panda_gym
from stable_baselines3 import DDPGenv = gym.make("PandaReach-v2")
model = DDPG(policy="MultiInputPolicy", env=env)
model.learn(30_000)
训练成功,终端显示:
4.2.3 RL训练
以 PandaReach-v2 任务为例,训练 DDPG/TD3/SAC+HER 算法,方便做横向对比。
reach 任务比较简单,要求机械臂到达指定位置,误差在一定范围之内即代表成功,默认采用稀疏奖励。
import gym
from stable_baselines3 import DDPG, TD3, SAC, HerReplayBufferenv = gym.make("PandaReach-v2")
log_dir = './panda_reach_v2_tensorboard/'# DDPG
model = DDPG(policy="MultiInputPolicy", env=env, buffer_size=100000, replay_buffer_class=HerReplayBuffer, verbose=1, tensorboard_log=log_dir)
model.learn(total_timesteps=20000)
model.save("ddpg_panda_reach_v2")
# TD3
model = TD3(policy="MultiInputPolicy", env=env, buffer_size=100000, replay_buffer_class=HerReplayBuffer, verbose=1, tensorboard_log=log_dir)
model.learn(total_timesteps=20000)
model.save("td3_panda_reach_v2")
# SAC
model = SAC(policy="MultiInputPolicy", env=env, buffer_size=100000, replay_buffer_class=HerReplayBuffer, verbose=1, tensorboard_log=log_dir)
model.learn(total_timesteps=20000)
model.save("sac_panda_reach_v2")
训练时渲染默认是关闭的,以加快训练速度。每个算法训练大概需要10分钟,训练结果在 ddpg/td3/sac_panda_reach_v2.zip 中,训练过程曲线在 ./panda_reach_v2_tensorboard 中。
4.2.4 效果测试
训练曲线首先在命令行启动 tensorboard:
tensorboard --logdir ./panda_reach_v2_tensorboard/
tensorboard 的默认端口是 6006,点击或者在浏览器中输入网址:http://localhost:6006/ 即可查看曲线。
从训练曲线来看,对于 PandaReach-v2 而言,DDPG 的学习速度稍快,但稳定性不如 TD3 和 SAC。三个算法的成功率都接近 100%,接下来我们来看实际的测试效果。
实际效果
对于机械臂的实际运行效果,眼见为实,代码如下:
import gym
# import panda_gym # 原文没有,不加报错
from stable_baselines3 import DDPG, TD3, SAC, HerReplayBufferenv = gym.make("PandaReach-v2", render=True)
model = DDPG.load('ddpg_panda_reach_v2', env=env)
# model = TD3.load('td3_panda_reach_v2', env=env)
# model = SAC.load('sac_panda_reach_v2', env=env)obs = env.reset()
for i in range(1000):action, _state = model.predict(obs, deterministic=True)obs, reward, done, info = env.step(action)env.render()if done:print('Done')obs = env.reset()
报错:
上面代码把import panda_gym
取消注释就可以了:
4.2.5 后记:PandaReach-v3版环境
以上都是在vscode中运行和调试,没有问题。
因为我比较熟悉pycharm,所以打算在pycharm中运行(同样的环境、同样的代码),但是在pycharm中打开,却报错了:缺 gym-robotics,
不安装/卸载环境中的任何包,相同的环境,在vscode中是可以正常运行的。。。。这是为什么啊?
根据报错安装gym-robotics,自动安装版本是gym-robotics 1.0.1,但是它需要gym>=0.26
gym-robotics 1.0.1 requires gym>=0.26, but you have gym 0.17.3 which is incompatible.
但是装了gym-0.26.2,又提示与stable-baselines3版本不匹配:
stable-baselines3 1.3.0 requires gym<0.20,>=0.17, but you have gym 0.26.2 which is incompatible.
Successfully installed gym-0.26.2 gym-robotics-1.0.1
gym-robotics 1.0.1 & gym 0.17.3,报错:
经过测试,得出:与gymanasium兼容的stable-baselines3、在pycharm中能运行、PandaReach-v3版的环境组合是:
Package Version Editable project location
----------------------- ----------- -------------------------
gymnasium 1.0.0
mujoco 3.2.6
numpy 1.26.4
panda_gym 3.0.8 C:\CodeFeng\panda-gym
pybullet 3.2.6
pygame 2.6.1
stable-baselines3 2.4.1
test_with_sb3.py又报错:
import gymnasium as gym
import panda_gym
from stable_baselines3 import DDPG, TD3, SAC, HerReplayBufferenv = gym.make("PandaReach-v3")
model = DDPG.load('ddpg_panda_reach_v3', env=env)
# model = TD3.load('td3_panda_reach_v3', env=env)
# model = SAC.load('sac_panda_reach_v3', env=env)obs = env.reset()
for i in range(1000):print(i)action, _state = model.predict(obs, deterministic=True)obs, reward, done, info = env.step(action)env.render()if done:print('Done')obs = env.reset()
IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices
按chatgpt尝试后,正确的测试代码test_with_sb3.py如下:
import gymnasium as gym
import panda_gym
from stable_baselines3 import TD3
from stable_baselines3.common.vec_env import DummyVecEnv# 创建 PandaReach-v3 环境并启用渲染
def make_env():env = gym.make("PandaReach-v3", render_mode="human") # 设置 render_mode 为 "human" 以显示操作界面return env# 使用 DummyVecEnv 包装环境
env = DummyVecEnv([make_env])# 加载模型
model = TD3.load('td3_panda_reach_v3', env=env)# 重置环境
obs = env.reset()# 执行强化学习策略
for i in range(1000):action, _state = model.predict(obs, deterministic=True) # 使用模型预测动作obs, reward, done, info = env.step(action) # 执行动作env.envs[0].render() # 渲染环境(对 DummyVecEnv 的第一个环境进行渲染)if done:print('Episode finished')obs = env.reset() # 重置环境
5. 一些疑问和答案
python的gymnasium和gym包、以及Isaac gym有什么关系呢?这些名字很像。。。有点晕
为什么导入了gymnasium或gym后,还要显示的导入panda_gym呢?
5.1 panda-gym: 开源的目标条件机器人学习环境
panda-gym是一个基于PyBullet物理引擎和Gymnasium框架开发的开源机器人强化学习环境集。该项目由Quentin Gallouédec等人开发,旨在为机器人学习研究提供一个灵活、易用的仿真平台。panda-gym的核心是模拟Franka Emika公司的Panda机器人,并提供了一系列经典的机器人操作任务。
相关论文:arXiv:2106.13687
项目特点
panda-gym具有以下几个主要特点:
- 基于开源物理引擎PyBullet,保证了仿真的准确性和可扩展性。
- 兼容OpenAI Gym接口,可以无缝对接各种强化学习算法。
- 提供多种经典机器人操作任务,如抓取、推动、翻转等。
- 支持目标条件学习,适用于多目标强化学习研究。
- 代码结构清晰,易于二次开发和自定义新任务。
环境介绍
panda-gym目前包含以下6种经典任务环境:
- Reach: 控制机械臂末端执行器到达目标位置
- Push: 推动物体到指定目标位置
- Slide: 滑动物体到指定目标位置
- Pick and Place: 抓取物体并放置到目标位置
- Stack: 将两个物体堆叠在目标位置
- Flip: 将物体翻转到目标朝向
自定义环境
panda-gym的一大优势是其良好的可扩展性。研究者可以基于现有代码轻松创建自定义的机器人或任务:
- 自定义机器人:继承Robot基类,实现机器人的运动学和动力学。
- 自定义任务:继承Task基类,定义任务的目标、奖励函数等。
- 组合新环境:将自定义的机器人和任务组合,注册为新的Gym环境。
这种模块化的设计使得panda-gym非常适合进行各种机器人学习的研究工作。
基线结果
panda-gym的开发者还提供了一些基于state-of-the-art强化学习算法的基线结果,可以在rl-baselines3-zoo项目中找到。这些预训练模型也已经上传到了Hugging Face Hub,方便研究者直接使用或进行对比实验。
Hugging Face Hub打开以后是这样的:
惊!panda-gym只有v1版本吗!!??
相关文章:
【学习笔记】各种强化学习环境
0. 写在前面 0.1 强化学习综述/资料(更新中) 鹏程实验室: 中文报道:学术分享丨具身智能综述:鹏城实验室&中大调研近400篇文献,英文原文:Aligning Cyber Space with Physical World…...
统计有序矩阵中的负数
统计有序矩阵中的负数 描述 给你一个 m * n 的矩阵 grid,矩阵中的元素无论是按行还是按列,都以非递增顺序排列。 请你统计并返回 grid 中 负数 的数目 示例 1: 输入:grid [[4,3,2,-1],[3,2,1,-1],[1,1,-1,-2],[-1,-1,-2,-3]]…...
【已解决】git clone报错:Failed to connect to github.com port 443: Timed out
1.问题原因1 报错信息1: fatal: unable to access https://github.com/microsoft/xxx/: Failed to connect to github.com port 443: Timed out 报错信息2: fatal: unable to access https://github.com/xxx/xx/: OpenSSL SSL_read: Connection was …...
Android SystemUI——使用Dagger2加载组件(四)
SystemUI 是 Android 系统中的一个重要模块,负责绘制系统栏(如状态栏、导航栏)、锁屏、快捷设置等用户界面元素。由于其复杂性,良好的架构设计和依赖管理对于保持代码的可维护性和扩展性至关重要。这就是 Dagger2 在此发挥重要作用的地方。 一、Dagger2介绍 Dagger2 是一个…...
Lesson 109 A good idea
Lesson 109 A good idea 词汇 idea n. 主意,想法 复数:ideas 用法:口语:Good idea! 好主意! Big idea! 高见!好主意! Great idea! 好主意 Bad idea! 坏主…...
网络安全-RSA非对称加密算法、数字签名
数字签名非常普遍: 了解数字签名前先了解一下SHA-1摘要,RSA非对称加密算法。然后再了解数字签名。 SHA-1 SHA-1(secure hash Algorithm )是一种 数据加密算法。该算法的思想是接收一段明文,然后以一种不可逆的方式将…...
自动化办公|xlwings简介
xlwings 是一个开源的 Python 库,旨在实现 Python 与 Microsoft Excel 的无缝集成。它允许用户使用 Python 脚本自动化 Excel 操作,读取和写入数据,执行宏,甚至调用 VBA 脚本。这使得数据分析、报告生成和其他与 Excel 相关的任务…...
C#使用OpenTK绘制3D可拖动旋转图形三棱锥
接上篇,绘制着色矩形 C#使用OpenTK绘制一个着色矩形-CSDN博客 上一篇安装OpenTK.GLControl后,这里可以直接拖动控件GLControl 我们会发现GLControl继承于UserControl //// 摘要:// OpenGL-aware WinForms control. The WinForms designer will always call the default//…...
【网络云SRE运维开发】2025第3周-每日【2025/01/14】小测-【第13章ospf路由协议】理论和实操
文章目录 选择题(10道)理论题(5道)实操题(5道) 【网络云SRE运维开发】2025第3周-每日【2025/01/14】小测-【第12章ospf路由协议】理论和实操 选择题(10道) 在OSPF协议中,…...
计算机网络 (34)可靠传输的工作原理
前言 计算机网络可靠传输的工作原理主要依赖于一系列协议和机制,以确保数据在传输过程中能够准确无误地到达目的地。 一、基本概念 可靠传输指的是数据链路层的发送端发送什么,在接收端就收到什么,即保证数据的完整性、正确性和顺序性。由于网…...
提高互联网Web安全性:避免越权漏洞的技术方案
目录 一、越权漏洞概述 二、常见的越权漏洞类型 三、越权漏洞的影响 四、越权漏洞的技术解决方案 一、越权漏洞概述 越权(Authorization Bypass)类漏洞是指在系统中,攻击者通过绕过身份验证或访问控制,获取本不应访问的资源或…...
c语言 --- 字符串
创建字符串 1. 使用字符数组创建字符串 #include <stdio.h>int main() {char str[20] "Hello, world!";str[0] h; // 修改字符串的第一个字符printf("%s\n", str); // 输出:hello, world!return 0; }解释: 数组大小 20 表…...
Linux探秘坊-------1.系统核心的低语:基础指令的奥秘解析(3)
1.zip/unzip指令 语法: zip 压缩⽂件.zip ⽬录或⽂件 功能:将⽬录或⽂件压缩成zip格式 常⽤选项: -r:递归处理,将指定⽬录下的 所有⽂件和⼦⽬录⼀并处理 example: 1.事前准备 建立以下文件与目录: 2.压缩test 目…...
Java中网络编程的学习
目录 网络编程概述 网络模型 网络通信三要素: IP 端口号 通信协议 IP地址(Internet Protocol Address) 端口号 网络通信协议 TCP 三次握手 四次挥手 UDP TCP编程 客户端Socket的工作过程包含以下四个基本的步骤: 服务器程序…...
微服务的CAP定理与数据一致性抉择
分布式系统中的CAP定理,包括一致性(Consistency)、可用性(Availability)和分区容错性(Partition Tolerance)三个核心要素。 微服务是分布式系统的一种表现形式,以及用户对于系统是分…...
正则表达式 - 简介
正则表达式 - 简介 正则表达式(Regular Expression,简称Regex)是一种用于处理字符串的强大工具,它允许我们按照特定的模式(pattern)来搜索、匹配、查找和替换文本。正则表达式广泛应用于各种编程语言和工具…...
MySQL:表的内外连接
目录 1.内连接 2.左外连接和右外连接 178. 分数排名 - 力扣(LeetCode) 1.内连接 内连接就是两张表做笛卡尔积,再加上一个筛选条件。 这两个sql语句是一样的。 2.左外连接和右外连接 左外连接就是左表必须是完全显示,即使筛选…...
65.在 Vue 3 中使用 OpenLayers 绘制带有箭头的线条
前言 在现代的前端开发中,地图已经成为许多项目的核心功能之一。OpenLayers 是一个强大的开源地图库,它提供了丰富的功能和高度的定制化支持。在本篇文章中,我将向大家展示如何在 Vue 3 中使用 OpenLayers 绘制带有箭头的线条。 我们将实现…...
关于编写测试用例的细枝末节
这里写目录标题 故障判别类-边界考虑示例1.0:若A>20.3且持续时间≥15ms时(判故周期为1000Hz),输出B为1,否则输出B为0。 故障判别类-不可恢复测试示例1.1:若A>20.3且持续时间≥15ms时…...
【Vim Masterclass 笔记13】第 7 章:Vim 核心操作之——文本对象与宏操作 + S07L28:Vim 文本对象
文章目录 Section 7:Text Objects and MacrosS07L28 Text Objects1 文本对象的含义2 操作文本对象的基本语法3 操作光标所在的整个单词4 删除光标所在的整个句子5 操作光标所在的整个段落6 删除光标所在的中括号内的文本7 删除光标所在的小括号内的文本8 操作尖括号…...
(一)QSQLite3库简介
1、SQLite数据库 SQLite数据库,作为一个轻量级的关系型数据库管理系统,广泛应用于移动设备和桌面应用程序中。由于其简单易用、无需配置的特点,它为开发者提供了极大的便利。然而,正是由于其应用广泛,随着用户对于系统…...
新版 MacOS 无法从 /usr/local/lib 加载动态链接库的解决办法
自己编写的动态链接库在Unix规范下一般位于/usr/local/lib,在2023年及之前的MacOS版本中,直接将动态库安装到该位置即可在程序运行时加载,可是升级MacOS版本后,ld就报错。 错误现象 运行程序,报错 dyld[6376]: Libra…...
PanWeidb-使用BenchmarkSQL对磐维数据库进行压测
本文提供PanweiDb使用BenchmarkSQL进行性能测试的方法和测试数据报告。 BenchmarkSQL,一个JDBC基准测试工具,内嵌了TPC-C测试脚本,支持很多数据库,如PostgreSQL、Oracle和Mysql等。 TPC-C是专门针对联机交易处理系统(OLTP系统)的规范,一般情况下我们也把这类系统称为业…...
git在本地创建新分支并将该分支推送到远程仓库
1. 创建本地分支 首先,创建并切换到一个新的本地分支: git checkout -b new-branch-name2. 推送本地分支到远程仓库 将新的本地分支推送到远程仓库,并在远程创建一个对应的新分支: git push origin new-branch-name3. 设置本地…...
Axure9笔记
快速入门 原型图种类 1.线框图 2.高保真图 3.简易需求文档(PRD) tips 按住shift可以等比缩放 旋转:ctrl按角角 矢量图素材: iconfont-阿里巴巴矢量图标库 复制svg图-->将svg图换为形状 截屏: Windows&…...
33_操作Redis分片集群
1.Redis分片集群读写 我们使用的redis-cli --cluster提供了很多操作集群的命令,可以通过下面方式查看。 [root@localhost ~]# redis-cli --cluster help 1.连接上7001节点后,尝试存储一组num=100和a=10的数据,语句如下所示。 [root@node1 cluster]# redis-cli -a 123456…...
llama.cpp 模型可视化工具 GGUF Visualizer
llama.cpp 模型可视化工具 GGUF Visualizer 1. GGUF Visualizer for VS Code (gguf-viz)1.1. Features1.2. Extension Settings References GGUF Visualizer https://marketplace.visualstudio.com/items?itemNameAgainstEntropy.gguf-viz 1. GGUF Visualizer for VS Code (g…...
MAC AndroidStudio模拟器无网络
先确认PC端是正常访问网络的; 模拟器端修改Wifi设置:设置 - 网络和互联网 - WALN设置 按照上图修改; IP设置:从DHCP修改为静态,IP地址:10.0.2.16 ,网关:10.0.2.2 , DNS…...
如何添加合适的索引:MySql 数据库索引认知
写在前面 博文内容涉及 Mysql 数据库索引简单认知,包括SQL执行过程,数据库数据存储原理。如何通过索引加快数据查询原理简单介绍适合有一定SQL基础的开发运维小伙伴建立数据库索引认知,学会如何添加索引理解不足小伙伴帮忙指正 😃…...
深度学习中的学习率调度器(scheduler)分析并作图查看各方法差异
文章目录 1. 指数衰减调度器(Exponential Decay Scheduler)工作原理适用场景实现示例 2. 余弦退火调度器(Cosine Annealing Scheduler)工作原理适用场景实现示例 3. 步长衰减调度器(Step Decay Scheduler)工…...
测试人员面试需要掌握的内容
测试人员面试需要掌握的内容 1、在公司的测试流程是什么? 产品经理确认本次版本的需求,召开需求评审会,进行估时排期,需求和时间都确定之后,UI出设计图,开发人员进行开发,测试人员编写测试用例…...
【C++】函数(下)
1、函数的常见样式 常见的函数样式有四种: (1)无参数无返回值 (2)有参数无返回值 (3)无参数有返回值 (4)有参数有返回值 (1)无参数无返回值 示例…...
dockerfile实现lnmp
dockerfile实现lnmp 自定义镜像实现整个架构 (基础镜像centos7) nginx cd /opt mkdir nginx mysql php vim Dockerfile docker network create --subnet172.111.0.0/16 mynetwork #创建自定义网段 docker run -itd --name nginx -p 80:80 --cpu-quota 20000 -m 512m -v /op…...
C语言进阶-2指针(一)
目录 1. 字符指针1.1 一般用法:字符指针指向单字符1.2 第二种用法,字符串首地址给指针变量1.3 习题,下面代码的输出结果是什么?为什么? 2. 指针数组2.1实例—— 字符指针数组2.2实例——整形指针数组2.3 例子,识别下下…...
JAVA:Spring Boot 集成 JWT 实现身份验证的技术指南
1、简述 在现代Web开发中,安全性尤为重要。为了确保用户的身份,JSON Web Token(JWT)作为一种轻量级且无状态的身份验证方案,广泛应用于微服务和分布式系统中。本篇博客将讲解如何在Spring Boot 中集成JWT实现身份验证…...
SpringBoot链接Kafka
一、SpringBoot生产者 (1)修改SpringBoot核心配置文件application.propeties, 添加生产者相关信息 # 连接 Kafka 集群 spring.kafka.bootstrap-servers192.168.134.47:9093# SASL_PLAINTEXT 和 SCRAM-SHA-512 认证配置 spring.kafka.properties.securi…...
《深度剖析算法优化:提升效率与精度的秘诀》
想象一下,你面前有一堆杂乱无章的数据,你需要从中找到特定的信息,或者按照一定的规则对这些数据进行排序。又或者,你要为一个物流公司规划最佳的配送路线,以降低成本和提高效率。这些问题看似复杂,但都可以…...
APP推荐:全新TV端来了,8K原画电视版
▌ 软件介绍 B站都不陌生吧,一个能追番、学习、娱乐的多元平台,之前也分享过几款第三方TV端,其中的BV最近更新了全新版本。 使用了全新的UI界面,由之前的顶部菜单栏改成了侧边布局,已解锁限制&…...
Spark vs Flink分布式数据处理框架的全面对比与应用场景解析
1. 引言 1.1 什么是分布式数据处理框架 随着数据量的快速增长,传统的单机处理方式已经无法满足现代数据处理需求。分布式数据处理框架应运而生,它通过将数据分片分布到多台服务器上并行处理,提高了任务的处理速度和效率。 分布式数据处理框…...
【Linux】正则表达式
正则表达式是一种可供Linux工具过滤文本的自定义模板,Linux工具(如sed、gawk)会在读取数据时使用正则表达式对数据进行模式匹配。 正则表达式使用元字符来描述数据流中的一个或多个字符。它是由正则表达式引擎实现的。正则表达式引擎是一种底…...
《银行保险机构数据安全管理办法》正式实施,分类分级、安全评估共筑安全防线
金融数据具有高价值和高敏感性,金融数据安全关乎国家安全和金融消费者权益密切相关。在当前数字化进程加速的背景下,数据合作频繁,安全风险也随之增加,给机构管理带来了新挑战。 为规范银行业保险业数据处理活动,保障数…...
excel仅复制可见单元格,仅复制筛选后内容
背景 我们经常需要将内容分给不同的人,做完后需要合并 遇到情况如下 那是因为直接选择了整列,当然不可以了。 下面提供几种方法,应该都可以 直接选中要复制区域然后复制,不要选中最上面的列alt;选中可见单元格正常复制ÿ…...
26_Redis RDB持久化
从这个模块开始带领大家来学习Redis分布式缓存的相关内容,主要学习目标见下: 数据丢失问题:实现Redis数据持久化(RDB和AOF)并发能力问题:搭建Redis主从集群,实现读写分离故障恢复问题:利用Redis哨兵模式,实现健康检测和自动恢复存储能力问题:搭建Redis分片集群,利用…...
Windows图形界面(GUI)-QT-C/C++ - QT控件创建管理初始化
公开视频 -> 链接点击跳转公开课程博客首页 -> 链接点击跳转博客主页 目录 控件创建 包含对应控件类型头文件 实例化控件类对象 控件设置 设置父控件 设置窗口标题 设置控件大小 设置控件坐标 设置文本颜色和背景颜色 控件排版 垂直布局 QVBoxLayout …...
Java+Maven+GDAL
下载已经编译好的压缩包,下载地址 解压 jar 包 release-1930-x64-dev.zip\release-1930-x64\bin\gdal\java 目录下 打成Maven依赖 mvn install:install-file -Dfilegdal-3.10.1.jar -DgroupIdorg.gdal -DartifactIdgdal -Dversion3.10.1 -Dpackagingjar -Dgener…...
基于Python机器学习、深度学习技术提升气象、海洋、水文领域实践应用-以ENSO预测为例讲解
1. 背景与目标 ENSO(El Nio-Southern Oscillation)是全球气候系统中最显著的年际变率现象之一,对全球气候、农业、渔业等有着深远的影响。准确预测ENSO事件的发生和发展对于减灾防灾具有重要意义。近年来,深度学习技术在气象领域…...
Java算法 数据结构 栈 队列 优先队列 比较器
目录 栈 Stack 性质 构造 方法 代码示例 队列 Queue 性质 构造 方法 代码示例 优先队列 PriorityQueue 性质 构造 方法 代码示例 比较器 1. Comparator 接口的方法 2. 常见的内置比较器 1. 自然排序比较器(naturalOrder()) 2. 逆序排…...
安装本地测试安装apache-doris
一、安装前规划 我的服务器是三台麒麟服务器,2台跑不起来,这是我本地的,内存分配的也不多。 fe192.168.1.13 主数据库端口9030访问 8Gbe192.168.1.13内存4G 硬盘50be192.168.1.14内存4G 硬盘50be192.168.1.12内存4G 硬盘5013同时安装的fe和be 。 原理:192.168.1.13 服…...
CSS | 实现三列布局(两边边定宽 中间自适应,自适应成比)
目录 示例1 (中间自适应 示例2(中间自适应 示例3(中间自适应 示例4 (自适应成比 示例5(左中定宽,右边自适应 示例6(中间自适应 示例7(中间自适应 示例8(中间定宽…...
Centos8部署Redis Cluster
Redis Cluster 通过分片方式实现高可用,数据分布在多个节点,支持水平扩展。 1、环境准备 一般建议准备六个节点(推荐 3 个主节点 + 3 个从节点) 2、配置Redis Cluster模式 2.1、配置文件 修改 redis.conf: 每个节点的配置应包括以下内容: port <port> …...