《鴻蒙機(jī)器人編程》課件-階段三:核心開(kāi)發(fā)-設(shè)備控制_第1頁(yè)
《鴻蒙機(jī)器人編程》課件-階段三:核心開(kāi)發(fā)-設(shè)備控制_第2頁(yè)
《鴻蒙機(jī)器人編程》課件-階段三:核心開(kāi)發(fā)-設(shè)備控制_第3頁(yè)
《鴻蒙機(jī)器人編程》課件-階段三:核心開(kāi)發(fā)-設(shè)備控制_第4頁(yè)
《鴻蒙機(jī)器人編程》課件-階段三:核心開(kāi)發(fā)-設(shè)備控制_第5頁(yè)
已閱讀5頁(yè),還剩73頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

?NXROBO20231.綜合案例:

基于鴻蒙系統(tǒng)的機(jī)器人控制

——遠(yuǎn)程控制機(jī)器人底盤(pán)移動(dòng)綜合案例介紹?NXROBO20232鴻蒙系統(tǒng)引入了全新的超級(jí)終端概念,我們可以將搭載了鴻蒙系統(tǒng)的多臺(tái)設(shè)備連接在一起形成一個(gè)超級(jí)終端,享受萬(wàn)物互聯(lián)的快感。我們可以通過(guò)其中的任意一臺(tái)設(shè)備控制超級(jí)終端中的其他設(shè)備,例如手表、電腦、平板、手機(jī)等。那么,如果將各種機(jī)器人設(shè)備接入到鴻蒙,是不是也可以實(shí)現(xiàn)機(jī)器人的集群控制呢,從而打造一個(gè)超級(jí)炫酷的機(jī)器人超級(jí)終端系統(tǒng),對(duì)機(jī)器人進(jìn)行控制。綜合案例介紹?NXROBO20233客戶端應(yīng)用開(kāi)源鴻蒙開(kāi)發(fā)板ROS機(jī)器人平臺(tái)硬件架構(gòu)?NXROBO20234

通信架構(gòu)?NXROBO20235本章效果:手機(jī)操作控制機(jī)器人底盤(pán)移動(dòng)?NXROBO20236本案例實(shí)現(xiàn)SPARK-HM-PI開(kāi)源鴻蒙開(kāi)發(fā)板接入ROS機(jī)器人平臺(tái),并實(shí)現(xiàn)手機(jī)終端與星火派開(kāi)源鴻蒙開(kāi)發(fā)板之間的TCP通信,從而實(shí)現(xiàn)通過(guò)手機(jī)客戶端控制Spark-H機(jī)器人底盤(pán)進(jìn)行運(yùn)動(dòng)。課程說(shuō)明用戶交互端設(shè)計(jì)開(kāi)源鴻蒙控制終端設(shè)計(jì)ROS機(jī)器人端設(shè)計(jì)?NXROBO20237用戶交互終端?NXROBO20238

碰一碰拉取應(yīng)用?NXROBO20239鴻蒙原子化服務(wù)先在HarmonyOS服務(wù)開(kāi)放平臺(tái)進(jìn)行標(biāo)簽的申請(qǐng),在NFC標(biāo)簽中寫(xiě)入標(biāo)簽數(shù)據(jù),數(shù)據(jù)包括鴻蒙原子化服務(wù)信息和設(shè)備的MAC地址,機(jī)器人端配置申請(qǐng)好的NFC標(biāo)簽。在客戶端用手機(jī)設(shè)備與機(jī)器人段進(jìn)行碰一碰時(shí)可以拉起用戶與機(jī)器人的交互界面,用最便捷的方式給用戶提供最好的交互體驗(yàn)。UI界面?NXROBO202310界面介紹可以實(shí)現(xiàn)對(duì)小車前進(jìn)后退,左轉(zhuǎn)右轉(zhuǎn)的控制,同時(shí)狀態(tài)欄顯示小車狀態(tài)。控制原理手機(jī)端與鴻蒙控制板端連接到同一網(wǎng)絡(luò)下后,通過(guò)TCP/IP協(xié)議建立連接,通過(guò)一定的數(shù)據(jù)協(xié)議向控制板發(fā)送指令。開(kāi)源鴻蒙控制終端?NXROBO202311簡(jiǎn)單數(shù)據(jù)協(xié)議規(guī)定?NXROBO202312接收客戶端發(fā)來(lái)的指令規(guī)定接收到指令機(jī)器人行為"0"停止運(yùn)動(dòng)"1"前進(jìn)"2"后退"3"左轉(zhuǎn)"4"右轉(zhuǎn)底盤(pán)串口驅(qū)動(dòng)?NXROBO202313spark_base.h接口簡(jiǎn)介接口功能voidSpark_Init(void)小車初始化voidBase_Stop(void)停止voidBase_Forword(void)前進(jìn)voidBase_Backward(void)后退voidBase_Left(void)左轉(zhuǎn)voidBase_Right(void)右轉(zhuǎn)voidBase_Status_Change(char*status)狀態(tài)改變串口驅(qū)動(dòng)可以實(shí)現(xiàn)對(duì)小車前進(jìn)后退,左轉(zhuǎn)右轉(zhuǎn)的控制,同時(shí)狀態(tài)欄顯示小車狀態(tài)。底盤(pán)控制手機(jī)端與鴻蒙控制板端連接到同一網(wǎng)絡(luò)下后,通過(guò)TCP/IP協(xié)議建立連接,通過(guò)一定的數(shù)據(jù)協(xié)議向控制板發(fā)送指令。TCP服務(wù)端任務(wù)實(shí)現(xiàn)?NXROBO202314TCPServerTaskTCP服務(wù)端用于接收客戶端發(fā)來(lái)的機(jī)器人底盤(pán)控制指令消息,并對(duì)消息進(jìn)行處理。采用輕量級(jí)的TCP/IP協(xié)議棧LwIP進(jìn)行標(biāo)準(zhǔn)的socket編程。底盤(pán)控制任務(wù)實(shí)現(xiàn)?NXROBO202315SparkMoveTask底盤(pán)控制任務(wù)用于根據(jù)底盤(pán)當(dāng)前的運(yùn)動(dòng)狀態(tài)不斷給底盤(pán)發(fā)送運(yùn)動(dòng)指令。線程創(chuàng)建及入口函數(shù)?NXROBO202316SparkCmdEntry創(chuàng)建業(yè)務(wù)入口函數(shù)用于用戶創(chuàng)建并配置線程任務(wù)并通過(guò)APP_FEATURE_INIT()或SYS_RUN啟動(dòng)業(yè)務(wù)。編寫(xiě)B(tài)UILD.gn?NXROBO202317添加編譯程序編寫(xiě)完成后,需要將代碼添加到編譯鏈里面,并且要添加相關(guān)的依賴文件目錄。驅(qū)動(dòng)代碼加入編譯成靜態(tài)庫(kù),并添加相關(guān)的依賴庫(kù)添加編譯規(guī)則,將生成的靜態(tài)庫(kù)文件添加到編譯組件ROS機(jī)器人終端?NXROBO202318創(chuàng)建功能包?NXROBO202319開(kāi)源鴻蒙開(kāi)發(fā)板功能包功能包名:spark-hm-pi目錄:spark_noetic/src/spark_driver/board依賴:roscpprospystd_msgsactionlibInclude:存放頭文件src文件夾:存放節(jié)點(diǎn)源代碼launch文件夾:存放節(jié)點(diǎn)管理launch文件CmakeLists.txt:配置編譯規(guī)則,比如源文件、依賴項(xiàng)、目標(biāo)文件package.xml:包信息節(jié)點(diǎn)通信架構(gòu)?NXROBO202320在src下新建hm_read_node文件,將NUC串口讀到的開(kāi)發(fā)板發(fā)來(lái)的數(shù)據(jù)處理作為一個(gè)ros節(jié)點(diǎn),主要做的動(dòng)作是接收并解析串口發(fā)來(lái)的指令并發(fā)布/cmd_vel話題執(zhí)行相應(yīng)的底盤(pán)運(yùn)動(dòng)控制。節(jié)點(diǎn)代碼實(shí)現(xiàn)?NXROBO202321Launch文件?NXROBO202322在功能包下新建一個(gè)launch文件夾,編寫(xiě)一個(gè)launch文件用來(lái)啟動(dòng)底盤(pán)以及鴻蒙節(jié)點(diǎn)啟動(dòng)。啟動(dòng)流程小結(jié)?NXROBO202323FinishStart11.初始化開(kāi)發(fā)板燒錄代碼,機(jī)器上電,串口連接22.啟動(dòng)ROS程序打開(kāi)終端,運(yùn)行l(wèi)aunch文件33.NFC碰一碰拉取應(yīng)用手機(jī)安裝應(yīng)用,與開(kāi)發(fā)板NFC碰一碰44.網(wǎng)絡(luò)連接配置手機(jī)與開(kāi)發(fā)板處于同一網(wǎng)絡(luò),IP地址與端口設(shè)置正確55.機(jī)械臂控制手機(jī)客戶端進(jìn)行控制?NXROBO20232.綜合案例:

基于鴻蒙系統(tǒng)的機(jī)器人控制

——遠(yuǎn)程控制和獲取機(jī)械臂狀態(tài)綜合案例介紹?NXROBO202325鴻蒙系統(tǒng)引入了全新的超級(jí)終端概念,我們可以將搭載了鴻蒙系統(tǒng)的多臺(tái)設(shè)備連接在一起形成一個(gè)超級(jí)終端,享受萬(wàn)物互聯(lián)的快感。我們可以通過(guò)其中的任意一臺(tái)設(shè)備控制超級(jí)終端中的其他設(shè)備,例如手表、電腦、平板、手機(jī)等。那么,如果將各種機(jī)器人設(shè)備接入到鴻蒙,是不是也可以實(shí)現(xiàn)機(jī)器人的集群控制呢,從而打造一個(gè)超級(jí)炫酷的機(jī)器人超級(jí)終端系統(tǒng),對(duì)機(jī)器人進(jìn)行控制。綜合案例介紹?NXROBO202326客戶端應(yīng)用開(kāi)源鴻蒙開(kāi)發(fā)板ROS機(jī)器人平臺(tái)硬件架構(gòu)?NXROBO202327

通信架構(gòu)?NXROBO202328本章效果:遠(yuǎn)程控制和獲取機(jī)械臂狀態(tài)?NXROBO202329本次案例在上個(gè)案例的基礎(chǔ)上,增加了機(jī)械臂抓取放置的操作以及可以實(shí)時(shí)反饋機(jī)械臂狀態(tài)并顯示在手機(jī)終端。課程說(shuō)明用戶交互端設(shè)計(jì)開(kāi)源鴻蒙控制終端設(shè)計(jì)ROS機(jī)器人端設(shè)計(jì)?NXROBO202330用戶交互終端?NXROBO202331

碰一碰拉取應(yīng)用?NXROBO202332鴻蒙原子化服務(wù)先在HarmonyOS服務(wù)開(kāi)放平臺(tái)進(jìn)行標(biāo)簽的申請(qǐng),在NFC標(biāo)簽中寫(xiě)入標(biāo)簽數(shù)據(jù),數(shù)據(jù)包括鴻蒙原子化服務(wù)信息和設(shè)備的MAC地址,機(jī)器人端配置申請(qǐng)好的NFC標(biāo)簽。在客戶端用手機(jī)設(shè)備與機(jī)器人段進(jìn)行碰一碰時(shí)可以拉起用戶與機(jī)器人的交互界面,用最便捷的方式給用戶提供最好的交互體驗(yàn)。UI界面?NXROBO202333界面介紹增加抓取和放置兩個(gè)按鍵,中間顯示面板會(huì)顯示機(jī)械臂的狀態(tài)。控制原理抓取和放置和底盤(pán)移動(dòng)控制一樣都是向開(kāi)源鴻蒙開(kāi)發(fā)板發(fā)送相應(yīng)指令實(shí)現(xiàn),之間狀態(tài)信息反饋通過(guò)開(kāi)發(fā)板TCP回傳的信息進(jìn)行實(shí)時(shí)改變。開(kāi)源鴻蒙控制終端?NXROBO202334簡(jiǎn)單數(shù)據(jù)協(xié)議規(guī)定?NXROBO202335接收客戶端發(fā)來(lái)的指令規(guī)定接收到指令機(jī)器人行為"5"機(jī)械臂抓取"6"機(jī)械臂釋放接收到指令機(jī)器人行為"-1"抓取失敗"0"處于放置狀態(tài)"1"處于抓取狀態(tài)返回客戶端指令規(guī)定底盤(pán)串口驅(qū)動(dòng)?NXROBO202336spark_arm.h接口簡(jiǎn)介接口功能voidArm_Grasp(void)機(jī)械臂抓取voidArm_Release(void)機(jī)械臂釋放voidUpdate_Arm_Status(void)更新機(jī)械臂狀態(tài)voidGet_Arm_Status(char*status)獲取機(jī)械臂狀態(tài)信息機(jī)械臂狀態(tài)TCP機(jī)械臂控制實(shí)現(xiàn)?NXROBO202337TCPServerTask在上個(gè)案例的基礎(chǔ)上加上對(duì)機(jī)械臂的處理,收到客戶發(fā)來(lái)的相應(yīng)指令執(zhí)行抓取和放置操作。TCP機(jī)械臂狀態(tài)反饋任務(wù)?NXROBO202338GetArmStatusTask機(jī)械臂狀態(tài)反饋任務(wù)不斷更新串口發(fā)來(lái)的機(jī)械臂實(shí)時(shí)狀態(tài),并將狀態(tài)信息通過(guò)TCP轉(zhuǎn)發(fā)到客戶端。線程創(chuàng)建及入口函數(shù)?NXROBO202339SparkCmdEntry在上個(gè)案例的基礎(chǔ)上在業(yè)務(wù)入口函數(shù)新增線程用于處理獲取機(jī)械臂狀態(tài)任務(wù)。編寫(xiě)B(tài)UILD.gn?NXROBO202340添加編譯程序編寫(xiě)完成后,需要將代碼添加到編譯鏈里面,并且要添加相關(guān)的依賴文件目錄。驅(qū)動(dòng)代碼加入編譯成靜態(tài)庫(kù),并添加相關(guān)的依賴庫(kù)添加編譯規(guī)則,將生成的靜態(tài)庫(kù)文件添加到編譯組件ROS機(jī)器人終端?NXROBO202341節(jié)點(diǎn)通信架構(gòu)?NXROBO202342在上個(gè)案例發(fā)布/cmd_vel話題控制底盤(pán)運(yùn)動(dòng)的基礎(chǔ)上,hm_read_node新增了發(fā)布/grasp話題進(jìn)行抓取,同時(shí)要運(yùn)行GraspObject節(jié)點(diǎn),該節(jié)點(diǎn)執(zhí)行抓取操作完成后會(huì)返回話題/grasp_status機(jī)械臂抓取的狀態(tài)。修改hm_read_node節(jié)點(diǎn)?NXROBO202343新增發(fā)布/grasp話題進(jìn)行抓取,并加入指令控制新建hm_write_node節(jié)點(diǎn)?NXROBO202344在src目錄下新增節(jié)點(diǎn)源文件hm_write_node.cpp,創(chuàng)建節(jié)點(diǎn)節(jié)點(diǎn)來(lái)訂閱/grasp_status話題即可得到機(jī)械臂狀態(tài),并將得到的返回值通過(guò)串口傳遞給鴻蒙開(kāi)發(fā)板,然后再傳遞給手機(jī)端,實(shí)現(xiàn)手機(jī)實(shí)時(shí)顯示機(jī)械臂狀態(tài)。節(jié)點(diǎn)代碼實(shí)現(xiàn)?NXROBO202345同樣需要開(kāi)啟串口才能進(jìn)行寫(xiě)操作回調(diào)函數(shù)中向串口寫(xiě)入機(jī)械臂狀態(tài)數(shù)據(jù)Launch文件?NXROBO202346啟動(dòng)流程小結(jié)?NXROBO202347FinishStart11.初始化開(kāi)發(fā)板燒錄代碼,機(jī)器上電,串口連接22.啟動(dòng)ROS程序打開(kāi)終端,運(yùn)行l(wèi)aunch文件hm_move2grasp.launch33.NFC碰一碰拉取應(yīng)用手機(jī)安裝應(yīng)用,與開(kāi)發(fā)板NFC碰一碰44.網(wǎng)絡(luò)連接配置手機(jī)與開(kāi)發(fā)板處于同一網(wǎng)絡(luò),IP地址與端口設(shè)置正確55.機(jī)械臂控制手機(jī)客戶端對(duì)機(jī)械臂進(jìn)行控制3.機(jī)械臂仿真系統(tǒng)課程內(nèi)容1.完善機(jī)器人模型中的物理屬性2.ROS中控制器ros_control3.Gazebo構(gòu)建機(jī)械臂仿真系統(tǒng)4.MoveIt!+Gazebo構(gòu)建機(jī)械臂仿真系統(tǒng)49?NXROBO20221.完善機(jī)器人模型中的物理屬性——在Gazebo顯示機(jī)器人50?NXROBO2022要在Gazebo軟件里顯示機(jī)器人,需要修改URDF機(jī)器人模型描述文件:添加collision標(biāo)簽:在仿真環(huán)境中必然涉及到碰撞檢測(cè),collision標(biāo)簽提供用于碰撞檢測(cè)的幾何體信息,在<link>標(biāo)簽內(nèi)添加。添加inertial標(biāo)簽:該標(biāo)簽標(biāo)注了機(jī)器人某個(gè)剛體部件的慣性矩陣,用于一些動(dòng)力學(xué)相關(guān)的仿真計(jì)算,在<link>標(biāo)簽內(nèi)添加。顏色設(shè)置:在Gazebo仿真中沒(méi)有透明度這一設(shè)置,為此需要重新使用gazebo標(biāo)簽標(biāo)注顏色。必需1.完善機(jī)器人模型中的物理屬性51?NXROBO2022第一步:為

link

添加慣性參數(shù)和碰撞屬性1.完善機(jī)器人模型中的物理屬性52?NXROBO2022第二步:為

link

添加

gazebo

標(biāo)簽設(shè)置材質(zhì)1.完善機(jī)器人模型中的物理屬性53?NXROBO2022編寫(xiě)launch文件marm_world.launch,在gazebo中加載機(jī)器人模型1.完善機(jī)器人模型中的物理屬性54?NXROBO2022$

roslaunch

marm_gazebo

marm_world.launch啟動(dòng)仿真環(huán)境建議

:為保證模型順利加載,請(qǐng)?zhí)崆皩⒛P臀募?kù)下載并放置到

~/.gazebo/models

下只能看到機(jī)器人,但無(wú)法讓機(jī)器人運(yùn)動(dòng)2.ROS中的控制器ros_control55?NXROBO2022ros_control

是什么?

ROS

為開(kāi)發(fā)者提供的機(jī)器人控制中間件

包含一系列控制器接口、傳動(dòng)裝置接口、硬件接口、控制器工具箱等等

可以幫助機(jī)器人應(yīng)用功能包快速落地,提高開(kāi)發(fā)效率2.ROS中的控制器ros_control56?NXROBO20222.ROS中的控制器ros_control57?NXROBO2022控制器(

Controllers

):

joint_state_controller

joint_effort_controller

joint_velocity_controller

joint_position_controller

joint_trajectory_controllers

2.ROS中的控制器ros_control58?NXROBO2022控制器管理器

提供一種通用的接口來(lái)管理不同的控制器??刂破?/p>

讀取硬件狀態(tài),發(fā)布控制命令,完成每個(gè)joint的控制。硬件資源

為上下兩層提供硬件資源接口。機(jī)器人硬件抽象

機(jī)器人硬件抽象和硬件資源直接打交道,通過(guò)write和read方法完成硬件操作。真實(shí)機(jī)器人

執(zhí)行接收到的命令。3.Gazebo構(gòu)建機(jī)械臂仿真系統(tǒng)59?NXROBO2022MoveIt!操控機(jī)械臂的數(shù)據(jù)流60?NXROBO2022第一步:修改URDF機(jī)器人模型文件添加transmission標(biāo)簽:為活動(dòng)的關(guān)節(jié)添加傳動(dòng),在<joint>標(biāo)簽內(nèi)添加。加載gazebo_ros_control插件,在<gazebo>標(biāo)簽內(nèi)添加。第二步:編寫(xiě)controller的參數(shù)文件JointTrajectoryController參數(shù)文件JointStateController參數(shù)文件第三步:在launch文件中加載相關(guān)controller加載控制器參數(shù)加載控制器3.Gazebo構(gòu)建機(jī)械臂仿真系統(tǒng)61?NXROBO20223.Gazebo構(gòu)建機(jī)械臂仿真系統(tǒng)第一步:修改URDF機(jī)器人模型文件——為

joint

添加傳動(dòng)裝置62?NXROBO2022<robotNamespace>

:機(jī)器人的命名空間第一步:修改URDF機(jī)器人模型文件——添加gazebo控制器插件3.Gazebo構(gòu)建機(jī)械臂仿真系統(tǒng)63?NXROBO2022關(guān)節(jié)軌跡控制器線性樣條:位置連續(xù),速度、加速度不連續(xù)。三次樣條:位置和速度連續(xù),加速度不連續(xù)。五次樣條:位置、速度、加速度都連續(xù)。marm_gazebo/config/trajectory_control.yaml3.Gazebo構(gòu)建機(jī)械臂仿真系統(tǒng)第二步:編寫(xiě)controller的參數(shù)文件——JointTrajectoryController參數(shù)3.Gazebo構(gòu)建機(jī)械臂仿真系統(tǒng)——配置控制器參數(shù)64?NXROBO2022設(shè)置關(guān)節(jié)狀態(tài)控制:JointStateController設(shè)置關(guān)節(jié)位置控制器:JointPositionControllermarm_gazebo/config/marm_gazebo_control.yaml第二步:編寫(xiě)controller的參數(shù)文件

——JointTrajectoryController參數(shù)3.Gazebo構(gòu)建機(jī)械臂仿真系統(tǒng)——加載控制器參數(shù)65?NXROBO2022marm_gazebo/launch/marm_gazebo_control.launch(1)第三步:在launch文件中加載相關(guān)controller3.Gazebo構(gòu)建機(jī)械臂仿真系統(tǒng)——加載控制器參數(shù)66?NXROBO2022第三步:在launch文件中加載相關(guān)controllermarm_gazebo/launch/marm_gazebo_control.launch(2)67?NXROBO20223.Gazebo構(gòu)建機(jī)械臂仿真系統(tǒng)——啟動(dòng)仿真啟動(dòng)仿真系統(tǒng)

$

roslaunch

marm_gazebo

marm_gazebo_control.launch68?NXROBO20223.Gazebo構(gòu)建機(jī)械臂仿真系統(tǒng)——啟動(dòng)仿真制器插件加載成功的日志信息查看

controller

訂閱的控制命令話題69?NXROBO20223.Gazebo構(gòu)建機(jī)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論