WebSocket 里程计与控制指令指南
1. WebSocket 连接信息
2. 里程计数据获取
要获取 AGV 的里程计数据,需要先向控制器发送"加入域"的指令。控制器会在接收到该指令后,主动下发里程计数据。
加入域指令
{
"packet": {
"cmd": "join",
"region": "ControlModel"
},
"msg": {}
}
里程计数据格式
{
"packet": {
"cmd": "region",
"region": "ControlModel",
"index": 1
},
"msg": {
"talk": "odom",
"odomx": 0, // 里程计 X 坐标(单位:米)
"odomy": 0, // 里程计 Y 坐标(单位:米)
"odomtheta": 0, // 里程计角度(单位:弧度)
"velx": 0, // X 方向速度(单位:米/秒)
"vely": 0, // Y 方向速度(单位:米/秒)
"veltheta": 0 // 角速度(单位:弧度/秒)
}
}
3. 里程计操作指令
重置里程计
清空里程计数据,使其重新计算。
{
"packet": {
"cmd": "region",
"region": "ControlModel",
"index": 1
},
"msg": {
"talk": "reset"
}
}
停止里程计
停止里程计数据的更新。
{
"packet": {
"cmd": "region",
"region": "ControlModel",
"index": 1
},
"msg": {
"talk": "stopodom"
}
}
设置里程计角度(IMU 角度校正)
用于修正 IMU 角度偏差,imuDisTheta
表示角度增量,单位为弧度。
{
"packet": {
"cmd": "region",
"region": "ControlModel",
"index": 1
},
"msg": {
"talk": "set_Theta",
"imuDisTheta": 0.0
}
}
4. AGV 运动控制指令
控制器接收到指令后,AGV 会按照设定的速度运动。
注意:
- 控制指令发送频率建议为 10Hz(每 100ms 发送一次)。
- 如果控制器 超过 1 秒未接收到控制指令,AGV 会自动停止。
差速轮控制
适用于差速驱动的 AGV(如两轮差速小车)。
{
"packet": {
"cmd": "region",
"region": "cmd_vel",
"index": 1
},
"msg": {
"xvel": 0, // X 方向速度(单位:米/秒)
"yvel": 0, // Y 方向速度(单位:米/秒,通常为 0)
"thetavel": 0, // 角速度(单位:弧度/秒)
"isRemote":true
}
}
单舵轮控制
适用于单舵轮 AGV(例如前轮转向,后轮驱动)。
{
"packet": {
"cmd": "region",
"region": "cmd_vel",
"index": 1
},
"msg": {
"xvel": 0, // X 方向速度(单位:米/秒)
"wheelTheta": 0, // 轮子方向角度(单位:弧度,范围:[-π, +π])
"thetavel": 0, // 角速度(单位:弧度/秒)
"isRemote":true
}
}
多舵轮控制
适用于多舵轮 AGV(例如四舵轮底盘,所有轮子方向一致)。
{
"packet": {
"cmd": "region",
"region": "cmd_vel",
"index": 1
},
"msg": {
"xvel": 0, // X 方向速度(单位:米/秒)
"wheelTheta": 0, // 轮子方向角度(单位:弧度,范围:[-π, +π])
"thetavel": 0, // 角速度(单位:弧度/秒)
"isRemote":true
}
}
以上即为 AGV 通过 WebSocket 进行里程计数据获取和运动控制的指令格式,确保按照规范发送数据,以实现精准控制。