小凌派鸿蒙社区
直播中

HonestQiao

8年用户 517经验值
擅长:嵌入式技术
私信 关注
[经验]

【小凌派RK2206开发板试用体验】小凌派手势应用之原力控制星球大战BB-8机器人

基础控制演示

在上一篇文章中,我分享了 小凌派隔空操作迪文COF智能屏 ,这次再给大家分享一个更有趣的智能手势应用----小凌派RK2206开发板赋予你原力,隔空控制星球大战BB-8机器人。

愿原力与你同在!

在这篇文章中,你将会了解到如下的信息:
  • 人气超高的星球大战之BB-8机器人
  • 控制BB-8机器人的服务工具
  • 小凌派RK2206开发板之智能手势
  • 小凌派之OpenHARMony 无线联网
  • 小凌派之OpenHarmony MQTT连接
  • 小凌派手势控制BB-8机器人

本文中,涉及到的代码全部开源,代码库如下:

一、人气超高的星球大战之BB-8机器人
星球大战系列电影之中,有两个少有的几乎出现于所有星球大战系列电影的角色,那就是R2-D2和C-3PO:
81HCJGn4HWL._AC_SL1500_.jpg

而在2015年的宇宙史诗电影《STAR WARS:原力觉醒》中登场的BB-8球型机器人,虽然是后辈,但其热度,快速赶超两位前辈,成为铁杆星战迷的最爱之一:
star-wars-episode-vii-bb-8-i30595.jpg Sideshow-BB-8-and-Rey-Statues-003.jpg

万万没想到,接手星球大战的迪斯尼,居然推出了同款玩具:
038qCvIzGysbCQmRi5Urmjr-11.png
狠狠的掏了我这个老星战迷的腰包。如果上天再给我一次机会,我一定不会后悔第一时间抢到了BB-8机器人!!!
BB-8套装.jpeg

3502ee69e47bd7e6b89aa03f4fb899ca.gif

二、控制BB-8机器人的服务工具
通常情况下,要控制BB-8,需要使用专门的手机App,或者使用Sphero的开发工具。
operasoftware/bb8 实现了一个网页界面的基础控制功能,HonestQiao/bb8 在此基础上进行了完善,增加了方向键按键控制功能,并实现了WebSocket、MQTT支持,从而使得其他设备,可以通过WebSocket和MQTT,来间接控制BB-8。
进一步的,我开发了转发工具,为 HonestQiao/bb8 提供完整WEB运行环境,并对外提供TCP Socket、WebSocket、MQTT控制能力,任何能够使用TCP Socket、WebSocket、MQTT的设备、程序等,均可以控制BB-8。
关于该工具的具体使用,可以查看: 星球大战BB-8机器人控制测试与转发工具

网页控制界面:
3.connect_BB-8_MQTT.png

指令转发界面:
4.WebPanel_test.png

最终,小凌派RK2206开发板将会通过MQTT,根据识别到的手势,发送对应的指令给BB-8,从而控制BB-8机器人。

三、小凌派RK2206开发板之智能手势
关于开发板对智能手势的具体支持,可以查看: 小凌派-RK2206开发板E53模块开发——智能手势
e53_sg01_resource_map.png

该智能手势扩展板能够识别的手势,有上下左右、靠近/离开、顺时针、逆时针、摆动。
其具体的代码,在 vendor / lockzhiner / rk2206 / samples / c6_e53_gesture_sensor 目录中,我们可以查看具体的处理细节:
手势识别代码.png
在该代码中,通过 e53_gs_get_gesture_state()接口函数,从手势传感器PAJ7620U2读取当前识别到的手势,然后输出,并点亮扩展板上对应的LED。
在后续的代码中,将会基于上面的代码,使用上下左右控制BB-8的运动,使用靠近来变换BB-8的灯光颜色。

四、小凌派之OpenHarmony无线联网
在RK2206开发板OpenHarmony的samples中,没有直接提供WiFi连接的实例。
从 vendor / lockzhiner / rk2206 / samples / d1_iot_mqtt 中,我们可以得到对应的调用处理方式,实际上,只要下面一行代码,就会自动启用WiFi连接功能:
  1. SetWifiModeOn();

该接口具体定义,在如下代码中:
WiFi连接.png

我们还需要到该文件的头部,修改SSID和PASSWORD的定义,就是我们要连接的无线的名称和密码:
WiFI定义.png

设置好对应的SSID和PASSWORD,在我们的代码中,调用SetWifiModeOn(),就能具有网络功能了。

五、小凌派之OpenHarmony MQTT连接
在 vendor / lockzhiner / rk2206 / samples / d1_iot_mqtt 中,我们可以了解到使用mqtt服务的细节:
MQTT.png
在上述代码,我们重点关注如下的接口调用:
  • NetworkInit(&network):初始化网络句柄
  • NetworkConnect(&network, "192.168.0.107", 1883):连接到mqtt服务端口
  • MQTTClientinit(&client, &network...):初始化MQTT CLient
  • MQTTConnect(&client, &data):开启MQTT服务
  • MQTTSubscribe(&client, "substopic"...):订阅TOPIC,用于接收
  • MQTTPublish(&client, "IOT_MQTT", &message):发布TOPIC,用于发送数据
通过这些接口,我们就能够使用MQTT服务来收发数据了。

在使用MQTT服务之前,我们需要先有mqtt服务端,通常有下面的两种方式:
获得MQTT服务端后,我们可以使用如下的工具进行测试:

MQTT客户端.png
其具体使用,可查看上述的 快速开始使用 EMQX

配置并编译 vendor / lockzhiner / rk2206 / samples / d1_iot_mqtt 下载到开发板以后,我们可以在MQTT客户端,给 substopic 这个主题发送指令,开发板就会收到;同时,如果订阅 IOT_MQTT ,就能收到开发板发送出来的信息了。

六、小凌派手势控制BB-8机器人
在以上智能手势识别、WiFi联网、MQTT使用的基础上,我们就可以结合起来,进行BB-8的控制了。
核心控制部分的代码如下:
核心代码.jpg

在上述代码中,通过手势传感器,获得当前的手势,如果检测到了上下左右手势,就发送move指令;如果检测到了靠近手势,就发送color指令。

控制BB-8时,使用的MQTT的TOPIC为device/BB-8/command,可以通过MQTT客户端给该TOPIC发送指令,检查控制是否生效。

BB-8受控运动时,使用的是直角坐标系,以默认中心点(150,150)为基础在第一象限运动,发送移动后的坐标,其离中心点越远,则移动的速度越快,时间越长。
因此,根据识别到的手势,具体设置的情况如下:
  • 上:x保持不变,y-=50,发送move指令
  • 下:x保持不变,y+=50,发送move指令
  • 左:y保持不变,x-=50,发送move指令
  • 右:y保持不变,x+=50,发送move指令
  • 靠近:灯光颜色索引c_idx++,发送color指令

详细的完整代码实例,可以查看:小凌派手势应用之原力控制星球大战BB-8机器人实例

通过以上的各项关联,我们就可以像星球大战中的绝地大师那样,使用原力,隔空御物,控制BB-8机器人啦。
具体控制效果,请查看下面的视频:

愿原力与你同在!

完整控制演示

回帖(3)

小助手

2022-5-11 14:36:25
赞赞赞赞
举报

手托初梦

2022-5-11 14:44:00
梦幻联动
举报

jf_78285980

2022-5-11 17:12:35
大佬,膜拜一下
举报

更多回帖

发帖
×
20
完善资料,
赚取积分