【Robotics】Gobotを使ってみた

Gobot は Go で書かれたロボティクスのためのフレームワークです。
Arduino, ARDrone, BeagleBoneBlackなど10を超えるH/Wに対応しています。

gobot

Photo

Gobotをインストールする

環境はOSX 10.9.3です。Goがインストールされていることを確認します。

$ go version
go version go1.2.1 darwin/amd64

環境変数を設定します。GOPATHは任意のディレクトリにします。

export GOPATH=~/.golang
export GOROOT=/opt/local/go
export PATH=$PATH:$GOROOT/bin
# check env
$ go env

Gobotのソースコードを取得します。

$ go get -u github.com/hybridgroup/gobot
$ go get -u github.com/bmizerany/pat
# 以下はCLIでcommandからskeleton-projectを生成するのに必要です。
$ go get -u github.com/hybridgroup/gobot/gobot

CLIを確認します。

$ gobot -v
gobot version 0.1

generateコマンドでskeleton-projectを作成します。

$ gobot generate julius
$ ls
LICENSE                 julius_adaptor.go       julius_driver.go
README.md               julius_adaptor_test.go  julius_driver_test.go
$ cd $GOPATH/src/example
$ ln -s ~/path/to/your/julius/ gobot-julius

Gobotを使ってみる

先程作ったskeleton-projectに接続するプログラム(sample.go)を書きます。

package main

import (
	"fmt"
	"github.com/hybridgroup/gobot"
	"github.com/hybridgroup/gobot/api"
	"github.com/example/gobot-julius"
)

func main() {
	master := gobot.NewGobot()
	api.NewAPI(master).Start()

	juliusAdaptor := julius.NewJuliusAdaptor("julius-a01")
	juliusDriver := julius.NewJuliusDriver(juliusAdaptor, "julius-d01")

	master.AddRobot(
		gobot.NewRobot(
			"sample",
			[]gobot.Connection{juliusAdaptor},
			[]gobot.Device{juliusDriver},
			func() {
				fmt.Println("work")
			}))

	master.Start()
}

実行すると3000portでAPI-Serverが動きます。


$ go run sample.go 
2014/07/13 14:28:42 Initializing API on :3000...
2014/07/13 14:28:42 Initializing Robot sample ...
2014/07/13 14:28:42 Initializing connections...
2014/07/13 14:28:42 Initializing connection julius-a01 ...
2014/07/13 14:28:42 Initializing devices...
2014/07/13 14:28:42 Initializing device julius-d01 ...
2014/07/13 14:28:42 Starting Robot sample ...
2014/07/13 14:28:42 Starting connections...
2014/07/13 14:28:42 Starting connection julius-a01...
2014/07/13 14:28:42 Starting devices...
2014/07/13 14:28:42 Starting device julius-d01...
2014/07/13 14:28:42 Starting work...
work
2014/07/13 14:28:42 WARNING: API using insecure connection. We recommend using an SSL certificate with Gobot.
2014/07/13 14:29:00 Error serving static file: Asset favicon.ico not found
2014/07/13 14:29:00 Error serving static file: Asset favicon.ico not found

RESTful APIとなっていて,GETリクエストに対してskeleton-projectに関する情報のJSONが返ってきます。

# access https://localhost:3000/
{
    "robots": [
        {
            "name": "sample",
            "commands": [],
            "connections": [
                {
                    "name": "julius-a01",
                    "port": "",
                    "adaptor": "julius.JuliusAdaptor"
                }
            ],
            "devices": [
                {
                    "name": "julius-d01",
                    "driver": "julius.JuliusDriver}}",
                    "connection": {
                        "name": "julius-a01",
                        "port": "",
                        "adaptor": "julius.JuliusAdaptor"
                    },
                    "commands": []
                }
            ]
        }
    ],
    "commands": []
}


[1] gobotは 2014/07/13時点で最新はver0.6.1です。(github)

* この記事はkarota-projectの活動に関する記事です。