Clean up user inputs for driving

This commit is contained in:
2025-10-28 10:20:12 -04:00
parent 5c4a6909eb
commit eb0942d890
2 changed files with 32 additions and 18 deletions

View File

@ -55,7 +55,7 @@ class SwerveDrive {
);
}
drive(velocityX, velocityY, turnSpeed, maxSpeed) {
drive(velocityX, velocityY, turnSpeed, maxModuleSpeed) {
// Take in a requested speeds and update every module
this.modules.forEach(module =>
module.calculateState(velocityX, velocityY, turnSpeed)
@ -63,8 +63,8 @@ class SwerveDrive {
// If any speeds exceed the max speed, normalize down so we don't effect movement direction
const maxCalculated = Math.max(...this.modules.map(m => m.speed), 0);
if (maxCalculated > maxSpeed) {
const scale = maxSpeed / maxCalculated;
if (maxCalculated > maxModuleSpeed) {
const scale = maxModuleSpeed / maxCalculated;
this.modules.forEach(module => {
module.velocity.x *= scale;
module.velocity.y *= scale;
@ -169,19 +169,33 @@ const preset8WheelBtn = document.getElementById('preset-8wheel');
// Add event listeners for drive controls
vxSlider.addEventListener('input', (e) => {
vxOutput.textContent = parseFloat(e.target.value).toFixed(1);
vxOutput.textContent = parseFloat(e.target.value);
});
vxOutput.textContent = parseFloat(vxSlider.value);
vySlider.addEventListener('input', (e) => {
vyOutput.textContent = parseFloat(e.target.value).toFixed(1);
vyOutput.textContent = parseFloat(e.target.value);
});
vyOutput.textContent = parseFloat(vySlider.value);
omegaSlider.addEventListener('input', (e) => {
omegaOutput.textContent = parseFloat(e.target.value).toFixed(1);
omegaOutput.textContent = parseFloat(e.target.value);
});
omegaOutput.textContent = parseFloat(omegaSlider.value);
maxSpeedSlider.addEventListener('input', (e) => {
maxSpeedOutput.textContent = parseFloat(e.target.value).toFixed(1);
maxSpeedOutput.textContent = parseFloat(e.target.value);
});
maxSpeedOutput.textContent = parseFloat(maxSpeedSlider.value);
resetBtn.addEventListener('click', (e) => {
vxSlider.value = 0;
vySlider.value = 0;
omegaSlider.value = 0;
vxOutput.textContent = parseFloat(vxSlider.value);
vyOutput.textContent = parseFloat(vySlider.value);
omegaOutput.textContent = parseFloat(omegaSlider.value);
});
@ -338,7 +352,7 @@ function animate() {
// Update speeds based on sliders
xSpeed = parseFloat(vxSlider.value);
ySpeed = parseFloat(vySlider.value);
ySpeed = -parseFloat(vySlider.value);
turnSpeed = parseFloat(omegaSlider.value);
// Animate the grid with robot movement
@ -360,7 +374,7 @@ function animate() {
drawGrid(ctx, canvas.width * 2, gridSquareSize, xGridOffset, yGridOffset, robotRotation);
drawRobot(ctx, robot);
robot.drive(xSpeed, ySpeed, turnSpeed, 500);
robot.drive(xSpeed, ySpeed, turnSpeed, parseFloat(maxSpeedSlider.value));
// Do it all over again
ctx.restore();