sphero

package
v0.13.0 Latest Latest
Warning

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

Go to latest
Published: Oct 10, 2016 License: Apache-2.0, Apache-2.0 Imports: 7 Imported by: 0

README

Sphero

Sphero is a sophisticated and programmable robot housed in a polycarbonate sphere shell.

The gobot-sphero adaptor makes it easy to interact with Sphero using Go, once you have your Sphero setup and connected to your computer you can start writing code to make Sphero move, change direction, speed and colors, or detect Sphero events and execute some code when they occur.

Learn more about the Sphero robot from Orbotix here.

How to Install

go get -d -u github.com/hybridgroup/gobot/... && go install github.com/hybridgroup/gobot/platforms/sphero

How To Connect

OSX

In order to allow Gobot running on your Mac to access the Sphero, go to "Bluetooth > Open Bluetooth Preferences > Sharing Setup" and make sure that "Bluetooth Sharing" is checked.

Now you must pair with the Sphero. Open System Preferences > Bluetooth. Now with the Bluetooth devices windows open, smack the Sphero until it starts flashing three colors. You should see "Sphero-XXX" pop up as available devices where "XXX" is the first letter of the three colors the sphero is flashing. Pair with that device. Once paired your Sphero will be accessable through the serial device similarly named as /dev/tty.Sphero-XXX-RN-SPP

Ubuntu

Connecting to the Sphero from Ubuntu or any other Linux-based OS can be done entirely from the command line using Gort CLI commands. Here are the steps.

Find the address of the Sphero, by using:

gort scan bluetooth

Pair to Sphero using this command (substituting the actual address of your Sphero):

gort bluetooth pair <address>

Connect to the Sphero using this command (substituting the actual address of your Sphero):

gort bluetooth connect <address>
Windows

You should be able to pair your Sphero using your normal system tray applet for Bluetooth, and then connect to the COM port that is bound to the device, such as COM3.

How to Use

Example of a simple program that makes the Sphero roll.

package main

import (
	"fmt"
	"time"

	"github.com/hybridgroup/gobot"
	"github.com/hybridgroup/gobot/platforms/sphero"
)

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

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

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

	robot := gobot.NewRobot("sphero",
		[]gobot.Connection{adaptor},
		[]gobot.Device{driver},
		work,
	)

	gbot.AddRobot(robot)

	gbot.Start()
}

Documentation

Overview

Package sphero provides the Gobot adaptor and driver for the Sphero.

Installing:

go get github.com/hybridgroup/gobot/platforms/sphero

Example:

package main

import (
	"fmt"
	"time"

	"github.com/hybridgroup/gobot"
	"github.com/hybridgroup/gobot/platforms/sphero"
)

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

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

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

	robot := gobot.NewRobot("sphero",
		[]gobot.Connection{adaptor},
		[]gobot.Device{driver},
		work,
	)

	gbot.AddRobot(robot)

	gbot.Start()
}

For further information refer to sphero readme: https://github.com/hybridgroup/gobot/blob/master/platforms/sphero/README.md

Index

Constants

View Source
const (
	// event when error encountered
	Error = "error"
	// event when sensor data is received
	SensorData = "sensordata"
	// event when collision is detected
	Collision = "collision"
)

Variables

This section is empty.

Functions

This section is empty.

Types

type CollisionConfig

type CollisionConfig struct {
	// Detection method type to use. Methods 01h and 02h are supported as
	// of FW ver 1.42. Use 00h to completely disable this service.
	Method uint8
	// An 8-bit settable threshold for the X (left/right) axes of Sphero.
	// A value of 00h disables the contribution of that axis.
	Xt uint8
	// An 8-bit settable threshold for the Y (front/back) axes of Sphero.
	// A value of 00h disables the contribution of that axis.
	Yt uint8
	// An 8-bit settable speed value for the X axes. This setting is ranged
	// by the speed, then added to Xt to generate the final threshold value.
	Xs uint8
	// An 8-bit settable speed value for the Y axes. This setting is ranged
	// by the speed, then added to Yt to generate the final threshold value.
	Ys uint8
	// An 8-bit post-collision dead time to prevent retriggering; specified
	// in 10ms increments.
	Dead uint8
}

CollisionConfig provides configuration for the collision detection alogorithm. For more information refer to the official api specification https://github.com/orbotix/DeveloperResources/blob/master/docs/Collision%20detection%201.2.pdf.

func DefaultCollisionConfig

func DefaultCollisionConfig() CollisionConfig

DefaultCollisionConfig returns a CollisionConfig with sensible collision defaults

type CollisionPacket

type CollisionPacket struct {
	// Normalized impact components (direction of the collision event):
	X, Y, Z int16
	// Thresholds exceeded by X (1h) and/or Y (2h) axis (bitmask):
	Axis byte
	// Power that cross threshold Xt + Xs:
	XMagnitude, YMagnitude int16
	// Sphero's speed when impact detected:
	Speed uint8
	// Millisecond timer
	Timestamp uint32
}

CollisionPacket represents the response from a Collision event

type DataStreamingConfig

type DataStreamingConfig struct {
	// Divisor of the maximum sensor sampling rate
	N uint16
	// Number of sample frames emitted per packet
	M uint16
	// Bitwise selector of data sources to stream
	Mask uint32
	// Packet count 1-255 (or 0 for unlimited streaming)
	Pcnt uint8
	// Bitwise selector of more data sources to stream (optional)
	Mask2 uint32
}

DataStreamingConfig provides configuration for Sensor Data Streaming. For more information refer to the official api specification https://github.com/orbotix/DeveloperResources/blob/master/docs/Sphero_API_1.50.pdf page 28

func DefaultDataStreamingConfig

func DefaultDataStreamingConfig() DataStreamingConfig

DefaultDataStreamingConfig returns a DataStreamingConfig with a sampling rate of 40hz, 1 sample frame per package, unlimited streaming, and will stream all available sensor information

type DataStreamingPacket

type DataStreamingPacket struct {
	// 8000 0000h	accelerometer axis X, raw	-2048 to 2047	4mG
	RawAccX int16
	// 4000 0000h	accelerometer axis Y, raw	-2048 to 2047	4mG
	RawAccY int16
	// 2000 0000h	accelerometer axis Z, raw	-2048 to 2047	4mG
	RawAccZ int16
	// 1000 0000h	gyro axis X, raw	-32768 to 32767	0.068 degrees
	RawGyroX int16
	// 0800 0000h	gyro axis Y, raw	-32768 to 32767	0.068 degrees
	RawGyroY int16
	// 0400 0000h	gyro axis Z, raw	-32768 to 32767	0.068 degrees
	RawGyroZ int16
	// 0200 0000h	Reserved
	Rsrv1 int16
	// 0100 0000h	Reserved
	Rsrv2 int16
	// 0080 0000h	Reserved
	Rsrv3 int16
	// 0040 0000h	right motor back EMF, raw	-32768 to 32767	22.5 cm
	RawRMotorBack int16
	// 0020 0000h	left motor back EMF, raw	-32768 to 32767	22.5 cm
	RawLMotorBack int16
	// 0010 0000h	left motor, PWM, raw	-2048 to 2047	duty cycle
	RawLMotor int16
	// 0008 0000h	right motor, PWM raw	-2048 to 2047	duty cycle
	RawRMotor int16
	// 0004 0000h	IMU pitch angle, filtered	-179 to 180	degrees
	FiltPitch int16
	// 0002 0000h	IMU roll angle, filtered	-179 to 180	degrees
	FiltRoll int16
	// 0001 0000h	IMU yaw angle, filtered	-179 to 180	degrees
	FiltYaw int16
	// 0000 8000h	accelerometer axis X, filtered	-32768 to 32767	1/4096 G
	FiltAccX int16
	// 0000 4000h	accelerometer axis Y, filtered	-32768 to 32767	1/4096 G
	FiltAccY int16
	// 0000 2000h	accelerometer axis Z, filtered	-32768 to 32767	1/4096 G
	FiltAccZ int16
	// 0000 1000h	gyro axis X, filtered	-20000 to 20000	0.1 dps
	FiltGyroX int16
	// 0000 0800h	gyro axis Y, filtered	-20000 to 20000	0.1 dps
	FiltGyroY int16
	// 0000 0400h	gyro axis Z, filtered	-20000 to 20000	0.1 dps
	FiltGyroZ int16
	// 0000 0200h	Reserved
	Rsrv4 int16
	// 0000 0100h	Reserved
	Rsrv5 int16
	// 0000 0080h	Reserved
	Rsrv6 int16
	// 0000 0040h	right motor back EMF, filtered	-32768 to 32767	22.5 cm
	FiltRMotorBack int16
	// 0000 0020h	left motor back EMF, filtered	-32768 to 32767	22.5 cm
	FiltLMotorBack int16
	// 0000 0010h	Reserved 1
	Rsrv7 int16
	// 0000 0008h	Reserved 2
	Rsrv8 int16
	// 0000 0004h	Reserved 3
	Rsrv9 int16
	// 0000 0002h	Reserved 4
	Rsrv10 int16
	// 0000 0001h	Reserved 5
	Rsrv11 int16
	// 8000 0000h	Quaternion Q0	-10000 to 10000	1/10000 Q
	Quat0 int16
	// 4000 0000h	Quaternion Q1	-10000 to 10000	1/10000 Q
	Quat1 int16
	// 2000 0000h	Quaternion Q2	-10000 to 10000	1/10000 Q
	Quat2 int16
	// 1000 0000h	Quaternion Q3	-10000 to 10000	1/10000 Q
	Quat3 int16
	// 0800 0000h	Odometer X	-32768 to 32767	cm
	OdomX int16
	// 0400 0000h	Odometer Y	-32768 to 32767	cm
	OdomY int16
	// 0200 0000h	AccelOne	0 to 8000	1 mG
	AccelOne int16
	// 0100 0000h	Velocity X	-32768 to 32767	mm/s
	VeloX int16
	// 0080 0000h	Velocity Y	-32768 to 32767	mm/s
	VeloY int16
}

DataStreamingPacket represents the response from a Data Streaming event

type LocatorConfig

type LocatorConfig struct {
	// Determines whether calibrate commands automatically correct the yaw tare value
	Flags uint8
	// Controls how the X-plane is aligned with Sphero’s heading coordinate system.
	X int16
	// Controls how the Y-plane is aligned with Sphero’s heading coordinate system.
	Y int16
	// Controls how the X,Y-plane is aligned with Sphero’s heading coordinate system.
	YawTare int16
}

LocatorConfig provides configuration for the Location api. https://github.com/orbotix/DeveloperResources/blob/master/docs/Sphero_API_1.50.pdf The current (X,Y) coordinates of Sphero on the ground plane in centimeters.

func DefaultLocatorConfig

func DefaultLocatorConfig() LocatorConfig

DefaultLocatorConfig returns a LocatorConfig with defaults

type SpheroAdaptor

type SpheroAdaptor struct {
	// contains filtered or unexported fields
}

Represents a Connection to a Sphero

func NewSpheroAdaptor

func NewSpheroAdaptor(name string, port string) *SpheroAdaptor

NewSpheroAdaptor returns a new SpheroAdaptor given a name and port

func (*SpheroAdaptor) Connect

func (a *SpheroAdaptor) Connect() (errs []error)

Connect initiates a connection to the Sphero. Returns true on successful connection.

func (*SpheroAdaptor) Disconnect

func (a *SpheroAdaptor) Disconnect() (errs []error)

Disconnect terminates the connection to the Sphero. Returns true on successful disconnect.

func (*SpheroAdaptor) Finalize

func (a *SpheroAdaptor) Finalize() (errs []error)

Finalize finalizes the SpheroAdaptor

func (*SpheroAdaptor) Name

func (a *SpheroAdaptor) Name() string

func (*SpheroAdaptor) Port

func (a *SpheroAdaptor) Port() string

func (*SpheroAdaptor) Reconnect

func (a *SpheroAdaptor) Reconnect() (errs []error)

Reconnect attempts to reconnect to the Sphero. If the Sphero has an active connection it will first close that connection and then establish a new connection. Returns true on Successful reconnection

type SpheroDriver

type SpheroDriver struct {
	gobot.Eventer
	gobot.Commander
	// contains filtered or unexported fields
}

Represents a Sphero

func NewSpheroDriver

func NewSpheroDriver(a *SpheroAdaptor, name string) *SpheroDriver

NewSpheroDriver returns a new SpheroDriver given a SpheroAdaptor and name.

Adds the following API Commands:

	"ConfigureLocator" - See SpheroDriver.ConfigureLocator
	"Roll" - See SpheroDriver.Roll
	"Stop" - See SpheroDriver.Stop
	"GetRGB" - See SpheroDriver.GetRGB
	"ReadLocator" - See SpheroDriver.ReadLocator
	"SetBackLED" - See SpheroDriver.SetBackLED
	"SetHeading" - See SpheroDriver.SetHeading
	"SetStabilization" - See SpheroDriver.SetStabilization
 "SetDataStreaming" - See SpheroDriver.SetDataStreaming
 "SetRotationRate" - See SpheroDriver.SetRotationRate

func (*SpheroDriver) ConfigureCollisionDetection

func (s *SpheroDriver) ConfigureCollisionDetection(cc CollisionConfig)

ConfigureCollisionDetection configures the sensitivity of the detection.

func (*SpheroDriver) ConfigureLocator

func (s *SpheroDriver) ConfigureLocator(d LocatorConfig)

Configures and enables the Locator

func (*SpheroDriver) Connection

func (s *SpheroDriver) Connection() gobot.Connection

func (*SpheroDriver) GetRGB

func (s *SpheroDriver) GetRGB() []uint8

GetRGB returns the current r, g, b value of the Sphero

func (*SpheroDriver) Halt

func (s *SpheroDriver) Halt() (errs []error)

Halt halts the SpheroDriver and sends a SpheroDriver.Stop command to the Sphero. Returns true on successful halt.

func (*SpheroDriver) Name

func (s *SpheroDriver) Name() string

func (*SpheroDriver) ReadLocator

func (s *SpheroDriver) ReadLocator() []int16

ReadLocator reads Sphero's current position (X,Y), component velocities and SOG (speed over ground).

func (*SpheroDriver) Roll

func (s *SpheroDriver) Roll(speed uint8, heading uint16)

Roll sends a roll command to the Sphero gives a speed and heading

func (*SpheroDriver) SetBackLED

func (s *SpheroDriver) SetBackLED(level uint8)

SetBackLED sets the Sphero Back LED to the specified brightness

func (*SpheroDriver) SetDataStreaming

func (s *SpheroDriver) SetDataStreaming(d DataStreamingConfig)

Enables sensor data streaming

func (*SpheroDriver) SetHeading

func (s *SpheroDriver) SetHeading(heading uint16)

SetHeading sets the heading of the Sphero

func (*SpheroDriver) SetRGB

func (s *SpheroDriver) SetRGB(r uint8, g uint8, b uint8)

SetRGB sets the Sphero to the given r, g, and b values

func (*SpheroDriver) SetRotationRate

func (s *SpheroDriver) SetRotationRate(level uint8)

SetRotationRate sets the Sphero rotation rate A value of 255 jumps to the maximum (currently 400 degrees/sec).

func (*SpheroDriver) SetStabilization

func (s *SpheroDriver) SetStabilization(on bool)

SetStabilization enables or disables the built-in auto stabilizing features of the Sphero

func (*SpheroDriver) Start

func (s *SpheroDriver) Start() (errs []error)

Start starts the SpheroDriver and enables Collision Detection. Returns true on successful start.

Emits the Events:

Collision  sphero.CollisionPacket - On Collision Detected
SensorData sphero.DataStreamingPacket - On Data Streaming event
Error      error- On error while processing asynchronous response

func (*SpheroDriver) Stop

func (s *SpheroDriver) Stop()

Stop sets the Sphero to a roll speed of 0

Jump to

Keyboard shortcuts

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