1 实时系统测试

1.1 测试平台搭建

由于运动控制模型是在Simulink中进行搭建的,软件联合仿真验证属于仿真层面的验证,而实时系统测试的目的为了检验控制模型编译成C代码后是否具有实时性,以及检验自动生成的代码和用于代码生成的模型是否具有一致性。
基于NI-PXI实时系统搭建了控制模型的测试平台,选用搭载有PXI-8119控制器以及PXI-8512双通道CAN通信板卡的PXI-1044机箱组

控制模型测试过程的计算部分在PXI控制器中完成,测试平台的基本结构如图所示。测试平台主要由Windows环境的PC和PharLap环境的PXI系统组成,PC和PXI系统之间通过以太网进行通讯。在PC中使用VeriStand软件对PXI系统进行部署,包括编译的动力学模型dll文件和运动控制模型dll文件,同时PC可以通过以太网对PXI系统进行数据采集和状态监控。

搭建测试平台的工作主要是将veDYNA动力学模型和运动控制模型文件部署到PXI系统中,通过VeriStand软件配置好相应接口。
veDYNA动力学模型首先需要在Simulink中配置好输入输出接口,然后使用软件的自动代码生成功能将模型编译成C代码,在编译界面下需选择NI的编译平台。
运动控制模型依靠MATLAB/Simulink自带的自动代码生成功能进行编译,由于Simulink中的S-Function模块和quadprog二次规划求解函数不支持编译功能,因此采用了Simulink中支持编译功能的MATLAB Function模块进行MPC控制算法的编写,二次规划问题采用Simulink自带的MPC模板中支持编译功能的mpcqpsolver函数进行求解,运动控制模型其余部分使用Simulink的基本模块进行搭建,配置好控制模型的相应接口,编译辅助文件选用NIVeriStand.tlc,配置情况如图所示。

1.2 测试结果

通过VeriStand将veDYNA动力学模型和运动控制模型加载到NI-PXI实时系统中进行测试,测试结果如图所示。由图可知,车辆能顺利跟踪期望路径行驶,车辆的实际位姿与期望位姿基本重合,当车辆后轴中心到达路径终止点时,车辆横摆角大小趋近零附近,满足车身与车位基本保持平行的要求。

1.3 本节代码

本节的代码与之前的代码基本没什么区别,主要的问题就是需要把车辆动力学模型和MPC控制器模型编译成C语言,本节提供了能编译成C语言的MPC的simulink模型,以及包含输入输出接口的veDYNA车辆动力学模型,可以参考一下这两个模型
模型只供参考,是运行不了的,由于现在我的电脑上没有veristand软件了,因此模型中看不到输入输出接口的框图,可以输入输出接口的文字描述
模型链接

2 智能小车试验

为了更符合实际的检验控制模型的控制效果,以及更直观的观测试验结果,本文基于树莓派(Raspberry Pi)和Ford Fiesta ST Rally车模进行了智能小车试验。从前文的仿真结果和实时系统测试结果来看,基于MPC算法的路径跟踪控制器能够很好的控制目标车辆完成路径跟踪的功能,为接下来的试验提供了支撑条件。

2.1 试验平台搭建

选用Traxxas公司的Ford Fiesta ST Rally车模作为被控车辆,如图所示,车模与真实车辆相似,大小约为Ford Fiesta ST实车的 ,车模具有完整的悬架系统和传动系统,并搭载了转向舵机和驱动电机,驱动形式为全时四驱。

选用树莓派作为智能小车的控制器,如图所示。树莓派是一款基于ARM的微型电脑主板,以SD/MicroSD卡为内存硬盘,卡片主板周围有USB接口和以太网接口,可连接键盘、鼠标和网线,并且3代以后的版本集成了无线网卡和蓝牙,具有低能耗、移动便携性、GPIO等特性。

搭建的的智能小车试验平台基本结构如图所示。首先,将Simulink搭建的运动控制模型编译到树莓派中;然后,树莓派通过自身的GPIO口将控制信号传递到驱动电机和转向舵机中,控制小车横纵方向的运动;另外,小车上搭载的光电编码测速传感器和陀螺仪实时通过GPIO口将车速信号和车身姿态信号传回树莓派的控制模型中,以此循环实现路径跟踪的功能。

树莓派的GPIO接口支持Python和C(C++)语言的调用,MATLAB自从2017a版本后,就具有树莓派的硬件支持包,因此为了将控制模型编译进树莓派中,需要在MATLAB中安装树莓派硬件支持包,如图所示。Simulink与树莓派之间的通讯可以通过网线或WIFI实现,如图所示配置好树莓派和Simulink之间的WIFI通讯,将编译好的代码输入到树莓派中。


由于Ford Fiesta ST Rally车模是一款手柄控制的遥控车,为了更好的控制小车的启停操作,需要对小车进行一些改装。为了实时获取小车车速和车身姿态信息,在小车上搭载了光电编码测速传感器和具有陀螺仪的树莓派扩展板Sense HAT,如图所示。为了使驱动电机具备制动功能,更换小车驱动电机控制板,将驱动板和转向舵机控制更换为通过树莓派GPIO口进行控制,改装后的车辆如图所示。

2.2 试验结果

根据智能小车的相关参数,确定小车跟踪单步泊车路径所需的最小车位尺寸 ,根据车位尺寸、约束条件和泊车路径曲线确定泊车起始区域一,在区域一中任取一点进行路径规划;另外由于车辆模型的变更,还需要调整模型预测控制器的车辆预测模型、预测时域和控制时域等参数。
将控制模型编译进树莓派中控制小车进行试验,试验结果如图所示。

经过多次试验,有时小车未能准备驶入停车位,分析原因主要有以下几个方面:
(1)智能小车的车辆结构与真实汽车存在差异,且由于加工等原因车辆自身结构存在误差,如转向机构左右极限范围不一致,转向舵机和驱动电机变化为非线性变化,且控制响应存在一定延迟,不易控制,从而影响到泊车效果。
(2)小车上搭载的光电编码测速传感器测速时存在一定的误差,由于泊车是车辆低速的运动过程,相比于车辆中高速的运动过程误差更大;并且树莓派扩展板Sense HAT中搭载的陀螺仪也存在一定的误差,使得反馈回控制模型的横摆角数据不准确,对泊车过程的精度产生影响。

本节的模型太杂乱了我就不放上来了,用树莓派和simulink来控制小车需要的步骤还是挺多的,有兴趣的可以去研究研究

总结

谢谢大家!文章已经更新完了,如果大家还有什么问题可以给我留言!
文章中的泊车视频和动图合集可以下载来看看。

平行泊车系统试验验证相关推荐

  1. 平行泊车系统仿真验证

    1 联合仿真平台搭建 使用veDYNA车辆动力学软件建立目标车辆模型,使用PreScan场景软件建立平行泊车场景模型,结合路径规划和路径跟踪控制,搭建了veDYNA.PreScan和Simulink的 ...

  2. 基于回旋曲线的平行泊车路径规划

    基于回旋曲线的平行泊车路径规划1 基于圆弧-直线组合方式设计的平行泊车路径由两段相同的圆弧以及与圆弧相切的直线段组成.当两段圆弧的半径设置为车辆最小转弯半径时,基于圆弧-直线组合方式设计的平行泊车路径 ...

  3. 平行泊车系统路径规划(5)

    8 平行泊车路径规划仿真 此节对应的matlab代码 全文包含的CAD图片,本大章里的图片除了matlab画的,基本都是用CAD画的,图片的CAD模型下载链接 8.1 不同起始区域的路径规划仿真 根据 ...

  4. 舍弗勒城市车辆转向系统研究完成,可实现全自动平行泊车

    致力于城市车辆转向系统研究的 OmniSteer 项目成功完成 可实现连续.无停车的全自动平行泊车 得益于"舍弗勒智能转向驱动模块",可在狭小的空间内实现出色的操控性 对汽车及工业 ...

  5. 平行泊车系统路径规划(1)

    自动泊车系统的路径规划是车辆在获取了周围环境信息后开始的,进行路径规划的前提是系统检测到有效车位,然后结合车辆和车位的相对位置.车辆自身运动学.车辆初始位姿.道路边界等约束条件,以车辆参考点行驶轨迹为 ...

  6. 平行泊车系统路径规划(3)

    5.泊车路径选取 传统的平行泊车路径规划方法是基于两段圆弧进行研究,两段圆弧组成的泊车路径结构简单,如下图所示.方法是将泊车路径简化为两段圆弧,但是两段圆弧相交处的曲率存在突变情况,车辆跟踪路径时,如 ...

  7. 平行泊车系统路径规划(4)

    7 平行泊车路径规划 当车辆检测到目标车位后,系统需要根据车辆的起始点和泊车终止点进行路径规划,如果车辆起始点不在可行起始区域以内,就不能直接规划两点之间的路径,路径需要进行分段处理.从整体上来看,路 ...

  8. 自动驾驶——自动泊车之平行泊车位学习

    1Introduction 由于项目需求,开始介入APA自动泊车辅助系统学习,网上找了些资料,Github搜到了相关泊车仿真代码,链接如下https://github.com/duzehua/Auto ...

  9. 平行泊车系统路径规划(2)

    4.理论可行泊车起始区域 当车辆检测到目标车位后,为了保证泊车成功,车辆必须停留在合适的起始位置,即需要先控制车辆行驶至合适的位置,然后再控制车辆倒车入位,因此,需要先计算出满足泊车条件的起始区域.针 ...

最新文章

  1. GoF23种设计模式之行为型模式之解释器模式
  2. csh shell_shell编程(一):初始shell
  3. PAT甲级1104 Sum of Number Segments:[C++题解]数段之和,测试点2爆double,请用long double!!!
  4. 【报错】no main manifest attribute, in xxxx.jar
  5. 尚硅谷-SpringBoot高级-检索-Elasticsearch快速入门
  6. SAP Cloud for Customer 如何直接消费S/4HANA API
  7. python 获取向上两级路径_全国计算机二级Python真题解析-1
  8. [转]在jQuery的each()函数中使用continue和break
  9. python 类、模块、包的区别
  10. C# 连接SQL Server数据库的几种方式--server+data source等方式
  11. plsql口令过期_Oracle 11g中密码过期问题详解
  12. BZOJ3376: [Usaco2004 Open]Cube Stacking 方块游戏
  13. 【Unity3D插件】VOXL插件分享《多人沙盒游戏插件》
  14. 微商引流产品有哪些?做微商如何引流以及推广产品?
  15. 办公软件 Excel考试面试题库和答案
  16. IDEA卸载和删除注册表
  17. SQL连接MYSQL出现对象名无效_SQL数据库时提示对象名'XXX' 无效
  18. panic: reflect: reflect.Value.SetUint using value obtained using unexported field(go语言)
  19. linux 编辑文件命令
  20. 以太坊源码分析:fetcher模块和区块传播

热门文章

  1. 超声波探伤仪是做什么用的?
  2. bp神经网络数字识别matlab,matlab神经网络字母识别
  3. Oracle甲骨文8.7亿美元高价收购Eloqua
  4. JS 实现红黑树(Red Black Tree)
  5. .NET跨平台开源控件库-SukiUI
  6. 基于Nibiru的安卓AR开发教程
  7. 如果你是安全工程师、逆向工程师,那么你可能需要一本《二进制分析实战》
  8. 连接共享打印机输入用户名和密码——解决办法
  9. 32位与64位WIN7系统的区别——20110516
  10. 我希望你帮我开发一个具有显微镜的软件