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