具身智能系列教程——(三)gazebo环境配置与强化学习训练
系列的最后一篇教程,我来到自己比较擅长的gazebo环境中训练自己的go2机器人,这个也是借鉴了开源资料,我们现在来复现一下。https://github.com/fan-ziqi/rl_sar
通过gazebo来进行仿真,训练强化学习的控制器完成相关任务.
目录
- 安装ros
- 克隆项目并配置
- 编译项目
- 实际运行
- 机器人
- 控制模型
- 机器狗
安装ros
我现在使用的是ros2版本下的,用习惯之后其实就能很快实现转换过程了,所以后续应该都是以ros2作为基础版本了.这里安装的是galactic版本.安装过程直接跳过,通过fishros快速安装即可,当然,最初使用的话还是可以使用ros1的,版本为noetic:
wget http://fishros.com/install -O fishros && . fishros.
克隆项目并配置
git clone -b ros2 https://github.com/fan-ziqi/rl_sar.git
安装一些ros的依赖项
sudo apt install ros-$ROS_DISTRO-teleop-twist-keyboard ros-$ROS_DISTRO-ros2-control ros-$ROS_DISTRO-ros2-controllers ros-$ROS_DISTRO-control-toolbox ros-$ROS_DISTRO-robot-state-publisher ros-$ROS_DISTRO-joint-state-publisher-gui ros-$ROS_DISTRO-gazebo-ros2-control ros-$ROS_DISTRO-gazebo-ros-pkgs ros-$ROS_DISTRO-xacrosudo apt install liblcm-dev libyaml-cpp-dev
由于训练使用了torch的cpp库,这里需要一并下载安装,我们通过wget下载:
wget https://download.pytorch.org/libtorch/cpu/libtorch-cxx11-abi-shared-with-deps-2.0.1%2Bcpu.zip
然后解压
unzip libtorch-cxx11-abi-shared-with-deps-2.0.1+cpu.zip -d ./
将libtorch的位置添加到.bashrc的环境变量中,注意修改为自己的路径:
export Torch_DIR=/path/to/your/libtorch
到此位置,项目就配置完毕了
编译项目
通过catkin build编译这个ros项目:
catkin build
source环境变量
source devel/setup.bash
然后运行自己的环境.这个的规则是:
source devel/setup.bashroslaunch rl_sar gazebo_<ROBOT>.launch cfg:=<CONFIG>
然后运行控制模块,包含cpp和python两个版本:
source devel/setup.bash
(for cpp version) rosrun rl_sar rl_sim
(for python version) rosrun rl_sar rl_sim.py
实际运行
机器人
我们这里就主要运行机器人和机器狗两个内容,对于机器人,我们运行:
source devel/setup.bashroslaunch rl_sar gazebo_g1_12dof.launch cfg:=unitree_rl_gym
然后启动控制器
source devel/setup.bash
rosrun rl_sar rl_sim
控制模型
- 然后进行实际的控制,这里推荐使用手柄来控制,也可用通过键盘,说明如下:
- 按下可在 running 和 stopped 之间切换模拟器。
- 按 0 将机器人从初始模拟姿势移动到使用位置控制插值的 YAML 文件中定义的 default_dof_pos。
- 按 p 切换到强化学习模式。
- 使用 W/S 向前/向后移动, 使用 J/L 向左/向右移动,使用 A/D 转动。按下可将所有控制命令重置为零。
- 按 n 切换到导航模式,禁用游戏手柄命令并接收来自 cmd_vel 主题的命令。
- 如果机器人掉落,请按 R 键重置 Gazebo 环境。
- 按 1 可使用位置控制插值将机器人从其当前位置移回初始模拟姿势。
对于手柄来说:
按 LB 可在 running 和 stopped 之间切换模拟器。
按 RB + Y 使用位置控制插值将机器人从初始模拟姿势移动到 YAML 文件中定义的 default_dof_pos。
按 RB + B 切换到强化学习模式。
使用 LY 向前/向后移动, 使用 LX 向左/向右移动,使用 RX 转动。
按左侧的向下按钮切换到 Navigation 模式,禁用游戏手柄命令并接收来自 cmd_vel 主题的命令。
如果机器人掉落,请按 RB + X 重置 Gazebo 环境。
按 RB + A 使用位置控制插值将机器人从其当前位置移回初始模拟姿势。
如果是使用手柄,那么先回到rl_sim的终端回车启动simulation(或者LB)
实际就是控制gazebo环境的起停:
启动之后RB+Y将其初始化,初始化完成之后的姿态为:
没有站立,我们这里通过RB + X调用gazebo的reset函数
此时由于没有加入控制器,所以重置环境后还是会倒下,这时RB + B启动强化学习的控制器
就可以完美站立了,然后通过方向键来控制它的运动即可.
机器狗
类似的运行
source devel/setup.bashroslaunch rl_sar gazebo_go2.launch cfg:=robot_lab
然后启动控制器
source devel/setup.bash
rosrun rl_sar rl_sim
他的控制与机器人也是一样的,我们安装:
启动仿真->设置初始关节->启动强化学习控制器->重置gazebo环境的顺序就能够让狗正常站立了
接下来就能够正常运动我们的模型了
对于控制器的训练来说,我们也可以训练自己的控制器,这里先留着,后面继续完善强化学习控制器的训练部分.