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进行抗菌抑菌,完成后向后退回原地并降落。