如何理解Apollo模型参考自适应控制MRAC

最近有了解到百度无人驾驶Apollo项目中的横向控制有用到MRAC(Model Reference Adaptive Control),于是便详细研究了一下这个控制方法,在此总结一下心得。

什么是MRAC

MRAC控制系统的基本结构图如下所示:
在这里插入图片描述它由两个环路组成,由控制器和受控对象组成内环,这一部分称之为可调系统,由参考模型和自适应机构组成外环。实际上,该系统是在常规的反馈控制回路上再附加一个参考模型和控制器参数的自动调节回路而形成。在该系统中,参考模型的输出或状态相当于给定一个动态性能指标,(通常,参考模型是一个响应比较好的模型),目标信号同时加在可调系统与参考模型上,通过比较受控对象与参考模型的输出或状态来得到两者之间的误差信息,按照一定的规律(自适应律)来修正控制器的参数(参数自适应)或产生一个辅助输入信号(信号综合自适应),从而使受控制对象的输出尽可能地跟随参考模型的输出。参考: https://wenku.baidu.com/view/07d1664fe518964bcf847c30.html

Apollo项目MRAC控制算法分析

  • 原理

    在无人驾驶的横向控制算法中,MRAC算法的原理结构框图如下:
    在这里插入图片描述
    MRAC在无人驾驶控制算法中,往往会和上层控制算法联合起来使用,上层控制算法包含MPC、LQR、Stanley等。一般横向控制算法不会单独使用MRAC控制器,MRAC只是起到一个辅助调节的作用。

    从上述结构框图中,我们可以发现,MRAC控制器收敛的并不是上层控制算法(MPC等)给出的参考方向盘转角值,而是收敛期望转向机算出来的参考转角值,让真实转向机的角度跟随期望转向机的角度。期望转向机的模型就是MRAC算法中的MR(参考模型),期望转向机的系数(阻尼比等)往往是设计者给定的,不一定要是接近于真实转向机,如果参考模型接近于真实模型,反而使得此算法变得没有意义。

    例如下图所示:
    在这里插入图片描述
    假设黑色线表示这一时刻上层控制算法MPC算出来的方向盘转角期望值,蓝色线代表在无MRAC作用时(单用MPC控制),真实转向机对MPC给出的参考值的跟随情况。而红色线代表是这一时刻用期望的转向机模型算出来的转角期望值。MRAC算法收敛的不是黑色线与蓝色线的误差,而是收敛蓝色线与红色线的误差。

  • 数学推导

    可参考此篇博客

  • 为什么要加一层MRAC控制器

    为了让同一套上层控制算法(MPC等)在面对不同的真实转向机时,不受硬件参数差异的影响。比如现在有两台车,一台是博世的转向机,一台是国产转向机,两台转向机的阻尼比等系数都不同(模型不同),如果我设计一个期望的转向机参考模型,并用MRAC算法控制的话,那么这两台建模不同的转向机都会变成我设计的期望转向机的模型。这就是模型参考的意义。

    • 注意:设计的期望转向机的模型对信号的收敛速度应该是要低于真实转向机的。因为要使一个收敛快的转向机变得收敛慢是容易实现的,但要使一个收敛慢的转向机变得收敛快,往往难以克服机械硬件的限制。
### 关于MRAC控制算法的资源获取 对于希望了解并下载有关模型参考自适应控制系统(Model Reference Adaptive Control, MRAC)的信息,通常可以通过多种途径获得相关资料。一种常见的方法是从学术数据库或在线平台查找论文和技术报告。然而,在特定提到希望通过百度网盘这一渠道来获取MRAC控制算法的学习材料时,建议采取如下方式: 通过搜索引擎输入关键词组合`mrac 控制算法 百度网盘`进行搜索[^1]。这将帮助定位到由其他用户分享至百度网盘上的相关内容链接。需要注意的是,在访问这些外部链接前应确保其安全性,并确认上传者身份可信。 另外值得注意的一点是,当从互联网上任何地方下载文档或其他形式的数据集时,请务必尊重版权法规以及遵循合法合规的方式使用所获信息。 为了更高效地找到所需资源,还可以考虑加入专业的技术交流社区或是论坛,在那里向有经验的研究人员咨询具体的文献名称或者作者姓名等更为精确的信息,从而提高检索效率和准确性。 ```python import requests from bs4 import BeautifulSoup def search_baidu(keyword): url = f"https://www.baidu.com/s?wd={keyword}" response = requests.get(url) soup = BeautifulSoup(response.text, 'html.parser') results = [] for item in soup.select('.c-container'): title = item.h3.string.strip() if item.h3 else '' link = item.find('a')['href'] if item.find('a') else '' description = ''.join([p.text for p in item.select('div.c-abstract')]) result = { "title": title, "link": link, "description": description[:200]+'...' # limit to first 200 characters plus ellipsis } results.append(result) return results if __name__ == "__main__": keyword = "mrac 控制算法 百度网盘" print(search_baidu(keyword)) ``` 此段Python代码提供了一个简单的函数用于执行上述提及的关键字查询操作,并返回部分匹配的结果列表供进一步筛选。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值