OpenAI Gymnasium

Модель робота МОРС, созданная в Pybullet, соответствует стандарту OpenAi Gymnasium. Python-модули, совместимые с этим стандартом удобно использовать для методов обучения с подкреплнием. Более того, этот стандарт поддерживается большим количеством RL-библиотек, таких как StableBaselines3, CleanRL и RLlib.

Файл с классом для работы с OpenAi Gymnasium находится по адресу: https://github.com/voltdog/mors_pc/blob/main/mors_sim/scripts/mors_sim/mors_gym_env.py

Пример кода для работы с моделью:

from mors_gym_env import MorsBulletEnv
from stable_baselines3.common.env_checker import check_env
import numpy as np

t = 0.0
dt = 1.0/240.0
environment = MorsBulletEnv(urdf_root="./urdf",
                                    world="empty",
                                    sim_freq=240,
                                    hard_reset=True,
                                    render=True,
                                    on_rack=False,
                                    self_collision_enabled=False,
                                    max_timesteps = np.inf,
                                    debug_mode = False,
                                    floating_camera=False,
                                    step_enabled=True,

                                    accurate_motor_model_enabled=False,
                                    simple_motor_model_enabled=False,
                                    torque_control_enabled=False,
                                    motor_kp=0,
                                    motor_kd=0,
                                    motor_velocity_limit=np.inf,
                                    
                                    action_repeat=1,
                                    rew_scale = 1,
                                    distance_limit=float("inf"),
                                    observation_noise_stdev=0.0,
                                    normalization = True,

                                    ext_disturbance_enabled = False,
                                    lidar_enabled=False,
                                    camera_enabled = False
                                    )

environment.reset()

for i in range(1000):
    ref_angle = np.sin(t) * 0.7
    action = [ref_angle]*12
    observation, _, _, _, _ = environment.step(action)

    t += dt
environment.close()

Аргументы конструктора класса MorsBulletEnv

  • urdf_root - папка, где лежит urdf-файл робота

  • sim_freq - с какой частотой производится симуляция

  • world - название окружения. Доустпные на данный момент окружения: empty - плоская поверхность, random1 - случайные неровности, random2 - второй вариант случайных неровностей, gazebo_racetrack_day - окружение RacetrackWorld из Gazebo

  • hard_reset - если True, то при выполнении функции reset() сбрасывается всё, включая urdf. Если false, то сбрасывается только положение робота. Во время обучения удобнее использовать false, чтобы не тратить лишнее время на загрузку модели.

  • render - отображать симуляцию или нет

  • on_rack - привязать корпус робота к фиксированному положению или дать ему свободно двигаться

  • self_collision_enabled - не дает ногам проходить друг через друга (в настоящий момент работает плохо)

  • debug_mode - вывести на экран различные элементы управления

  • floating_camera - жестко привязать камеру, чтобы она всегда двигалась за роботом, или дать возможность пользователю управлять положением камеры

  • step_enabled - если True, то команды двигателям отправляются через функцию step(). Если false, то команды двигателю надо задавать через функцию set_motor_commands()

  • accurate_motor_model_enabled - включает точную модель двигателей, но замедляет выполнение симуляции (пока отсутствует)

  • simple_motor_model_enabled - включает простую модель двигателей (загрузка симулятора средняя) (пока отсутствует)

  • torque_control_enabled - управлять двигателями по моменту или по углу

  • motor_kp - пропорциональный коэффициент ПД-регулятора двигателя

  • motor_kd - дифференциальный коэффициент ПД-регулятора двигателя

  • motor_velocity_limit - максимальная скорость двигателей

  • max_timesteps - ограничение по выполнению симуляции

  • action_repeat - сколько раз применять action за одно выполнение функции step()

  • rew_scale - коэффициент масштабирования вознаграждения

  • distance_limit - ограничение по расстоянию, куда робот может уйти. Если робот уйдет более дальнее расстояние, то симуляция прекратится.

  • observation_noise_stdev - стандартное отклонение шума наблюдения

  • normalization - если true, то вектор наблюдения нормализуется. Если false, то в векторе наблюдения указываются реальные значения с симулируемых датчиков

  • camera_enabled - если true, то на передней части робота размещается видеокамера

  • lidar_enabled - если true, то на спине робота размещается лидар

  • ext_disturbance_enabled - если true, то на рбота действую постоянные внешние возмущения со случайным интервалом времени, в случайном направлении и случайной прилагаемой силой

Last updated