在上一篇文章中,分享了 小凌派隔空操作迪文COF智能屏 ,這次再給大家分享一個更有趣的智能手勢應用----小凌派RK2206鴻蒙開發板賦予你原力,隔空控制星球大戰BB-8機器人。
在這篇文章中,你將會了解到如下的信息:
人氣超高的星球大戰之BB-8機器人
控制BB-8機器人的服務工具
小凌派RK2206開發板之智能手勢
小凌派之OpenHARMony 無線聯網
小凌派之OpenHarmony MQTT連接
小凌派手勢控制BB-8機器人
本文中,涉及到的代碼全部開源,代碼庫如下:
BB-8 網頁控制界面
星球大戰BB-8機器人控制測試與轉發工具
小凌派手勢應用之原力控制星球大戰BB-8機器人實例
人氣超高的星球大戰之BB-8機器人
星球大戰系列電影之中,有兩個少有的幾乎出現于所有星球大戰系列電影的角色,那就是R2-D2和C-3PO:
而在2015年的宇宙史詩電影《STAR WARS:原力覺醒》中登場的BB-8球型機器人,雖然是后輩,但其熱度,快速趕超兩位前輩,成為鐵桿星戰迷的最愛之一:
萬萬沒想到,接手星球大戰的迪斯尼,居然推出了同款玩具:
狠狠的掏了我這個老星戰迷的腰包。如果上天再給我一次機會,我一定不會后悔第一時間搶到了BB-8機器人!!!
控制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機器人控制測試與轉發工具
網頁控制界面:
指令轉發界面:
最終,小凌派RK2206開發板將會通過MQTT,根據識別到的手勢,發送對應的指令給BB-8,從而控制BB-8機器人。
,時長00:12
小凌派RK2206開發板之智能手勢
關于開發板對智能手勢的具體支持,可以查看: 小凌派-RK2206開發板E53模塊開發——智能手勢
該智能手勢擴展板能夠識別的手勢,有上下左右、靠近/離開、順時針、逆時針、擺動。
其具體的代碼,在 vendor / lockzhiner / rk2206 / samples / c6_e53_gesture_sensor 目錄中,我們可以查看具體的處理細節:
在該代碼中,通過 e53_gs_get_gesture_state()接口函數,從手勢傳感器PAJ7620U2讀取當前識別到的手勢,然后輸出,并點亮擴展板上對應的LED。
在后續的代碼中,將會基于上面的代碼,使用上下左右控制BB-8的運動,使用靠近來變換BB-8的燈光顏色。
小凌派之OpenHarmony無線聯網
在RK2206開發板OpenHarmony的samples中,沒有直接提供WIFi連接的實例。
從 vendor / lockzhiner / rk2206 / samples / d1_iot_mqtt 中,我們可以得到對應的調用處理方式,實際上,只要下面一行代碼,就會自動啟用WiFi連接功能:
SetWifiModeOn();
該接口具體定義,在如下代碼中:
我們還需要到該文件的頭部,修改SSID和PASSWORD的定義,就是我們要連接的無線的名稱和密碼:
設置好對應的SSID和PASSWORD,在我們的代碼中,調用SetWifiModeOn(),就能具有網絡功能了。
小凌派之OpenHarmony MQTT連接
在 vendor / lockzhiner / rk2206 / samples / d1_iot_mqtt 中,我們可以了解到使用mqtt服務的細節:
在上述代碼,我們重點關注如下的接口調用:
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服務端,通常有下面的兩種方式:
使用EMQX提供的公共服務:一文了解主流在線公共 MQTT 服務器
自己建立,可以見參考 快速開始使用 EMQX
獲得MQTT服務端后,我們可以使用如下的工具進行測試:
其具體使用,可查看上述的 快速開始使用 EMQX。
配置并編譯 vendor / lockzhiner / rk2206 / samples / d1_iot_mqtt 下載到開發板以后,我們可以在MQTT客戶端,給 substopic 這個主題發送指令,開發板就會收到;同時,如果訂閱 IOT_MQTT ,就能收到開發板發送出來的信息了。
小凌派手勢控制BB-8機器人
在以上智能手勢識別、WiFi聯網、MQTT使用的基礎上,我們就可以結合起來,進行BB-8的控制了。核心控制部分的代碼如下:
在上述代碼中,通過手勢傳感器,獲得當前的手勢,如果檢測到了上下左右手勢,就發送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機器人啦。
-
機器人
+關注
關注
211文章
28418瀏覽量
207097 -
代碼
+關注
關注
30文章
4788瀏覽量
68612 -
智能手勢
+關注
關注
0文章
2瀏覽量
9573 -
小凌派
+關注
關注
0文章
27瀏覽量
1202
發布評論請先 登錄
相關推薦
評論