gobot

package module
v0.0.0-...-d941a39 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 18, 2014 License: Apache-2.0 Imports: 12 Imported by: 0

README

Gobot

http://gobot.io/

Gobot is a framework using the Go programming language (http://golang.org/) for robotics, physical computing, and the Internet of Things.

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

Want to use Ruby or Javascript on robots? Check out our sister projects Artoo (http://artoo.io) and Cylon.js (http://cylonjs.com/)

Build Status Coverage Status

Examples

Gobot with Arduino
package main

import (
  "github.com/hybridgroup/gobot"
  "github.com/hybridgroup/gobot/platforms/firmata"
  "github.com/hybridgroup/gobot/platforms/gpio"
  "time"
)

func main() {
  gbot := gobot.NewGobot()

  adaptor := firmata.NewFirmataAdaptor("myFirmata", "/dev/ttyACM0")
  led := gpio.NewLedDriver(adaptor, "myLed", "13")

  work := func() {
    gobot.Every(1*time.Second, func() {
      led.Toggle()
    })
  }

  gbot.Robots = append(gbot.Robots,
    gobot.NewRobot("blink", []gobot.Connection{adaptor}, []gobot.Device{led}, work))

  gbot.Start()
}
Gobot with Sphero
package main

import (
  "github.com/hybridgroup/gobot"
  "github.com/hybridgroup/gobot/platforms/sphero"
  "time"
)

func main() {
  gbot := gobot.NewGobot()

  adaptor := sphero.NewSpheroAdaptor("Sphero", "/dev/rfcomm0")
  ball := sphero.NewSpheroDriver(adaptor, "sphero")

  work := func() {
    gobot.Every(3*time.Second, func() {
      ball.Roll(30, uint16(gobot.Rand(360)))
    })
  }

  gbot.Robots = append(gbot.Robots,
    gobot.NewRobot("sphero", []gobot.Connection{adaptor}, []gobot.Device{ball}, work))

  gbot.Start()
}

Hardware Support

Gobot has a extensible system for connecting to hardware devices. The following robotics and physical computing platforms are currently supported:

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

  • GPIO <=> Drivers
    • Analog Sensor
    • Button
    • Digital Sensor
    • LED
    • Motor
    • Servo

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

  • I2C <=> Drivers
    • BlinkM
    • HMC6352
    • Wii Nunchuck Controller

More platforms and drivers are coming soon...

Getting Started

Install Gobot with: go get -u github.com/hybridgroup/gobot

API:

Gobot includes a RESTful API to query the status of any robot running within a group, including the connection and device status, and execute device commands.

To activate the API, require the github.com/hybridgroup/gobot/api package and instantiate the API like this:

  master := gobot.NewGobot()
  api.NewAPI(master).Start()

You can also specify the api host and port, and turn on authentication:

  master := gobot.NewGobot()
  server := api.NewAPI(master)
  server.Port = "4000"
  server.Username = "Gort"
  server.Password = "klaatu"
  server.Start()

In order to use the robeaux AngularJS interface with Gobot you simply clone the robeaux repo and place it in the directory of your Gobot program. The robeaux assets must be in a folder called robeaux.

Documentation

We're busy adding documentation to our web site at http://gobot.io/ please check there as we continue to work on Gobot

Thank you!

Contributing

  • All active development is in the dev branch. New or updated features must be added to the dev branch. Hotfixes will be considered on the master branch in situations where it does not alter behaviour or features, only fixes a bug.
  • All patches must be provided under the Apache 2.0 License
  • Please use the -s option in git to "sign off" that the commit is your work and you are providing it under the Apache 2.0 License
  • Submit a Github Pull Request to the appropriate branch and ideally discuss the changes with us in IRC.
  • We will look at the patch, test it out, and give you feedback.
  • Avoid doing minor whitespace changes, renamings, etc. along with merged content. These will be done by the maintainers from time to time but they can complicate merges and should be done seperately.
  • Take care to maintain the existing coding style.
  • golint and go fmt your code.
  • Add unit tests for any new or changed functionality.
  • All pull requests should be "fast forward"
    • If there are commits after yours use “git rebase -i <new_head_branch>”
    • If you have local changes you may need to use “git stash”
    • For git help see progit which is an awesome (and free) book on git

License

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

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func After

func After(t time.Duration, f func())

After triggers the passed function after `t` duration.

func Every

func Every(t time.Duration, f func())

Every triggers f every `t` time until the end of days.

func Expect

func Expect(t *testing.T, a interface{}, b interface{})

func FromScale

func FromScale(input, min, max float64) float64

func NewConnection

func NewConnection(adaptor AdaptorInterface, r *Robot) *connection

func NewDevice

func NewDevice(driver DriverInterface, r *Robot) *device

func NewTestAdaptor

func NewTestAdaptor(name string) *testAdaptor

func NewTestDriver

func NewTestDriver(name string, adaptor *testAdaptor) *testDriver

func NewTestStruct

func NewTestStruct() *testStruct

func On

func On(e *Event, f func(s interface{}))

func Publish

func Publish(e *Event, val interface{})

func Rand

func Rand(max int) int

func ToScale

func ToScale(input, min, max float64) float64

Types

type Adaptor

type Adaptor struct {
	Name      string
	Port      string
	Connected bool
	Params    map[string]interface{}
}

type AdaptorInterface

type AdaptorInterface interface {
	Finalize() bool
	Connect() bool
	// contains filtered or unexported methods
}

type Connection

type Connection interface {
	Connect() bool
	Finalize() bool
	// contains filtered or unexported methods
}

type Device

type Device interface {
	Start() bool
	Halt() bool
	// contains filtered or unexported methods
}

type Driver

type Driver struct {
	Adaptor  AdaptorInterface
	Interval time.Duration
	Pin      string
	Name     string
	Commands map[string]func(map[string]interface{}) interface{}
	Events   map[string]*Event
}

func (*Driver) AddCommand

func (d *Driver) AddCommand(name string, f func(map[string]interface{}) interface{})

type DriverInterface

type DriverInterface interface {
	Start() bool
	Halt() bool
	// contains filtered or unexported methods
}

type Event

type Event struct {
	Chan      chan interface{}
	Callbacks []func(interface{})
}

func NewEvent

func NewEvent() *Event

func (*Event) Read

func (e *Event) Read()

func (*Event) Write

func (e *Event) Write(data interface{})

type Gobot

type Gobot struct {
	Robots   []*Robot
	Commands map[string]func(map[string]interface{}) interface{}
	// contains filtered or unexported fields
}

func NewGobot

func NewGobot() *Gobot

func (*Gobot) AddCommand

func (g *Gobot) AddCommand(name string, f func(map[string]interface{}) interface{})

func (*Gobot) AddRobot

func (g *Gobot) AddRobot(r *Robot) *Robot

func (*Gobot) Robot

func (g *Gobot) Robot(name string) *Robot

func (*Gobot) Start

func (g *Gobot) Start()

func (*Gobot) ToJSON

func (g *Gobot) ToJSON() *JSONGobot

type JSONConnection

type JSONConnection struct {
	Name    string `json:"name"`
	Port    string `json:"port"`
	Adaptor string `json:"adaptor"`
}

type JSONDevice

type JSONDevice struct {
	Name       string          `json:"name"`
	Driver     string          `json:"driver"`
	Connection *JSONConnection `json:"connection"`
	Commands   []string        `json:"commands"`
}

type JSONGobot

type JSONGobot struct {
	Robots   []*JSONRobot `json:"robots"`
	Commands []string     `json:"commands"`
}

type JSONRobot

type JSONRobot struct {
	Name        string            `json:"name"`
	Commands    []string          `json:"commands"`
	Connections []*JSONConnection `json:"connections"`
	Devices     []*JSONDevice     `json:"devices"`
}

type NullReadWriteCloser

type NullReadWriteCloser struct{}

func (NullReadWriteCloser) Close

func (NullReadWriteCloser) Close() error

func (NullReadWriteCloser) Read

func (NullReadWriteCloser) Read(b []byte) (int, error)

func (NullReadWriteCloser) Write

func (NullReadWriteCloser) Write(p []byte) (int, error)

type Robot

type Robot struct {
	Name     string
	Commands map[string]func(map[string]interface{}) interface{}
	Work     func()
	// contains filtered or unexported fields
}

func NewRobot

func NewRobot(name string, v ...interface{}) *Robot

func NewTestRobot

func NewTestRobot(name string) *Robot

func (*Robot) AddCommand

func (r *Robot) AddCommand(name string, f func(map[string]interface{}) interface{})

func (*Robot) AddConnection

func (r *Robot) AddConnection(c Connection) *connection

func (*Robot) AddDevice

func (r *Robot) AddDevice(d Device) *device

func (*Robot) Connection

func (r *Robot) Connection(name string) *connection

func (*Robot) Connections

func (r *Robot) Connections() connections

func (*Robot) Device

func (r *Robot) Device(name string) *device

func (*Robot) Devices

func (r *Robot) Devices() devices

func (*Robot) Start

func (r *Robot) Start()

func (*Robot) ToJSON

func (r *Robot) ToJSON() *JSONRobot

type Robots

type Robots []*Robot

func (Robots) Each

func (r Robots) Each(f func(*Robot))

func (Robots) Start

func (r Robots) Start()

Directories

Path Synopsis
platforms
i2c

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL