![《鴻蒙機(jī)器人編程》課件-2.3 實(shí)現(xiàn)OpenHarmony與ROS的通訊_第1頁](http://file4.renrendoc.com/view11/M01/23/1C/wKhkGWdxOp6AFUULAACMAb3uDyo706.jpg)
![《鴻蒙機(jī)器人編程》課件-2.3 實(shí)現(xiàn)OpenHarmony與ROS的通訊_第2頁](http://file4.renrendoc.com/view11/M01/23/1C/wKhkGWdxOp6AFUULAACMAb3uDyo7062.jpg)
![《鴻蒙機(jī)器人編程》課件-2.3 實(shí)現(xiàn)OpenHarmony與ROS的通訊_第3頁](http://file4.renrendoc.com/view11/M01/23/1C/wKhkGWdxOp6AFUULAACMAb3uDyo7063.jpg)
![《鴻蒙機(jī)器人編程》課件-2.3 實(shí)現(xiàn)OpenHarmony與ROS的通訊_第4頁](http://file4.renrendoc.com/view11/M01/23/1C/wKhkGWdxOp6AFUULAACMAb3uDyo7064.jpg)
![《鴻蒙機(jī)器人編程》課件-2.3 實(shí)現(xiàn)OpenHarmony與ROS的通訊_第5頁](http://file4.renrendoc.com/view11/M01/23/1C/wKhkGWdxOp6AFUULAACMAb3uDyo7065.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
?NXROBO2023ROS與鴻蒙的通訊節(jié)點(diǎn)介紹課程說明開源鴻蒙開發(fā)板與ROS主控之間的通訊方式SPARK的通訊框架串口通訊的驅(qū)動(dòng)實(shí)現(xiàn)開源鴻蒙與ROS的通訊?NXROBO20232開源鴻蒙開發(fā)板與ROS主控之間的通訊方式?NXROBO20233通訊方式?NXROBO20234開源鴻蒙開發(fā)板與ROS主控之間通過串口進(jìn)行通信,通過USB數(shù)據(jù)線硬件連接進(jìn)行通信。單片機(jī)通信接口的電平邏輯和NUC主機(jī)通信接口的電平邏輯不同,NUC主機(jī)上的通信接口有USB接口,相應(yīng)電平邏輯遵照USB原則,開發(fā)板需通過USB轉(zhuǎn)TTL模塊才能正常與NUC進(jìn)行數(shù)據(jù)交互。開發(fā)板串口?NXROBO20235開發(fā)板連接好拓展燈板后,拓展燈板已經(jīng)連接好CH340E芯片,對應(yīng)開發(fā)板串口1,并且提供type-c接口供開發(fā)者使用,故使用該口作為與NUC主控之間的通信。ROS主控串口?NXROBO20236ROS主控端的NUC提供標(biāo)準(zhǔn)的USB接口,可以使用ROS的serial功能包進(jìn)行串口驅(qū)動(dòng)的編寫,利用serial提供的接口實(shí)現(xiàn)串口的讀取與接收,與開源鴻蒙開發(fā)板進(jìn)行交互。
由于Linux對不同串口的識別名稱不固定,插拔后也需要重新賦予權(quán)限,所以還需考慮使用usb規(guī)則文件來為串口取固定別名以及賦予權(quán)限。固定串口別名?NXROBO20237Linux在使用串口讀寫數(shù)據(jù)時(shí),經(jīng)常面臨插拔串口后需要重新給權(quán)限,還有可能串口的名字發(fā)生了改變,例如由ttyUSB0變?yōu)榱藅tyUSB1,為了讓程序能夠正確讀取到開發(fā)板串口數(shù)據(jù),且不用每次都修改代碼,最好給開發(fā)板對應(yīng)的串口固定為一個(gè)串口名字,同時(shí)給上權(quán)限,可根據(jù)設(shè)備ID或者USB口進(jìn)行固定。根據(jù)設(shè)備ID固定根據(jù)設(shè)備芯片的設(shè)備ID來可以區(qū)分不同設(shè)備對應(yīng)的USB,不同芯片的設(shè)備ID不同,但此方法不適用于有兩個(gè)設(shè)備相同的情況。
根據(jù)USB口固定Linux設(shè)備的每個(gè)USB口的(KERNELS)是不同的且固定的,可以修改固定USB口開固定設(shè)備串口,此方法靈活性不高,設(shè)備必須接固定USB口。根據(jù)USB口固定串口?NXROBO202381查看USB對應(yīng)的KERNEL2建立規(guī)則文件3串口映射成功SPARK的通訊框架?NXROBO20239硬件架構(gòu)?NXROBO202310外設(shè)通過無線,內(nèi)部通過串口和NUC通信,控制底盤。通信架構(gòu)實(shí)現(xiàn)?NXROBO202311外設(shè)通過無線,內(nèi)部通過串口和NUC通信,控制底盤。手機(jī)客戶端手機(jī)端需進(jìn)行無線連接,使用wifi,實(shí)現(xiàn)TCP客戶端程序,用于發(fā)送控制指令到達(dá)星火派開發(fā)板。
星火派作為TCP服務(wù)端,接收客戶端發(fā)來的機(jī)器人控制指令消息,并對消息進(jìn)行處理。采用輕量級的TCP/IP協(xié)議棧LwIP進(jìn)行標(biāo)準(zhǔn)的socket編程。作為機(jī)器人控制發(fā)送節(jié)點(diǎn),需要編寫串口驅(qū)動(dòng)通過USB接口與NUC進(jìn)行信息交互。
NUC作為機(jī)器人控制接收節(jié)點(diǎn),正確配置好環(huán)境使能夠識別到星火派,需要在ROS系統(tǒng)中適配好串口驅(qū)動(dòng),與星火派進(jìn)行通信。作為機(jī)器人各個(gè)部件的控制中心,需要組織ROS通信節(jié)點(diǎn),實(shí)現(xiàn)節(jié)點(diǎn)間的通信。無線控制通信?NXROBO202312星火派開發(fā)板通過無線的方式和外部設(shè)備通信,如手機(jī),平板等;而通過無線控制實(shí)現(xiàn)方式有很多,如藍(lán)牙、紅外、LoRa、WiFi等,它們在應(yīng)用場景、傳輸距離、數(shù)據(jù)傳輸速率等方面有所不同。藍(lán)牙:主要用于短距離通信。其最大傳輸距離一般在10米左右,具有低功耗、低成本、簡單易用等特點(diǎn)。紅外:紅外通信的距離相對較短,需要發(fā)送和接收端直接對準(zhǔn)才能進(jìn)行數(shù)據(jù)傳輸。它最大的優(yōu)點(diǎn)是安全性高,但是受到環(huán)境因素的影響較大,如遮擋、強(qiáng)光等均會影響通信效果。LoRa:是一種低功耗、長距離、低速率的無線通信技術(shù),適合于物聯(lián)網(wǎng)等物聯(lián)設(shè)備的連接和數(shù)據(jù)傳輸。它的傳輸距離可以達(dá)到數(shù)公里,但傳輸速率較慢。WiFi:是一種高速的無線局域網(wǎng)通信技術(shù),支持高速數(shù)據(jù)傳輸和多用戶同時(shí)訪問。其傳輸距離較短,一般在100米左右。WiFi在家庭網(wǎng)絡(luò)、企業(yè)辦公中應(yīng)用廣泛,也是公共場所提供無線網(wǎng)絡(luò)服務(wù)的主要技術(shù)之一。WIFI通信?NXROBO202313STA和AP在無線網(wǎng)絡(luò)中是兩個(gè)重要的概念,分別代表了不同的工作模式。即客戶端,是指連接到一個(gè)已經(jīng)存在的Wi-Fi網(wǎng)絡(luò)上的設(shè)備。STA只擁有連接到Wi-Fi網(wǎng)絡(luò)的基本權(quán)限,例如接收和發(fā)送數(shù)據(jù),但不能創(chuàng)建Wi-Fi網(wǎng)絡(luò)、給其他設(shè)備提供服務(wù)等。AP(AccessPoint)即接入點(diǎn),是指創(chuàng)建并管理Wi-Fi網(wǎng)絡(luò)的設(shè)備。AP允許其他設(shè)備(STA)通過Wi-Fi連接到它所創(chuàng)建的網(wǎng)絡(luò),并且可以對這些連接進(jìn)行管理,例如限制連接數(shù)量、控制訪問權(quán)限等。通常情況下,STA與AP是相互獨(dú)立的,它們需要通過Wi-Fi信號來建立連接。當(dāng)一個(gè)設(shè)備想要連接到一個(gè)Wi-Fi網(wǎng)絡(luò)時(shí),它首先會搜索周圍可用的Wi-Fi信號,并找到合適的AP,然后向這個(gè)AP發(fā)起連接請求。如果連接成功,這個(gè)設(shè)備就成為了這個(gè)Wi-Fi網(wǎng)絡(luò)的一個(gè)STA,可以開始使用網(wǎng)絡(luò)提供的服務(wù)。本版本采用的是STA模式,連接熱點(diǎn)或者路由,配置IP。TCP/IPUDP?NXROBO202314TCP(傳輸控制協(xié)議)和UDP(用戶數(shù)據(jù)報(bào)協(xié)議)是兩種常見的互聯(lián)網(wǎng)傳輸協(xié)議。TCP是一種面向連接的協(xié)議,它提供可靠的、有序的、基于字節(jié)流的數(shù)據(jù)傳輸服務(wù)。TCP通過三次握手建立連接,然后在數(shù)據(jù)傳輸時(shí)進(jìn)行確認(rèn)和重傳以確保數(shù)據(jù)可靠性,同時(shí)還可以實(shí)現(xiàn)流量控制和擁塞控制。TCP適用于要求數(shù)據(jù)傳輸可靠性和完整性的應(yīng)用場景,如網(wǎng)頁瀏覽、電子郵件、文件傳輸?shù)?。UDP是一種無連接的協(xié)議,它不提供可靠性和有序性保證,但是傳輸速度較快。UDP發(fā)送端將每個(gè)數(shù)據(jù)包獨(dú)立地發(fā)送出去,接收端收到后直接使用,沒有確認(rèn)和重傳機(jī)制。UDP適用于需要快速傳輸數(shù)據(jù),但對數(shù)據(jù)傳輸可靠性和完整性要求不高的應(yīng)用場景,如網(wǎng)絡(luò)游戲、視頻會議等。LwIP?NXROBO202315lwIP(輕量級IP協(xié)議棧)是一個(gè)開源的TCP/IP協(xié)議棧,設(shè)計(jì)用于在嵌入式系統(tǒng)中運(yùn)行。它是一個(gè)小巧、高效、可移植的協(xié)議棧,通過最小化內(nèi)存使用和代碼大小,使得它非常適合于資源受限的嵌入式設(shè)備。lwIP提供了一系列常用的網(wǎng)絡(luò)協(xié)議,包括IPv4/IPv6、TCP、UDP、ICMP、DNS等,在實(shí)現(xiàn)網(wǎng)絡(luò)連接時(shí)提供了強(qiáng)大的功能。同時(shí),lwIP還提供了一些高級特性,例如多個(gè)網(wǎng)絡(luò)接口支持、RawAPI、SocketAPI、SNMP等,可以滿足不同應(yīng)用場景的需求。lwIP的代碼極為精簡,核心代碼只有數(shù)十個(gè)文件,總代碼量僅幾十KB,因此非常適合在嵌入式系統(tǒng)中使用。同時(shí),由于lwIP已被廣泛應(yīng)用于各種平臺和應(yīng)用領(lǐng)域,因此有很多社區(qū)資源可供參考。星火派的TCP協(xié)議也是通過移植的lwIP實(shí)現(xiàn)。串口通訊的驅(qū)動(dòng)?NXROBO202316開發(fā)板串口驅(qū)動(dòng)?NXROBO202317基于驅(qū)動(dòng)開發(fā)介紹里的串口驅(qū)動(dòng)接口,我們需要實(shí)現(xiàn)以下接口,提供用于與NUC進(jìn)行串口通信的驅(qū)動(dòng)。API接口說明voidUART_Init(void);串口初始化intUart_ReceiveData(char*data,unsignedintlen);串口接收數(shù)據(jù)intUart_SentData(char*data,unsignedintlen);串口發(fā)送數(shù)據(jù)開發(fā)板串口驅(qū)動(dòng)?NXROBO202318void
UART_Init(void){
uint32_t
ret;
IotUartAttributeuart_attr
={
//波特率115200d、數(shù)據(jù)位8、停止位1、無奇偶檢驗(yàn)位
.baudRate=
115200,
.dataBits=
8,
.stopBits=
1,
.parity=
0,
.rxBlock=
1,
};
IoTGpioInit(HI_GPIO_IDX_5);//初始化GPIO5
IoTGpioInit(HI_GPIO_IDX_6);//初始化GPIO6
hi_io_set_func(HI_GPIO_IDX_5,HI_IO_FUNC_GPIO_5_UART1_RXD);
hi_io_set_func(HI_GPIO_IDX_6,HI_IO_FUNC_GPIO_6_UART1_TXD);
//初始化串口
ret
=
IoTUartInit(UART_PORT,&uart_attr);
if(ret
!=IOT_SUCCESS)
{
printf("Failedtoinituart%d.",UART_PORT);
return;
}
}串口參數(shù)配置初始化引腳功能串口初始化開發(fā)板串口驅(qū)動(dòng)?NXROBO202319串口接收采用超時(shí)機(jī)制,防止進(jìn)程阻塞在等待串口接收導(dǎo)致其他功能無法正常運(yùn)行。int
Uart_ReceiveData(char
*data,
unsigned
intlen){
uint16_t
rxlen
=0;
int
ret
=
0;
while(len
-
rxlen
>
0)
{
ret
=
hi_uart_read_timeout(UART_PORT,(unsigned
char
*)data+rxlen,len-rxlen,20);
if(ret
==
0
&&
rxlen
!=
0)
{
return
rxlen;
}
else
{
rxlen
+=
ret;
}
}
return
rxlen;}
int
Uart_SentData(char
*data,
unsigned
intlen){
int
ret;
ret
=
IoTUartWrite(UART_PORT,(unsigned
char
*)data,len);
if(ret
==
-1)
{
printf("Uartwritedataerror!\r\n");
}
return
ret;}串口發(fā)送使用IoTUartWrite發(fā)送數(shù)據(jù)。ROS串口驅(qū)動(dòng)?NXROBO202320在功能包下使用串口驅(qū)動(dòng)時(shí),需在對應(yīng)CMakeList.txt的find_package添加serial。相關(guān)驅(qū)動(dòng)參考hm_read_node.cpp(串口數(shù)據(jù)讀取節(jié)點(diǎn))以及hm_write_node.cpp(串口數(shù)據(jù)發(fā)送節(jié)點(diǎn))開發(fā)板串口驅(qū)動(dòng)?NXROBO202321初始化串口參數(shù),設(shè)備名稱,波特率等,打開串口。
serial::Serial_serial;
try
{
_serial.setPort("/dev/SPARK-HM-PI");
_serial.setBaudrate(115200);
serial::Timeoutto=serial::Timeout::simpleTimeout(1000);
_serial.setTimeout(to);
_serial.open();
ROS_INFO_STREAM("Porthasbeenopensuccessfully");
}
catch(serial::IOException&e)
{
ROS_ERROR_STREAM("Unabletoopenport");
return
-1;
}
if(_serial.isOpen())
{
ROS_INFO_STREAM("Portisopen");
}
while(ros::ok())
{
if(_serial.available())
{
result.data.clear();
result.data
=
_serial.read(_serial.available()); /*在此處進(jìn)行數(shù)據(jù)解析*/ }}循環(huán)讀取串口數(shù)據(jù),將讀取的數(shù)據(jù)存放在result.data中,之后可進(jìn)行數(shù)據(jù)解析。開發(fā)板串口驅(qū)動(dòng)?NXROBO202322同樣初始化并打開串口
serial::Serial_serial;
try
{
_serial.setPort("/dev/SPARK-HM-PI");
_serial.setBaudrate(115200);
serial::Timeoutto=serial::Timeout::simpleTimeout(1000);
_serial.setTimeout(to);
_serial.open();
ROS_INFO_STREAM("Porthasbeenopensuccessfully");
}
catch(serial::IOException&e)
{
ROS_INFO_STREAM("Unabletoopenport");
return
-1;
}
if(_serial.isOpen())
{
ROS_INFO_STREAM("Portisopen");
}
_serial.write(msg->data);
調(diào)用write進(jìn)行數(shù)據(jù)發(fā)送實(shí)現(xiàn)開源鴻蒙與ROS的通訊?NXROBO202323實(shí)現(xiàn)開源鴻蒙與ROS的通訊?NXROBO202324示例:在實(shí)際機(jī)器人開發(fā)中,需要開源鴻蒙開發(fā)板作為控制節(jié)點(diǎn)發(fā)送控制指令到NUC中,下面這個(gè)示例將模擬發(fā)送指令,復(fù)現(xiàn)開源鴻蒙與ROS的通訊的實(shí)現(xiàn)過程。static
void
SPARK_Uart_Task(void){
int
i
=
0;
char
*data
=
"HereisSPARK-HM-PI:";
char
uart_buff[UART_BUFF_SIZE]={0};
UART_Init();
while(1)
{
sprintf(uart_buff,"%s%d\n",data,i);
Uart_SentData(uart_buff,sizeof(uart_buff));
i++;
usleep(1000000);
}}
嘗試使用上一節(jié)寫好的串口驅(qū)動(dòng),在開源鴻蒙端給NUC端不斷發(fā)送信息,串口任務(wù)示例代碼如下。具體可參考spark_uart案例。ROS端實(shí)現(xiàn)?NXROBO202325在spark_hm_pi功能包中創(chuàng)建hm_uart_test節(jié)點(diǎn),新建hm_uart_test.cpp文件,并將該節(jié)點(diǎn)驅(qū)動(dòng)代碼加入編譯,在CMakeList.txt添加如下代碼:add_executable(hm_uart_testsrc/hm_uart_test.cpp)target_link_libraries(hm_uart_test
${catkin_LIBRARIES})實(shí)現(xiàn)開源鴻蒙與ROS的通訊?NXROBO202326hm_uart_test.cpp實(shí)現(xiàn):try
{
_serial.setPort("/dev/SPARK-HM-PI");
_serial.setBaudrate(115200);
serial::Timeoutto=
serial::Timeout::simpleTimeout(1000);
_serial.setTimeout(to);
_serial.open();
ROS_INFO_STREAM("Porthasbeenopensuccessfully");
}
catch(serial::IOException&e)
{
ROS_ERROR_STREAM("Unabletoopenport");
return
-1;
}
if
(_serial.isOpen())
{
ROS_INFO_STREAM("Portisopen");
}
while
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度可再生能源并網(wǎng)合同范本
- 金華浙江金華永康市環(huán)境衛(wèi)生管理處工作人員招聘筆試歷年參考題庫附帶答案詳解
- 西安2025年陜西西安音樂學(xué)院專任教師招聘20人筆試歷年參考題庫附帶答案詳解
- 舟山2025年浙江舟山市定海區(qū)昌國街道招聘公益性崗位筆試歷年參考題庫附帶答案詳解
- 八年級上學(xué)期1月期末語文試題(PDF版無答案)-3
- 漯河2024年河南漯河西城區(qū)現(xiàn)代服務(wù)業(yè)開發(fā)區(qū)工作委員會人才引進(jìn)筆試歷年參考題庫附帶答案詳解
- 溫州浙江溫州平陽縣科學(xué)技術(shù)局招聘編外工作人員筆試歷年參考題庫附帶答案詳解
- 溫州2025年浙江溫州永嘉縣人民醫(yī)院醫(yī)共體永嘉縣婦幼保健院招聘(一)筆試歷年參考題庫附帶答案詳解
- 泉州2025年福建南安市衛(wèi)生事業(yè)單位招聘編制內(nèi)衛(wèi)生類工作人員51人筆試歷年參考題庫附帶答案詳解
- 普洱2025年云南普洱第二中學(xué)招聘編外教學(xué)人員筆試歷年參考題庫附帶答案詳解
- 廣西壯族自治區(qū)北海市2024-2025學(xué)年九年級上學(xué)期1月期末化學(xué)試題(含答案)
- 2025年浙江紹興杭紹臨空示范區(qū)開發(fā)集團(tuán)有限公司招聘筆試參考題庫附帶答案詳解
- 2024年殯儀館建設(shè)項(xiàng)目可行性研究報(bào)告(編制大綱)
- 基本藥物制度政策培訓(xùn)課件
- 2025年3月日歷表(含農(nóng)歷-周數(shù)-方便記事備忘)
- 小紅書營銷師(初級)認(rèn)證理論知識考試題庫(附答案)
- 2025年民營醫(yī)院工作總結(jié)及2025年工作計(jì)劃
- 2025年九年級物理中考復(fù)習(xí)計(jì)劃
- 急診科護(hù)理未來五年規(guī)劃
- 農(nóng)業(yè)機(jī)械設(shè)備供貨及售后服務(wù)方案
- 《跟單信用證統(tǒng)一慣例》UCP600中英文對照版
評論
0/150
提交評論