Я недавно обнаружил потрясающую библиотеку гоботов , которая также взаимодействует с BB8 от Sphero.Я пытаюсь заставить робота двигаться по кругу, и, хотя BB8 ведет себя как положено, я получаю сообщения об ошибках в консоли.
Вот функция, которую я использую, чтобы заставить BB8 двигаться по кругу:
func circles(driver *bb8.BB8Driver, steps float64) {
rotateBy := math.Floor(360.0 / steps)
currentAngle := 5.0
directionInterval := 300
for i := 0; i < int(steps); i++ {
gobot.After(time.Millisecond*time.Duration(directionInterval), func() {
driver.Roll(80, uint16(int(currentAngle)%360))
currentAngle+=rotateBy
directionInterval+=directionInterval
})
}
gobot.After(time.Millisecond*time.Duration(directionInterval+500), func() {
driver.Halt()
})
}
И это рабочая программа:
package main
import (
"math"
"os"
"gobot.io/x/gobot"
"gobot.io/x/gobot/platforms/ble"
"gobot.io/x/gobot/platforms/sphero/bb8"
)
func main() {
bleAdaptor := ble.NewClientAdaptor(os.Args[1])
bb := bb8.NewDriver(bleAdaptor)
work := func() {
circles2(bb, 50)
}
robot := gobot.NewRobot("bb",
[]gobot.Connection{bleAdaptor},
[]gobot.Device{bb},
work,
)
robot.Start()
}
Когда я запускаю это, робот делает то, что я хочу.Тем не менее, я неоднократно получаю одно и то же сообщение об ошибке в консоли, в котором говорится, что цикл for перегружает очередь сообщений:
ERR att client req: невозможно поставить в очередь входящее уведомление.программа 34 [выполняется]: время выполнения / debug.Stack (0x0, 0x0, 0x0) /usr/lib/go-1.7/src/runtime/debug/stack.go:24 + 0x84 github.com/mgutz/logxi/v1.(* HappyDevFormatter) .getLevelContext (0x1056a7e0, 0x3, 0x106418a0, 0x0, 0x0, 0x0, 0x0, 0x1056a794, 0x5) /path/to/dir/bb8/src/github.com/go/ble/ble/uxclient.go: 551 + 0x930, созданный github.com/go-ble/ble/linux/gatt.NewClient /path/to/dir/bb8/src/github.com/go-ble/ble/linux/gatt/client.go: 25 + 0x124
Мне интересно, есть ли лучший подход, позволяющий избежать сообщений об ошибках, поскольку мои знания о Go все еще довольно ограничены.Любые предложения и комментарии приветствуются!