Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

diff-steer

Package Overview
Dependencies
Maintainers
1
Versions
2
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

diff-steer

Differential steering algorithim for driving a two-motor bot with a two-axis joystick

  • 0.0.2
  • latest
  • Source
  • npm
  • Socket score

Version published
Maintainers
1
Created
Source

diff-steer

Provides a simple interface to a differential steering algorithm to control two motors from one two-axis joystick.

Installation

npm i diff-steer --save

Usage

diff-steer accepts two inputs, a x-axis value and a y-axis value from a two-axis joystick. The first argument is the x-axis (from -1 to 1) and the second argument is the y-axis (-1 to 1):

var diffSteer = require('diff-steer');
diffSteer(0, -1); // UP
// > [255, 255]
diffSteer(0, 1); // DOWN
// > [-255, -255]
diffSteer(-1, 0); // LEFT
// > [-255, 255]
diffSteer(1, 0); // RIGHT
// > [255, -255]
diffSteer(0.8, -0.74); // UPPER RIGHT
// > [255, -5.100000000000005]

The return value is an array of motor speeds for each motor ranging from 255 to -255. A positive number is "forward", and a negative number is "backward". You can then use those values however you need to.

It is configured out of the box to work with USB gamepads. For more information on interfacing with USB gamepads, checkout gamepad or node-gamepad.

Additional Configuration

Axis Input values

If your device does not return values between -1 and 1 for each axis, you can configure diff-steer:

diffSteer.maxAxis = 1023;
diffSteer.minAxis = 0;
UP/DOWN values

USB gamepads return a negative number of UP and a positive number for DOWN. If your device does not follow this pattern (or you'd prefer a different control scheme), you can flip the axis:

diffSteer.maxAxis = 1023;
diffSteer.minAxis = 0;

Johnny-Five

If you are using Johnny-Five, you can pass your five.Motors collection to the motor_control module and diff-steer will handle driving your motors for you:

var steerMotors = require('diff-steer/motor_control');
// Refer to J5 docs for more info on motor shield configs
var config = five.Motor.SHIELD_CONFIGS.ADAFRUIT_V1;
var wheels = new five.Motors([config.M1, config.M2]);
// ...
gamepad.on('move', function(id, axis, value) {
  if(axis == 0 || axis == 1) {
    var device = gamepad.deviceAtIndex(id);
    steerMotors(wheels, device.axisStates[0], device.axisStates[1]);
  }
});

If you'd rather control the motors yourself, motor_control also returns an array of motor commands:

var motorCmds = steerMotors(null, device.axisStates[0], device.axisStates[1]);
console.info(motorCmds);
// [
//   {
//     direction: 'fwd',
//     speed: 255
//   },
//   {
//     direction: 'rev',
//     speed: -255
//   }
// ];

Keywords

FAQs

Package last updated on 19 Jul 2016

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc