【2021.11.11更新】ROS机器⼈强化学习环境搭建 (Ubuntu20.04+ROSN。。。
本⽂介绍了基于强化学习的turtlebot3⾃主导航的仿真环境搭建过程,包括ROS Noetic,openai_ros的安装,以及创建⾃⼰的强化学习任务环境。 最终效果如下所⽰:
操作系统:Ubuntu 20.04 LTS
ROS版本:Noetic
Python版本:3.8
⽬录
ROS的安装
ros安装参考。
因为以前版本的ros存在与python3不兼容的问题,故博主使⽤的ros为较新的Noetic版本(该版本推荐在ubuntu 20.04上安装)。
1. 设置source.list
打开终端,输⼊以下指令设置source.list
sudo sh -c 'echo "deb /ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
如下载过慢,可使⽤中寻可⽤的国内源,如清华源的指令如下:
sudo sh -c '. /etc/lsb-release && echo "deb mirrors.tuna.tsinghua.edu/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'
2. 设置密钥
终端输⼊以下指令:
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu: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的使⽤
这部分同样参考。
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 /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 /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 /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编译过程中⼀定会报错,因为缺少安装相应的包,请按照报错提⽰安装相应的包。
如提⽰缺少ake 及 ake时,需要运⾏以下指令(替换其中的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⽂件中引⽤了
vobuconfig/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 环境基类)
→ bot_gazebo_env.RobotGazeboEnv
碎花刀刀(定义了reset和step操作,完成gazebo的交互)
→ bot_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()