写点什么

仿生智能 | 初号机的成长之路序章

用户头像
九叔
关注
发布于: 2020 年 10 月 24 日
仿生智能 | 初号机的成长之路序章

前言

人类对未知的事物总是心生敬畏,这源于恐惧,与生俱来。相信每个男人,生命中都曾有过一段难忘的时光,一段属于机器人的匆匆岁月。依稀记得儿时放学,总想早早溜回家,守候在电视机旁,手捧碗筷,目不转睛地盯着电视中那些高大威猛的杀戮机器。魔神英雄坛(魔神英雄伝ワタル)、高达(ガンダム)、宇宙骑士(テッカマンブレード),请允许我把 EVA 新世纪福音战士(新世紀エヴァンゲリオン)也列入其中,尽管长大后才深知“人类补完计划”的深奥,但不得不说,动漫对我的影响至深,甚至,入眠时偶尔也曾幻想,自己有一天也能操纵着那台仅属于自己的机器人,维护着某种意义和层面上的和平,但醒来后才发现,这一切原来仅是一场梦,是那样的漫无边际,不切实际。


工作后,或许,我的心态或多或少产生了一些变化,至少,变得不再那么纯粹,但唯一不变的,是儿时心中的那个梦,Robot 梦。介于当下人类科技发展的缓慢,除开 Boston Dynamics 实验室级别的仿生机器人,消费级市场几乎是死一般的寂静。19 年的夏天,偶然的一次邂逅,意外发现了一个异形怪物,极具科幻的外观,犹如那未知的地外文明使者,令人着迷。

这不是一台玩具

本文的主角,并不是某项技术,也不是某种概念,而是实体,HEXA 仿生机器人(我的 Robot 叫做“初号机”),如图 1 所示。这是可编程机器人吗?是的,这是一台专用于编程的仿生机器人它诞生的初衷,并不是陪小孩、逗猫狗,纯粹是科研。尽管它缺省支持通过手机 APP 中的内置程序,做出一些简单或复杂如杂耍般的动作,但我相信只需要 10 分钟,你就会感觉到无聊,甚至出售它。因此,通过编程来赋予它灵魂,探索未知,以及帮助它成长才有意义,甚至,你还可以通过它来提升你的编程兴趣(前提是你得会一点 GO)。

图1 整体外观

第一个机器人程序

关于产品设计,我就不多说了,毕竟不是测评。我简单阐述下“初号机”自身所包含的一些硬件结构,比如:测距传感器、红外发射器、相机一应俱全,通过 USB/ADC 等接口,开发人员还可以进行自定义硬件扩展,满足探索过程中各式各样的需求。接下来要做的事情,就是利用“初号机”自带的测距传感器来编写一个检测 &避开路障的 Skill 程序,实际上,官网上各种示例,以及 GIthub 上各种有趣的 Skills 库还是非常完善和丰富,这一点对刚接触机器人,以及想编写机器人程序的开发人员是非常友好的。关于相关 SDK 的安装,大家可以自行参考官网示例


首先,我们需要创建相应的 Skill 工程,示例 1-1:

mind init my-skillcd my-skill
复制代码


编辑/robot/src/my-skill.go 文件,在各个函数中添加我们所需要的逻辑功能,示例 1-2:

func newDirection(direction float64, degrees float64) float64 {  return math.Mod(direction+degrees, 360) * -1//切换行走方向}
func (d *SensorWalkSkill) OnStart() { //启动各项传感器 hexabody.Start() distance.Start() hexabody.Stand()}
func (d *SensorWalkSkill) OnClose() { //断开连接时关闭各项传感器 hexabody.Close() distance.Close()}
func (d *SensorWalkSkill) OnConnect() { direction := 0.0 hexabody.MoveHead(0, 0)//设置视角 hexabody.WalkContinuously(0, 0.5)//每秒0.5cm速度前行 //当离路障只有半米时180度掉头向后走 for { dist, _ := distance.Value() log.Info.Println("Distance: ", dist) if dist < 500 { hexabody.StopWalkingContinuously() hexabody.Relax() time.Sleep(2 * time.Second) direction = newDirection(direction, 180) hexabody.MoveHead(direction, 0) time.Sleep(time.Second) hexabody.WalkContinuously(0, 0.5) time.Sleep(time.Second) } time.Sleep(500 * time.Millisecond) }}
func (d *SensorWalkSkill) OnDisconnect() { hexabody.StopWalkingContinuously() hexabody.Relax()}
复制代码


实际测试过程中,“初号机”的最快步行速度为 1.5cm/s,相对还是比较慢的,但是看着它傻傻前行的步伐,内心仍是充满窃喜的,关于“初号机”后续的 Skill 开发进展,待我空闲时再和大家分享。


至此,本文内容全部结束。如果在阅读过程中有任何疑问,欢迎加入微信群聊和小伙伴们一起参与讨论。

推荐文章:

码字不易,欢迎转发

发布于: 2020 年 10 月 24 日阅读数: 163
用户头像

九叔

关注

阿里巴巴 高级技术专家 2020.03.25 加入

GIAC全球互联网架构大会讲师,《超大流量分布式系统架构解决方案》、《人人都是架构师》、《Java虚拟机精讲》书籍作者

评论

发布
暂无评论
仿生智能 | 初号机的成长之路序章