gobot

package module
v0.0.0-...-877cd9d Latest Latest
Warning

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

Go to latest
Published: Apr 29, 2014 License: Apache-2.0 Imports: 15 Imported by: 0

README

Gobot

http://gobot.io/

Gobot is a framework and set of libraries 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

Basic

Gobot on Sphero
package main

import (
  "github.com/hybridgroup/gobot"
  "github.com/hybridgroup/gobot-sphero"
)

func main() {

  spheroAdaptor := new(gobotSphero.SpheroAdaptor)
  spheroAdaptor.Name = "Sphero"
  spheroAdaptor.Port = "/dev/rfcomm0"

  sphero := gobotSphero.NewSphero(spheroAdaptor)
  sphero.Name = "Sphero"

  work := func() {
    gobot.Every("2s", func() {
      sphero.Roll(100, uint16(gobot.Rand(360)))
    })
  }

  robot := gobot.Robot{
    Connections: []gobot.Connection{spheroAdaptor},
    Devices:     []gobot.Device{sphero},
    Work:        work,
  }

  robot.Start()
}
Gobot on Arduino
package main

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

func main() {

  firmata := new(gobotFirmata.FirmataAdaptor)
  firmata.Name = "firmata"
  firmata.Port = "/dev/ttyACM0"

  led := gobotGPIO.NewLed(firmata)
  led.Name = "led"
  led.Pin = "13"

  work := func() {
    gobot.Every("1s", func() {
      led.Toggle()
    })
  }

  robot := gobot.Robot{
    Connections: []gobot.Connection{firmata},
    Devices:     []gobot.Device{led},
    Work:        work,
  }

  robot.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 provded 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 provded using the gobot-i2c module:

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

More platforms and drivers are coming soon...

Getting Started

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

Then install additional libraries for whatever hardware support you want to use from your robot. For example, go get -u github.com/hybridgroup/gobot-sphero to use Gobot with a Sphero.

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, use the Api command like this:

  master := gobot.GobotMaster()
  gobot.Api(master)

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

  master := gobot.GobotMaster()
  api := gobot.Api(master)
  api.Port = "4000"
  api.Username = "Gort"
  api.Password = "klaatu"

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.
  • 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 string, f func())

func Api

func Api(bot *Master) *api

func Call

func Call(thing interface{}, method string, params ...interface{}) []reflect.Value

func Every

func Every(t string, f func())

func FieldByName

func FieldByName(thing interface{}, field string) reflect.Value

func FieldByNamePtr

func FieldByNamePtr(thing interface{}, field string) reflect.Value

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 On

func On(c chan interface{}, f func(s interface{}))

func Publish

func Publish(c chan interface{}, 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                 `json:"name"`
	Port      string                 `json:"port"`
	Connected bool                   `json:"Connected"`
	Params    map[string]interface{} `json:"params"`
}

type AdaptorInterface

type AdaptorInterface interface {
	Finalize() bool
	Connect() bool
}

type Connection

type Connection interface {
	Connect() bool
	Finalize() bool
}

type Device

type Device interface {
	Init() bool
	Start() bool
	Halt() bool
}

type Driver

type Driver struct {
	Interval string                      `json:"interval"`
	Pin      string                      `json:"pin"`
	Name     string                      `json:"name"`
	Commands []string                    `json:"commands"`
	Events   map[string]chan interface{} `json:"-"`
}

type DriverInterface

type DriverInterface interface {
	Init() bool
	Start() bool
	Halt() bool
}

type Master

type Master struct {
	Robots []*Robot
	NumCPU int
	Api    *api
}

func GobotMaster

func GobotMaster() *Master

func (*Master) FindRobot

func (m *Master) FindRobot(name string) *Robot

func (*Master) FindRobotConnection

func (m *Master) FindRobotConnection(name string, connection string) *connection

func (*Master) FindRobotDevice

func (m *Master) FindRobotDevice(name string, device string) *device

func (*Master) Start

func (m *Master) Start()

type Robot

type Robot struct {
	Connections   []Connection           `json:"connections"`
	Devices       []Device               `json:"devices"`
	Name          string                 `json:"name"`
	Commands      map[string]interface{} `json:"-"`
	RobotCommands []string               `json:"commands"`
	Work          func()                 `json:"-"`
	// contains filtered or unexported fields
}

func (*Robot) GetConnection

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

func (*Robot) GetConnections

func (r *Robot) GetConnections() []*connection

func (*Robot) GetDevice

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

func (*Robot) GetDevices

func (r *Robot) GetDevices() []*device

func (*Robot) Start

func (r *Robot) Start()

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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