/HedgehogNodeClient

NodeJS client library for the Hedgehog Educational Robotics Controller

Primary LanguageTypeScriptGNU Affero General Public License v3.0AGPL-3.0

HedgehogNodeClient

Build Status Code Coverage Dependency Status

NodeJS client library for the Hedgehog Educational Robotics Controller

Development

Tools

The following tools are used for development of the Hedgehog NodeJS library.

  • Dependency Management: NPM
  • Build Automation: Grunt (installing Grunt CLI globally is advisable)
  • Testing: Mocha (installed via NPM, run via npm test)
  • Coverage: Istanbul/nyc (installed via NPM, run via npm test)
  • Linting: TSLint (installed via NPM, run via grunt tslint)
  • Protobuf Compiler: protoc (can be downloaded here, run via grunt protoc)
  • Code generation: gsl (optional; requires Python 3.6, installed via pip install gsl[antlr,yaml], run via npm run gsl-protocol)

Setup

$ npm install       # Install required NPM modules
$ grunt protoc      # Generate Protobuf Javascript files
$ grunt build       # compile TypeScript sources

Optionally, set up code generation to adapt the TypeScript implementation of the Hedgehog protocol (requires Python 3.6):

$ pip install gsl[antlr,yaml] hedgehog-protocol-spec
$ npm run gsl-protocol

The generated code is tweaked in a few places, so make sure to diff the output against the git version, and re-apply any tweaks.

Running tests

In order to execute all tests, simply execute:

$ npm test

Usage Example

// Create a hedgehog client instance
let hedgehog = new HedgehogClient('tcp://127.0.0.1:10789');
try {
    // Control motors and servos
    // hedgehog.move(port, power)
    await hedgehog.move(0, 100);
    await hedgehog.move(2, 100);
    
    // hedgehog.set_servo(port, enabled, position)
    await hedgehog.setServo(0, true, 1023);
    
    // Read sensor values
    // hedgehog.getAnalog(0) returns a promise which resolves to the sensor value
    // Thus, with async await syntax, we can do:
    const value = await hedgehog.getAnalog(0);
    
    // Same with digital sensors
    const value = await hedgehog.getDigital(8);
} finally {
    hedgehog.close();
}

Coding Styleguide

Code is linted via TSLint. Read the styleguide entry in the hedgehog-ide project's wiki.