手勢是人類社會長期存在的重要肢體語言。它具有簡單、直接、高效、清晰,內容豐富的特點,手勢識別是指跟蹤人類手勢并識別其表示含義的整個過程。靜態手勢識別實現運動控制的研究目的是在不直接觸摸設備的情況下使用的手勢的位置信息識別作為輸入[1],并將命令映射到輸出。
本文引用地址:http://www.eepw.com.cn/article/202302/443617.htm
本文設計的基于手勢識別的小車運動控制系統,用戶佩戴傳感器裝置,傳感器將人與機器進行連接,傳感器通過對數據進行采集,得到角度等相關數據信息,然后將信息傳遞給單片機,單片機內部對傳感器傳輸過來的數據進行分析處理,最終得到用戶指令并實現運動控制。與語音識別、觸摸屏識別、鍵盤和鼠標等其他人機交互技術相比,人機距離限制小,語言獨立等優點。在應用層面,手勢識別小車的發展可以使人機交互更加精確、穩定,范圍更廣,有利于推廣應用。
圖1 系統總體方案設計框圖
1 系統總體方案設計
該系統的總體結構分為兩部分:手部控制端和小車運動端,由五大模塊構成:單片機最小系統、傳感器模塊、無線通信模塊、顯示模塊和電機驅動模塊。軟件設計主要包括:手部控制程序設計和小車運動程序設計。系統總體方案設計框圖如圖1 所示。
手部端傳感器采集不同手勢的各軸的角度數據,傳感器將數據返回給單片機最小系統,由單片機對數據信息進行濾波處理,辨別指令信息,并且通過無線通信模塊傳輸給小車端。小車端傳感器采集車體姿態的各軸的角度數據,傳感器將數據傳輸回單片機的同時無線通信模塊接收手部控制端的指令信息,單片機將兩部分信息對比處理,對誤差運用經典PID 算法處理,并將處理結果反饋給電機驅動模塊,調整小車左右電機PWM,目的是使小車按照手勢指令行駛并且行駛穩定,顯示模塊顯示小車行駛的目標角度和實際角度。
圖2 Arduino Nano電路原理圖
2 硬件電路設計
2.1 單片機最小系統
本設計中在手部控制端和小車運動端均采用Arduino Nano 作為主控芯片, 其處理器核心是ATmega328(Nano3.0),同時具有14 路數字輸入/ 輸出口,8 路模擬輸入[2],ATmega328 具有32 個引腳,由于引腳數量有限,所以很多功能都共同使用一個引腳,具體功能可以通過軟件編程實現。這款單片機便捷靈活、方便上手,具有豐富的接口,適用于本系統。Arduino Nano電路原理圖如圖2所示。
2.2 姿態角度傳感器
本設計中采用姿態角度傳感器JY61采集手勢指令信息和小車姿態信息, 處理器以高精度陀螺儀MPU6050為核心, 讀取MPU6050的測量數據, 通過串口輸出[3]JY61模塊工作電壓3.3 V/5 V,測量數據包括三維角度、三維加速度和三維角速度數據,其角度數據在X 軸和Z 軸的測量范圍是±180 °,Y 軸的測量范圍是±90 °,動態測量精度為0.1 °,靜態測量精度為0.05 ° 。
2.3 藍牙模塊
本設計中采用藍牙模塊HC05實現手部控制端和小車運動端的數據通訊。HC05 是一款主從一體式串口藍牙模塊,使用方便快捷,配對后只需要當成固定波特率的串口一樣使用即可,因此只要是以“固定波特率,8 位數據位,無奇偶校檢”通信格式的串口設備都可以直接取代原來的有線串口而不需要修改程序。HC05 藍牙模塊電路原理圖3 如圖所示。
圖3 HC05藍牙模塊電路原理圖
2.4 顯示模塊
本設計中使用LCD1602 顯示屏顯示目標角度(手部控制姿態)和當前角度(小車運動姿態),可以實時地觀測小車行進中的角度變化。本設計中采用LCD1602的IIC 驅動方式,通過IIC 適配器板實現IIC 接口,只采用兩個IO 端口用于驅動LCD1602,適配器板的SDA、SCL 分別連接到開發板A4 和A5。LCD1602 電路原理如圖4 所示。
圖4 LCD1602電路原理圖
2.5 電機驅動模塊
本設計中使用L298N 電機驅動模塊控制小車電機的正反轉和行駛速度。L298N 電機驅動模塊擁有發熱小,無需散熱片、體積小、省電,溫度下降后自動恢復的優點。電機A 輸出口對應IN1 和IN2 控制1 個電機的旋轉,電機B 輸出口對應IN3 和IN4 控制另1 個電機的轉動,其操作簡單,穩定性好,能滿足直流電機大電流的驅動條件[4]。
圖5 手部控制程序流程
3 軟件設計
3.1 手部控制程序設計
手部控制程序主要實現內容如下:上電后系統初始化,進入循環程序,對X、Y、Z 軸基準角度進行數據校準。傳感器采集當前X、Y、Z 軸角度,將當前角度與基準角度相減所得偏差角度作為手勢指令,采集數據后進行手勢識別,通過Z 軸角度判斷0°、45°、90°、?45°、?90°五種轉彎狀態,通過 X 軸角度判斷前進、后退、停止3 種行進狀態,濾波處理后,發送至小車運動端;若未讀到低開始信號則表示手勢指令無效,小車靜止。
手部控制程序流程圖如圖5 所示。進行手勢檢測時,將姿態角度傳感器JY61 佩戴在用戶右手中指上方,杜邦線所在一側貼著食指。在前進、停止、后退指令中定義掌心向下指尖向前為停止,掌心向前指尖向上為前進,掌心向后指尖向下為后退。在0° 、45°、90°、?45°、?90°指令中定義掌心向下指尖向前為0° 轉彎,掌心向下指尖向左為90° 轉彎,掌心向下指尖向右為 ?90°轉彎。
根據不同手勢姿態其各軸角度不同,進行數據處理做出判斷后發送至小車端,最終小車依照手勢指令實現前進、后退、轉彎、停止等行駛狀態。角度數據內容如表1 所示。
表1 角度數據
各軸角度計算公式如下:
確定轉彎狀:確定 0°、 45°、 90°、 ?45°、?90°轉彎狀態的手勢指令信息,需要對 Z 軸角度進行判斷。不同人所給出的手勢指令不同,以及演示手勢指令存在一定角度誤差,所以判斷條件都在一定區間范圍內。轉彎狀態手勢指令信息表如表2 所示。
表2 轉彎狀態手勢指令信息表
確定前進、停止、后退狀態:確定前進、后退、停止行駛狀態的手勢指令信息,需要對X軸角度進行判斷。行駛狀態手勢指令信息表如表3 所示。
表3 行駛狀態手勢指令信息表
3.2 小車運動程序設計
小車運動程序主要實現內容:上電后系統初始化,進入循環程序,行進過程中設定小車左右電機的PWM均為80,采用位置式PID 算法減小擾動和誤差,將PID運算結果PID_out 加在右側電機PWM,實現小車沿直線行駛和準確轉彎。若藍牙模塊未接收到字符“0”,則手勢指令無效,小車靜止。小車運動端程序流程圖如圖6 所示。
圖6 小車運動端程序流程
在本設計中,基于手勢識別的小車運動控制系統要實現沿直線行駛和準確轉彎,首選簡單高效的PID 控制算法,以保證控制系統快速到達并穩定于目標值[5]。PID控制算法公式為:
本設計中小車沿直線行駛時先給左右電機相同的PWM,在行進過程中由于誤差和擾動肯定會走偏,此時傳感器采集各軸角度,采用位置式PID 算法控制的目的就是使小車轉到目標角度并沿目標角度走直線,控制方法是將PID 運算結果PID_out 加在右側電機PWM。小車運動狀態控制策略如表4 所示。
表4 小車運動狀態控制策略
4 系統測試
經過硬件和軟件的聯合調試,基于手勢識別的小車運動控制系統實現了以下功能:手部控制端可以識別不同的手勢指令,手部端與小車端能進行數據傳輸、小車接收手勢指令后可以實現前進、后退、停止、轉彎等不同行駛狀態,顯示屏可以顯示目標角度和實際角度。測試結果表明,基于手勢識別的小車運動控制系統可以準確、穩定地運行,證明了該系統的可行性和識別算法的有效性。系統調試結果如圖7 所示。
圖7 系統調試結果
5 結束語
隨著科技的進步與社會的發展,人類生活趨于智能化,智能識別技術與智能機器人一定是未來研究的熱門課題,基于手勢識別的小車運動控制系統將手勢識別技術與移步機器人結合為一體,高效地實現了人與小車的交互控制,同時因其智能、安全、工作效率高等特點,有效節約了人力資源,可以在很多場合中得到應用。身處于疫情時期,采用無接觸模式實現手勢控制小車幫助人們安全、高效地完成一些工作,具有一定的實際意義,做到了真正方便人們的生活,具有廣闊的市場前景與實用意義。
參考文獻:
[1] 孫亞星,黃帥銘,王宇鵬,等.基于電容傳感器的手勢識別系統設計[J].自動化儀表,2020,41(2):10-19.
[2] 倪文彬,毛耀,陸廣華.基于Arduino的體感機械手設計[J].機床與液壓,2017,45(23):5-9.
[3] 張金山.四足步行機器人的3-5R并聯腿機構設計與步態規劃[D].濟南:山東大學,2019.
[4] 楊小博,胡強,蘇玉香.基于STC12C5A60S2的循跡避障智能小車的設計[J].福建電腦,2017,33(11):19-20.
[5] 候帥.多自由度機器人搬運平臺調平控制系統研究[D].西安:長安大學,2017.
(本文來源于《電子產品世界》雜志2023年2月期)
更多信息可以來這里獲取==>>電子技術應用-AET<<