深度学习17-机器人技术中的强化学习

### 机器人技术中的强化学习

▪  这是尝试超越模拟环境进军物理世界的唯一章节。
▪  在本章中,将使用易于获得且价格便宜的组件构建一个小型机器人,并使用RL方法对其进行控制。

#### 机器人与机器人学

▪  具有两种状态(打开和关闭)的简单按钮:在简单情况下检测与对象的物理接触时,这会是一种非常流行的解决方案。例如,3D打印机通常具有所谓的挡块,挡块只是在运动部件达到某些边界限制时触发的按钮。发生这种情况时,内部软件(也称为固件)会对此事件做出反应,例如,停止发动机。
▪  距离传感器:这些距离传感器使用声波或激光测量前方物体到传感器的距离。例如,扫地机器人通常具有“悬崖探测器”,以防止自己掉下楼梯。这只是一个激光距离传感器,可测量到机器人下方地板的距离。如果该距离突然变大,则机器人会知道前进是危险的,从而做出适当的反应。
▪  光学雷达(LiDAR)传感器:这是距离传感器的更复杂和更昂贵的版本,不同之处在于传感器会旋转,因此会不断在水平面上扫描物体。传感器的输出是由一个个点构成的流(所谓的“点云”),显示了机器人与周围障碍物的距离。LiDAR在自动驾驶汽车中非常流行,因为它们提供了有关障碍物的可靠信息流,但是由于复杂的机械结构和光学结构,它们非常昂贵。
▪  摄像头:此类传感器以与现代智能手机相同的方式用流传输视频,但是流通常必须由机器人的软件进行处理以检测诸如拐角或猫之类的物体。视频处理的计算量非常巨大,因此必须使用专用硬件,例如嵌入式图形处理单元或其他神经网络加速器。好消息是,摄像头的价格可能非常便宜,并且可以提供外界的丰富信息流。
▪  物理传感器:此类别包括加速度测量计、数字陀螺仪、磁力计、压力传感器、温度计等。它们测量机器人周围世界的物理参数,通常非常紧凑、便宜且易于使用。通常,所有细节和复杂性都隐藏在小小的芯片中,使用某种通信协议以数字形式提供测量结果。这种传感器在业余爱好者中非常流行,并且可以在各种各样的玩具、电子消费产品和DIY项目中找到。例如,无人机可以使用压力传感器测量高度,使用磁力计确定水平方向,并使用GPS接收器定位自身。

从宏观来看,机器人由四个部分组成:
▪  开发板:基于STM32F405的开发板,与MicroPython兼容(为嵌入式应用程序设计的Python简化版本:http://micropython.org)。我使用的开发板的价格约为25美元,但我见过售价仅为15美元的版本。
▪  传感器:具有四个传感器芯片的集成板,可提供加速度计、陀螺仪、磁力计和气压计。所有这些传感器都可在一根内部集成电路(I2C)总线上使用。价格约为15美元。
▪  伺服电机:可以在AliExpress或其他折扣零售商处购买的四个非常便宜的由脉冲宽度调制(PWM)驱动的伺服电机。它们不是很可靠,但是非常适合我们。价格为每个伺服器2美元。
▪  框架:3D打印的框架,用于将所有组件安装在一起。3D打印服务的价格可能差别比较大,但大约为5美元,因为框架很小,需要用到的塑料很少。
因此,最终价格几乎不超过70美元,这比Minitaur的数千美元甚至比乐高Mindstorms的500美元(对于RL应用程序也有一点限制)要便宜得多。

#### 传感器

▪  加速度计(LIS331DLH芯片)可在三个轴上测量高达±8g的加速度,具有16位的测量分辨率,并可承受10 000g的冲击。例如,iPhone 4S中安装了相同的加速度计。
▪  陀螺仪(L3G4200D芯片)可测量所有三个轴上的角速度,并且每秒可测量高达2000度,这是相当快的旋转速度(超过300r/min)。
▪  磁力计(LIS3MDL芯片)根据它的轴测量磁场方向,因此它基本上会显示北的方向。
▪  气压计(LPS331AP芯片)测量大气压,可以用来获取当前高度。该芯片对我们的目标没有用,因为其测量精度不超过30cm。由于我们的机器人不会从屋顶跳下,因此不会使用此传感器,但是在其他情况下(例如对于无人机或飞机模型),了解高度可能至关重要。

描述的硬件的潜在功能非常有限:
▪  只有四个伺服器,它们的旋转角度有限制:这使我们的机器人的运动高度依赖于与表面的摩擦,因为它无法抬起自己的腿,Minitaur机器人也是如此,它每条腿上固定了两个电机。
▪  硬件比较弱:内存有限,CPU速度不是很快,并且没有硬件加速器。在接下来的部分中,我们将研究如何在一定程度上应对这些限制。
▪  除微型USB接口外,没有其他外部连接:某些开发板可能具有Wi-Fi硬件,可用于减轻NN推理的负担,将推理能力放到更强大的机器上,但是在本章的示例中,我将不走这条路。这可能会是一个有趣的项目:将ESP8266开发板(这是一种非常流行的具有嵌入式Wi-Fi连接的单片机)添加到机器人中(甚至可以使用ESP8266板作为主开发板)并使其具备无线连接的能力。

实现低级机器人模型并将其包装在Gym环境中非常复杂。包括以下几个原因:
▪  从软件工程师的角度来看,PyBullet类非常复杂且设计不良。它们包含许多副作用。例如,一些会影响方法行为的字段、非显而易见的执行流程以及过于复杂和混乱的逻辑。文档几乎是缺失的,因此唯一的信息来源是源代码中给出的现有模型,这不是学习的最佳方法。所有这些导致我在得到可行的解决方案之前产生了很多错误,不得不花时间来解决它们。
▪  在内部,PyBullet使用C++编写的Bullet库并提供通用的物理模拟器。Bullet包含方法和总体结构的文档,但它不容易阅读,并且完整度很低。
▪  要定义模型,需要提供机器人的几何形状和环境,还需要定义所有执行器和你要模拟的模型的特性,例如,摩擦力、执行器类型、参数、质量、惯性力矩等。有多种格式可以用于描述模型结构:URDF(统一机器人描述格式)、MJCF(MuJoCo XML格式)和其他格式。我发现他们都不容易编写,因为我需要在非常低的级别定义所有属性。事实证明,MuJoCo格式的文档稍微好一些,因此我将其用于机器人的定义,但是即使对于我们的简单设计来说,了解文件格式的要求以及描述几何形状和执行器仍然很痛苦。也许我错过了一些能简化过程的酷炫工具,但是我研究了几种替代方法,发现没有什么比在文本编辑器中编写MuJoCo XML文件更好的了。这种方式复杂且冗长,因此对于更复杂的设计显然需要更好的解决方案。
▪  我在Bullet和PyBullet中遇到过bug。由于Bullet将MuJoCo文件格式导成其自己的表示形式,因此它不支持MuJoCo的所有功能。即使对于受支持的部分,它也可能突然无法加载或出现异常,这并没有简化设计过程。
 

你可能感兴趣的:(深度学习,深度学习,人工智能)