如何在OrangePi AIpro智能小车上实现安全强化学习算法

随着人工智能和智能移动机器人的广泛应用,智能机器人的安全性和高效性问题受到了广泛关注。在实际应用中,智能小车需要在复杂的环境中自主导航和决策,这对算法的安全性和可靠性提出了很高的要求。传统的强化学习算法在处理安全约束时存在一定的局限性,引入安全强化学习算法成为了解决这一问题的有效途径。安全强化学习算法通过在强化学习过程中引入安全约束,确保在训练和实际应用中系统的行为始终在安全范围内。这对于智能小车在无人监督的情况下自主运行尤为重要。本文将介绍如何在OrangePi AIpro智能小车上实现安全强化学习算法,详细探讨硬件和软件的配置、算法的设计与实现、实验设置与结果分析等内容,以期为相关研究提供参考和借鉴。

一、OrangePi AIpro开发板

由于强化学习算法对计算能力有着极高的要求,一般的开发板难以满足其算力需求。经过对比众多开发板的性能,最终选用了OrangePi AIpro作为系统的主控,用于部署安全强化学习算法。OrangePi AIpro是一款高性能的开发板,专为AI和IoT应用设计。搭载了4核64位处理器和强大的AI处理器,支持8TOPS的AI算力。具备8GB或16GB LPDDR4X内存和可扩展的32GB至256GB eMMC存储。板载多种高速接口,包括双HDMI 2.0输出、两个USB 3.0端口、一个Type-C 3.0端口以及支持SATA/NVMe SSD的M.2接口,适合进行大容量数据处理和快速读写。此外,它还提供了丰富的连接选项,如千兆以太网、多种MIPI接口用于摄像头和显示屏,以及预留的电池接口,使其非常适合用于边缘计算、深度学习、视频分析、自然语言处理等多种AI应用场景。OrangePi AIpro支持Ubuntu和openEuler操作系统,配备MindStudio全流程开发工具链,实现简化的开发和模型适配,适用于从AI教学到企业级应用的广泛场景。下图为OrangePi AIpro硬件的详细图。

centered image

本文将详细介绍如何在OrangePi AIpro智能小车上部署强化学习算法,并测试OrangePi AIpro开发板的性能。通过实际应用场景中的实验,评估其在高计算需求任务中的表现,以及其在处理复杂导航和决策任务时的效率和可靠性。

二、安全强化学习

强化学习(Reinforcement Learning, RL)是一种机器学习方法,通过智能体与环境的交互,学习如何在不同情况下采取行动,以最大化某种累积奖励。强化学习广泛应用于机器人运动控制、自动驾驶等领域。在运动控制任务中,基于强化学习的智能体能够根据环境变化调整策略,以完成复杂的场景任务,并可以直接从数据中学习策略降低控制系统的设计成本。然而,由于在策略训练过程中强化学习算法可能会探索危险动作,对机器人的安全性构成潜在威胁,并且随着训练周期的增加,反复试验可能会对机器人的运动性能和使用寿命造成损害。因此,为确保运动体在训练策略和实现目标过程中的安全,安全强化学习算法被提出。

安全强化学习通过结合传统强化学习框架与先进的安全约束策略,致力于增强智能体在复杂环境中的表现与安全性。这些技术主要包括状态约束、安全层和恢复策略等,用以确保在执行任务时,智能体不仅能达成预设目标,同时也能避免对自身及环境造成潜在的危害。通过引入如状态约束,可以限制智能体的行为在安全的状态空间内进行;安全层则通过覆盖或修改原有的行为策略来防止危险行为的发生;恢复策略则在智能体偏离安全路径时提供了必要的干预手段。这些方法的综合应用显著提升了强化学习算法在实际应用中的可靠性和安全性。下图为状态约束下安全强化学习的算法框架。

centered image

三、OrangePi AIpro智能小车的硬件和软件配置

3.1 硬件

OrangePi AIpro智能小车总体硬件图:

centered image

全向移动小车的运动控制是整个实验系统的关键技术之一,它能实现全向移动小车的避障、跟踪等功能。为了保证运动体的安全性和跟踪性,需要通过运动控制器控制四个麦克纳姆轮的的转速和转向,可以控制全向移动小车沿任意方向平移或旋转,从而使小车能够跟踪其安全控制指令。

根据运动控制的硬件配置,选择了嵌入式芯片STM32F407作为运动控制器。为了开发运动控制相关的程序,使用了keil开发环境,并编写了uart串口通信协议来接收安全控制量。由于数据传输过程中可能会出现误码或数据丢失的情况,为了保证数据传输的可靠性和准确性,采用了首尾检验的方法来确保数据的完整性和正确性。接收到安全控制量(Vx,Vy,Yaw)后,不能直接用于电机的控制,需要根据全向移动小车的逆运动学模型,将安全控制量解算为四个轮子的转速。在运动控制器内部,我们使用了PI控制算法对轮子的转速进行闭环控制。同时,为了方便调节PI控制器的参数,使用了Matlab/Simulink系统工具箱。首先,采集全向移动小车的输入和输出数据,并通过系统辨识方法得到了以状态空间表达式呈现的动力学模型。其次,针对该全向移动小车的动力学模型,并根据系统的调节时间和鲁棒性的性能指标,设计了PI控制器的相关参数,实现了全向移动小车能够精确跟踪安全控制量。

3.2 软件环境配置

3.2.1 连接OrangePi AIpro

开机显示页面如下,连接wifi

centered image

3.2.2 ssh连接

为了方便配置环境及进行文件传输,使用ssh连接OrangePi AIpro进行环境配置

img

连接成功

centered image

3.2.3 配置运行环境

创建环境

conda create -n srl python=3.8

安装依赖环境

pip install torch==1.10.2 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install pybullet==3.2.6 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install gym==0.25.2 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install cvxopt==1.3.2 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install qpth -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple

安装cvxopt报错

centered image

在尝试构建 cvxopt 时,链接器无法找到 llapack 库。

安装 lapackblas

sudo apt-get install liblapack-dev libblas-dev
centered image

表明在编译 cvxopt 时,找不到 umfpack.h 头文件。umfpack.h 是 SuiteSparse 库的一部分,需要安装该库才能解决这个问题

安装 SuiteSparse

sudo apt-get install libsuitesparse-dev
export SUITESPARSE_INCLUDE_DIR=/usr/include/suitesparse
export SUITESPARSE_LIBRARY_DIR=/usr/lib
pip install --no-cache-dir --no-binary :all: cvxopt

四、安全强化学习算法的设计与实现

强化学习 (RL) 的重点是寻找一个的最优得策略, 以获得最大化的长期回报。它通过反 复观察智能体的状态、采取行动, 并获得奖励来反复优化策略以获得最佳策略。该方法已 成功应用于连续控制任务, 其中多次策略迭代得策略已学会稳定复杂机器人。然而, 由于RL专注于最大化长期奖励, 它很可能在学习过程中探索不安全的行为。这个特性是有问题 的尤其对于将部署在硬件上的 RL 算法, 因为不安全的学习策略可能会损坏硬件或给人类 带来伤害。本文是将现有的无模型 RL 算法(DDPG)与控制障碍函数 (CBF) 集成, 在稀疏 奖励下完成运动体的安全控制, 提高学习过程中的探索效率。

由于控制障碍函数具有强约束性的特点, 将强化学习策略探索过程中的动作输出作为标称控制器的输出, 即控制障碍函数的输入, 以保证探索过程中的实时安全, 其与环境交互的原理如图:

centered image

运动体执行的动作为:

$$
u_{k}(s)=u_{\theta_{k}}^{R L}(s)+u_{k}^{C B F}\left(s, u_{\theta_{k}}^{R L}\right)
$$

在无模型强化学习的策略探索中, $u_{\theta_{k}}^{R L}(s)$ 给出了一个动作, 试图优化长期奖励, 但可能是不安全的。CBF控制器 $u_{k}^{C B F}\left(s, u_{\theta_{k}}^{R L}\right)$ 过滤掉强化学习动作中不安全的行为, 并提供最小的控制干预, 以确保总体控制器 $u_{k}(s)$安全, 同时使系统状态保持在安全集内。

CBF控制器的输出 $u_{k}^{C B F}\left(s, u_{\theta_{k}}^{R L}\right)$ 由以下公式在每个时间步长进行一次规划求解得出:

$$
\begin{aligned}
& u_{k}^{C B F}=\underset{v^s, \epsilon}{\arg \min } \frac{1}{2}\left|v^s-u_{\theta_{k}}^{R L}(s)\right|^2+k_\epsilon \epsilon^2 \
& \text { s.t. } \frac{\partial h_i}{\partial p} v^s \geq-\alpha\left(h_i(p)\right)-\epsilon, \quad \forall i \in \mathcal{N}_s
\end{aligned}
$$

其中 $a_{\mathrm{low}}^{i} \leq a_{t}^{i}+u_{\theta_{k}}^{R L(i)}\left(s_{t}\right) \leq a_{\mathrm{high}}^{i}$ 对输出的限幅, 在实际控制对象中, 执行器的动作空间有限, 将动作界限做为二次规划的约束条件, 其输出结果就是在界限内的安全动作, 保证运动体的安全。

五、实验和结果

仿真实验

为了验证安全强化控制算法, 在如下的环境中进行安全控制实验, 运动体 (四轮小车) 需要绕过紫色障碍, 安全到达绿色区域即可获得相应奖励。

centered image

OrangePi AIpro开发板仿真实验运行效果:

centered image

动态运行效果:

centered image

Pybullet动态效果:

centered image

物理实验

本节以全向移动机器人在复杂环境中的路径跟踪为背景设计实验系统,实验系统的总体框图如图所示

centered image

该实验系统由运动捕捉系统、地面站和搭载OrangePi AIpro开发板的全向移动小车组成。运动捕捉系统能够获取全向移动小车的实时位姿, 并将其作为反馈信息传递给地面站。地面站讲定位数据解算完成,讲小车的控制指令与位置信息发送给小车, 小车OrangePi AIpro运行安全强化学习策略,给出小车的速度控制指令,产生安全控制,控制全向移动小车安全地到达目标点。

物理实验效果:

centered image

六、总结

本文成功在OrangePi AIpro智能小车上实现安全强化学习算法的部署,并进行了仿真及物理实验测试,均取得了良好的测试效果,显示了该开发板在AI应用中的潜力和实用性。以下是对OrangePi AIpro的综合评价,包括其优点和一些改进建议:

优点:

  1. 环境配置便利: 通过支持conda环境管理工具,使得环境配置变得迅速且高效,对于强化学习等算法依赖的安装过程中没有出现致命的编译错误。
  2. 高性能AI算力: 支持8TOPS的AI算力,表现出色,尤其适用于计算需求较高的AI应用场景。
  3. 高性价比与流畅度: 相比于其他竞争对手如树莓派,OrangePi AIpro提供了更优的性价比和更流畅的开发体验。

改进建议:

  1. 供电方案优化: 在移动机器人等移动设备上部署时,现有的供电方案不够理想。建议提供更详细的供电指南,包括是否可以通过引脚供电的具体方法。
  2. 框架兼容性与部署流程: 虽然OrangePi AIpro在性能上表现出色,但主流AI算法框架(如TensorFlow、Pytorch、PaddlePaddle)的兼容性仍有待提高。建议开发更系统的算法框架转换和部署流程,以便开发者能够更顺利地实现算法的迁移和应用。

七、参考资料

  • 基于分层强化学习与控制障碍函数的安全控制算法[J]. 控制工程
  • OrangePi 官方文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/17279.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

享受当下,还是留待未来?一项fMRI与眼动追踪技术的联合研究

摘要 时间贴现(temporal discount)是指个体对奖励的估计会随着时间流逝而下降的心理现象。具体而言,当获得奖励的时间以日期(日期条件;例如,2023年6月8日)而不是延迟(延迟条件;例如,30天)呈现时,贴现率较低…

免费,Python蓝桥杯等级考试真题--第14级(含答案解析和代码)

Python蓝桥杯等级考试真题–第14级 一、 选择题 答案:B 解析:键为‘B’对应的值为602,故答案为B。 答案:A 解析:字典的符合为花括号,先键后值,故答案为A。 答案:C 解析&#xff1a…

Stable Diffusion 字体和场景结合【把四季藏在海里】

把四季藏在海里,话不多说,上教程。 一、花瓣找字 打开花瓣找下字,也可以自己做,我不会,谢谢。本文用到的字,版权归原作者所有。 白底黑字:那么就是浪花占主要部分,字就是海的效果&…

【改进】YOLOv8 AND YOLOv9 总目录

说明:本专栏为YOLOV8和YOLOV9的使用以及改进的方法。平时比较忙,只能随缘回答问题哈,谨慎订阅! 💛 💙 💜 ❤️ 💚 💛 💙 💜 ❤️ 💚 &…

C++:STL容器的学习-->string

C:STL容器的学习-->string 1. 构造方法2. string的赋值操作3. string字符串的拼接4. string 查找和替换5. string字符串的比较6. string字符存取7. string 插入和删除8. string截取 需要添加头文件#include <string> 1. 构造方法 string() 创建空的字符串 string(c…

C++学习/复习6---内存管理(数据的位置/大小)/new、delete/内存相关面试题(malloc与new/内存泄漏)

一、内存中区域 1.不同数据的存储位置 2.数据占用内存大小 二、动态内存函数 三、new与delete 1.操作内置类型 2.操作自定义类型 四、operator new与operator delete 1.底层源码&#xff08;malloc/free&#xff09; 2.内置/自定义与构造和析构 3.举例 五、定位new表达式 1.举…

使用 Django 和 RabbitMQ 构建高效的消息队列系统

文章目录 RabbitMQ 简介Django 中使用 RabbitMQ总结与拓展 在现代的 Web 应用程序开发中&#xff0c;构建一个高效的消息队列系统变得越来越重要。使用消息队列可以帮助我们解耦系统中不同模块的任务&#xff0c;并提高系统的性能和可扩展性。本文将介绍如何结合 Django 和 Rab…

LeetCode994腐烂的橘子

题目描述 在给定的 m x n 网格 grid 中&#xff0c;每个单元格可以有以下三个值之一&#xff1a;值 0 代表空单元格&#xff1b;值 1 代表新鲜橘子&#xff1b;值 2 代表腐烂的橘子。每分钟&#xff0c;腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子都会腐烂。返回 直到单元格中没…

C++ std::reference_wrapper:让引用更强大

std::reference_wrapper 的通俗易懂解释 一、简介二、std::reference_wrapper 的初衷三、常用示例3.1、与 make_pair 和 make_tuple 一起使用3.2、引用容器3.3、通过 std::thread 按引用传递参数给启动函数3.4、引用作为类成员3.5、按引用传递函数对象3.6、与绑定表达式一起使用…

重新安装 Windows 10/11 后如何恢复丢失的数据?

“嗨&#xff0c;我的 Windows 10/11 崩溃了&#xff0c;所以我不得不重新安装它。我使用 USB 可启动驱动器重新安装了操作系统。但是&#xff0c;重新安装后&#xff0c;C 盘上的所有先前文件都丢失了。有什么方法可以恢复丢失的文件吗&#xff1f;” - 孙雯 在大多数情况下&…

软考 系统架构设计师系列知识点之SOME/IP与DDS(3)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之SOME/IP与DDS&#xff08;2&#xff09; 本文内容参考&#xff1a; 车载以太网 - SOME/IP简介_someip-CSDN博客 https://zhuanlan.zhihu.com/p/369422441 什么是SOME/IP?_someip-CSDN博客 SOME/IP 详解系列&#…

day16--集合进阶(Set、Map集合)

day16——集合进阶&#xff08;Set、Map集合&#xff09; 一、Set系列集合 1.1 认识Set集合的特点 Set集合是属于Collection体系下的另一个分支&#xff0c;它的特点如下图所示 下面我们用代码简单演示一下&#xff0c;每一种Set集合的特点。 //Set<Integer> set ne…

数组-两个升序数组中位数

一、题目描述 二、解题思路 (一).基本思想&#xff1a; 如果列表总长度allsize( arr1.size()arr2.size() ) 为奇数时&#xff0c;中位数位置应该在两个列表排序后的第 allsize/2 位置处&#xff0c;如果allsize为偶数&#xff0c;中位数应该取 (allsize/2)-1 和 allsize/2 的…

【Python】 如何在Python中设置环境变量?

基本原理 在Python中&#xff0c;环境变量是一种存储系统或应用程序配置信息的方式&#xff0c;它们可以被操作系统或应用程序访问。环境变量通常用于配置应用程序的行为&#xff0c;例如指定数据库的连接字符串、API密钥、文件路径等。 Python提供了几种方法来设置和访问环境…

心电信号降噪方法(滤波器/移动平均/小波等,MATLAB环境)

对于一个正常的、完整的心动周期&#xff0c;对应的心电图波形如下图所示&#xff0c;各个波形都对应着心脏兴奋活动的生理过程&#xff0c;包含P波&#xff0c;PR段&#xff0c;QRS波群&#xff0c;ST段&#xff0c;T波&#xff0c;U波。 &#xff08;1&#xff09;P波心电图中…

OpenBMC相关的网站

openbmc官方网站 https://github.com/openbmchttps://github.com/openbmc Dashboard [Jenkins]https://jenkins.openbmc.org/ https://gerrit.openbmc.org/Gerrit Code Reviewhttps://gerrit.openbmc.org/ Searchhttps://grok.openbmc.org/ openbmc参考网站 https://www.c…

R实验 正交试验设计与一元线性回归分析

实验目的&#xff1a; 掌握正交试验设计记号的意义&#xff1b;掌握正交试验设计的直观分析和方差分析&#xff1b;掌握一元线性回归模型的相关概念&#xff1b;掌握最小二乘法的思想&#xff1b;掌握一元线性回归方程的显著性检验和预测。 实验内容&#xff1a; &#xff11;…

C++ day1 作业练习

整理思维导图 定义自己的命名空间my_sapce&#xff0c;在my_sapce中定义string类型的变量s1&#xff0c;再定义一个函数完成对字符串的逆置。 #include <iostream> #include <cstring>using namespace std; namespace my_space {string s1; }void show() {cout<…

NASA数据集——严格校准的臭氧(O3)、甲醛(HCHO)、二氧化碳(CO2)和甲烷(CH4)混合比,以及包括三维风在内的气象数据

Alpha Jet Atmopsheric eXperiment Meteorological Measurement System (MMS) Data 阿尔法喷气式大气实验气象测量系统&#xff08;MMS&#xff09;数据 简介 Alpha Jet Atmospheric eXperiment (AJAX) 是美国国家航空航天局艾姆斯研究中心与 H211, L.L.C. 公司的合作项目&a…