Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
p x
C-AVP2.0
Commits
42aa7c93
Commit
42aa7c93
authored
Jan 13, 2026
by
p x
Browse files
增加一部份车辆位姿代码
parent
8562f1bc
Changes
9
Show whitespace changes
Inline
Side-by-side
app/src/main/java/com/sd/cavphmi/bean/mock/CarVeh.kt
0 → 100644
View file @
42aa7c93
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
app/src/main/java/com/sd/cavphmi/ui/LoginActivity.kt
View file @
42aa7c93
...
@@ -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
()
}
}
}
}
}
}
...
...
app/src/main/java/com/sd/cavphmi/ui/MainActivity.kt
View file @
42aa7c93
...
@@ -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
->
...
...
app/src/main/java/com/sd/cavphmi/utils/MyContants.kt
View file @
42aa7c93
...
@@ -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
=
"1
72.24.124.130:19443
"
var
BASE_HOST
=
"1
92.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
=
"ws
s
://${BASE_HOST}/ws
plus/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"
...
...
app/src/main/java/com/sd/cavphmi/viewmodels/MainVm.kt
View file @
42aa7c93
...
@@ -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
=
tru
e
var
isMock
=
fals
e
//车辆位姿数据
//车辆位姿数据
// 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,14 +415,14 @@ class MainVm @Inject constructor(
...
@@ -377,14 +415,14 @@ 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
()
}
}
}
}
}
}
}
...
...
app/src/main/java/com/sd/cavphmi/viewmodels/MockVM.kt
View file @
42aa7c93
...
@@ -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
=
...
...
app/src/main/java/com/sd/cavphmi/websockets/FeelTargetWSClient.kt
View file @
42aa7c93
...
@@ -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")
}
}
...
...
app/src/main/java/com/sd/cavphmi/websockets/VecLocWSClient.kt
View file @
42aa7c93
...
@@ -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
?)
{
...
...
settings.gradle.kts
View file @
42aa7c93
...
@@ -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"
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment