在上一篇文章中,我分享了 小凌派隔空操作迪文COF智能屏 ,這次再給大家分享一個(gè)更有趣的智能手勢應(yīng)用----小凌派RK2206鴻蒙開發(fā)板賦予你原力,隔空控制星球大戰(zhàn)BB-8機(jī)器人。
在這篇文章中,你將會了解到如下的信息:
人氣超高的星球大戰(zhàn)之BB-8機(jī)器人
控制BB-8機(jī)器人的服務(wù)工具
小凌派RK2206開發(fā)板之智能手勢
小凌派之OpenHARMony 無線聯(lián)網(wǎng)
小凌派之OpenHarmony MQTT連接
小凌派手勢控制BB-8機(jī)器人
本文中,涉及到的代碼全部開源,代碼庫如下:
BB-8 網(wǎng)頁控制界面
星球大戰(zhàn)BB-8機(jī)器人控制測試與轉(zhuǎn)發(fā)工具
小凌派手勢應(yīng)用之原力控制星球大戰(zhàn)BB-8機(jī)器人實(shí)例
人氣超高的星球大戰(zhàn)之BB-8機(jī)器人
星球大戰(zhàn)系列電影之中,有兩個(gè)少有的幾乎出現(xiàn)于所有星球大戰(zhàn)系列電影的角色,那就是R2-D2和C-3PO
而在2015年的宇宙史詩電影《STAR WARS:原力覺醒》中登場的BB-8球型機(jī)器人,雖然是后輩,但其熱度,快速趕超兩位前輩,成為鐵桿星戰(zhàn)迷的最愛之一
萬萬沒想到,接手星球大戰(zhàn)的迪斯尼,居然推出了同款玩具
狠狠的掏了我這個(gè)老星戰(zhàn)迷的腰包。如果上天再給我一次機(jī)會,我一定不會后悔第一時(shí)間搶到了BB-8機(jī)器人?。?!
控制BB-8機(jī)器人的服務(wù)工具
通常情況下,要控制BB-8,需要使用專門的手機(jī)App,或者使用Sphero的開發(fā)工具。
operasoftware/bb8 實(shí)現(xiàn)了一個(gè)網(wǎng)頁界面的基礎(chǔ)控制功能,HonestQiao/bb8 在此基礎(chǔ)上進(jìn)行了完善,增加了方向鍵按鍵控制功能,并實(shí)現(xiàn)了WebSocket、MQTT支持,從而使得其他設(shè)備,可以通過WebSocket和MQTT,來間接控制BB-8。
進(jìn)一步的,我開發(fā)了轉(zhuǎn)發(fā)工具,為 HonestQiao/bb8 提供完整WEB運(yùn)行環(huán)境,并對外提供TCP Socket、WebSocket、MQTT控制能力,任何能夠使用TCP Socket、WebSocket、MQTT的設(shè)備、程序等,均可以控制BB-8。
關(guān)于該工具的具體使用,可以查看:星球大戰(zhàn)BB-8機(jī)器人控制測試與轉(zhuǎn)發(fā)工具
網(wǎng)頁控制界面:
指令轉(zhuǎn)發(fā)界面:
最終,小凌派RK2206開發(fā)板將會通過MQTT,根據(jù)識別到的手勢,發(fā)送對應(yīng)的指令給BB-8,從而控制BB-8機(jī)器人。
小凌派RK2206開發(fā)板之智能手勢
關(guān)于開發(fā)板對智能手勢的具體支持,可以查看: 小凌派-RK2206開發(fā)板E53模塊開發(fā)——智能手勢
該智能手勢擴(kuò)展板能夠識別的手勢,有上下左右、靠近/離開、順時(shí)針、逆時(shí)針、擺動。
其具體的代碼,在 vendor / lockzhiner / rk2206 / samples / c6_e53_gesture_sensor 目錄中,我們可以查看具體的處理細(xì)節(jié):
在該代碼中,通過 e53_gs_get_gesture_state()接口函數(shù),從手勢傳感器PAJ7620U2讀取當(dāng)前識別到的手勢,然后輸出,并點(diǎn)亮擴(kuò)展板上對應(yīng)的LED。
在后續(xù)的代碼中,將會基于上面的代碼,使用上下左右控制BB-8的運(yùn)動,使用靠近來變換BB-8的燈光顏色。
小凌派之OpenHarmony無線聯(lián)網(wǎng)
在RK2206開發(fā)板OpenHarmony的samples中,沒有直接提供WIFi連接的實(shí)例。
從 vendor / lockzhiner / rk2206 / samples / d1_iot_mqtt 中,我們可以得到對應(yīng)的調(diào)用處理方式,實(shí)際上,只要下面一行代碼,就會自動啟用WiFi連接功能:
SetWifiModeOn();
該接口具體定義,在如下代碼中:
我們還需要到該文件的頭部,修改SSID和PASSWORD的定義,就是我們要連接的無線的名稱和密碼:
設(shè)置好對應(yīng)的SSID和PASSWORD,在我們的代碼中,調(diào)用SetWifiModeOn(),就能具有網(wǎng)絡(luò)功能了。
小凌派之OpenHarmony MQTT連接
在 vendor / lockzhiner / rk2206 / samples / d1_iot_mqtt 中,我們可以了解到使用mqtt服務(wù)的細(xì)節(jié):
在上述代碼,我們重點(diǎn)關(guān)注如下的接口調(diào)用:
NetworkInit(&network):初始化網(wǎng)絡(luò)句柄
NetworkConnect(&network, "192.168.0.107", 1883):連接到mqtt服務(wù)端口
MQTTClientinit(&client, &network...):初始化MQTT CLient
MQTTConnect(&client, &data):開啟MQTT服務(wù)
MQTTSubscribe(&client, "substopic"...):訂閱TOPIC,用于接收
MQTTPublish(&client, "IOT_MQTT", &message):發(fā)布TOPIC,用于發(fā)送數(shù)據(jù)
通過這些接口,我們就能夠使用MQTT服務(wù)來收發(fā)數(shù)據(jù)了。
在使用MQTT服務(wù)之前,我們需要先有mqtt服務(wù)端,通常有下面的兩種方式:
使用EMQX提供的公共服務(wù):一文了解主流在線公共 MQTT 服務(wù)器
自己建立,可以見參考 快速開始使用 EMQX
獲得MQTT服務(wù)端后,我們可以使用如下的工具進(jìn)行測試:
其具體使用,可查看上述的 快速開始使用 EMQX。
配置并編譯 vendor / lockzhiner / rk2206 / samples / d1_iot_mqtt 下載到開發(fā)板以后,我們可以在MQTT客戶端,給 substopic 這個(gè)主題發(fā)送指令,開發(fā)板就會收到;同時(shí),如果訂閱 IOT_MQTT ,就能收到開發(fā)板發(fā)送出來的信息了。
小凌派手勢控制BB-8機(jī)器人
在以上智能手勢識別、WiFi聯(lián)網(wǎng)、MQTT使用的基礎(chǔ)上,我們就可以結(jié)合起來,進(jìn)行BB-8的控制了。核心控制部分的代碼如下:
在上述代碼中,通過手勢傳感器,獲得當(dāng)前的手勢,如果檢測到了上下左右手勢,就發(fā)送move指令;如果檢測到了靠近手勢,就發(fā)送color指令。
控制BB-8時(shí),使用的MQTT的TOPIC為device/BB-8/command,可以通過MQTT客戶端給該TOPIC發(fā)送指令,檢查控制是否生效。
BB-8受控運(yùn)動時(shí),使用的是直角坐標(biāo)系,以默認(rèn)中心點(diǎn)(150,150)為基礎(chǔ)在第一象限運(yùn)動,發(fā)送移動后的坐標(biāo),其離中心點(diǎn)越遠(yuǎn),則移動的速度越快,時(shí)間越長。
因此,根據(jù)識別到的手勢,具體設(shè)置的情況如下:
上:x保持不變,y-=50,發(fā)送move指令
下:x保持不變,y+=50,發(fā)送move指令
左:y保持不變,x-=50,發(fā)送move指令
右:y保持不變,x+=50,發(fā)送move指令
靠近:燈光顏色索引c_idx++,發(fā)送color指令
詳細(xì)的完整代碼實(shí)例,可以查看:小凌派手勢應(yīng)用之原力控制星球大戰(zhàn)BB-8機(jī)器人實(shí)例
通過以上的各項(xiàng)關(guān)聯(lián),我們就可以像星球大戰(zhàn)中的絕地大師那樣,使用原力,隔空御物,控制BB-8機(jī)器人啦。
-
機(jī)器人
+關(guān)注
關(guān)注
211文章
28379瀏覽量
206912
發(fā)布評論請先 登錄
相關(guān)推薦
評論