您的位置:

Gobot——全能编程开发工程师

Gobot是一套Go语言编写的开源机器人开发框架,也被认作是大家心目中的“全能编程开发工程师”。因为它几乎可以驱动所有硬件设备,使开发者能够快速地开发出自己的机器人项目。

一、Gobo贴图

Gobo贴图:Gobo,是美国带内燃机车车辆所采用的制动器,在舞台上,gobo代表的是一种传统的投影图像,通常可以为一些艺术舞台增添颜色,那么gobot如何贴上这样的gobo贴图?

首先,我们需要将gobo贴图转化为黑白图片,然后使用Gobot的Display驱动函数进行显示。

package main

import (
    "github.com/hybridgroup/gobot/platforms/raspi"
    "github.com/hybridgroup/gobot/platforms/gpio"
    "github.com/hybridgroup/gobot/platforms/i2c"
    "image"
    _ "image/jpeg"
    _ "image/png"
    "os"
    "time"
)

func main() {
    r := raspi.NewRaspiAdaptor()
    lcd := i2c.NewGroveLcdDriver(r)
    camera := gpio.NewCameraDriver(r, "camera")
    camera.Start()
    time.Sleep(2 * time.Second)
    fd, _ := os.Create("/tmp/gobot.jpg")
    camera.Capture(fd)
    fd.Close()
    time.Sleep(2 * time.Second)
    file, _ := os.Open("/tmp/gobot.jpg")
    img, _, _ := image.Decode(file)
    file.Close()
    g := gpio.NewGroveLedDriver(r, "led", "7")
    g.Start()
    lcd.Start()
    lcd.Clear()
    lcd.Home()
    if gpio.ConvertImageToAscii(img, true) == "" {
        return
    }
    gpio.DisplayImage(img, lcd)
    g.On()
    time.Sleep(5 * time.Second)
    g.Off()
}

代码说明:

该示例代码使用了RaspiAdaptor、GroveLcdDriver、CameraDriver、GroveLedDriver等Gobot的包,这里为一个完整的开发环境,同时使用 image.Decode() 函数将图像转化为标准的image.Image对象,然后使用gpio.ConvertImageToAscii()函数将图像转化为字符画,并在屏幕上显示。

二、Gobo投影机

Gobo投影机:Gobo投影机是一种专门用来投射gobo图案的投影仪。如何使用Gobot控制Gobo投影机呢?

我们需要使用到Gobot的Firmata协议(固件)和标准库代码。首先使用Arduino IDE或者PlatformIO将Firmata固件烧入Uno控制板中。接着,我们需要使用标准库代码进行通信。

package main

import (
    "fmt"
    "github.com/tarm/serial"
)

func main() {
    c := &serial.Config{Name: "/dev/ttyACM0", Baud: 57600}
    s, _ := serial.OpenPort(c)
    buf := []byte{'s', '\n'}
    s.Write(buf)
    buf = []byte{'H', '\n'}
    s.Write(buf)
    buf = []byte{'V', '\n'}
    s.Write(buf)
    buf = []byte{'n', '\n'}
    s.Write(buf)
    buf = make([]byte, 60)
    s.Read(buf)
    fmt.Println(string(buf))
}

代码说明:

该示例代码使用标准库serial进行与硬件设备的通信,通过字节流控制、读取和反馈Controller的状态,进而控制Gobo投影机。其中,'s'表示开始,'H'和'V'分别表示水平和垂直移动,'n'表示结束控制。

三、Gobo同福

Gobo同福:Gobo同福是一款国产的抗菌抑菌特殊材料。如何在Gobot中使用Gobo同福呢?

可将Gobo同福做成一个小碟,放进Gobot机器人手臂的末端,然后使用关节控制机械臂运动。示例代码如下所示:

package main

import "github.com/hybridgroup/gobot/platforms/ardrone"

func main() {
    ardroneAdaptor := ardrone.NewAdaptor()
    drone := ardrone.NewDriver(ardroneAdaptor)

    drone.On(ardrone.SignalTakeoff, func(data interface{}) {
        drone.Hover()
        drone.Forward(10)
        drone.Gobo()
        drone.Backward(10)
        drone.Land()
    })

    drone.Start()
}

代码说明:

该示例代码使用了ArdroneAdaptor和ArdroneDriver,使用Gobot中的Gobo()函数控制机器人运行。机器人起飞后向前飞行,使用Gobo进行抗菌抑菌,完成后向后退回原地并降落。