Commit 42aa7c93 authored by p x's avatar p x
Browse files

增加一部份车辆位姿代码

parent 8562f1bc
package com.sd.cavphmi.bean.mock
/***车辆位姿 自己服务器的*/
class CarVeh {
/**业务状态 park call park_com call_com**/
var status = ""
/***车辆行驶的点位**/
var carPos = 0
/***全局路径**/
var rs: List<List<Double>>? = null
}
\ No newline at end of file
...@@ -39,10 +39,10 @@ class LoginActivity : AppCompatActivity() { ...@@ -39,10 +39,10 @@ class LoginActivity : AppCompatActivity() {
binding = ActivityLoginBinding.inflate(layoutInflater) binding = ActivityLoginBinding.inflate(layoutInflater)
setContentView(binding.root) setContentView(binding.root)
if (MMKVUtil.token.isNotEmpty()) { /* if (MMKVUtil.token.isNotEmpty()) {
MyContants.HTTP_TOKEN = MMKVUtil.token MyContants.HTTP_TOKEN = MMKVUtil.token
getBinderCars() getBinderCars()
} }*/
// else { // else {
var lo = binding.btLogin.clicks().throttleFirst(1, TimeUnit.SECONDS).subscribe { var lo = binding.btLogin.clicks().throttleFirst(1, TimeUnit.SECONDS).subscribe {
login() login()
...@@ -65,9 +65,11 @@ class LoginActivity : AppCompatActivity() { ...@@ -65,9 +65,11 @@ class LoginActivity : AppCompatActivity() {
loginVm.login(user, PWD, VERIFYCODE).collect { loginVm.login(user, PWD, VERIFYCODE).collect {
// println("-----------登录回调 = ${it}") // println("-----------登录回调 = ${it}")
//获取可绑定车辆 //获取可绑定车辆
if (it == 1) { /* if (it == 1) {
getBinderCars() getBinderCars()
} }*/
startActivity(Intent(this@LoginActivity, MainActivity::class.java))
finish()
} }
} }
} }
......
...@@ -164,29 +164,29 @@ class MainActivity : BaseActivity<ActivityMainBinding, MyBaseViewModel>() { ...@@ -164,29 +164,29 @@ class MainActivity : BaseActivity<ActivityMainBinding, MyBaseViewModel>() {
} }
override fun getToData() { override fun getToData() {
/* if (!mainVm.isMock) { /* if (!mainVm.isMock) {
//开启AVP状态(HTTP SSE) //开启AVP状态(HTTP SSE)
getAvpStatus() getAvpStatus()
} }*/
//开启V2X预警 //开启V2X预警
getV2x() getV2x()
//开启感知物websocket //开启感知物websocket
getTarget() getTarget()
//开启车辆位姿 //开启车辆位姿
getCarVehicle()*/ // getCarVehicle()
//获取车位占用情况 //获取车位占用情况
// getSpaceInfo() // getSpaceInfo()
//连接自己的服务V2X 和车辆位姿 //连接自己的服务车辆位姿
getSelfCar() getSelfCar()
getV2x()
} }
/**连接自己的车辆位姿服务**/ /**连接自己的车辆位姿服务**/
private fun getSelfCar() { private fun getSelfCar() {
mainVm.getSelfCar()
} }
//获取车位占用情况 //获取车位占用情况
private fun getSpaceInfo() { private fun getSpaceInfo() {
mainVm.getSpaceInfo().observe(this) { spaceInfo -> mainVm.getSpaceInfo().observe(this) { spaceInfo ->
......
...@@ -26,13 +26,13 @@ object MyContants { ...@@ -26,13 +26,13 @@ object MyContants {
//跟踪车辆的ID 15(模拟) skywell.1ggvlp16.car10 skywell.1ggvlp16.car8 //跟踪车辆的ID 15(模拟) skywell.1ggvlp16.car10 skywell.1ggvlp16.car8
//用来拼接websocket //用来拼接websocket
var BASE_HOST = "172.24.124.130:19443" var BASE_HOST = "192.168.60.218:8090"
// if (IS_DEBUG) "itg-dev.cu-sc.com:19443" else "itg-yz.cu-sc.com:19443" // if (IS_DEBUG) "itg-dev.cu-sc.com:19443" else "itg-yz.cu-sc.com:19443"
// if (IS_DEBUG) "172.24.124.130:19443" else "itg-yz.cu-sc.com:19443" // if (IS_DEBUG) "172.24.124.130:19443" else "itg-yz.cu-sc.com:19443"
// if (IS_DEBUG) "itg-yz.cu-sc.com:13443" else "itg-yz.cu-sc.com:19443" // if (IS_DEBUG) "itg-yz.cu-sc.com:13443" else "itg-yz.cu-sc.com:19443"
//websocket地址 token=${HTTP_TOKEN}& //websocket地址 token=${HTTP_TOKEN}&
private var WSHOST = "wss://${BASE_HOST}/wsplus/socket?reType=freedo&" private var WSHOST = "ws://${BASE_HOST}/ws/avp?"
// if (IS_DEBUG) "wss://${BASE_HOST}/wsplus/socket?token=121&reType=freedo&" else "wss://${BASE_HOST}/wsplus/socket?token=121&reType=freedo&" // if (IS_DEBUG) "wss://${BASE_HOST}/wsplus/socket?token=121&reType=freedo&" else "wss://${BASE_HOST}/wsplus/socket?token=121&reType=freedo&"
...@@ -40,14 +40,14 @@ object MyContants { ...@@ -40,14 +40,14 @@ object MyContants {
var VEHICLEID = 27 var VEHICLEID = 27
/**网联车辆位姿 用于实车测试喽数据 &vehicleId=${VEHICLEID}***/ /**网联车辆位姿 用于实车测试喽数据 &vehicleId=${VEHICLEID}***/
var WS_VEH_LOC = "${WSHOST}msgType=2&vehicleId=${VEHICLEID}" var WS_VEH_LOC = "${WSHOST}type=1"
/***感知目标物 &intersectionCode=yz-15 停车场 不传就是整个园区***/ /***感知目标物 &intersectionCode=yz-15 停车场 不传就是整个园区***/
// var WS_FEEL_TARGET = "${WSHOST}msgType=1&intersectionCode=17 " // var WS_FEEL_TARGET = "${WSHOST}msgType=1&intersectionCode=17 "
var WS_FEEL_TARGET = "${WSHOST}msgType=1&intersectionCode=yz-15" var WS_FEEL_TARGET = "${WSHOST}type=2"
/***V2X预警 VEHICLEID 传了就是获取某一辆车的预警 &vehicleId=${VEHICLEID}"=***/ /***V2X预警 VEHICLEID 传了就是获取某一辆车的预警 &vehicleId=${VEHICLEID}"=***/
var WS_V2X = "${WSHOST}msgType=4&vehicleId=${VEHICLEID}" var WS_V2X = "${WSHOST}type=3"
/***网联车辆状态 &VEHICLEID=''***/ /***网联车辆状态 &VEHICLEID=''***/
var WS_VEH_STATU = "${WSHOST}msgType=6" var WS_VEH_STATU = "${WSHOST}msgType=6"
......
...@@ -91,7 +91,7 @@ class MainVm @Inject constructor( ...@@ -91,7 +91,7 @@ class MainVm @Inject constructor(
// private var vehStatuWSClient = VehStatuWSClient(URI(MyContants.WS_VEH_STATU)) // private var vehStatuWSClient = VehStatuWSClient(URI(MyContants.WS_VEH_STATU))
//socket 管理 //socket 管理
private var sockets = listOf(feelTargetWSClient, v2xWSClient) private var sockets = listOf(vecLocWSClient,feelTargetWSClient, v2xWSClient)
//交通信号灯 //交通信号灯
// private var trafficLightWSClient: TrafficLightWSClient? = null // private var trafficLightWSClient: TrafficLightWSClient? = null
...@@ -102,7 +102,7 @@ class MainVm @Inject constructor( ...@@ -102,7 +102,7 @@ class MainVm @Inject constructor(
lateinit var mockVM: MockVM lateinit var mockVM: MockVM
//是否需要模拟 //是否需要模拟
var isMock = true var isMock = false
//车辆位姿数据 //车辆位姿数据
// var carVehicle = MutableLiveData<CarVehicle>() // var carVehicle = MutableLiveData<CarVehicle>()
...@@ -272,6 +272,44 @@ class MainVm @Inject constructor( ...@@ -272,6 +272,44 @@ class MainVm @Inject constructor(
} }
/**
* 联网车辆位姿数据
*/
fun getSelfCar() {
try {
vecLocWSClient.onWebSocketCb = object : OnWebSocketCb {
override fun onClose(
code: Int,
reason: String?,
remote: Boolean
) {
}
override fun onMsg(str: String) {
viewModelScope.launch {
if (str.isNotEmpty()) {
try {
mockVM.selfCar(str,carVehicle)
// var carBean = gson.fromJson(str, CarVehicle::class.java)
//更新主车位置
// carVehicle.postValue(carBean)
} catch (e: JsonSyntaxException) {
e.printStackTrace()
}
}
}
}
}
if (!vecLocWSClient.isOpen) {
vecLocWSClient.connect()
}
} catch (e: Exception) {
e.printStackTrace()
}
}
// mockVM.getSelfCar(carVehicle, targetPre, v2xStartBean)
//车辆位姿回调 //车辆位姿回调
private var carCb = object : SseCallback { private var carCb = object : SseCallback {
var url = "" var url = ""
...@@ -323,7 +361,7 @@ class MainVm @Inject constructor( ...@@ -323,7 +361,7 @@ class MainVm @Inject constructor(
mockVM.onSubTargetMock(targetPre) mockVM.onSubTargetMock(targetPre)
} else { } else {
try { try {
feelTargetWSClient!!.onWebSocketCb = object : OnWebSocketCb { feelTargetWSClient.onWebSocketCb = object : OnWebSocketCb {
override fun onClose( override fun onClose(
code: Int, code: Int,
reason: String?, reason: String?,
...@@ -335,7 +373,7 @@ class MainVm @Inject constructor( ...@@ -335,7 +373,7 @@ class MainVm @Inject constructor(
viewModelScope.launch { viewModelScope.launch {
//下载到sd卡下面的DownLoad文件夹下面 //下载到sd卡下面的DownLoad文件夹下面
if (str.isNotEmpty()) { if (str.isNotEmpty()) {
FileSdCardUtils.writeFileToDownload(str, "PerTarget.txt") // FileSdCardUtils.writeFileToDownload(str, "PerTarget.txt")
try { try {
var bean = gson.fromJson(str, PerceptionBean::class.java) var bean = gson.fromJson(str, PerceptionBean::class.java)
targetPre.postValue(bean) targetPre.postValue(bean)
...@@ -377,13 +415,13 @@ class MainVm @Inject constructor( ...@@ -377,13 +415,13 @@ class MainVm @Inject constructor(
override fun onMsg(str: String) { override fun onMsg(str: String) {
viewModelScope.launch { viewModelScope.launch {
if (str.isNotEmpty()) { if (str.isNotEmpty()) {
FileSdCardUtils.writeFileToDownload(str, "avp_v2x.txt") // FileSdCardUtils.writeFileToDownload(str, "avp_v2x.txt")
} try {
try { var bean = gson.fromJson(str, V2xStartBean::class.java)
var bean = gson.fromJson(str, V2xStartBean::class.java) v2xStartBean.postValue(bean)
v2xStartBean.postValue(bean) } catch (e: JsonSyntaxException) {
} catch (e: JsonSyntaxException) { e.printStackTrace()
e.printStackTrace() }
} }
} }
......
...@@ -26,6 +26,7 @@ import com.sd.cavphmi.bean.CarVehicle ...@@ -26,6 +26,7 @@ import com.sd.cavphmi.bean.CarVehicle
import com.sd.cavphmi.bean.PerceptionBean import com.sd.cavphmi.bean.PerceptionBean
import com.sd.cavphmi.bean.V2xStartBean import com.sd.cavphmi.bean.V2xStartBean
import com.sd.cavphmi.bean.VObject import com.sd.cavphmi.bean.VObject
import com.sd.cavphmi.bean.mock.CarVeh
import com.sd.cavphmi.bean.mock.MRoutes import com.sd.cavphmi.bean.mock.MRoutes
import com.sd.cavphmi.bean.mock.ParkPath import com.sd.cavphmi.bean.mock.ParkPath
import com.sd.cavphmi.highmap.AllLine import com.sd.cavphmi.highmap.AllLine
...@@ -71,6 +72,82 @@ class MockVM @Inject constructor( ...@@ -71,6 +72,82 @@ class MockVM @Inject constructor(
} }
} }
//泊车首次只进来一次
private var isPark = false
//接受从自己服务器来的数据
suspend fun selfCar(str: String, carVehicle: MutableStateFlow<CarVehicle>) {
withContext(Dispatchers.Main) {
val random = Random
var cCar: CarVehicle? = null
val CarVeh = gson.fromJson(str, CarVeh::class.java)
if (CarVeh.status.equals("park")) {
var mRoutes = MRoutes(CarVeh.rs!!)//转换类型
if (!isPark) {
isPark = true
//画局部图小车
drawNavingCar(
Tools.latLngToPoint(
LatLng(
39.81014469509955,
116.50238005214746
)
)
)
//画局部图路径
smallLineMock(mRoutes)
//画终点
addEndMarker(LatLng(39.809039362307594, 116.50254394816011))
//用矩形框柱
drawEndArea(
39.81014469509955,
116.50238005214746,
39.809039362307594,
116.50254394816011,
)
//画出全局路径
var lines = CarVeh.rs!!.map {
AllLine(it[1], it[0])
}
HighMapApi.setCarNavPath(lines, showdistance = 200)
//开启流光效果
HighMapApi.parkRoundLight("B017")
//2旁车辆占用
var spinfos = listOf(Spinfo().apply {
code = "B016"
state = true
}, Spinfo().apply {
code = "B018"
state = true
})
HighMapApi.setParkStatu(ParkStatu(spinfos))
}
//变速
CarPanelBean.instance.speed.set(random.nextInt(10..15))
//模拟车辆移动
var rs=CarVeh.rs!!.get(CarVeh.carPos)
cCar = CarVehicle().apply {
this.vehiclePos = listOf(rs[0], rs[1], rs[2])
}
//更新主车位置
carVehicle.value = cCar
//更新小地图小车
showNavingCarPosition(
Tools.latLngToNdsPoint(
LatLng(
cCar.vehiclePos!!.get(1),
cCar.vehiclePos!!.get(0)
)
),
cCar.vehiclePos!!.get(2).toFloat()
)
//更新小地图路径
upSmallLine(CarVeh.carPos, mRoutes)
}
}
}
/****** /******
* 模拟车辆位姿 泊车 * 模拟车辆位姿 泊车
* @param binding 里的航向角 * @param binding 里的航向角
...@@ -344,7 +421,7 @@ class MockVM @Inject constructor( ...@@ -344,7 +421,7 @@ class MockVM @Inject constructor(
//开始跟车 //开始跟车
HighMapApi.setCameraAngle(30f) HighMapApi.setCameraAngle(30f)
HighMapApi.setCameraDistance(8f) HighMapApi.setCameraDistance(8f)
} else if (index == 70) { } else if (index == 70) {//盲区预警
var v2x = V2xStartBean().apply { var v2x = V2xStartBean().apply {
type = 4 type = 4
objects = objects =
......
...@@ -27,7 +27,7 @@ class FeelTargetWSClient : BaseWsClient { ...@@ -27,7 +27,7 @@ class FeelTargetWSClient : BaseWsClient {
var onWebSocketCb: OnWebSocketCb? = null var onWebSocketCb: OnWebSocketCb? = null
override fun onOpen(handshakedata: ServerHandshake?) { override fun onOpen(handshakedata: ServerHandshake?) {
println(TAG + "-------openg "+uri.toString()) println(TAG + "------- "+uri.toString())
// System.out.println(TAG + "new connection opened") // System.out.println(TAG + "new connection opened")
} }
......
...@@ -37,7 +37,7 @@ class VecLocWSClient : BaseWsClient { ...@@ -37,7 +37,7 @@ class VecLocWSClient : BaseWsClient {
var onWebSocketCb: OnWebSocketCb? = null var onWebSocketCb: OnWebSocketCb? = null
override fun onOpen(handshakedata: ServerHandshake?) { override fun onOpen(handshakedata: ServerHandshake?) {
System.out.println(TAG + "网联车辆位姿 opened " + uri.toString()) System.out.println(TAG + " opened " + uri.toString())
} }
override fun onMessage(message: String?) { override fun onMessage(message: String?) {
......
...@@ -32,6 +32,6 @@ dependencyResolutionManagement { ...@@ -32,6 +32,6 @@ dependencyResolutionManagement {
} }
} }
rootProject.name = "SuZhouAvp" rootProject.name = "c-avp2.0"
include(":app") include(":app")
include(":mycomutils") include(":mycomutils")
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