safe-control-gym
基于物理的CartPole和四旋翼Gym环境(使用PyBullet),具有符号化的先验动力学(使用CasADi),用于基于学习的控制以及无模型和基于模型的强化学习(RL)。
这些环境包括(并评估)符号化的安全约束,并实现输入、参数和动力学扰动,以测试控制方法的鲁棒性和泛化能力。[PDF]
@article{brunke2021safe,
title={机器人中的安全学习:从基于学习的控制到安全强化学习},
author={Lukas Brunke and Melissa Greeff and Adam W. Hall and Zhaocong Yuan and Siqi Zhou and Jacopo Panerati and Angela P. Schoellig},
journal = {控制、机器人和自主系统年度评论},
year={2021},
url = {https://arxiv.org/abs/2108.06266}}
要复现文章中的结果,请参见分支 ar
。
@misc{yuan2021safecontrolgym,
title={safe-control-gym: 安全学习控制和强化学习的统一基准套件},
author={Zhaocong Yuan and Adam W. Hall and Siqi Zhou and Lukas Brunke and Melissa Greeff and Jacopo Panerati and Angela P. Schoellig},
year={2021},
eprint={2109.06325},
archivePrefix={arXiv},
primaryClass={cs.RO}}
要复现文章中的结果,请参见分支 submission
。
在Ubuntu/macOS上安装
克隆仓库
git clone https://github.com/utiasDSL/safe-control-gym.git
cd safe-control-gym
(可选)创建 conda
环境
使用conda
创建并访问Python 3.10环境
conda create -n safe python=3.10
conda activate safe
安装
安装 safe-control-gym
仓库
python -m pip install --upgrade pip
python -m pip install -e .
注意
你可能需要单独安装 gmp
,这是 pycddlib
的依赖项:
conda install -c anaconda gmp
或
sudo apt-get install libgmp-dev
架构
safe-control-gym
API概览:
配置
入门
通过examples/
中的脚本熟悉API和环境
使用PID进行3D四旋翼莱姆尼斯卡特轨迹跟踪
cd ./examples/ # 导航到examples文件夹
python3 pid/pid_experiment.py \
--algo pid \
--task quadrotor \
--overrides \
./pid/config_overrides/quadrotor_3D/quadrotor_3D_tracking.yaml
使用LQR进行倒立摆稳定控制
cd ./examples/ # 进入examples文件夹
python3 lqr/lqr_experiment.py \
--algo lqr \
--task cartpole \
--overrides \
./lqr/config_overrides/cartpole/cartpole_stabilization.yaml \
./lqr/config_overrides/cartpole/lqr_cartpole_stabilization.yaml
使用PPO进行2D四旋翼飞行器轨迹跟踪
cd ./examples/rl/ # 进入RL examples文件夹
python3 rl_experiment.py \
--algo ppo \
--task quadrotor \
--overrides \
./config_overrides/quadrotor_2D/quadrotor_2D_track.yaml \
./config_overrides/quadrotor_2D/ppo_quadrotor_2D.yaml \
--kv_overrides \
algo_config.training=False
详细API示例
cd ./examples/ # 进入examples文件夹
python3 no_controller/verbose_api.py \
--task cartpole \
--overrides no_controller/verbose_api.yaml
已实现的控制器列表
已实现的安全过滤器列表
性能
我们将safe-control-gym
的样本效率与原始的OpenAI Cartpole、PyBullet Gym的倒立摆以及gym-pybullet-drones
进行比较。我们选择每个项目的默认物理模拟积分步长。我们报告开环、随机动作输入的性能结果。请注意,safe-control-gym
报告的Bullet引擎频率通常更加精细,以提高保真度。safe-control-gym
四旋翼环境虽然不如gym-pybullet-drones
轻量级,但提供了相同数量级的加速和更多的安全特性/符号模型。
环境 | 图形界面 | 控制频率 | PyBullet频率 | 约束与干扰^ | 加速比^^ |
---|---|---|---|---|---|
Gym cartpole | 是 | 50Hz | 不适用 | 否 | 1.16倍 |
InvPenPyBulletEnv | 否 | 60Hz | 60Hz | 否 | 158.29倍 |
cartpole | 是 | 50Hz | 50Hz | 否 | 0.85倍 |
cartpole | 否 | 50Hz | 1000Hz | 否 | 24.73倍 |
cartpole | 否 | 50Hz | 1000Hz | 是 | 22.39倍 |
gym-pyb-drones | 是 | 48Hz | 240Hz | 否 | 2.43倍 |
gym-pyb-drones | 否 | 50Hz | 1000Hz | 否 | 21.50倍 |
quadrotor | 是 | 60Hz | 240Hz | 否 | 0.74倍 |
quadrotor | 否 | 50Hz | 1000Hz | 否 | 9.28倍 |
quadrotor | 否 | 50Hz | 1000Hz | 是 | 7.62倍 |
^ 环境是否包含默认的约束和干扰集
^^ 加速比 = 模拟时间 / 实际时钟时间;在2.30GHz四核i7-1068NG7处理器和32GB 3733MHz LPDDR4X内存的设备上测试;无GPU
运行测试和代码检查
可以通过执行以下命令在本地运行测试:
python3 -m pytest ./tests/ # 运行所有测试
可以通过以下命令在本地运行代码检查:
pre-commit install # 安装pre-commit钩子
pre-commit autoupdate # 自动更新钩子版本
pre-commit run --all # 对所有文件运行钩子
参考文献
- Brunke, L., Greeff, M., Hall, A. W., Yuan, Z., Zhou, S., Panerati, J., & Schoellig, A. P. (2022)。机器人中的安全学习:从基于学习的控制到安全强化学习。《控制、机器人和自主系统年度评论》,5,411-444。
- Yuan, Z., Hall, A. W., Zhou, S., Brunke, L., Greeff, M., Panerati, J., & Schoellig, A. P. (2022)。safe-control-gym:机器人安全学习控制和强化学习的统一基准套件。《IEEE机器人与自动化快报》,7(4),11142-11149。
相关开源项目
gym-pybullet-drones
:单架和多架四旋翼飞行器环境stable-baselines3
:PyTorch强化学习算法bullet3
:多物理模拟引擎gym
:OpenAI强化学习工具包casadi
:数值优化的符号框架safety-gym
:强化学习中安全探索的环境realworldrl_suite
:真实世界强化学习挑战框架gym-marl-reconnaissance
:多智能体异构(无人机/无人车)环境
多伦多大学动态系统实验室 / Vector人工智能研究所