NodeJS client library for the Hedgehog Educational Robotics Controller
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 vianpm run gsl-protocol
)
$ 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.
In order to execute all tests, simply execute:
$ npm test
// 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();
}
Code is linted via TSLint. Read the styleguide entry in the hedgehog-ide project's wiki.