周寶昌,林錦勝,周旭華,3,謝智陽
(1.河源職業(yè)技術(shù)學院,廣東河源, 517000;2.河源市工業(yè)機器人技術(shù)應(yīng)用工程技術(shù)研究中心,廣東河源, 517000;3.河源市智能汽車與智慧交通工程技術(shù)研究中心,廣東河源, 517000)
隨著科技的發(fā)展和進步,代替人類工作的各種機器人出現(xiàn)在工廠、車間、倉庫、醫(yī)療等場合,為了給以上作業(yè)場合等帶來方便,設(shè)計出一款室內(nèi)自主移動機器人[1]。該機器人通過上位機(Jetson Nano)與下位機(Arduino板和驅(qū)動板)的通信,使下位機接收到上位機的消息,將消息轉(zhuǎn)換成發(fā)送到驅(qū)動板上,從而達到驅(qū)動板對機器人進行速度和方向的控制。上位機接收到激光雷達數(shù)據(jù)反饋,把數(shù)據(jù)處理后得到?jīng)Q策指令發(fā)送到下位機,來完成機器人前進、左轉(zhuǎn)、右轉(zhuǎn)、后退和避障等功能。結(jié)合激光雷達SLAM建圖算法技術(shù)和導航算法技術(shù),大大地提高了機器人的性能,更好地實現(xiàn)作業(yè)場合的工作效率。
上位機層有兩部分組成,一部分是ROS系統(tǒng),本文使用的是18.04的版本,另外一部分為處理器與驅(qū)動層進行數(shù)據(jù)交互的軟件驅(qū)動部分。其中,ROS系統(tǒng)是移動機器人的核心,集成了各個功能模塊,包括實時定位、地圖構(gòu)建、運動規(guī)劃等;而軟件驅(qū)動部分則應(yīng)為驅(qū)動層的各個模塊提供相應(yīng)的通訊接口,為底層硬件和上層功能模塊之間建立對應(yīng)的數(shù)據(jù)傳輸?shù)耐ǖ馈?/p>
下位機層由傳感器和驅(qū)動器組成。其中傳感器作為整個移動平臺系統(tǒng)的信息感知單元,負責將機器人移動平臺的外部工作環(huán)境、系統(tǒng)自身各項數(shù)據(jù)信息收集起來,并以某類電信號的形式傳輸給驅(qū)動控制器、上位機層,為系統(tǒng)其他部分提供相應(yīng)的環(huán)境數(shù)據(jù)信息。驅(qū)動器則主要對各傳感器采集的數(shù)據(jù)進行預處理,并把處理后的數(shù)據(jù)傳送給上位機層,避免了上位機層需要不斷采集傳感器數(shù)據(jù)而耗費自身的計算能力。同時,下位機層的主要工作是對上位機指令進行接收,來實現(xiàn)對室內(nèi)自主移動機器人的運動進行控制。
總體結(jié)構(gòu)如圖1所示。
圖1 系統(tǒng)總體結(jié)構(gòu)
移動機器人硬件設(shè)計選用包括Jetson Nano、激光雷達、Arduino Mega 2560板、IMU、降壓模塊、12.6V電池、雙路直流電機驅(qū)動板和編碼器電機等部件構(gòu)成。整體硬件結(jié)構(gòu)如圖2所示。
圖2 系統(tǒng)硬件結(jié)構(gòu)
根據(jù)功能對上位機和下位機進一步劃分,分為了控制系統(tǒng)、傳感系統(tǒng)、執(zhí)行系統(tǒng)、驅(qū)動系統(tǒng)四部分。
整個硬件系統(tǒng)均由同一個鋰離子電池供電,電池直接向電機驅(qū)動板供電,Arduino控制板、IMU和激光雷達通過USB線與Jetson Nano連接,實現(xiàn)硬件之間的通信并且間接給Arduino控制板和激光雷達供電。電機在調(diào)速、轉(zhuǎn)彎或剎車的過程造成的電壓波動極易超過Arduino控制板承受的電壓的極限,因此在給Jetson Nano供電時必須先通過降壓模塊把電壓降至5V,以免燒壞Arduino控制板。
連接示意圖如圖3所示。
圖3 電源與各模塊的連接
要想室內(nèi)自主移動機器人能正常穩(wěn)定行駛,電源模塊則是整個硬件系統(tǒng)的動力源泉了。由于每個硬件系統(tǒng)的電壓需求不一樣,如表1所示,為了滿足各個硬件系統(tǒng)的用電要求,采用規(guī)格為12V、9000mAh的鋰離子充電電池。
表1 硬件各模塊電壓需求情況表
此傳感器是通過激光點云對周圍環(huán)境的掃描來反饋消息到ROS主控機上,通過處理反饋到下位機完成相應(yīng)的動作。本設(shè)計采用的是思嵐激光雷達,它有全方位無死角的激光掃描,角分辨率小于等于1°,測量半徑為0.15~12m,通過激光雷達掃描的信息來識別周圍是否有障礙等,并且實現(xiàn)避障和做出主控機給出的指令的動作。
Arduino控制板接收到Jetson Nano傳輸來的指令后向電機驅(qū)動板發(fā)送信號,電機驅(qū)動板可通過Arduino控制板上的PWM端口單獨控制左右邊電機的速度。左電機驅(qū)動板的INT1、INT2和ENA1控制左前電機的正反轉(zhuǎn)和速度,INT3、IN4和ENA2控制左后電機的正反轉(zhuǎn)和速度,右電機驅(qū)動板的INT1、INT2和ENA1控制右前電機的正反轉(zhuǎn)和速度,INT3、INT4和ENA2控制右后電機的正反轉(zhuǎn)和速度。
連接示意圖如圖4所示。
圖4 電機驅(qū)動板與Arduino控制板和電機的連接
電機編碼器與Arduino控制板連接,可以測量電機的速度并調(diào)整,還可以通過上位機的驅(qū)動指令速度調(diào)節(jié)可實現(xiàn)移動機器人在建圖和手動模式時速度的快慢。
Arduino控制板與左右邊四路編碼器的連接如圖5所示。
圖5 Arduino控制板與編碼器的連接
下位機整體硬件的設(shè)計,主要是將編碼器、驅(qū)動模塊接口和電源優(yōu)化集成一塊PCB擴展板,再將PCB擴展板和Arduino Mega2560板連接,通過對比,集成一塊擴展板減少線路接頭的松動和裸露;增加了各線路安全性、可靠性和穩(wěn)定性,減少了接線的數(shù)量。
ROS系統(tǒng),是一個開源的機器人操作系統(tǒng),它包含了大量的軟件包和庫代碼,擁有一種發(fā)布-訂閱的通信框架,它能把各硬件所要進行的工作整合在一起,但是各個工作是獨立進行的。ROS系統(tǒng)能在Linux上運行,它支持多種編程語言,也便于對程序的修改。
Jetson Nano 是一款功能強大的小型人工智能主控機,內(nèi)置SOC系統(tǒng)級芯片,搭載了1.43GHz的64位四核處理器,128核GPU,能通過無線WiFi與計算機連接。它擁有強大的處理能力和豐富的接口資源,可以運行完整的Linux系統(tǒng),移動機器人以Jetson Nano為控制核心,并在其上安裝運行了Ubuntu系統(tǒng)和ROS系統(tǒng)[2]。Jetson Nano主要負責接收分析激光雷達掃描傳輸來的信息和處理、給激光雷達供電和傳輸指令給下位機Arduino Mega 2560控制板。
軟件系統(tǒng)由環(huán)境感知層和運動控制層兩部分組成。按照軟件系統(tǒng)的功能要求,軟件設(shè)計流程如圖6所示。
圖6 軟件設(shè)計整體流程圖
(1)環(huán)境感知層,由連接在Jetson Nano上的激光雷達、構(gòu)建地圖、導航的驅(qū)動程序三部分組成,主要是用來采集周圍環(huán)境和感知周圍環(huán)境,再由主控機對構(gòu)建地圖和導航的算法進行分析處理,使底盤作出相應(yīng)的動作。
(2)運動控制層,由ROS底盤、Arduino mega 2560控制板、電機驅(qū)動板和運動層控制程序組成,主要負責接收樹莓傳送來的指令控制小車的行駛,利用左右輪差速來實現(xiàn)轉(zhuǎn)彎。
在ROS系統(tǒng)上下載ros_arduino_bridge功能包,這個ROS功能包集包括了Arduino庫(ROSArduinoBridge)和一系列用來控制基于Arduino的ROS功能包,它使用的是標準的ROS消息和服務(wù)[3]。安裝ros_arduino_bridge庫后配置ros_arduino_python節(jié)點,實現(xiàn)小車底盤的通信搭建。
啟動底盤:
啟動激光雷達:
啟動激光雷達里程計:
啟動建圖功能包:
移動機器人進行單點導航,啟動以上程序的底盤、激光雷達、激光雷達里程計的功能包:
移動機器人盤進行自主導航,首先啟動底盤、激光雷達、激光雷達里程計和導航功能的功能包,再啟動速度平滑控制程序和多點導航程序。
將筆記本電腦通過USB線或者無線網(wǎng)絡(luò)連接到Jetson nano上,進行ROS系統(tǒng)和所需的功能包下載安裝,并進行編程和通信。
測試時,將機器人放在一個空地上準備測試。打開所有功能包,首先,構(gòu)建地圖,觀察構(gòu)建地圖的效果,根據(jù)實際情況調(diào)整參數(shù),然后保存地圖,加載地圖進行單點導航,觀察是否到達指定地點和方向正不正確,根據(jù)實際情況調(diào)整參數(shù)。
通過調(diào)試,移動機器人能夠構(gòu)建理想效果地圖和導航,構(gòu)建地圖可視化圖如圖7所示。
圖7 構(gòu)建地圖可視圖
機器人在行駛過程中環(huán)境和自身狀態(tài)的不確定性,使得機器人在動態(tài)環(huán)境下要進行路徑規(guī)劃,并且精準地到達目標點。機器人通過機關(guān)雷達傳回的數(shù)據(jù)變化經(jīng)算法處理可以得出固定障礙物或移動障礙物的距離和機器人的相對速度,及時避開障礙物,從而達到避障的目的。自主導航圖如圖8所示。
圖8 導航可視化圖
本文設(shè)計了一種室內(nèi)自主移動機器人,并對該機器人的系統(tǒng)硬件結(jié)構(gòu)、系統(tǒng)軟件結(jié)構(gòu)以及主要控制算法進行了分析和設(shè)計。室內(nèi)自主移動機器人以Jetson Nano為核心,將Arduino板、激光雷達、電機驅(qū)動模塊有機整合,可以實現(xiàn)底盤通過激光雷達采集周圍環(huán)境信息并利用Jetson Nano控制底盤規(guī)劃路線行走,并避障。本設(shè)計利用ROS系統(tǒng)內(nèi)開源的代碼提高了自主移動機器人研究的效率,使用Arduino開發(fā)環(huán)境獲得了大量的庫文件和簡化了程序代碼,采用模塊化連接簡化了電路。室內(nèi)自主移動機器人主要運用ROS向激光雷達模塊發(fā)送消息,激光雷達模塊通過SLAM算法進行建圖,能實現(xiàn)自主導航和自主避障等功能。