Go to file
Andrew Stewart fef740533c Add tests for Adaptor class 2013-12-18 12:26:21 -08:00
bin Templating for generating adaptors in place 2013-12-03 13:08:24 -08:00
dist Make even shorter syntax by removing redundant Adaptors and Drivers 2013-12-15 23:08:34 -08:00
examples Merge pull request #54 from hybridgroup/21-beaglebone-adaptor 2013-12-08 15:41:04 -08:00
src Match the new adaptor name in generated files 2013-12-16 11:22:20 -08:00
test Add tests for Adaptor class 2013-12-18 12:26:21 -08:00
.gitignore Initial commit 2013-10-17 23:55:48 -07:00
.jshintrc Initial commit 2013-10-17 23:55:48 -07:00
.travis.yml Do not run travisci on site code 2013-11-15 09:44:23 -08:00
CONTRIBUTORS.md Add contributors list 2013-11-01 17:53:17 -07:00
Gruntfile.js Compile literate coffeescript 2013-11-05 15:09:37 -08:00
LICENSE Adding a test robot method 2013-10-18 22:32:23 -07:00
README.md Add info for release 0.8.0 2013-12-16 11:25:32 -08:00
package.json WIP on refactoring adaptor/driver base classes 2013-12-15 10:52:09 -08:00

README.md

Cylon.js

http://cylonjs.com

Cylon.js is a JavaScript framework for robotics and physical computing using Node.js.

It provides a simple, yet powerful way to create solutions that incorporate multiple, different hardware devices at the same time.

Want to use Ruby on robots? Check out our sister project Artoo (http://artoo.io).

Want to use the Go programming language to power your robots? Check out our sister project Gobot (http://gobot.io).

Build Status

Examples:

Basic

Arduino with an LED, using the Firmata protocol.

The example below connects to an Arduino, and every second turns the LED either on, or off.

The example requires that the Arduino has the Firmata sketch installed, and that it is connected on the port /dev/ttyACM0. You need to install Firmata on your Arduino, and to change the port parameter to match the port that your system is actually using.

Make sure to upload the "Standard Firmata" sketch or an equivalent Firmata sketch to your Arduino first. Without that code running on the Arduino, Firmata can't communicate with Cylon. You can find the example sketch in your Arduino software under "Examples > Firmata > StandardFirmata".

JavaScript:
var Cylon = require("cylon");

// Initialize the robot
var robot = Cylon.robot({
  // Change the port to the correct port for your Arduino.
  connection: { name: 'arduino', adaptor: 'firmata', port: '/dev/ttyACM0' },
  device: { name: 'led', driver: 'led', pin: 13 },

  work: function(my) {
    // we do our thing here
    every((1).second(), function() { my.led.toggle(); });
  }
});

// start working
robot.start();
CoffeeScript:
Cylon = require "cylon"

# Initialize the robot
robot = Cylon.robot
  connection:
    name: 'arduino', adaptor: 'firmata', port: '/dev/ttyACM0'

  device:
    name: 'led', driver: 'led', pin: 13

  work: (my) ->
    # we do our thing here
    every 1.second(), -> my.led.toggle()

robot.start()

Parrot ARDrone 2.0

JavaScript:
var Cylon = require('../..');

Cylon.robot({
  connection: { name: 'ardrone', adaptor: 'ardrone', port: '192.168.1.1' },
  device: { name: 'drone', driver: 'ardrone' },

  work: function(my) {
    my.drone.takeoff();
    after(10..seconds(), function() { my.drone.land(); });
    after(15..seconds(), function() { my.drone.stop(); });
  }
}).start();
CoffeeScript:
Cylon = require '../..'

Cylon.robot
  connection: { name: 'ardrone', adaptor: 'ardrone', port: '192.168.1.1' }
  device: { name: 'drone', driver: 'ardrone' }

  work: (my) ->
    my.drone.takeoff()
    after 10.seconds(), -> my.drone.land()
    after 15.seconds(), -> my.drone.stop()

.start()

Note: before running any examples in the examples/ dir from source, make sure to compile using grunt coffee first.

Hardware Support

Cylon.js has a extensible system for connecting to hardware devices. The following robotics, physical computing, or software platforms are currently supported:

Support for many devices that use General Purpose Input/Output (GPIO) have a shared set of drivers provded using the cylon-gpio module:

  • GPIO <=> Drivers
    • Analog Sensor
    • Button
    • Continuous Servo
    • LED
    • Motor
    • Maxbotix Ultrasonic Range Finder
    • Servo

Support for devices that use Inter-Integrated Circuit (I2C) have a shared set of drivers provded using the cylon-i2c module:

More platforms and drivers are coming soon...

Getting Started

Installation

All you need to get started is the cylon module:

npm install cylon

Then install modules for whatever hardware support you want to use from your robot. For the example below, an Arduino using the Firmata protocol:

npm install cylon-firmata

CLI

Cylon has a Command Line Interface (CLI) so you can access important features right from the command line.

Usage: cylon [command] [options]

Commands:

  generate <name>        Generates a new adaptor

Options:

  -h, --help     output usage information
  -V, --version  output the version number

Generator

Want to integrate a hardware device we don't have Cylon support for yet? There's a generator for that!

You can easily generate a new skeleton Cylon adaptor to help you get started. Simply run the cylon generate command, and the generator will create a new directory with all of the files in place for your new adaptor module.

$ cylon generate awesome_device
Creating cylon-awesome_device adaptor.
Compiling templates.

$ ls ./cylon-awesome_device
Gruntfile.js
LICENSE
README.md
dist/
package.json
src/
test/

Documentation

We're busy adding documentation to our web site at http://cylonjs.com/ please check there as we continue to work on Cylon.js

If you want to help us with some documentation on the site, you can go to cylonjs.com branch and then, follow the instructions.

Thank you!

Contributing

In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code using Grunt.

Release History

NPM

Version 0.8.0 - Refactored Adaptor and Driver into proper base classes for easier authoring of new modules

Version 0.7.0 - cylon command for generating new adaptors, support code for better GPIO support, literate examples

Version 0.6.0 - API exposes robot commands, fixes issues in driver/adaptor init

Version 0.5.0 - Improve API, add GPIO support for reuse in adaptors

Version 0.4.0 - Refactor proxy in Cylon.Basestar, improve API

Version 0.3.0 - Improved Cylon.Basestar, and added API

Version 0.2.0 - Cylon.Basestar to help develop external adaptors/drivers

Version 0.1.0 - Initial release for ongoing development

License

Copyright (c) 2013 The Hybrid Group. Licensed under the Apache 2.0 license.