Golang Go语言中有人实现了一个机器人赛跑功能
Hello,大家
这个帖子的内容来自 Vincross (也就是我们自己)的开发者论坛。内容是一个拥有 HEXA 机器人的开发者开发的一个小应用,这个应用让机器人可以随着手机上下甩动的频率而改变爬行速度。原贴是英文的,我们觉得很有意思,所以把帖子翻译成中文。原贴链接就不贴了,怕犯规。 开发使用的是 Golang 语言。咱们就专注于这里面提到的技术吧,因为这个功能的演示和展示需要一个真的 HEXA 机器人。
特别说明:Vincross 拥有使用这个帖子的转载和宣传的权力。
作者:nepasaimerjouer
[帖子]开发了一个纯粹为了比赛的功能
原本我想得是开发一个 skill,可以让 HEXA 能陪我外出散步,无论我想慢走或者是跑步,它都能跟上我的步伐。而当我停下的时候,HEXA 也会停下来,它能根据我跑步的颠簸来调整他移动的快慢。 但没想到我做出的功能展示给我的同事后,他们觉得这个功能可以用于 HEXA 之间的赛跑——没有人类什么事了!可惜,我以及我们公司只有一台 HEXA,所以为了验证这个 skill 的实用性,我会尽快把它上传到 skill store。希望有其他人来挑战我,以及让我赢得那 300 美金。
好了,回归正题,来说说我怎么开发的。 首先我按照官网的说明运行起来了“ hello world ”。通过这个 skill 我了解到 skill 的内部结构:两个文件夹(remote/robot),还有一个 json 文件(manifest.json)。我对 golang 和 js 都不是很熟,但是很快就找到了 MIND SDK 的 hexabody 库里面的 WalkContinuously。
`func WalkContinuously(direction, speed float64) error`
我研究了一下它,发现真正掌握它还得边尝试边摸索,后边会说到具体问题。
我 google 到了 js 的一个库( library )(deviceMotion),它可以用来获取到手机的摇摆速度(shake speed)。我把其中相关的代码搬到了 remote 文件夹下面的 html 里面,并且在里面添加了一个简单的 html page(一个开始按钮,一个定时器,一个 label 用来展示摇晃手机的速度)。接下来使用 MIND SDK 里面的(sendData/OnRecvString)方法实现了 js 和 golang 的交互,传递一个 speed value 给 WalkContinuously function,speed value 的大小会控制 hexa 行走速度的快慢。
在这个过程中我遇到了一些困难,比如说官网并没有给 WalkContinuously/sendData/sendJSON 提供参数( parameter )说明和示例,导致我无从得知机器人的最大速度值和其他两个方法的使用场景。还有在执行 mind build 命令的时候,无法正常执行,我是通过重启 docker 才得以恢复正常。
不过最终结果还挺有意思的,你只需要甩甩手机,HEXA 就会开始向前爬。你甩得越迅速,HEXA 爬得越快。可以想像如果我有两台 HEXA,我会和同事竞赛,看谁控制的 HEXA 会跑赢。而我之前期待的带着 HEXA 去森林散步则遇到了困难,因为除非我选了一条没有“陷阱”的直线在走,否则 HEXA 自己会选择一条它的路。我得不时回头看着它摔进树坑,翻下路基,我变成了机器人保姆(自愿的)。
Golang Go语言中有人实现了一个机器人赛跑功能
更多关于Golang Go语言中有人实现了一个机器人赛跑功能的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于Golang Go语言中有人实现了一个机器人赛跑功能的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
在Golang中实现机器人赛跑功能是一个既有趣又富有挑战性的项目,它涵盖了并发编程、数据结构、以及可能的游戏逻辑等多个方面。下面是一些关键点,可以帮助你理解和实现这个功能:
-
并发控制:Golang以其强大的并发处理能力著称,可以使用goroutines和channels来实现多个机器人的并发赛跑。每个机器人可以作为一个goroutine运行,通过channel进行同步和通信。
-
数据结构:为了存储和管理机器人的状态(如位置、速度等),可以使用切片(slice)或映射(map)。这些数据结构应该支持高效的读写操作,以确保程序的性能。
-
游戏逻辑:实现机器人赛跑的核心是游戏逻辑,包括如何更新机器人的位置、如何检测终点、如何处理碰撞等。这些逻辑需要精心设计,以确保游戏的公平性和趣味性。
-
可视化:虽然Golang本身不是一种图形编程语言,但你可以使用第三方库(如Ebiten)来实现简单的图形界面,从而直观地展示机器人赛跑的过程。
-
优化和测试:在实现功能后,不要忘记对代码进行优化和测试。确保程序在不同条件下都能稳定运行,并且性能良好。
综上所述,实现机器人赛跑功能需要综合运用Golang的多个特性,并且需要一定的编程经验和创新思维。如果你对这个项目感兴趣,不妨动手尝试一下,相信你会在过程中学到很多有用的知识。