【2021.11.11更新】ROS机器人强化学习环境搭建(Ubuntu20.04 + ROS Noetic + OpenAI_ROS),以Turtlebot3为例,包含自定义训练任务环境

本文详述了如何在Ubuntu 20.04上安装ROS Noetic,并结合OpenAI_ROS创建Turtlebot3的强化学习仿真环境,包括设置源、安装ROS、创建catkin工作空间、下载相关包及自定义任务环境的步骤。

        本文介绍了基于强化学习的turtlebot3自主导航的仿真环境搭建过程,包括ROS Noetic,openai_ros的安装,以及创建自己的强化学习任务环境。

        最终效果如下所示:

操作系统:Ubuntu 20.04 LTS 

ROS版本:Noetic

Python版本:3.8

目录

ROS的安装

1. 设置source.list 

2. 设置密钥

3. 开始安装 

 4. 添加环境变量

5. 安装其他依赖

6. 更新rosdep

7. 测试是否安装成功

OpenAI ROS的使用

1. 创建catkin工作空间

 2. 下载openai_ros

3. 下载turtlebot3任务测试代码

4. 下载支持openai_ros的turtlebot3包

5. 将openai_ros和turtlebot3包一起编译。

6. 测试

自定义任务环境

1. Openai_ros 包的结构

2. 定义环境地图

3. 定义机器人观测,机器人动作,奖励函数


ROS的安装

        ros安装参考官方wiki

        因为以前版本的ros存在与python3不兼容的问题,故博主使用的ros为较新的Noetic版本(该版本推荐在ubuntu 20.04上安装)。

1. 设置source.list 

        打开终端,输入以下指令设置source.list 

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

        如下载过慢,可使用官方提供的源列表中寻找可用的国内源,如清华源的指令如下:

sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'

2. 设置密钥

        终端输入以下指令:

sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

3. 开始安装 

        安装前更新apt:

sudo apt update

        这里建议安装完整的ros桌面版(此过程耗时较长)。如欲安装其他版本,可将noetic替换成对应版本名称:

sudo apt install ros-noetic-desktop-full

 4. 添加环境变量

        建议将环境设置添加到.bashrc中,这样每次打开终端都会自动加载ros环境。指令如下:

echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc

5. 安装其他依赖

        这里只安装官方列举的包:

sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential

6. 更新rosdep

        终端输入依次如下指令:

sudo rosdep init
rosdep update

        没有科学上网的话可能因为网络问题会卡在这一步,这里给出实测可用的解决方法

7. 测试是否安装成功

        打开终端,输入如下指令启动ros服务:

roscore

        另开一新终端, 输入如下指令:

rosrun turtlesim turtlesim_node

        若均无报错,且弹出有一个小乌龟的图形界面,则安装成功。

OpenAI ROS的使用

        这部分同样参考官方wiki

1. 创建catkin工作空间

        先创建catkin工作空间,依次输入如下指令。

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace

 2. 下载openai_ros

        终端输入如下指令,git下载openai_ros包:

cd ~/catkin_ws/src
git clone https://bitbucket.org/theconstructcore/openai_ros.git
cd openai_ros
git checkout version2

        这里同样将source ~/catkin_ws/devel/setup.bash放入.bashrc文件,以便每次打开终端都自动加载该环境变量。

3. 下载turtlebot3任务测试代码

        先将官方提供的全部例子git到其他文件夹,下载完别忘了使用git checkout version2调整到和安装的openai_ros相同的分支version2。

git clone https://bitbucket.org/theconstructcore/openai_examples_projects.git
cd openai_examples_projects
git checkout version2

         将其中的my_turtlebot3_openai_example文件夹拷贝到catkin_ws/src目录下,等下一步的包安装完后一同编译。如需测试其他机器人任务,则拷贝相应的example文件夹。

4. 下载支持openai_ros的turtlebot3包

        这里注意下载的turtlebot3包一定是从openai_ros作者提供的turtlebot3的包,否则会缺少相应的如put_robot_in_world.launch等文件。

cd ~/catkin_ws/src
git clone https://bitbucket.org/theconstructcore/turtlebot3.git
cd turtlebot3
git checkout noetic

        下载完同样要注意调整git分支。

5. 将openai_ros和turtlebot3包一起编译。

        catkin工作包在使用前都需要使用catkin_make进行编译:

cd ~/catkin_ws
catkin_make
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc

         进行catkin_make编译过程中一定会报错,因为缺少安装相应的包,请按照报错提示安装相应的包。

        如提示缺少xxxConfig.cmake 及 xxx-config.cmake时,需要运行以下指令(替换其中的xxx)安装相应包:

sudo apt install ros-noetic-xxx

        最后两行是将source ~/catkin_ws/devel/setup.bash指令添加到.bashrc文件中,以便每次打开终端都会载入catkin工作环境。

6. 测试

        在终端运行如下指令

roslaunch my_turtlebot3_openai_example start_training_v2.launch

        如提示缺少python包,安装相应的包就可以。

        注意my_trutlebot3_openai_example包下start_training_v2.launch文件中引用了config/my_turtlebot3_openai_qlearn_params_v2.yaml配置文件,需要将该配置文件的第3行的ros_ws_abspath修改为你的catkin包的路径。

        如安装无问题,则会弹出gazebo软件界面,其中有一个turtlebot3提供的默认地图,以及turtlebot3 burger机器人。 

自定义任务环境

        自定义任务环境需要了解gym的结构,这里不在赘述。

        在参考openai_ros的代码时,需要注意官方给的注释有一部分是错的

1. Openai_ros 包的结构

       自定义任务环境需要搞清楚openai_ros包的结构。

       下载的openai_ros源码位于src/openai_ros目录下,自定义任务环境就是重写一个与src/openai_ros/task_envs目录下相似的环境类。以turtlebot3为例,官方示例代码中使用的环境定义在src/openai_ros/task_envs/turtlebot3/turtlebot3_world.py中。类继承关系如下:

gym.Env(gym 环境基类)

→ openai_ros.robot_gazebo_env.RobotGazeboEnv

(定义了reset和step操作,完成gazebo的交互)

→ openai_ros.robot_envs.turtlebot3_env.Turtlebot3Env

(加载机器人,完成机器人传感器初始化相关处理)

→ openai_ros.task_envs.turtlebot3.turtlebot3_world

(加载地图,定义训练任务,包括状态空间、动作空间、奖励值等)

        在定义好环境类后,需要在src/openai_ros/task_envs/task_envs_list.py文件中,将自定义的环境注册到gym中。简单理解就是给你定义的环境命名,可以通过openai_ros.openai_ros_common.StartOpenAI_ROS_Environment函数得到自定义的环境。

2. 定义环境地图

        我们可以先将turtlebot3_world复制一份,然后对内容进行修改。

        地图主要是修改26行中,ROSLauncher里面的ros包和.launch文件。

        制作ros包的过程可以自行百度;.launch文件可以参照原来的文件,修改其中的.world路径。

        .world文件可以用gazebo制作,终端运行roscore打开ros服务,然后另开终端输入gazebo

roscore
# 打开新终端
gazebo

        具体制作地图方式可以在网上找一下,比较简单。

3. 定义机器人观测,机器人动作,奖励函数

        观测在_get_obs()函数中修改,

        动作在_set_action()函数中修改,

        奖励函数为_compute_reward()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

饮默、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值