上一篇讲述了旭日X3派接收将车辆感知数据进行图形化输出传递给驾驶人,在实际仿真操作中,需要当车辆传感器传回相关感知信息后,算法对感知信息进行处理,将前方车路风险进行量化,并将量化的结果进行图形化输出至显示设备中。 在第五篇中,将介绍主机在仿真软件构建小车,罗技G923与旭日X3派连接,主机构建自动驾驶算法,将控制结果传输至旭日X3派,人机控制加权。将加权后的结果传输给仿真软件中的小车。

罗技G923是一款PCPlayStation的游戏车模拟器,通常通过USB接口连接到计算机或主机上。要将罗技G923连接到旭日X3派上使用,可以尝试以下步骤:

1.先确保您所用的旭日X3派具有足够的硬件规格来支持对游戏手柄的接口。

2.将罗技G923插入旭日X3派的USB接口中。

3.启动旭日X3派并打开系统设置,检查已经安装了“jstest”(手柄测试)工具,并且未禁用USB HIDHuman Interface Devive)功能。

4.在终端中输入“sudo apt-get install jstest-gtk”,进行“jstest”安装。

5.使用“ls /dev/input/”命令查找连接的设备名称,例如“by-id / usb-xxx”。

6.使用“jstest / dev / input / xxx ”命令开始手柄测试,并进行必要的配置。

 

连接好之后,在通过SDK获取罗技设备的方向盘转角、油门、刹车的数据,具体代码如下所示:

#include <Windows.h>
#include <thread>
#include <stdio.h>
#include <iostream>
#include<winsock.h>

#include "LogitechSteeringWheelLib.h"
using namespace std;
#pragma comment(lib,"ws2_32.lib")
#pragma comment(lib, "LogitechSteeringWheelLib.lib")
#pragma comment( linker, "/subsystem:\"console\" /entry:\"WinMainCRTStartup\"")

//初始化
void WheelInit(HWND hwnd)
{


 if (LogiSteeringInitializeWithWindow(true, hwnd))
 {

  printf("init secuss\n");
  //printf("%d\n", hwnd);
  while (LogiUpdate() && LogiIsConnected(0))//设备0
  {
   //printf("connect secuss\n");
   Sleep(100);//100
   DIJOYSTATE2 * wheel = LogiGetState(0);//设备0
   
   //输出角度,油门,刹车信息
   printf("方向盘角度 = %d  油门 = %d  刹车 = %d\n", wheel->lX, wheel->lY, wheel->lRz);
   Sleep(1000);
  }

 }

获取完数据之后,对控制权进行加权分配,如何分配,下面会具体介绍过程:

驾驶员状态是影响控制权分配的重要影响因素之一,驾驶员分心可能导致交通事故的发生,而不同分心等级将导致不同程度的驾驶风险,驾驶员分心将导致驾驶员的认知与视觉并未集中于驾驶行为中,从而延长驾驶员应对横向与纵向的风险反应时间,同时驾驶分心也将影响驾驶员对车辆的操控能力。同时,为了避免人机冲突,还需要正确识别驾驶员意图,避免意图不一致导致事故发生。

驾驶员状态分类评估模块负责对驾驶员行为状态的视觉数据和反映车辆运动状态的相关传感数据进行分析,实现不同风险等级的分心驾驶状态的分类与评估,避免由于驾驶员状态引起的驾驶风险,使共享控制器适应不同的驾驶员风险等级状态,并结合道路风险状态进行权限分配。同时,通过驾驶员意图识别模块,识别得到左/右变道、左/右转向和车道保持这5个驾驶意图,从而选择不同驾驶任务算法,避免人机冲突,优化控制权限分配。

在控制策略中,采用模糊推理系统进行综合风险评价,结合不同风险等级的分心驾驶状态以及车辆的车路风险得到综合风险程度,通过综合风险程度来作为自动驾驶系统与驾驶员之间的权限分配因素。

最后,设计控制权分配优化器,将当前控制权进行输入,结合车辆状态预测对控制权分配结果进行优化,将优化结果输入到权限分配控制器中,实现不同权重下的车辆控制。控制权分配优化器将驾驶员意图识别模块的结果作为输入,调整自动驾驶系统偏向任务,如避障、绕行和车道保持,从而使控制权分配后的结果更为合理。如下图所示为人机共驾控制权分配模型设计架构。

在车辆行驶中,其人车路状态是在不断变化的。所以利用模型预测控制算法,结合车辆运动学模型,可以实时预测车辆状态。在已知驾驶员状态和意图的前提下,通过预测车辆状态,对控制权进行及时更改,从而使车辆达到安全状态。

基于车辆运动学模型,利用模型预测控制算法,结合车辆运动学模型,预测车辆状态,则预测方程为:

在行车中,驾驶员分心与道路风险均影响车辆的行车安全,所以为了使车辆尽可能安全,同时为了避免人机冲突,构建控制权分配优化器,构建优化目标函数,其中首要优化目标即为车辆综合风险。

(2)中,为第个预测步长车辆的综合风险的数值,为预测步长。

此外,为了保证车辆横向偏移最小,将车辆的期望横向位置与车辆横向位置的偏差作为优化目标。

为了保证自动驾驶系统意图,控制权分配后修正的车辆意图与驾驶员意图相差不大,将车辆航向角偏差作为优化目标。

同时为了使行车更为稳定,避免较大的横向波动,减少横向控制偏差过大造成急转方向盘,对前轮偏角总变化量作为优化目标。

最后,为了使控制权权重之和不超过1,以及考虑系统控制量的物理局限,需要设置约束条件。

对控制权进行加权分配之后,通过UDP发送到PC上,方法在博客《用旭日X3派实现L3自动驾驶场景下并行实时运算》中已有详细叙述。

开始仿真驾驶测试,测试结果如下图所示:

总结

利用X3派做一些自动驾驶人机共驾软硬结合的开发,利用X3派将获取的感知信息与规划信息进行分析结合,将自动驾驶系统规划路线当前时刻的行车风险场进行图形化输出,同时通过传感器收集车辆状态信息,进行建模分析。通过X3派构建控制权控制器,调整自动驾驶系统控制权重。在仿真软件中构建车辆,将旭日X3派作为中间件进行运算与处理。最终达到一个较好的结果。