如何利用手机内置平衡仪来控制机器人行走方向

2017-05-10 11:33:00 +08:00
 Vincross

Hello,大家 这个帖子的内容来自 Vincross (也就是我们自己)的开发者论坛。内容是一个拥有 HEXA 机器人的开发者开发的一个小应用,他使用手机的平衡仪控制 HEXA 行走的方向,例如把手机向着某个方向倾斜,机器人就会朝着那个方向爬过去(见 GIF 图)。原贴是英文的,我们觉得很有意思,所以把帖子翻译成中文。原贴链接就不贴了,怕犯规。 开发使用的是 Golang 语言。 特别说明:Vincross 拥有使用这个帖子的转载和宣传的权力。


标题:Yet Another Controller

by @za4AI

在 HEXA 自带的手机 App 预装应用中,可以在一个类似 PS4 手柄的拨杆界面来遥控 HEXA 行动,能看到实时传回的画面。 我经常玩的一款无人机叫 AirDrone,在它的手机 App 中可以通过倾斜手机来控制无人机的飞行方向,那个功能真的很酷(有真实的操控感),所以自从我收到 HEXA 以来,我就想把那个功能移植过来。

开发步骤

1、拿到 HEXA,首先查阅了 Vincross 官方文档 MIND SDK,作为一个前端开发者,我对 Golang 不是很熟,然而我很快的运行一个 Hello World 项目,并使 HEXA 动了起来!太棒了~ Skill 项目的代码分为两个部分,Robot 端可以开发机器人的实体功能基于 MIND Driver,Remote 部分通过网页端发送数据与 Robot 交互。

2、Mind 系统提供了丰富的 API,其中 hexabody 可以操控机器人的身体,对我开发的 Skill 尤为重要,通过这些函数可以操纵 HEXA 的头部旋转和六支的动作,包括行走、站立、放松、获取方向、设计动作等等。 hexabody.WalkContinuously 函数可以让 HEXA 按照指定的方向和速度不停地行走, 设置第一个参数为 0,HEXA 会随头部的转动自动改变行走方向。再通过 hexabody.MoveHead 函数指定头部方向,便可以根据参数自由行走。

`hexabody.MoveHead(dir, 1)
hexabody.WalkContinuously(0, speed)`

3、网页端 MIND Remote 提供 JS SDK 基于 websocket 向 Robot 端发送数据,借用 html5 的 API (deviceorientation) 实时获取手机设备加速度,按照这个思路即可使用手机重力感应控制 HEXA 机器人。当然我需要对加速度数据进行计算使得变成服务端可读的参数,并针对操控性进行优化。

window.addEventListener("deviceorientation", function(event){
    setMeter(-event.gamma, event.beta)
    computeDir(-event.gamma, event.beta)
    computeSpeed(-event.gamma, event.beta)
})

遇到问题

但在开发过程当中我无法真正知道机器人的地理方向,因为 HEXA 头部的旋转角度是相对于身体旋转的,所以我猜 HEXA 机器人的前方是机器人身体的固定方向。 为此我专门请教了 MIND 的系统的开发者,他们给了我大致相同的回答。如果技术团队能在 MIND 文档标注一下 HEXA 的方向、角度原点,可以帮助开发者解决更多问题。

(题外话,最后 @za4AI 提到的问题,我们已经修改了文档。)

1202 次点击
所在节点    Go 编程语言
1 条回复
Vincross
2017-05-10 14:10:41 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/360327

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX