2021.16科学技术创新抖动、小车运动方向极短时间突然改变时因车身惯性引起的微量滑动等。
5结论
5.1本文基于麦轮的轮式机器人模型,构建了以M3508为控制对象的传递函数(与C620电调相配合),并据此构建了模糊控制系统,并进行仿真验证。
5.2通过试验测得实际位移数据,验证轮式机器人在模糊PID 控制和经典PID 控制下的系统性能差异,得出模糊PID 控制算法能够应对行驶方向上的扰动,对于转速的控制效果优于常规PID 控制。
参考文献
[1]付宜利,李寒,徐贺,等.轮式全方位移动机器人几种转向方式的研究[J].制造业自动化,2005,27(10):33-37.
[2]王兴松.Mecanum 轮全方位移动机器人技术及其应用[J].机械制造与自动化,2014,43(3):1-6
[3]杨家武,刘林,王琢,张铎.基于Mecanum 轮的轮腿式全方位移动机器人的研究及设计[J].现代电子技术,2020,43(05):155-158.[4]Gaan D R ,Kumar M ,Sudhakar S.Real Time Precise Position Tracking with Stepper Motor using Frequency Modulation based Microstepping [J].IEEE Transactions on Industry Applications,2017(99)1:45-50.
[5]施云.基于模糊PID 控制的直流电机控制算法仿真分析[J].电子制作,2020(13):6-9.
[6]M3508P19Brushless DC Gear Motor 使用说明[N/OL],V1.0,2017.08.bomaster/zh -CN/products/components/general/M3508
[7]徐亚茹,陆静平.步进电机驱动系统模糊PID 仿真分析[J].机械设计与制造,2014(12):23-25.
[8]段英宏,杨硕.步进电动机的模糊PID 控制[J].计算机仿真,2006,23(2):290-293.
[9]张忠民,郑仁辉.基于模糊PID 的麦克纳姆轮移动平台的控制算法[J].应用科技,2017,44(06):53-59.
北京吉利学院科研课题。
课题名称:基于STM32的机器人控制算法的研究立项年度:2019-2020。
课题名称:轮式移动机器人的结构设计与优化立项年度:2019-2020。
基于风河V xW orks 6.9系统的自动驾驶系统研究
付建宽李金亮刘苏楠孙嘉城张佳
(中汽数据(天津)有限公司,天津300000)
1概述
VxWorks 是美国风河公司的一款实时可裁剪的嵌入式操作系统,可以运行在X86、ARM 、PowerPC 、MIPS 等多种架构的CPU 上;VxWorks 系统性能强悍、可靠性极高;支持抢占式多任务的调度、TCP/IP 网络协议栈、文件系统、设备管理、2D 图形显示等;跨平台的开发环境WindRiverWorksbench 十分友好,通过交叉编译生成bootrom 启动引导文件和VxWorks 内核镜像文件,使用WDB 方便开发和调试RTP 应用程序和Kernel 程序。
2系统设计
本设计中计算单元采用研华ARK-3500工控机,9-34V 宽
压直流电源输入,搭载的是Intel 酷睿三代ivy bridge 架构的CPU ,QM77芯片组显示支持DVI +HDMI +DisplayPort 接口,支持PCI 扩展,还有6路USB 口和8路DB9串口可供连接外设,计算单元上运行VxWorks6.9的操作系统。我们摘要:本文基于研华ARK-3500工控机移植构建了风河的VxWorks6.9系统,并在该系统下适配板级支持包(BSP),编写了PCI-CAN 、以太网网卡82579LM 、SATA 固态硬盘、USB 键鼠、串口、芯片组QM77集成显卡等设备驱动;编写了激光雷达、毫米波雷达、超声波雷达、组合惯导等传感器解析程序;编写控制决策程序,最终在广汽传祺GE3改装新能源汽车上实现自动驾驶自动循迹,自主避障、自主泊车等功能。
关键词:工控机;VxWorks6.9;自动驾驶;PCI-CAN 驱动中图分类号:U463文献标识码:A 文章编号:2096-4390(2021)
16-0087-03
图1系统组成框图(转下页)87--
科学技术创新
的毫米波雷达、超声波雷达、车辆底盘、Mobileye 都是通过CAN 总线和计算单元进行连接的,组合惯导通过RS232异步串口接入计算单元,激光雷达通过以太网接入计算单元,计算单元通过连接工业4G 路由器和云服务器进行交互。系统的硬件组成框图如图1所示。
3软件设计
3.1启动程序及BSP 设计
VxWorks 系统在6.9版本以前多采用基于bootrom 加载内核或者DOS 引导装载bootrom 再加载内核的方法,在6.9版本及以后大多采用grub 或syslinux 或UEFI 来启动引导,本文采用的是syslinux 启动装载,首先需要格式化启动盘为FAT32的主分区文件系统,并激活盘符,然后解压syslinux.zip 文件到启动盘,使用管理员权限启动cmd ,在命令行内输入以下命令:
X:\>syslinux -m -a -d -f -iX:
X 代表的是启动盘所在的盘符,比方说启动盘是F 盘则X 替换为F ,最后我们的系统最终是运行在工控机内置硬盘上的,需要将硬盘取下使用SATA 转USB 线连接PC 来制作启动盘。启动盘制作好后开机引导界面如图2所示。
图2sysl i nux 开机引导界面
BSP 是板级支持包的英文缩写,主要完成系统中断向量初始化、时钟初始化、内存映射、外设初始化等功能[1]。我们在通用的target/config/itl_x86路径下的BSP 基础上修改,首先复制该文件夹并重命名,然后在config.h 文件中添加如下宏定义:
#if !defined (CDF_OVERRIDE)&&!defined (PRJ_BUILD)/*adc:the below macros are not include for bootrom */#undef INCLUDE_DISK_UTIL #undef INCLUDE_PING
#undef INCLUDE_IFCONFIG #undef INCLUDE_SHELL #else
/*adc:the below macros are include for OS image */#define INCLUDE_DISK_UTIL #define INCLUDE_PING
#define INCLUDE_IFCONFIG #define INCLUDE_SHELL #endif
修改DEFAULT_BOOT_LINE ,工控机的IP 必须和激光雷达
的目标IP 一致。
#define DEFAULT_BOOT_LINE \
"fs (0,0)host:/ata0:1/vxWorks h =192.168.1.101e =
192.168.1.102u=target pw=target o=gei"
根据工控机内存大小调整SYSTEM_RAM_SIZE 宏,程序中如果不跑特别消耗内存的任务也可以使用缺省值。
3.2驱动程序设计3.2.1以太网网卡驱动
ARK3500工控机的LAN1是Intel 82579LM 以太网控制器,LAN2是Intel I -210IT 以太网控制器,通过使能INCLUDE_GEI825XX_VXB_END 、INCLUDE_MII_BUS 、
INCLUDE_GENERICPHY 三个宏,系统会调用函数muxDevLoad ()即可完成网络初始化。
3.2.2SATA 固态硬盘驱动
针对SATA 电子盘的驱动,需要配置AHCI 相关的组件,AHCI 驱动为vxBus 架构,在VxWorks shell 下用vxBusShow 能看到设备成功注册,因为支持DMA 读写,因此速度非常快[2]。需要注意的是BIOS 的配置要从IDE 模式改为AHCI 模式。如果需要对VxWorks 下的磁盘分区重命名为ata0a ,可以在usrAppInit.c 中添加如下代码来实现。
intfd;sleep(2);
fsmNameInstall(“/ata0:1”,“/ata0a ”);fd =open(“/ata0:1”,2,0);ioctl(fd,0xbd000004,0);3.2.3USB 键鼠驱动
在文本模式下,VxWorks6.9默认支持USB 键鼠,在图形模式下,需要添加对UHCI 、OHCI 、EHCI 的USB 协议栈的支持。
3.2.4串口驱动
工控机提供了8路串口,其中4路固定232串口,4路可变232/422/485串口,我们因为只有惯导使用了一路232串口,因此只需要初始化1路232串口,在config.h 文件中对CONSOLE_TTY 、CONSOLE_BAUD_RATE 两个宏进行设置,另外BSP 中串口配置一定要和BIOS 的IO ADDRESS 、INT LEVEL 保持一致[3]。在命令行在输入devs 回显的/tyCo/0就是我们要使用的串口设备。
3.2.5芯片组QM77集成显卡驱动
VxWorks 支持集显驱动,可以编译内核态的WindML-5.3显示库,进而使用tilcon 或者QT 进行图形界面程序的开发。
3.2.6PCI-CAN 驱动
由于工控机不带CAN 总线,因此我们外接了一块基于SJA1000控制器PCI 的CAN 接口卡设备,自行编写设备驱动,步骤如下:
3.2.6.1调用pciFindDevice()函数,根据vender id 和device id 查设备的总线号、设备号、功能号。
3.2.6.2调用pciConfigInLong()函数;获取配置空间、内存空间、I/O 空间的地址(偏移地址)。
3.2.6.3根据获取偏移地址最低位,判断访问方式是I/O 访问,还是内存访问。IO 访问为1,内存访问为0。
3.2.6.4往bar 的地址写-1,然后重新读取,获取bar 空间大小。
3.2.6.5根据获取的bar2地址,配置板卡寄存器
。
88--
2021.16科学技术创新
3.2.6.6调用pciConfigInByte()函数获取中断号。
3.2.6.7调用pciIntConnect()连接中断向量,中断号加0x20,调用sysIntEnablePIC()使能中断。
3.2.6.8编写open、read、write、ioctl、close等设备访问函数。
3.2.6.9使用iosDrvInstall()函数创建驱动,将驱动程序的入口写入到驱动程序表中。
3.2.6.10使用iosDevAdd()函数创建设备描述符结构,将设备添加到设备列表中[4]。
3.3传感器解析程序设计
3.3.1组合惯导定位感知
通用自动驾驶汽车组合惯导内部集成的工业级MEMS陀螺仪、加速度计和双频GNSS接收机,RTK状态良好稳定,配置RS232串口波特率230400Kbps,解析输出稳定连续的位置、方向、速度、姿态以及授时信息。
3.3.2激光雷达感知
激光雷达完成三维测量相关数据输出,包括激光测距值、回波的反射率值、水平旋转角度值等,通过UDP发送到指定IP和端口上,给融合模块、决策模块使用。
3.3.3毫米波雷达感知
首先将车辆的速度、半径曲率等信息发送给毫米波雷达进行初始化,输出64个障碍物的三个维度的距离、角度和速度信息,还可以输出目标分组、车道变换检测等信息,CAN总线设备之间通信波特率为500Kbps。
3.4自动驾驶程序设计
3.4.1高精地图制作
我们使用配置有GPS、IMU、Mobieye、Camera传感器的采集车来获取集原始数据,使用惯导采集GPS数据、使用Mobieye 采集GPS数据到左右车道的距离,用来推算左右车道点的数据、使用相机采集车前信息,用于回放时用来提取车道点进行参考,采集后的数据为文本格式,使用自研工具进行车道拟合,区域之间采用贝塞尔曲线相连,加入了车道实线虚线信息等道路标志。
3.4.2路径规划
使用自研工具设置目标点,进行全局路径规划,暂时不支持动态切换;而局部路径规划实时变化,可至少规划60m的距离,考虑路径、场景、交规等,生成原始路径,包含路径长度,左右边界等,同时规划目标速度,规避动态障碍物。
3.4.3决策控制实现
采用PID横纵向控制算法,通过计算障碍物信息、横向位置和角度误差、纵向位置和速度误差,自适应动力学模型算法,参数自动整定;添加速度补偿,在车辆转弯半径允许条件下,尽量小误差范围内动作;预测碰撞时间,计算出油门、刹车、方向盘角度值,实现自动驾驶自动循迹,自主避障、自主泊车等功能[5];工控机通过CAN总线直接下发命令给车辆底盘,决策时间不大于20ms。
3.5系统运行实况
将需要编译进kernel的用户任务写进usrAppInit.c文件中,驱动程序编译成模块动态加载,经测试,实车运行稳定可靠,响应迅速及时,系统运行实况画面如图3所示。
4总结与展望
本设计仅做了适配研究,很多算法工具库在VxWorks下并没有,需要单独移植,例如opencv这个开源的计算机视觉和机器学习库,github仓库上只有对VxWorks7.0的支持,VxWorks6.9下需要自行开发,我们只能暂时使用Mobileye这种通过CAN总线输出对目标的识别结果的智能相机。功能安全是智能网联汽车的一项重要要求,风河的VxWorks系统虽然生态上相对Linux要差很多,但是在实时性、安全性上有极大的优势,相信VxWorks系统在自动驾驶领域会有不错的前景。
参考文献
[1]隋霞,许录平.基于VxWorks的BSP技术分析[J].微计算机信息,2006(23):86-88.
[2]毛晓梅.基于VxWorks6.6系统的SATA控制器驱动技术研究[J].工业控制计算机,2013,26(11):129-130+133.
[3]张军.基于Vxworks实时操作系统的串口通信程序设计与实现[J].微计算机信息,2006(05):98-99+256.
[4]宣丽萍,王晓龙,邱辉.VxWorks系统中PCI总线仪器驱动程序开发方法[J].电子测量与仪器学报,2010,24(09):860-865. [5]付建宽,靳志刚,余楚礼.主控芯片采用i.MX6的低成本自动驾驶系统方案实现[J].科技经济导刊
,2021,29(09):60-61.图3系统运行实况画面
89 --
发布评论