cylon/README.markdown

352 lines
16 KiB
Markdown
Raw Normal View History

2014-11-29 11:13:24 +08:00
[![Cylon.js](http://i.imgur.com/U3paNhR.png)](http://cylonjs.com)
2013-12-06 03:12:28 +08:00
2015-04-11 23:57:58 +08:00
Cylon.js is a JavaScript framework for robotics, physical computing, and the Internet of Things (IoT).
2013-10-18 14:55:48 +08:00
2014-04-24 23:54:29 +08:00
It provides a simple, but powerful way to create solutions that incorporate
multiple, different hardware devices concurrently.
2013-10-18 14:55:48 +08:00
Want to use Node.js for robots, drones, and IoT devices? You are in the right place.
2014-04-24 23:54:29 +08:00
Want to use Ruby on robots? Check out our sister project, [Artoo][].
2014-04-24 23:54:29 +08:00
Want to use Golang to power your robots? Check out our sister project,
[Gobot][].
2013-11-21 02:41:10 +08:00
2014-04-24 23:54:29 +08:00
[Artoo]: http://artoo.io
[Gobot]: http://gobot.io
2013-10-26 00:19:08 +08:00
2014-04-24 23:54:29 +08:00
## Build Status:
2013-11-21 02:41:10 +08:00
2014-06-07 06:44:06 +08:00
[![Build Status](https://secure.travis-ci.org/hybridgroup/cylon.png?branch=master)](http://travis-ci.org/hybridgroup/cylon) [![Code Climate](https://codeclimate.com/github/hybridgroup/cylon.png)](https://codeclimate.com/github/hybridgroup/cylon) [![Code Climate](https://codeclimate.com/github/hybridgroup/cylon/coverage.png)](https://codeclimate.com/github/hybridgroup/cylon)
2013-10-23 05:18:31 +08:00
2014-10-22 19:06:56 +08:00
## Getting Started
### Installation
All you need to get started on a new robot is the `cylon` module:
npm install cylon
With the core module installed, now install the modules for whatever hardware
2015-04-08 00:39:23 +08:00
support you need. For the Arduino + LED blink example, we'll need the `firmata`, `gpio`, and `i2c` modules:
2014-10-22 19:06:56 +08:00
2015-04-08 00:39:23 +08:00
npm install cylon-firmata cylon-gpio cylon-i2c
2014-10-22 19:06:56 +08:00
2014-04-24 23:54:29 +08:00
## Examples
2013-11-25 06:19:49 +08:00
2014-04-24 23:54:29 +08:00
### Arduino + LED
2013-11-25 06:19:49 +08:00
2014-04-24 23:54:29 +08:00
The below example connects to an Arduino over a serial connection, and blinks an
LED once per second.
2013-10-23 05:18:31 +08:00
2014-04-24 23:54:29 +08:00
The example requires that the Arduino have the Firmata sketch installed; which
2014-10-22 19:10:41 +08:00
can be obtained either through the Ardunio IDE or the `gort arduino upload
firmata` command available in [gort](http://gort.io).
2013-11-21 02:41:10 +08:00
2013-10-18 14:55:48 +08:00
```javascript
2014-04-24 23:54:29 +08:00
var Cylon = require('cylon');
2013-10-23 05:18:31 +08:00
2014-04-24 23:54:29 +08:00
// define the robot
2013-10-24 11:07:35 +08:00
var robot = Cylon.robot({
2014-04-24 23:54:29 +08:00
// change the port to the correct one for your Arduino
2014-11-29 09:47:29 +08:00
connections: {
arduino: { adaptor: 'firmata', port: '/dev/ttyACM0' }
},
devices: {
led: { driver: 'led', pin: 13 }
},
2013-10-23 05:18:31 +08:00
work: function(my) {
2014-04-24 23:54:29 +08:00
every((1).second(), my.led.toggle);
2013-10-20 08:53:53 +08:00
}
});
2014-04-24 23:54:29 +08:00
// connect to the Arduino and start working
2013-10-20 11:31:29 +08:00
robot.start();
2013-10-18 14:55:48 +08:00
```
2014-04-24 23:54:29 +08:00
### Parrot ARDrone 2.0
2013-12-06 03:12:28 +08:00
```javascript
2013-12-28 19:00:47 +08:00
var Cylon = require('cylon');
2013-12-06 03:12:28 +08:00
Cylon.robot({
2014-11-29 09:47:29 +08:00
connections: {
ardrone: { adaptor: 'ardrone', port: '192.168.1.1' }
},
devices: {
drone: { driver: 'ardrone' }
},
2013-12-06 03:12:28 +08:00
work: function(my) {
my.drone.takeoff();
2014-08-30 03:17:04 +08:00
2014-04-24 23:54:29 +08:00
after((10).seconds(), my.drone.land);
after((15).seconds(), my.drone.stop);
}
}).start();
```
### Cat Toy (Leap Motion + Digispark + Servos)
```javascript
var Cylon = require('cylon');
2014-04-24 23:54:29 +08:00
Cylon.robot({
connections: {
digispark: { adaptor: 'digispark' },
leapmotion: { adaptor: 'leapmotion' }
},
devices: {
servo1: { driver: 'servo', pin: 0, connection: 'digispark' },
servo2: { driver: 'servo', pin: 1, connection: 'digispark' },
leapmotion: { driver: 'leapmotion', connection: 'leapmotion' }
},
2014-04-24 23:54:29 +08:00
work: function(my) {
2014-08-30 03:17:04 +08:00
my.x = 90;
my.z = 90;
2014-04-24 23:54:29 +08:00
my.leapmotion.on('hand', function(hand) {
2014-08-30 03:17:04 +08:00
my.x = hand.palmX.fromScale(-300, 300).toScale(30, 150);
my.z = hand.palmZ.fromScale(-300, 300).toScale(30, 150);
2014-04-24 23:54:29 +08:00
});
every(100, function() {
2014-08-30 03:17:04 +08:00
my.servo1.angle(my.x);
my.servo2.angle(my.z);
2014-04-24 23:54:29 +08:00
2014-10-22 19:23:39 +08:00
console.log(my.servo1.currentAngle() + ", " + my.servo2.currentAngle());
2014-04-24 23:54:29 +08:00
});
2013-12-06 03:12:28 +08:00
}
}).start();
```
2015-04-08 09:34:36 +08:00
### Multiple Spheros + HTTP API Plugin
2014-04-24 23:54:29 +08:00
2015-04-08 09:34:36 +08:00
To use the HTTP API plugin, first install it's NPM module:
2015-01-13 00:54:48 +08:00
$ npm install cylon-api-http
2015-04-08 09:34:36 +08:00
Then it can be used in scripts:
2015-01-13 00:54:48 +08:00
2014-04-24 23:54:29 +08:00
```javascript
var Cylon = require('cylon');
2015-04-08 09:34:36 +08:00
// tell the HTTP API plugin to listen for requests at https://localhost:4000
Cylon.api("http", { port: 4000 });
2014-04-24 23:54:29 +08:00
var bots = [
{ port: '/dev/rfcomm0', name: 'Thelma' },
{ port: '/dev/rfcomm1', name: 'Louise' }
];
2014-08-30 03:17:04 +08:00
bots.forEach(function(bot) {
Cylon.robot({
name: bot.name,
2014-04-24 23:54:29 +08:00
2014-11-29 09:47:29 +08:00
connections: {
sphero: { adaptor: "sphero", port: bot.port }
},
devices: {
sphero: { driver: "sphero" }
},
2014-04-24 23:54:29 +08:00
2014-08-30 03:17:04 +08:00
work: function(my) {
every((1).second(), function() {
console.log(my.name);
my.sphero.setRandomColor();
my.sphero.roll(60, Math.floor(Math.random() * 360));
});
}
2014-04-24 23:54:29 +08:00
});
2014-08-30 03:17:04 +08:00
});
2014-04-24 23:54:29 +08:00
// start up all robots at once
Cylon.start();
```
2014-10-16 05:07:39 +08:00
## Fluent Syntax
For those more familiar with jQuery, D3, or other fluent-style JavaScript
2015-04-08 09:34:36 +08:00
libraries, Cylon.JS also supports a chainable syntax:
2014-10-16 05:07:39 +08:00
```javascript
2014-11-29 09:47:29 +08:00
var Cylon = require('cylon');
2014-10-16 05:07:39 +08:00
2014-11-29 09:47:29 +08:00
Cylon
.robot()
.connection('arduino', { adaptor: 'firmata', port: '/dev/ttyACM0' })
.device('led', { driver: 'led', pin: 13 })
.on('ready', function(bot) {
setInterval(function() {
bot.led.toggle();
}, 1000);
});
2014-10-16 05:07:39 +08:00
2014-11-29 09:47:29 +08:00
Cylon.start();
2014-10-16 05:07:39 +08:00
```
## Hardware Support
2013-10-26 15:09:47 +08:00
2014-04-24 23:54:29 +08:00
Cylon.js has an extensible syntax for connecting to multiple, different hardware
2015-05-07 22:15:26 +08:00
devices. The following 36 platforms are currently supported:
2013-11-21 02:41:10 +08:00
2014-11-29 11:13:24 +08:00
Platform | Support
-------- | -------
2015-05-07 22:15:26 +08:00
[ARDrone](http://ardrone2.parrot.com/) | [cylon-ardrone](https://github.com/hybridgroup/cylon-ardrone)
2014-11-29 11:13:24 +08:00
[Arduino](http://www.arduino.cc/) | [cylon-firmata](https://github.com/hybridgroup/cylon-firmata)
[Arduino YUN](http://arduino.cc/en/Main/ArduinoBoardYun?from=Products.ArduinoYUN) | [cylon-firmata](https://github.com/hybridgroup/cylon-firmata)
[AT&T M2X](https://m2x.att.com) | [cylon-m2x](https://github.com/hybridgroup/cylon-m2x)
2015-07-16 01:04:51 +08:00
Audio | [cylon-audio](https://github.com/hybridgroup/cylon-audio)
2014-11-29 11:13:24 +08:00
[Beaglebone Black](http://beagleboard.org/Products/BeagleBone+Black/) | [cylon-beaglebone](https://github.com/hybridgroup/cylon-beaglebone)
2015-05-07 22:15:26 +08:00
[Bebop](http://www.parrot.com/products/bebop-drone/) | [cylon-bebop](https://github.com/hybridgroup/cylon-bebop)
2014-11-29 11:13:24 +08:00
[Bluetooth LE](http://en.wikipedia.org/wiki/Bluetooth_low_energy) | [cylon-ble](https://github.com/hybridgroup/cylon-ble)
[Crazyflie](http://www.bitcraze.se/) | [cylon-crazyflie](https://github.com/hybridgroup/cylon-crazyflie)
[Digispark](http://digistump.com/products/1) | [cylon-digispark](https://github.com/hybridgroup/cylon-digispark)
2014-12-31 04:53:55 +08:00
[Electric Imp](https://electricimp.com/product/) | [cylon-imp](https://github.com/hybridgroup/cylon-imp)
2014-11-29 11:13:24 +08:00
[Intel Edison](http://www.intel.com/content/www/us/en/do-it-yourself/edison.html) | [cylon-intel-iot](https://github.com/hybridgroup/cylon-intel-iot)
[Intel Galileo](http://www.intel.com/content/www/us/en/do-it-yourself/galileo-maker-quark-board.html) | [cylon-intel-iot](https://github.com/hybridgroup/cylon-intel-iot)
2015-01-16 05:35:20 +08:00
[Intel IoT Analytics](https://software.intel.com/en-us/intel-iot-developer-kit-cloud-based-analytics-user-guide) | [cylon-intel-iot-analytics](https://github.com/hybridgroup/cylon-intel-iot-analytics)
2014-11-29 11:13:24 +08:00
[Joystick](http://en.wikipedia.org/wiki/Joystick) | [cylon-joystick](https://github.com/hybridgroup/cylon-joystick)
[Keyboard](http://en.wikipedia.org/wiki/Computer_keyboard) | [cylon-keyboard](https://github.com/hybridgroup/cylon-keyboard)
[Leap Motion](https://www.leapmotion.com/) | [cylon-leapmotion](https://github.com/hybridgroup/cylon-leapmotion)
2014-12-31 04:53:55 +08:00
[MiP](http://www.wowwee.com/mip/) | [cylon-mip](https://github.com/hybridgroup/cylon-mip)
2014-11-29 11:13:24 +08:00
[MQTT](http://mqtt.org/) | [cylon-mqtt](https://github.com/hybridgroup/cylon-mqtt)
[Nest](http://nest.com/) | [cylon-nest](https://github.com/hybridgroup/cylon-nest)
[Neurosky](http://store.neurosky.com/products/mindwave-mobile) | [cylon-neurosky](https://github.com/hybridgroup/cylon-neurosky)
[OpenCV](http://opencv.org/) | [cylon-opencv](https://github.com/hybridgroup/cylon-opencv)
[Phillips Hue](http://www2.meethue.com/) | [cylon-hue](https://github.com/hybridgroup/cylon-hue)
[Pebble](http://www.getpebble.com/) | [cylon-pebble](https://github.com/hybridgroup/cylon-pebble)
[Pinoccio](https://pinocc.io) | [cylon-pinoccio](https://github.com/hybridgroup/cylon-pinoccio)
[PowerUp 3.0](http://www.poweruptoys.com/products/powerup-v3) | [cylon-powerup](https://github.com/hybridgroup/cylon-powerup)
[Rapiro](http://www.rapiro.com/) | [cylon-rapiro](https://github.com/hybridgroup/cylon-rapiro)
[Raspberry Pi](http://www.raspberrypi.org/) | [cylon-raspi](https://github.com/hybridgroup/cylon-raspi)
[Salesforce](http://www.force.com/) | [cylon-force](https://github.com/hybridgroup/cylon-force)
[Skynet](http://skynet.im/) | [cylon-skynet](https://github.com/hybridgroup/cylon-skynet)
[Spark](http://www.spark.io/) | [cylon-spark](https://github.com/hybridgroup/cylon-spark)
2015-07-16 01:04:51 +08:00
Speech | [cylon-speech](https://github.com/hybridgroup/cylon-speech)
2014-11-29 11:13:24 +08:00
[Sphero](http://www.gosphero.com/) | [cylon-sphero](https://github.com/hybridgroup/cylon-sphero)
[Sphero BLE](http://sphero.com/bb8) | [cylon-sphero-ble](https://github.com/hybridgroup/cylon-sphero-ble)
2014-11-29 11:13:24 +08:00
[Tessel](https://tessel.io/) | [cylon-tessel](https://github.com/hybridgroup/cylon-tessel)
[WICED Sense](http://www.broadcom.com/products/wiced/sense/) | [cylon-wiced-sense](https://github.com/hybridgroup/cylon-wiced-sense)
2013-10-26 15:09:47 +08:00
2014-04-24 23:54:29 +08:00
Our implementation of GPIO (General Purpose Input/Output) allows for a shared
set of drivers supporting 12 different devices:
2013-10-29 10:28:19 +08:00
2014-11-29 11:13:24 +08:00
- [GPIO](https://en.wikipedia.org/wiki/General_Purpose_Input/Output) <=> [Drivers](https://github.com/hybridgroup/cylon-gpio)
- Analog Sensor
- Button
- Continuous Servo
- Direct Pin
- IR Rangefinder
- LED
- MakeyButton
- Maxbotix Ultrasonic Range Finder
2015-04-10 09:52:56 +08:00
- Motor
2015-06-06 07:27:15 +08:00
- Relay
2015-04-10 09:52:56 +08:00
- RGB LED
2014-11-29 11:13:24 +08:00
- Servo
2013-10-29 10:28:19 +08:00
We also support 14 different I2C (Inter-Integrated Circuit) devices
2014-04-24 23:54:29 +08:00
through a shared `cylon-i2c` module:
2013-11-04 11:18:06 +08:00
2014-11-29 11:13:24 +08:00
- [I2C](https://en.wikipedia.org/wiki/I%C2%B2C) <=> [Drivers](https://github.com/hybridgroup/cylon-i2c)
- BlinkM RGB LED
- BMP180 Barometric Pressure + Temperature sensor
- Direct I2C
2014-11-29 11:13:24 +08:00
- HMC6352 Digital Compass
- JHD1313M1 LCD with RGB Backlight
- LCD
2015-04-10 09:52:56 +08:00
- LIDAR-Lite
- LSM9DS0G 9 Degrees of Freedom IMU
- LSM9DS0XM 9 Degrees of Freedom IMU
- MAG3110 3-Axis Digital Magnetometer
- MPL115A2 Digital Barometer & Thermometer
2015-04-10 09:52:56 +08:00
- MPU6050 Triple Axis Accelerometer and Gyro
- PCA9544a 4-Channel I2C Mux
2015-04-10 09:52:56 +08:00
- PCA9685 16-Channel 12-bit PWM/Servo Driver
2013-11-04 11:18:06 +08:00
In addition to our officially supported platforms, we have the following 8 user contributed platforms:
2015-03-21 02:19:23 +08:00
Platform | Support
-------- | -------
[APC UPS](http://www.apcupsd.org/) | [cylon-apcupsd](https://github.com/afoninsky/cylon-apcupsd)
[iBeacon](https://developer.apple.com/ibeacon/) | [cylon-beacon](https://github.com/juliancheal/cylon-beacon)
[Myo](https://www.myo.com/) | [cylon-myo](https://github.com/adaemi/cylon-myo)
[One-Wire](https://en.wikipedia.org/wiki/1-Wire) | [cylon-one-wire](https://github.com/rkelly92/cylon-one-wire)
[Parrot Rolling Spider](http://www.parrot.com/usa/products/rolling-spider/) | [cylon-rolling-spider](https://github.com/ChrisTheBaron/cylon-rolling-spider)
[PCDuino](http://www.pcduino.com/) | [cylon-pcduino](https://github.com/alexwang2013/cylon-pcduino)
[Telegram](https://telegram.org/) | [cylon-telegram](https://github.com/afoninsky/cylon-telegram)
[WeMo](http://www.belkin.com/us/Products/home-automation/c/wemo-home-automation/) | [cylon-wemo](https://github.com/ChrisTheBaron/cylon-wemo)
2015-03-21 02:19:23 +08:00
2015-04-08 09:34:36 +08:00
We'll also have many more platforms and drivers coming soon, [follow us on Twitter][Twitter] for updates.
2014-04-24 23:54:29 +08:00
[Twitter]: https://twitter.com/cylonjs
2014-11-06 23:00:17 +08:00
## Browser & Mobile Support
2015-04-08 09:34:36 +08:00
Cylon.js can be run directly in-browser, using the `browserify` NPM module.
You can also run it from withing a Chrome connected app, or a PhoneGap mobile app.
2014-11-06 23:00:17 +08:00
For more info on browser support, and for help with different configurations, you can find more info [in our docs](https://cylonjs.com/documentation/guides/browser-support/).
2014-11-06 23:00:17 +08:00
2015-04-08 09:34:36 +08:00
## API Plugins
2014-11-06 23:00:17 +08:00
2015-04-08 09:34:36 +08:00
Cylon.js has support for different API plugins that can be used to interact with your robots remotely.
2015-04-11 23:57:58 +08:00
At this time we have support for [http/https](https://github.com/hybridgroup/cylon-api-http), [mqtt](https://github.com/hybridgroup/cylon-api-mqtt), and [socket.io](https://github.com/hybridgroup/cylon-api-socketio) with more coming in the near future.
2015-01-13 00:54:48 +08:00
2015-04-08 09:34:36 +08:00
To use an API plugin, install it alongside Cylon:
2015-01-13 00:54:48 +08:00
2015-04-08 09:34:36 +08:00
$ npm install cylon-api-http cylon-api-socketio
2015-01-13 00:54:48 +08:00
Then, all you need to do is call `Cylon#api` in your robot's script:
2014-11-06 23:00:17 +08:00
2014-11-29 11:13:24 +08:00
```javascript
var Cylon = require("cylon");
// For http
Cylon.api('http');
// Or for Socket.io
Cylon.api('socketio');
2014-11-29 11:13:24 +08:00
```
2014-11-06 23:00:17 +08:00
Then visit `https://localhost:3000/` and you are ready to control your robots from a web browser!
2015-01-13 00:54:48 +08:00
2014-12-31 04:31:05 +08:00
<img src="http://cylonjs.com/images/screenshots/robeaux.jpg" style="margin-top: 15px; width: 100%">
2013-12-06 03:12:28 +08:00
2014-11-06 23:00:17 +08:00
You can check out more information on the Cylon API in the docs [here](http://cylonjs.com/documentation/guides/api).
2013-12-06 03:12:28 +08:00
2013-12-04 05:53:11 +08:00
## CLI
Cylon uses the Gort [http://gort.io](http://gort.io) Command Line Interface (CLI) so you can access important features right from the command line. We call it "RobotOps", aka "DevOps For Robotics". You can scan, connect, update device firmware, and more!
2014-07-19 20:32:20 +08:00
Cylon also has its own CLI to generate new robots, adaptors, and drivers. You can check it out at [https://github.com/hybridgroup/cylon-cli](https://github.com/hybridgroup/cylon-cli).
2013-12-04 05:53:11 +08:00
2013-10-21 05:11:58 +08:00
## Documentation
2013-11-21 02:41:10 +08:00
2015-04-08 09:34:36 +08:00
We're busy adding documentation to our website, check it out at [cylonjs.com/documentation][docs].
2013-10-30 15:44:08 +08:00
2015-04-08 09:34:36 +08:00
If you want to help with documentation, you can find the code for our website at on the [https://github.com/hybridgroup/cylon-site](https://github.com/hybridgroup/cylon-site).
2013-12-03 03:59:55 +08:00
2014-04-24 23:54:29 +08:00
[docs]: http://cylonjs.com/documentation
2014-06-13 10:43:21 +08:00
[docs site]: https://github.com/hybridgroup/cylon-site
2013-10-21 05:11:58 +08:00
2013-10-18 14:55:48 +08:00
## Contributing
2013-11-21 02:41:10 +08:00
2015-07-16 01:04:51 +08:00
For our contribution guidelines, please go to [CONTRIBUTING.md](https://github.com/hybridgroup/cylon/blob/master/CONTRIBUTING.md).
2013-10-18 14:55:48 +08:00
## Release History
2013-11-21 02:41:10 +08:00
2015-07-16 01:04:51 +08:00
For the release history, please go to [RELEASES.md](https://github.com/hybridgroup/cylon/blob/master/RELEASES.md).
2013-11-07 22:23:59 +08:00
2013-10-18 14:55:48 +08:00
## License
2013-11-21 02:41:10 +08:00
Copyright (c) 2013-2016 The Hybrid Group. Licensed under the Apache 2.0 license.