Commit e505aeea authored by p x's avatar p x
Browse files

first

parent fa2ef5ce
Pipeline #3097 canceled with stages
This diff is collapsed.
This diff is collapsed.
<!DOCTYPE html>
<html lang="">
<head>
<meta charset="UTF-8">
<link rel="icon" href="./favicon.ico">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>hmi-android-app</title>
<script src="./lib/Cesium/Cesium.js"></script>
<link rel="stylesheet" href="./lib/Cesium/Widgets/widgets.css">
<script src="./lib/turf.min.js"></script>
<script src="./lib/dat.gui.min.js"></script>
<script type="module" crossorigin src="./assets/index-DXMcd3z7.js"></script>
<link rel="stylesheet" crossorigin href="./assets/index-CnAcNL5k.css">
</head>
<body>
<div id="app"></div>
</body>
<script src="https://vncdn.mobi88.cn/public/vconsole.min.js"></script>
<script type="text/javascript">
// 初始化vConsole
window.vConsole = new window.VConsole()
// 添加gui测试
const addGUITest = () => {
const gui = new dat.GUI()
const param = {
// 云端限速响应
speedLimit: () => {
const param = {
event_Type: '1',
speed_limit: [30]
}
functionFromAndroidEvent(JSON.stringify(param))
},
// 绿波车速引导
greenWave: () => {
const param = {
event_Type: '2',
guidedspeed: {
minspeed: 30,
maxspeed: 50,
}
}
functionFromAndroidEvent(JSON.stringify(param))
},
// 交通事故变道避让
trafficAccidentsChangeLanes: () => {
const param = {
event_Type: '3',
}
functionFromAndroidEvent(JSON.stringify(param))
},
// 交通拥堵提醒
trafficCongestion: () => {
const param = {
event_Type: '4',
// event_lon,
// event_lat,
eventRadius: 200
}
(JSON.stringify(param))
},
// 道路遗撒预警
roadSpill: () => {
const param = {
event_Type: '5',
}
functionFromAndroidEvent(JSON.stringify(param))
},
// 超视距横穿车辆避让
vehicleAvoid: () => {
const param = {
event_Type: '6',
}
functionFromAndroidEvent(JSON.stringify(param))
},
// 弱势交通参与者避让
trafficParticipantsAvoid: () => {
const param = {
event_Type: '7',
}
functionFromAndroidEvent(JSON.stringify(param))
},
// 空闲车道变道
idleLaneChange: () => {
const param = {
event_Type: '8',
change_lane_direction: 2
}
functionFromAndroidEvent(JSON.stringify(param))
},
// 超车变道
overtakingAndChangingLanes: () => {
const param = {
event_Type: '9',
change_lane_direction: 1
}
functionFromAndroidEvent(JSON.stringify(param))
},
// 占道施工变道避让
roadOccupationConstruction: () => {
const param = {
event_Type: '10',
referencePaths_length: 200
}
dealTopicEvent('CLREvent', {
CLRPosition: {
longitude: 116.488285,
latitude: 39.728565
}
})
},
// 信号灯上车
signalLights: () => {
dealTopicEvent('SLOEvent', {
stop_line_dis: 10, // 车辆到前方停止线距离
light_list: [
{
type: 'gary', // 灰色
direction: 'left', // 方向
},
{
type: 'yellow', // 黄
direction: '', // 方向
current_light_remain_time: 220
},
{
type: 'red', // 灰色
direction: 'goahead', // 方向
},
{
type: 'green', // 灰色
direction: '', // 方向
current_light_remain_time: 90
},
{
type: 'green', // 灰色
direction: 'right', // 方向
},
]
})
},
// 障碍物避障
obstacleAvoidance: () => {
const param = {
event_Type: '12',
}
functionFromAndroidEvent(JSON.stringify(param))
},
// 轨迹线显示
trajectoryDisplay: () => {
const param = { "event_Type": "TrajectoryDisplayArray", "TrajectoryDisplayArray": [{ "Latitude": 39.72935080020386, "Longitude": 116.49071737426263, "event_Type": "TrajectoryDisplayArray", "time": 1740995067998 }, { "Latitude": 39.72935080020386, "Longitude": 116.49071737426263, "event_Type": "TrajectoryDisplayArray", "time": 1740995067998 }, { "Latitude": 39.72935080020386, "Longitude": 116.49071737426263, "event_Type": "TrajectoryDisplayArray", "time": 1740995067998 }, { "Latitude": 39.72935080020386, "Longitude": 116.49071737426263, "event_Type": "TrajectoryDisplayArray", "time": 1740995067998 }] }
functionFromAndroidDDS(JSON.stringify(param))
},
// 目标物信息
targetObjectInformation: () => {
debugger
// 目标物运动轨迹,测试用,实际从安卓取
const p1 = [116.488196, 39.728593]
const p2 = [116.488245, 39.728535]
const step = 0.001;
const pedestrianPath = createPath(p1, p2, step)
const c1 = [116.48828993, 39.72869365]
const c2 = [116.48837291, 39.72857693]
const carPath = createPath(c1, c2, step)
// 定时器模拟人运动,测试用,实际从安卓传
let index = 0
let timer = setInterval(() => {
if (index == pedestrianPath.length) {
clearInterval(timer)
return
}
let param = {
event_Type: 'ObstacleInfoArray',
ObstacleInfoArray: [{
ID_Obstacle: '111',
Type_Obstacle: 'pedestrian',
longitude: pedestrianPath[index].position[0],
latitude: pedestrianPath[index].position[1],
heading: pedestrianPath[index].heading
}, {
ID_Obstacle: '222',
Type_Obstacle: 'car',
longitude: carPath[index].position[0],
latitude: carPath[index].position[1],
heading: carPath[index].heading
}
]
}
if (index > 3) {
param = {
event_Type: 'ObstacleInfoArray',
ObstacleInfoArray: [{
ID_Obstacle: '111',
Type_Obstacle: 'pedestrian',
longitude: pedestrianPath[index].position[0],
latitude: pedestrianPath[index].position[1],
heading: pedestrianPath[index].heading
}
]
}
}
functionFromAndroidDDS(JSON.stringify(param))
index++
}, 200);
},
// 自车定位
vehiclePositioning: () => {
const param = {
event_Type: 'VehicleLocation',
Longitude: 116.4909701727417,
Latitude: 39.72895023318774,
VechileDirection: -119.02973835165582
}
functionFromAndroidDDS(JSON.stringify(param))
},
// 自车状态
vehicleStatus: () => {
const param = {
event_Type: '16',
VechileSpeed: parseInt(Math.random() * 50),
Mode: Math.round(Math.random()), // 驾驶模式,0:自动驾驶;1:人工驾驶
Gear: 0
}
functionFromAndroidDDS(JSON.stringify(param))
},
// 自动驾驶故障
vehicleFault: () => {
const param = {
event_Type: '17',
FaultInfo: [
{
FaultCode: parseInt(Math.random() * 5)
}
]
}
dealTopicEvent('AutoDriveFault', {
FaultInfo: [
{
FaultCode: 1,
FaultLevel: 1,
FaultMsg: '无法读取can数据'
}
]
})
setTimeout(() => {
dealTopicEvent('AutoDriveFault', {
FaultInfo: [
{
FaultCode: 1,
FaultLevel: 1,
FaultMsg: '无法读取can数据'
},
{
FaultCode: 1,
FaultLevel: 2,
FaultMsg: '深度学习模块没有达到10HZ'
}
]
})
}, 1000);
setTimeout(() => {
dealTopicEvent('AutoDriveFault', {
FaultInfo: [
{
FaultCode: 1,
FaultLevel: 2,
FaultMsg: '深度学习模块没有达到10HZ'
}
]
})
}, 3000);
},
}
gui.add(param, 'speedLimit').name('云端限速响应')
gui.add(param, 'greenWave').name('绿波车速引导')
gui.add(param, 'trafficAccidentsChangeLanes').name('交通事故变道避让')
gui.add(param, 'trafficCongestion').name('交通拥堵提醒')
gui.add(param, 'roadSpill').name('道路遗撒预警')
gui.add(param, 'vehicleAvoid').name('超视距横穿车辆避让')
gui.add(param, 'trafficParticipantsAvoid').name('弱势交通参与者避让')
gui.add(param, 'idleLaneChange').name('空闲车道变道')
gui.add(param, 'overtakingAndChangingLanes').name('超车变道')
gui.add(param, 'roadOccupationConstruction').name('占道施工变道避让')
gui.add(param, 'signalLights').name('信号灯上车')
gui.add(param, 'obstacleAvoidance').name('障碍物避障')
gui.add(param, 'trajectoryDisplay').name('轨迹线显示')
gui.add(param, 'targetObjectInformation').name('目标物信息')
gui.add(param, 'vehiclePositioning').name('自车定位')
gui.add(param, 'vehicleStatus').name('自车状态')
gui.add(param, 'vehicleFault').name('自动驾驶故障')
}
// addGUITest()
const createPath = (p1, p2, step = 0.001) => {
let line = [p1, p2]
let tep = turf.lineString(line);
let sliced = turf.lineChunk(tep, step, { units: 'kilometers' });
let path = [];
if (sliced.features.length) {
sliced.features.map(item => {
item.geometry.coordinates.map(d => { path.push(d); })
path.pop()
})
}
const pathWithHeading = []
for (let index = 0; index < path.length - 1; index++) {
let cur = path[index]
let next = path[index + 1]
let dx = next[0] - cur[0]
let dy = next[1] - cur[1]
// 也可以用经纬度坐标
let bearing = turf.bearing([...cur], [...next]); // -170.2330491349224
path[index].heading = bearing
pathWithHeading.push({
position: cur,
heading: bearing
})
}
return pathWithHeading
}
// 接收来自安卓的方法
window.functionFromAndroidEvent = (value) => {
let fixedJsonString = value.replace(/\"/g, '\\"'); // 先转义双引号
fixedJsonString = `"${fixedJsonString}"`; // 再包裹外部双引号
let parsedData = JSON.parse(fixedJsonString);
// 与安卓通信,不管接收还是发送,都采用字符串形式
dealFunctionFromAndroidEvent(parsedData)
// dealFunctionFromAndroid(value) // 本地测试,gui传过来的是json
}
// 接收来自安卓的方法
window.functionFromAndroidDDS = (value) => {
// console.log('value', value)
let fixedJsonString = value.replace(/\"/g, '\\"'); // 先转义双引号
fixedJsonString = `"${fixedJsonString}"`; // 再包裹外部双引号
let parsedData = JSON.parse(fixedJsonString);
// console.log('parsedData', parsedData)
// 与安卓通信,不管接收还是发送,都采用字符串形式
dealFunctionFromAndroidDDS(parsedData)
// dealFunctionFromAndroid(value) // 本地测试,gui传过来的是json
}
// 传给安卓的方法
window.functionToAndroid = (value) => {
// 模拟从安卓传车辆位置信息到hmi
let index = 0
const timer = setInterval(() => {
if (index == value.length) {
clearInterval(timer)
return
}
const cur = value[index]
const param = {
event_Type: 'VehicleLocation',
Longitude: cur.position[0],
Latitude: cur.position[1],
VechileDirection: cur.heading
}
functionFromAndroidDDS(JSON.stringify(param))
index++
}, 200);
console.log(value)
// 与安卓通信,不管接收还是发送,都采用字符串形式
Android.processData(JSON.stringify(value))
}
</script>
</html>
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment