底盘控制参数改为 BASE_SPEED 和 YAW_VELOCITY,直接发布线速度和角速度
- MAX_LINEAR/MAX_ANGULAR/WHEEL_SEPARATION → BASE_SPEED/YAW_VELOCITY - CMD_WHEEL_TOPIC 话题名改为 /cmd_chassis - 移除前端轮速差计算,发布 [linear, angular] 由底盘自行解算左右轮速
This commit is contained in:
+3
-4
@@ -8,12 +8,11 @@ export const MJPEG_MANUAL_URL = 'http://192.168.0.11/stream?topic=/vision/result
|
|||||||
export const MJPEG_DEBUG_URL = 'http://192.168.0.11/stream?topic=/vision/debug_image&mode=debug'
|
export const MJPEG_DEBUG_URL = 'http://192.168.0.11/stream?topic=/vision/debug_image&mode=debug'
|
||||||
|
|
||||||
// ROS 话题
|
// ROS 话题
|
||||||
export const CMD_WHEEL_TOPIC = '/cmd_wheel'
|
export const CMD_WHEEL_TOPIC = '/cmd_chassis'
|
||||||
export const CMD_GIMBAL_TOPIC = '/cmd_gimbal'
|
export const CMD_GIMBAL_TOPIC = '/cmd_gimbal'
|
||||||
// 键盘控制参数
|
// 键盘控制参数
|
||||||
export const MAX_LINEAR = 0.5 // m/s
|
export const BASE_SPEED = 0.5 // 直线基础速度
|
||||||
export const MAX_ANGULAR = 1.0 // rad/s
|
export const YAW_VELOCITY = 1.0 // 角度速率,度每秒
|
||||||
export const WHEEL_SEPARATION = 0.2 // 轮距(m)
|
|
||||||
|
|
||||||
// 云台角度速率 (度/秒)
|
// 云台角度速率 (度/秒)
|
||||||
export const GIMBAL_PITCH_DEG_S = 10
|
export const GIMBAL_PITCH_DEG_S = 10
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ import { onBeforeRouteLeave } from 'vue-router'
|
|||||||
import {
|
import {
|
||||||
MJPEG_MANUAL_URL, ROSBRIDGE_URL,
|
MJPEG_MANUAL_URL, ROSBRIDGE_URL,
|
||||||
CMD_WHEEL_TOPIC, CMD_GIMBAL_TOPIC,
|
CMD_WHEEL_TOPIC, CMD_GIMBAL_TOPIC,
|
||||||
MAX_LINEAR, MAX_ANGULAR, WHEEL_SEPARATION,
|
BASE_SPEED, YAW_VELOCITY,
|
||||||
GIMBAL_PITCH_DEG_S, GIMBAL_YAW_DEG_S,
|
GIMBAL_PITCH_DEG_S, GIMBAL_YAW_DEG_S,
|
||||||
API_GIMBAL_MODE_SWITCH, API_CHASSIS_MODE_SWITCH, API_LASER,
|
API_GIMBAL_MODE_SWITCH, API_CHASSIS_MODE_SWITCH, API_LASER,
|
||||||
} from '../config.js'
|
} from '../config.js'
|
||||||
@@ -38,7 +38,7 @@ connect(ROSBRIDGE_URL)
|
|||||||
const pressed = new Set()
|
const pressed = new Set()
|
||||||
const laserOn = ref(false)
|
const laserOn = ref(false)
|
||||||
let animId = null
|
let animId = null
|
||||||
let lastVel = { left: 0, right: 0, pitch: 0, yaw: 0 }
|
let lastVel = { linear: 0, angular: 0, pitch: 0, yaw: 0 }
|
||||||
|
|
||||||
function onKeyDown(e) {
|
function onKeyDown(e) {
|
||||||
if (['KeyW','KeyA','KeyS','KeyD','ArrowUp','ArrowDown','ArrowLeft','ArrowRight'].includes(e.code)) {
|
if (['KeyW','KeyA','KeyS','KeyD','ArrowUp','ArrowDown','ArrowLeft','ArrowRight'].includes(e.code)) {
|
||||||
@@ -59,33 +59,29 @@ function onKeyUp(e) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function computeVelocities() {
|
function computeVelocities() {
|
||||||
const linear = (pressed.has('KeyW') ? MAX_LINEAR : 0) - (pressed.has('KeyS') ? MAX_LINEAR : 0)
|
const linear = (pressed.has('KeyW') ? BASE_SPEED : 0) - (pressed.has('KeyS') ? BASE_SPEED : 0)
|
||||||
const angular = (pressed.has('KeyA') ? MAX_ANGULAR : 0) - (pressed.has('KeyD') ? MAX_ANGULAR : 0)
|
const angular = (pressed.has('KeyA') ? YAW_VELOCITY : 0) - (pressed.has('KeyD') ? YAW_VELOCITY : 0)
|
||||||
const pitch = (pressed.has('ArrowDown') ? GIMBAL_PITCH_DEG_S : 0) - (pressed.has('ArrowUp') ? GIMBAL_PITCH_DEG_S : 0)
|
const pitch = (pressed.has('ArrowDown') ? GIMBAL_PITCH_DEG_S : 0) - (pressed.has('ArrowUp') ? GIMBAL_PITCH_DEG_S : 0)
|
||||||
const yaw = (pressed.has('ArrowLeft') ? GIMBAL_YAW_DEG_S : 0) - (pressed.has('ArrowRight') ? GIMBAL_YAW_DEG_S : 0)
|
const yaw = (pressed.has('ArrowLeft') ? GIMBAL_YAW_DEG_S : 0) - (pressed.has('ArrowRight') ? GIMBAL_YAW_DEG_S : 0)
|
||||||
|
|
||||||
const halfSep = WHEEL_SEPARATION / 2
|
return { linear, angular, pitch, yaw }
|
||||||
const left = linear - angular * halfSep
|
|
||||||
const right = linear + angular * halfSep
|
|
||||||
|
|
||||||
return { left, right, pitch, yaw }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function startLoop() {
|
function startLoop() {
|
||||||
function tick() {
|
function tick() {
|
||||||
const { left, right, pitch, yaw } = computeVelocities()
|
const { linear, angular, pitch, yaw } = computeVelocities()
|
||||||
const changed = left !== lastVel.left || right !== lastVel.right || pitch !== lastVel.pitch || yaw !== lastVel.yaw
|
const changed = linear !== lastVel.linear || angular !== lastVel.angular || pitch !== lastVel.pitch || yaw !== lastVel.yaw
|
||||||
|
|
||||||
if (changed) {
|
if (changed) {
|
||||||
publish(CMD_WHEEL_TOPIC, 'std_msgs/Float32MultiArray', {
|
publish(CMD_WHEEL_TOPIC, 'std_msgs/Float32MultiArray', {
|
||||||
data: [left, right],
|
data: [linear, angular],
|
||||||
layout: { dim: [], data_offset: 0 },
|
layout: { dim: [], data_offset: 0 },
|
||||||
})
|
})
|
||||||
publish(CMD_GIMBAL_TOPIC, 'geometry_msgs/Twist', {
|
publish(CMD_GIMBAL_TOPIC, 'geometry_msgs/Twist', {
|
||||||
linear: { x: 0, y: 0, z: 0 },
|
linear: { x: 0, y: 0, z: 0 },
|
||||||
angular: { x: 0, y: pitch, z: yaw },
|
angular: { x: 0, y: pitch, z: yaw },
|
||||||
})
|
})
|
||||||
lastVel = { left, right, pitch, yaw }
|
lastVel = { linear, angular, pitch, yaw }
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pressed.size === 0) {
|
if (pressed.size === 0) {
|
||||||
|
|||||||
Reference in New Issue
Block a user