diff --git a/index.html b/index.html index 29ccfa1..be97f45 100644 --- a/index.html +++ b/index.html @@ -26,21 +26,21 @@ Translation & Rotation
- - - 0.0 + + + 0
- - - 0.0 + + + 0
- 0.0 + 0
@@ -51,8 +51,8 @@
- - 4.0 + + 0
diff --git a/script.js b/script.js index 2a5f743..5e374cb 100644 --- a/script.js +++ b/script.js @@ -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();