版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
智能網(wǎng)聯(lián)汽車(chē)
計(jì)算平臺(tái)部署與測(cè)試
ROS的安裝與使用目錄01.C++的認(rèn)知02.Python的認(rèn)知03.ROS的認(rèn)知04.ROS的安裝05.ROS文件系統(tǒng)的構(gòu)建06.ROS通信系統(tǒng)的構(gòu)建01.C++的認(rèn)知面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言輸出一個(gè)表達(dá)式“1+1”的結(jié)果輸出一串漢字“北京歡迎您!”輸出一個(gè)字符串“HelloWorld!”任務(wù)描述(1)掌握C++語(yǔ)言中的專(zhuān)業(yè)術(shù)語(yǔ)、基本詞法和控制流程結(jié)構(gòu)的語(yǔ)法格式。(2)理解面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言的基本概念和特征,掌握類(lèi)、對(duì)象、構(gòu)造函數(shù)、析構(gòu)函數(shù)、封裝、繼承和多態(tài)等專(zhuān)業(yè)術(shù)語(yǔ)。(3)能熟練操作C++語(yǔ)言的開(kāi)發(fā)工具完成程序的基本功能。(4)能建立起用面向?qū)ο蟮某绦蛟O(shè)計(jì)方法解決實(shí)際問(wèn)題的編程思維。(5)具備綜合運(yùn)用C++程序設(shè)計(jì)語(yǔ)言解決實(shí)際問(wèn)題的能力。(6)具有主動(dòng)學(xué)習(xí)、獨(dú)立思考、終身學(xué)習(xí)的意識(shí)。(7)通過(guò)質(zhì)疑、討論和解疑,具備創(chuàng)新思維、創(chuàng)新個(gè)性和創(chuàng)新能力。任務(wù)目標(biāo)任務(wù)準(zhǔn)備防護(hù)裝備常規(guī)實(shí)訓(xùn)著裝01教學(xué)設(shè)備計(jì)算機(jī)平臺(tái)02教學(xué)工具Dev-C++,MicrosoftVisualStudio03一、概述(一)C++的概念C++,讀作“C加加”,是“CPlusPlus”的簡(jiǎn)稱(chēng),是一門(mén)以C語(yǔ)言為基礎(chǔ)發(fā)展而來(lái)的面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言。自1983年由BjarneStroustrup教授在貝爾實(shí)驗(yàn)室創(chuàng)立開(kāi)始至今,已經(jīng)發(fā)展了近40年。C++從最初的Cwithclass,經(jīng)歷了從C++98、C++03、C++11、C++14到C++17再到C++20等多次標(biāo)準(zhǔn)化改造,功能得到了極大的豐富,已經(jīng)演變?yōu)橐婚T(mén)集面向過(guò)程、面向?qū)ο?、函?shù)式、泛型和元編程等多種編程范式的復(fù)雜編程語(yǔ)言。它是一種靜態(tài)類(lèi)型的、編譯式的、通146用的、大小寫(xiě)敏感的、不規(guī)則的編程語(yǔ)言,綜合了高級(jí)語(yǔ)言和低級(jí)語(yǔ)言的特點(diǎn),通常被認(rèn)為是中級(jí)程序設(shè)計(jì)語(yǔ)言。一、概述階段內(nèi)容Cwithclasses類(lèi)及派生類(lèi)、公有和私有成員、類(lèi)的構(gòu)造和析構(gòu)、友元、內(nèi)聯(lián)函數(shù)、賦值運(yùn)算符重載等C++1.0添加虛函數(shù)概念,函數(shù)和運(yùn)算符重載,引用、常量等C++2.0更加完善支持面向?qū)ο?,新增保護(hù)成員、多重繼承、對(duì)象的初始化、抽象類(lèi)、靜態(tài)成員以及const成員函數(shù)C++3.0進(jìn)一步完善,引入模板,解決多重繼承產(chǎn)生的二義性問(wèn)題和相應(yīng)構(gòu)造和析構(gòu)的處理C++98C++標(biāo)準(zhǔn)第一個(gè)版本,絕大多數(shù)編譯器都支持,得到了國(guó)際標(biāo)準(zhǔn)化組織(ISO)和美國(guó)標(biāo)準(zhǔn)化協(xié)會(huì)認(rèn)可,以模板方式重寫(xiě)C++標(biāo)準(zhǔn)庫(kù),引入了STL(標(biāo)準(zhǔn)模板庫(kù))C++03C++標(biāo)準(zhǔn)第二個(gè)版本,語(yǔ)言特性無(wú)大改變,主要:修訂錯(cuò)誤、減少多異性C++05C++標(biāo)準(zhǔn)委員會(huì)發(fā)布了一份計(jì)數(shù)報(bào)告(TechnicalReport,TR1),正式更名C++0x,即:計(jì)劃在本世紀(jì)第一個(gè)10年的某個(gè)時(shí)間發(fā)布C++11增加了許多特性,使得C++更像一種新語(yǔ)言,比如:正則表達(dá)式、基于范圍for循環(huán)、auto關(guān)鍵字、新容器、列表初始化、標(biāo)準(zhǔn)線程庫(kù)等C++14對(duì)C++11的擴(kuò)展,主要是修復(fù)C++11中漏洞以及改進(jìn),比如:泛型的lambda表達(dá)式,auto的返回值類(lèi)型推導(dǎo),二進(jìn)制字面常量等C++17在C++11上做了一些小幅改進(jìn),增加了19個(gè)新特性,比如:static_assert()的文本信息可選,F(xiàn)old表達(dá)式用于可變的模板,if和switch語(yǔ)句中的初始化器等C++20自C++11以來(lái)最大的發(fā)行版,引入了許多新的特性,比如:模塊(Modules)、協(xié)程(Coroutines)、范圍(Ranges)、概念(Constraints)等重大特性,還有對(duì)已有特性的更新:比如Lambda支持模板、范圍for支持初始化等C++23制定ing(二)C++的發(fā)展簡(jiǎn)史(三)C++語(yǔ)言的主要特點(diǎn)01.與C語(yǔ)言兼容02.數(shù)據(jù)封裝和數(shù)據(jù)隱藏03.繼承和重用一、概述04.多態(tài)性C++與C語(yǔ)言完全兼容,C語(yǔ)言的絕大部分內(nèi)容可以直接用于C++的程序設(shè)計(jì),用C語(yǔ)言編寫(xiě)的程序可以不加修改地用于C++。在C++中,類(lèi)是支持?jǐn)?shù)據(jù)封裝的工具,對(duì)象則是數(shù)據(jù)封裝的實(shí)現(xiàn)。C++通過(guò)建立用戶定義類(lèi)支持?jǐn)?shù)據(jù)封裝和數(shù)據(jù)隱藏。在C++現(xiàn)有類(lèi)的基礎(chǔ)上可以聲明新類(lèi)型,這就是繼承和重用的思想。多態(tài)性形成由父類(lèi)和它們的子類(lèi)組成的一個(gè)樹(shù)型結(jié)構(gòu)。(四)C++的開(kāi)發(fā)環(huán)境由IBM開(kāi)發(fā)的免費(fèi)開(kāi)源的IDEEclipse微軟開(kāi)發(fā)的開(kāi)源代碼編輯器,適用于所有類(lèi)型的操作系統(tǒng)VisualStudioCode由Apache軟件基金會(huì)開(kāi)發(fā),被C++開(kāi)發(fā)人員認(rèn)為是最好用的IDE之一NetBeans一、概述由Jetbrains開(kāi)發(fā),是C++程序員最推薦的跨平臺(tái)IDECLion開(kāi)放源代碼的IDE,是Qt被Nokia收購(gòu)后推出的輕量級(jí)集成開(kāi)發(fā)環(huán)境QtCreator二、C++基本概念和語(yǔ)法(一)程序編譯和運(yùn)行C++和C語(yǔ)言類(lèi)似,也要經(jīng)過(guò)編譯和鏈接后才能運(yùn)行。前面所述的C++IDE,除了可以編輯C++源代碼,還可以實(shí)現(xiàn)C++的編譯、鏈接、調(diào)試和運(yùn)行。與C語(yǔ)言源代碼文件后綴統(tǒng)一為.c不同,在不同的編譯器下,C++語(yǔ)言源代碼文件的后綴名并不相同。以下是幾款主流的編譯器對(duì)應(yīng)的C++源代碼文件后綴:(1)MicrosoftVisualC++:cpp、cxx、cc(2)GCC:cpp、cxx、cc、c++、C(3)BorlandC++:cpp(4)Unix:C、cc、cxx二、C++基本概念和語(yǔ)法(二)命名空間C++使用命名空間的目的是對(duì)標(biāo)識(shí)符的名稱(chēng)進(jìn)行本地化,以避免命名沖突或名字污染。namespaceA{ File*fp=NULL;}namespaceB{ File*fp=NULL;}使用變量、函數(shù)時(shí)要指明它們所在的命名空間。以上面的fp變量為例,可以這樣使用:A::fp=fopen("one.txt","r");B::fp=fopen("two.txt","rb+");二、C++基本概念和語(yǔ)法(三)頭文件早期的C++還不完善,不支持命名空間,沒(méi)有自己的編譯器,是在使用C語(yǔ)言的庫(kù),stdio.h、stdlib.h、string.h等頭文件依然有效;此外C++也開(kāi)發(fā)了一些新的庫(kù),增加了自己的頭文件,例如:和C語(yǔ)言一樣,C++頭文件仍然以.h為后綴,它們所包含的類(lèi)、函數(shù)、宏等都是全局范圍的。后來(lái)C++引入了命名空間的概念,重新編寫(xiě)庫(kù),將類(lèi)、函數(shù)、宏等都統(tǒng)一納入一個(gè)命名空間,這個(gè)命名空間的名字就是std。iostream.h:用于控制臺(tái)輸入輸出頭文件。fstream.h:用于文件操作的頭文件。complex.h:用于復(fù)數(shù)計(jì)算的頭文件。為了避免頭文件重名,新版C++庫(kù)也對(duì)頭文件的命名做了調(diào)整,去掉了后綴.h:iostream.h→iostream,fstream.h→fstream對(duì)于原來(lái)C語(yǔ)言的頭文件,也采用同樣的方法,但在每個(gè)名字前還要添加一個(gè)c字母:stdio.h→cstdio,stdlib.h→cstdlib二、C++基本概念和語(yǔ)法(四)數(shù)據(jù)類(lèi)型和變量bool布爾型,占1個(gè)字節(jié)內(nèi)存,取值為0或1。01char字符型,占1個(gè)字節(jié)內(nèi)存,取值范圍為0到255或-128到127,因編譯器而定。02int整型,占4個(gè)字節(jié),取值范圍為-2147483648到2147483647。03float單精度型,占4個(gè)字節(jié),所能表示范圍為(1.17549e-038)到(3.40282e+038)。04double雙精度類(lèi)型,占8個(gè)字節(jié),所能表示范圍為(2.22507e-308)到(1.79769e+308)。05longdouble長(zhǎng)雙精度類(lèi)型,占16個(gè)字節(jié),可提供18-19位有效數(shù)字。06wchar_t寬字符類(lèi)型,占2或4個(gè)字節(jié)。07二、C++基本概念和語(yǔ)法(四)數(shù)據(jù)類(lèi)型和變量變量是程序可操作的存儲(chǔ)區(qū)的名稱(chēng)。C++變量的名稱(chēng)可以由字母(大小寫(xiě)不同)、數(shù)字和下劃線字符組成,必須以字母或下劃線開(kāi)頭。C++是強(qiáng)類(lèi)型語(yǔ)言,所有的變量在可以使用前,必須要進(jìn)行定義。變量定義就是告訴編譯器在何處創(chuàng)建變量的存儲(chǔ),以及如何創(chuàng)建變量的存儲(chǔ)。在語(yǔ)法上,變量定義需要指定一個(gè)數(shù)據(jù)類(lèi)型,并包含了該類(lèi)型的一個(gè)或多個(gè)變量的列表,如: inti,j,k;該語(yǔ)句聲明并定義了變量i、j和k,指示編譯器創(chuàng)建類(lèi)型為int,名為i、j、k的變量。變量可以在聲明的時(shí)候被初始化(指定一個(gè)初始值)。初始化器由一個(gè)等號(hào),后跟一個(gè)常量表達(dá)式組成:intd=3,k=5;如果變量在定義式未初始化,則帶有靜態(tài)存儲(chǔ)持續(xù)時(shí)間的變量會(huì)被隱式初始化為NULL(所有字節(jié)的值都是0),其他所有變量的初始值是未定義的。二、C++基本概念和語(yǔ)法(五)運(yùn)算符(1)算術(shù)運(yùn)算符:+(加)、-(減)、*(乘)、/(除)、%(模)、++(自增)、--(自減)。(2)關(guān)系運(yùn)算符:==(相等)、!=(不等)、>(大于)、<(小于)、>=(大等于)、<=(小等于)(3)邏輯運(yùn)算符:&&(邏輯與)、||(邏輯或)、!(邏輯非)。(4)位運(yùn)算符:&(按位與)、|(按位或)、^(按位異或)、~(按位取反)、<<(二進(jìn)制左移)、>>(二進(jìn)制右移)。(5)賦值運(yùn)算符:=(簡(jiǎn)單賦值)、+=(加且賦值)、-=(減且賦值)、*=(乘且賦值)、/=(除且賦值)、%/(模且賦值)、<<=(左移且賦值)、>>=(右移且賦值)、&=(按位與且賦值)、|=(按位或且賦值)、^=(按位異或且賦值)。(6)雜項(xiàng)運(yùn)算符:sizeof(計(jì)算變量所占內(nèi)存大?。ondition?X:Y(條件運(yùn)算符,如果Condition為真則值為X,否則為Y)、->(成員運(yùn)算符)、Cast(強(qiáng)制轉(zhuǎn)換運(yùn)算符)、&(指針運(yùn)算符,返回變量在內(nèi)存中的地址)、*(指針運(yùn)算符,返回指針變量的值)。二、C++基本概念和語(yǔ)法(六)控制語(yǔ)句條件語(yǔ)句if語(yǔ)句if…else語(yǔ)句switch語(yǔ)句循環(huán)語(yǔ)句for循環(huán)while循環(huán)do…while循環(huán)二、C++基本概念和語(yǔ)法(六)控制語(yǔ)句條件語(yǔ)句if語(yǔ)句if…else語(yǔ)句switch語(yǔ)句if語(yǔ)句if(boolean_expression){//如果boolea_expression為true要執(zhí)行的語(yǔ)句}if…else語(yǔ)句if(boolean_expression){//如果boolea_expression為true時(shí)要執(zhí)行的語(yǔ)句}else{//如果boolea_expression為false時(shí)要執(zhí)行的語(yǔ)句}if…else語(yǔ)句還可以寫(xiě)成if…elseif…elseSwitch語(yǔ)句switch(expression){casevalue1://expression值為value1時(shí)要執(zhí)行的語(yǔ)句break;//可選casevalue2://expression值為value2時(shí)要執(zhí)行的語(yǔ)句break;//可選default://可選//缺省情況下要執(zhí)行的語(yǔ)句(即expression值都不等于各case值時(shí))}循環(huán)語(yǔ)句for循環(huán)while循環(huán)do…while循環(huán)二、C++基本概念和語(yǔ)法(六)控制語(yǔ)句for循環(huán)for(init;condition;increment){//要循環(huán)執(zhí)行的語(yǔ)句,即循環(huán)主體}while循環(huán)while(condition){//要循環(huán)執(zhí)行的語(yǔ)句,即循環(huán)主體}do…while循環(huán)do{//要循環(huán)執(zhí)行的語(yǔ)句,即循環(huán)主體}二、C++基本概念和語(yǔ)法(七)輸入輸出C++的輸入/輸出發(fā)生在流中,流是字節(jié)序列。輸入操作:字節(jié)流是從設(shè)備(如鍵盤(pán)、磁盤(pán)驅(qū)動(dòng)器、網(wǎng)絡(luò)連接等)流向內(nèi)存輸出操作:字節(jié)流是從內(nèi)存流向設(shè)備(如顯示屏、打印機(jī)、磁盤(pán)驅(qū)動(dòng)器、網(wǎng)絡(luò)連接等)C++提供了包括輸入、輸出、錯(cuò)誤、日志、文件等在內(nèi)的輸入/輸出流,涉及到以下幾個(gè)主要的頭文件:<iostream><iomanip><fstream>01標(biāo)準(zhǔn)輸出流coutcout對(duì)象“連接”到標(biāo)準(zhǔn)輸出設(shè)備(通常是顯示屏),與流插入運(yùn)算符<<結(jié)合使用。02標(biāo)準(zhǔn)輸入流cincin對(duì)象附屬到標(biāo)準(zhǔn)輸入設(shè)備(通常是鍵盤(pán)),與流提取運(yùn)算符>>結(jié)合使用。03標(biāo)準(zhǔn)錯(cuò)誤流cerrcerr對(duì)象附屬到標(biāo)準(zhǔn)輸出設(shè)備(通常也是顯示屏),但是cerr對(duì)象是非緩沖的,且每個(gè)流插入到cerr都會(huì)立即輸出。04標(biāo)準(zhǔn)日志流clogclog對(duì)象附屬到標(biāo)準(zhǔn)輸出設(shè)備(通常也是顯示屏),與cerr不同,clog對(duì)象是緩沖的。三、類(lèi)和對(duì)象類(lèi)是C++的核心特性,它包含了數(shù)據(jù)表示法和用于處理數(shù)據(jù)的方法。類(lèi)中的數(shù)據(jù)、方法和函數(shù)稱(chēng)為類(lèi)的成員。類(lèi)是創(chuàng)建對(duì)象的模板,一個(gè)類(lèi)可以創(chuàng)建多個(gè)對(duì)象,每個(gè)對(duì)象都是類(lèi)類(lèi)型的一個(gè)變量。創(chuàng)建對(duì)象的過(guò)程也叫類(lèi)的實(shí)例化。每個(gè)對(duì)象都是類(lèi)的一個(gè)具體實(shí)例(Instance),擁有類(lèi)的成員變量和成員函數(shù)。與結(jié)構(gòu)體一樣,類(lèi)只是一種復(fù)雜數(shù)據(jù)類(lèi)型的聲明,不占用內(nèi)存空間。而對(duì)象是類(lèi)這種數(shù)據(jù)類(lèi)型的一個(gè)變量,或者說(shuō)是通過(guò)類(lèi)這種數(shù)據(jù)類(lèi)型創(chuàng)建出來(lái)的一份真實(shí)的數(shù)據(jù),所以占用內(nèi)存空間。三、類(lèi)和對(duì)象創(chuàng)建一個(gè)Student類(lèi):classStudent{ public: //成員變量 char*name; intage; floatscore; //成員函數(shù) voidstudentInfo(){ cout<<name<<"的年齡是"<<age<<",成績(jī)是"<<score<<endl; }};有了Student類(lèi)后,就可以通過(guò)它來(lái)創(chuàng)建對(duì)象了,如:StudentzhangSan;創(chuàng)建對(duì)象以后,可以使用點(diǎn)號(hào).來(lái)訪問(wèn)成員變量和成員函數(shù),這和通過(guò)結(jié)構(gòu)體變量來(lái)訪問(wèn)它的成員相類(lèi)似,如:zhangS=“張三”;zhangSan.age=16;zhangSan.score=95;zhangSan.studentInfo();三、類(lèi)和對(duì)象類(lèi)和對(duì)象的其它關(guān)鍵概念如下:02構(gòu)造函數(shù)和析構(gòu)函數(shù)03友元函數(shù)/類(lèi)01訪問(wèn)修飾符05this指針06靜態(tài)成員04內(nèi)聯(lián)函數(shù)四、繼承和派生繼承(Inheritance)是類(lèi)與類(lèi)之間的關(guān)系,與現(xiàn)實(shí)世界中的繼承類(lèi)似。繼承可以理解為一個(gè)類(lèi)從另一個(gè)類(lèi)獲取成員變量和成員函數(shù)的過(guò)程。派生(Derive)和繼承是一個(gè)概念,只是站的角度不同。被繼承的類(lèi)稱(chēng)為父類(lèi)或基類(lèi),繼承的類(lèi)稱(chēng)為子類(lèi)或派生類(lèi)。以下是兩種典型的使用繼承的場(chǎng)景:當(dāng)創(chuàng)建的新類(lèi)與現(xiàn)有的類(lèi)相似,只是多出若干成員變量或成員函數(shù)時(shí),可以使用繼承,這樣不但會(huì)減少代碼量,而且新類(lèi)會(huì)擁有基類(lèi)的所有功能。當(dāng)需要?jiǎng)?chuàng)建多個(gè)類(lèi),并且這些類(lèi)之間擁有很多相似的成員變量或成員函數(shù)時(shí),也可以使用繼承。此時(shí),可以將這些類(lèi)的共同成員提取出來(lái),定義為基類(lèi),然后從基類(lèi)繼承,既可以節(jié)省代碼,也方便后續(xù)修改成員。四、繼承和派生//基類(lèi)PeopleclassPeople{ public: voidsetname(char*name); voidsetage(intage); char*getname(); intgetage(); private: char*m_name; intm_age;};//派生類(lèi)StudentclassStudent:publicPeople{ public: voidsetscore(floatscore); floatgetscore(); private: floatm_score;};可以看到,類(lèi)繼承的語(yǔ)法為:class子類(lèi)名:[繼承方式]父類(lèi)名{ //子類(lèi)新添加的成員}其中,繼承方式包括public(公有的)、private(私有的)和protected(受保護(hù)的),該項(xiàng)是可選的,如果不寫(xiě),那么默認(rèn)為private。五、多態(tài)和虛函數(shù)“多態(tài)(polymorphism)”指的是同一名字的事物可以完成不同的功能。多態(tài)可以分為編譯時(shí)的多態(tài)和運(yùn)行時(shí)的多態(tài)。前者主要是指函數(shù)的重載(包括運(yùn)算符的重載)、對(duì)重載函數(shù)的調(diào)用,在編譯時(shí)就能根據(jù)實(shí)參確定應(yīng)該調(diào)用哪個(gè)函數(shù),因此叫編譯時(shí)的多態(tài);而后者則和繼承、虛函數(shù)等概念有關(guān)。C++的多態(tài)意味著調(diào)用成員函數(shù)時(shí),會(huì)根據(jù)調(diào)用函數(shù)的對(duì)象的類(lèi)型來(lái)執(zhí)行不同的函數(shù)。為了實(shí)現(xiàn)這個(gè)目的,C++引入了“虛函數(shù)”的概念。虛函數(shù)的定義非常簡(jiǎn)單,只需要在函數(shù)聲明前面增加virtual關(guān)鍵字,如:virtualvoiddisplay();C++中虛函數(shù)的唯一用處就是構(gòu)成多態(tài)。有了虛函數(shù),基類(lèi)指針指向基類(lèi)對(duì)象時(shí)就使用基類(lèi)的成員(包括成員函數(shù)和成員變量),指向派生類(lèi)對(duì)象時(shí)就使用派生類(lèi)的成員。換句話說(shuō),基類(lèi)指針可以按照基類(lèi)的方式來(lái)做事,也可以按照派生類(lèi)的方式來(lái)做事,它有多種形態(tài),或者說(shuō)有多種表現(xiàn)方式,這就是多態(tài)。六、異常處理C++的異常是指在程序運(yùn)行時(shí)發(fā)生的特殊情況或錯(cuò)誤,比如嘗試除以零的操作。異常提供了一種轉(zhuǎn)移程序控制權(quán)的方式。C++異常處理涉及到三個(gè)關(guān)鍵字:try、catch、throw。throw:當(dāng)問(wèn)題出現(xiàn)時(shí),程序會(huì)拋出一個(gè)異常。catch:用于捕獲異常,在想要處理問(wèn)題的地方,通過(guò)異常處理程序捕獲異常。try:try塊中的代碼標(biāo)識(shí)將被激活的特定異常。它后面通常跟著一個(gè)或多個(gè)catch塊。六、異常處理以下是C++異常處理的示例程序:try{ //保護(hù)代碼}catch(ExceptionNamee1){ //catch塊}catch(ExceptionNamee2){ //catch塊}catch(ExceptionNameeN)160{ //catch塊}以下是嘗試除以零時(shí)拋出異常的實(shí)例:doubledivision(inta,intb){ if(b==0) { throw"Divisionbyzerocondition!"; } return(a/b);}六、異常處理C++提供了一系列標(biāo)準(zhǔn)的異常,定義在<exception>中。std::exception該異常是所有標(biāo)準(zhǔn)C++異常的父類(lèi)。std::bad_alloc在使用new分配內(nèi)存空間時(shí),內(nèi)存空間不夠時(shí)就會(huì)拋出該異常。std::bad_cast當(dāng)對(duì)引用類(lèi)型的動(dòng)態(tài)轉(zhuǎn)換未通過(guò)運(yùn)行時(shí)檢查時(shí)拋出該異常.std::bad_exception一些未知的異常,可以通過(guò)此類(lèi)拋出來(lái)。std::bad_typeid當(dāng)獲取類(lèi)型失敗時(shí)會(huì)拋出此異常。std::logic_error邏輯錯(cuò)誤類(lèi),可以通過(guò)繼承此類(lèi)來(lái)拋出一些邏輯的錯(cuò)誤,用于自定義邏輯錯(cuò)誤。std::domain_error自定義異常類(lèi)型,用戶可以通過(guò)拋出此異常來(lái)描述自己的自定義異常,拋出的類(lèi)型只能是constchar*,主要用于標(biāo)識(shí)告訴調(diào)用者在核心函數(shù)里發(fā)生了異常。std::invalid_argument當(dāng)使用了無(wú)效的參數(shù)時(shí),會(huì)拋出該異常。std::length_error當(dāng)長(zhǎng)度超出規(guī)定值時(shí)可以通過(guò)此異常拋出。std::out_of_range數(shù)組發(fā)生越界時(shí)可以通過(guò)此異常類(lèi)型拋出.std::runtime_error當(dāng)運(yùn)行時(shí)發(fā)生了異常,可以通過(guò)繼承此類(lèi)來(lái)拋出異常。std::overflow_error當(dāng)發(fā)生數(shù)學(xué)上溢時(shí),會(huì)拋出該異常。std::range_error當(dāng)嘗試存儲(chǔ)超出范圍的值時(shí),會(huì)拋出該異常。std::underflow_error當(dāng)發(fā)生數(shù)學(xué)下溢時(shí),會(huì)拋出該異常。任務(wù)實(shí)施按照前面所了解的知識(shí)內(nèi)容和小組內(nèi)部討論的結(jié)果,制定工作方案,落實(shí)各項(xiàng)工作負(fù)責(zé)人,如任務(wù)實(shí)施前的準(zhǔn)備工作、實(shí)施中主要操作及協(xié)助支持工作、實(shí)施過(guò)程中相關(guān)要點(diǎn)及數(shù)據(jù)的記錄工作等。ThankYou智能網(wǎng)聯(lián)汽車(chē)
計(jì)算平臺(tái)部署與測(cè)試
ROS的安裝與使用目錄01.C++的認(rèn)知02.Python的認(rèn)知03.ROS的認(rèn)知04.ROS的安裝05.ROS文件系統(tǒng)的構(gòu)建06.ROS通信系統(tǒng)的構(gòu)建02.Python的認(rèn)知易于學(xué)習(xí)且功能強(qiáng)大的編程語(yǔ)言從鍵盤(pán)輸入三個(gè)數(shù)字,用Python程序?qū)⒆畲笾嫡页?,并輸出結(jié)果。任務(wù)描述(1)掌握Python程序的結(jié)構(gòu)、函數(shù)的結(jié)構(gòu)和程序開(kāi)發(fā)過(guò)程(2)掌握算法的特性和程序的三種基本結(jié)構(gòu),能夠使用流程圖或N-S圖來(lái)描述算法(3)熟練使用順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)編寫(xiě)程序,解決實(shí)際問(wèn)題(4)能夠熟練的使用函數(shù)編寫(xiě)程序,掌握函數(shù)的定義、聲明、調(diào)用及參數(shù)的傳遞方式(5)掌握面向?qū)ο蟮某绦蛟O(shè)計(jì)、類(lèi)屬性與實(shí)例屬性、類(lèi)方法與實(shí)例方法、構(gòu)造函數(shù)與析(6)能夠用Python表達(dá)式表達(dá)實(shí)際問(wèn)題,具有解決簡(jiǎn)單應(yīng)用問(wèn)題程序設(shè)計(jì)能力(7)具有解決綜合應(yīng)用問(wèn)題程序設(shè)計(jì)能力、程序閱讀能力和程序調(diào)試能力,建立結(jié)構(gòu)化程序設(shè)計(jì)與面向?qū)ο蟪绦蛟O(shè)計(jì)的思想(8)養(yǎng)成善于思考、深入研究的良好自主學(xué)習(xí)的習(xí)慣和創(chuàng)新精神(9)培養(yǎng)結(jié)構(gòu)化程序設(shè)計(jì)思想和良好的編碼規(guī)范(10)培養(yǎng)細(xì)致縝密的工作態(tài)度、團(tuán)結(jié)協(xié)作的良好品質(zhì)、溝通交流和書(shū)面表達(dá)能力(11)養(yǎng)成愛(ài)崗敬業(yè)、遵守職業(yè)道德規(guī)范、誠(chéng)實(shí)、守信的高尚品質(zhì)。任務(wù)目標(biāo)任務(wù)準(zhǔn)備防護(hù)裝備常規(guī)實(shí)訓(xùn)著裝01教學(xué)設(shè)備計(jì)算機(jī)平臺(tái)02教學(xué)工具IDLE、Anaconda303一、概述(一)什么是PythonPython是一種直譯式,面向?qū)ο螅忉屖降哪_本語(yǔ)言,是極少數(shù)能兼具簡(jiǎn)單和功能強(qiáng)大的編程語(yǔ)言。Python是一款易于學(xué)習(xí)且功能強(qiáng)大的編程語(yǔ)言。它具有高效率的數(shù)據(jù)結(jié)構(gòu),能夠簡(jiǎn)單且有效地實(shí)現(xiàn)面向?qū)ο蟮木幊獭ython以其簡(jiǎn)潔的語(yǔ)言和動(dòng)態(tài)輸入的特性,加上解釋性語(yǔ)言的本質(zhì),使其成為一種在多領(lǐng)域與絕大多數(shù)平臺(tái)都能進(jìn)行腳本編寫(xiě)和快速應(yīng)用開(kāi)發(fā)的理想語(yǔ)言。Python語(yǔ)言在系統(tǒng)運(yùn)維、圖形處理、數(shù)學(xué)處理、文本處理、數(shù)據(jù)庫(kù)編程、網(wǎng)絡(luò)編程、web編程、多媒體應(yīng)用、pymo引擎、黑客編程、爬蟲(chóng)編寫(xiě)、機(jī)器學(xué)習(xí)、人工智能等領(lǐng)域得到廣泛的應(yīng)用。一、概述(二)Python發(fā)展簡(jiǎn)史版本發(fā)布年份主要新特性Python1.01994第一個(gè)正式版本,僅支持最基本的編程功能Python2.02000引入了廣泛的改進(jìn),包括內(nèi)存管理的改進(jìn)和新的類(lèi)型Python2.52006增加了@裝飾器語(yǔ)法、全面的with語(yǔ)句支持Python2.62008引入了xrange,在大數(shù)據(jù)集上性能有明顯改進(jìn)Python2.72010支持with語(yǔ)句的重要補(bǔ)充,以及其他小改進(jìn)和bug修復(fù)Python3.02008不完全向后兼容Python2的新版本,主要改進(jìn)了類(lèi)型安全和錯(cuò)誤處理Python3.12008增加了super()函數(shù)和os.urandom()Python3.22011增加了collections模塊中的Counter和OrderedDict類(lèi)型Python3.32012引入了@裝飾器的函數(shù)形式,以及hash()的一致性Python3.42014引入了venv模塊,用于虛擬環(huán)境Python3.52015增加了@裝飾器的復(fù)合表達(dá)式,以及PEP465和PEP466Python3.62016增加了typing模塊,以及PEP523(**kwargs在函數(shù)注解中的應(yīng)用)Python3.72018增加了數(shù)據(jù)類(lèi),并發(fā)性改進(jìn),以及PEP572(運(yùn)行時(shí)變量注解)Python3.82019增加了assignmentexpression(:=)(三)Python語(yǔ)言的主要特點(diǎn)一、概述01.簡(jiǎn)單02.易學(xué)03.免費(fèi)、開(kāi)源04.高層語(yǔ)言05.可移植性06.解釋性07.面向?qū)ο?8.可擴(kuò)展性09.豐富的庫(kù)10.規(guī)范的代碼(四)Python的開(kāi)發(fā)環(huán)境由JetBrains打造的一款PythonIDE。PyCharm還提供了一些很好的功能用于Django開(kāi)發(fā),同時(shí)支持GoogleAppEngine。PyCharm是一個(gè)跨平臺(tái)的編輯器。具有漂亮的用戶界面和強(qiáng)大的功能。使用SublimeTExt的插件擴(kuò)展功能,可以輕松地打造一款不錯(cuò)的PythonIDE。SublimeTExt可以為多種語(yǔ)言提供集成開(kāi)發(fā)環(huán)境。PyDev項(xiàng)目實(shí)現(xiàn)了一個(gè)功能強(qiáng)大的Eclipse插件,能夠?qū)clipse當(dāng)作PythonIDE。EclipsewithPydev一、概述由微軟開(kāi)發(fā)且跨平臺(tái)的免費(fèi)源代碼編輯器。該軟件支持語(yǔ)法高亮、代碼自動(dòng)補(bǔ)全、代碼重構(gòu)、查看定義功能,并且內(nèi)置了命令行工具和Git版本控制系統(tǒng)。使用MonacoEditor作為其底層的代碼編輯器。VSCode二、Python基本概念和語(yǔ)法(一)Python程序的運(yùn)行交互式編程交互式編程不需要?jiǎng)?chuàng)建腳本文件,是通過(guò)Python解釋器的交互模式進(jìn)來(lái)編寫(xiě)代碼。在Ubuntu終端上輸入Python命令即可啟動(dòng)交互式編程。提示窗口如圖所示:在python提示符“>>>”后面輸入語(yǔ)句print(“Hello,Python!”),然后按下Enter鍵,就可以在屏幕上看到該語(yǔ)句的運(yùn)行結(jié)果,如圖所示。二、Python基本概念和語(yǔ)法(一)Python程序的運(yùn)行腳本編程通過(guò)腳本參數(shù)調(diào)用解釋器開(kāi)始執(zhí)行腳本,直到腳本執(zhí)行完畢。當(dāng)腳本執(zhí)行完成后,解釋器不再有效。以一個(gè)最簡(jiǎn)單的Python腳本程序?yàn)槔⑷鐖D所示的源代碼拷貝至test.py文件中,注意所有的Python文件都是以.py為擴(kuò)展名的。然后在Ubuntu終端上執(zhí)行如下命令:pythontest.py,在屏幕上同樣能看到該程序的運(yùn)行結(jié)果,如圖所示。二、Python基本概念和語(yǔ)法(二)Python的基礎(chǔ)語(yǔ)法標(biāo)識(shí)符Python的標(biāo)識(shí)符由字母、數(shù)字、下劃線組成。標(biāo)識(shí)符可以包括英文、數(shù)字以及下劃線(_)的任何組合,但不能以數(shù)字開(kāi)頭。Python的標(biāo)識(shí)符是區(qū)分大小寫(xiě)的。以下劃線開(kāi)頭的標(biāo)識(shí)符具有特殊意義。以單下劃線開(kāi)頭_foo的標(biāo)識(shí)符代表不能直接訪問(wèn)的類(lèi)屬性,需通過(guò)類(lèi)提供的接口進(jìn)行訪問(wèn),并且不能用fromxxximport*來(lái)導(dǎo)入。以雙下劃線開(kāi)頭的__foo代表類(lèi)的私有成員。以雙下劃線開(kāi)頭和結(jié)尾的__foo__是Python中特殊方法的專(zhuān)用標(biāo)識(shí),如__init__()代表類(lèi)的構(gòu)造函數(shù)。二、Python基本概念和語(yǔ)法(二)Python的基礎(chǔ)語(yǔ)法縮進(jìn)縮進(jìn)的空白字符數(shù)是可變的,但是所有代碼塊語(yǔ)句必須包含相同的縮進(jìn)空白字符數(shù)(空格或Tab),這個(gè)必須嚴(yán)格執(zhí)行,否則會(huì)發(fā)生如下錯(cuò)誤:IndentationError:unindentdoesnotmatchanyouterindentationlevelIndentationError:unexpectedindentPython對(duì)格式要求非常嚴(yán)格。在Python的代碼塊中必須使用相同數(shù)目的行首縮進(jìn)空白字符。建議在每個(gè)縮進(jìn)層次使用單個(gè)制表符或兩個(gè)空格或四個(gè)空格,切記不能混用。注釋Python注釋分為單行注釋和多行注釋。單行注釋采用#開(kāi)頭。注釋可以在語(yǔ)句或表達(dá)式行末。多行注釋使用三個(gè)單引號(hào)'''或三個(gè)雙引號(hào)"""。二、Python基本概念和語(yǔ)法(三)變量變量是存儲(chǔ)在內(nèi)存中的值,基于變量的數(shù)據(jù)類(lèi)型,解釋器會(huì)為它分配指定的內(nèi)存,并決定什么數(shù)據(jù)可以被存儲(chǔ)在該內(nèi)存區(qū)域中。因此,變量可以分為不同的數(shù)據(jù)類(lèi)型,可以是整數(shù),小數(shù)或字符等。與C++等語(yǔ)言不同,Python的變量在賦值時(shí)創(chuàng)建,不需要事先進(jìn)行類(lèi)型聲明。每個(gè)變量在內(nèi)存中創(chuàng)建,都包括變量的標(biāo)識(shí),名稱(chēng)和數(shù)據(jù)這些信息。等號(hào)”=“用來(lái)給變量賦值,等號(hào)的左邊是一個(gè)變量名,等號(hào)的右邊則是存儲(chǔ)在該變量中的值,例如:二、Python基本概念和語(yǔ)法(三)變量Numbers(數(shù)字)是表示數(shù)值的數(shù)據(jù)類(lèi)型。支持四種不同的數(shù)字類(lèi)型。01String(字符串)由數(shù)字、字母、下劃線組成的一串字符。是表示文本的數(shù)據(jù)類(lèi)型。02List(列表)是使用最頻繁的數(shù)據(jù)類(lèi)型。可以完成大多數(shù)集合類(lèi)的數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)。03Tuple(元組)類(lèi)似于List,用()標(biāo)識(shí)。內(nèi)部元素之間用逗號(hào)隔開(kāi)。不能二次賦值,相當(dāng)于只讀列表。04Dictionary(字典)是Python語(yǔ)言除List以外最靈活的內(nèi)置數(shù)據(jù)結(jié)構(gòu)類(lèi)型。05二、Python基本概念和語(yǔ)法(四)運(yùn)算符運(yùn)算符是一種告訴解釋器執(zhí)行特定的數(shù)學(xué)或邏輯操作的符號(hào)。Python內(nèi)置了豐富的運(yùn)算符,并提供了以下類(lèi)型的運(yùn)算符:1)算術(shù)運(yùn)算符:+(加)、—(減)、*(乘)、/(除)、%(模)、**(冪)、//(取整除)2)比較運(yùn)算符:=(等于)、!=(不等于)、>(大于)、<(小于)、>=(大等于)、<=(小等于)3)賦值運(yùn)算符:=(簡(jiǎn)單賦值)、+=(加且賦值)、-=(減且賦值)、*=(乘且賦值)、/=(除且賦值)、%/(模且賦值)、**=(冪且賦值)、//=(取整除且賦值)4)位運(yùn)算符:&(按位與)、|(按位或)、^(按位異或)、~(按位取反)、<<(二進(jìn)制左移)、>>(二進(jìn)制右移)5)邏輯運(yùn)算符:and(邏輯與)、or(邏輯或)、not(邏輯非)6)成員運(yùn)算符:in(如果在指定的序列中找到值返回True,否則返回False)、notin(如果在指定的序列中沒(méi)有找到值返回True,否則返回False)7)身份運(yùn)算符:is(判斷兩個(gè)標(biāo)識(shí)符是不是引用自同一個(gè)對(duì)象)、isnot(是判斷兩個(gè)標(biāo)識(shí)符是不是引用自不同對(duì)象)二、Python基本概念和語(yǔ)法(五)控制語(yǔ)句條件語(yǔ)句if語(yǔ)句循環(huán)語(yǔ)句for循環(huán)while循環(huán)循環(huán)控制語(yǔ)句二、Python基本概念和語(yǔ)法(五)控制語(yǔ)句條件語(yǔ)句if語(yǔ)句if語(yǔ)句用于條件語(yǔ)句的判斷和執(zhí)行:if判斷條件:執(zhí)行語(yǔ)句……else:執(zhí)行語(yǔ)句……當(dāng)需要判斷多種情況時(shí),可以使用以下形式:if判斷條件1:執(zhí)行語(yǔ)句1……elif判斷條件2:執(zhí)行語(yǔ)句2……elif判斷條件3:執(zhí)行語(yǔ)句3……else:174執(zhí)行語(yǔ)句4……其中“判斷條件”成立時(shí),則執(zhí)行后面的語(yǔ)句,而執(zhí)行內(nèi)容可以多行,以縮進(jìn)來(lái)區(qū)分表示同一范圍。當(dāng)“判斷條件”不成立時(shí),執(zhí)行else后面的執(zhí)行語(yǔ)句。由于python并不支持switch語(yǔ)句,所以多個(gè)條件判斷,只能用elif來(lái)實(shí)現(xiàn)。如果需要多個(gè)條件同時(shí)判斷時(shí),可以使用邏輯運(yùn)算符進(jìn)行條件組合判斷。二、Python基本概念和語(yǔ)法(五)控制語(yǔ)句for循環(huán)可以遍歷任何序列的項(xiàng)目,如一個(gè)列表或者一個(gè)字符串:foriterating_varinsequence:statements(s)以下是示例代碼片段:forletterin'Python':print("當(dāng)前字母:%s"%letter)該代碼片段將逐行輸出字符串Python的每一個(gè)字符。while語(yǔ)句用于循環(huán)執(zhí)行程序,即在滿足某種條件時(shí),循環(huán)執(zhí)行某段代碼:while判斷條件(condition):執(zhí)行語(yǔ)句(statements)……執(zhí)行語(yǔ)句可以是單個(gè)語(yǔ)句或語(yǔ)句塊,當(dāng)判斷條件為False時(shí),循環(huán)結(jié)束。count=0while(count<9):print'Thecountis:',countcount=count+1該代碼片段將逐行輸出0到8這幾個(gè)數(shù)。循環(huán)控制語(yǔ)句可以更改循環(huán)體語(yǔ)句執(zhí)行的順序:break:在語(yǔ)句塊執(zhí)行過(guò)程中終止循環(huán),并且跳出整個(gè)循環(huán)。continue:在語(yǔ)句塊執(zhí)行過(guò)程中終止當(dāng)前循環(huán),跳出該次循環(huán),執(zhí)行下一次循環(huán)。pass:空語(yǔ)句,目的是為了保持程序結(jié)構(gòu)的完整性。循環(huán)語(yǔ)句for循環(huán)while循環(huán)循環(huán)控制語(yǔ)句二、Python基本概念和語(yǔ)法(六)輸入輸出01標(biāo)準(zhǔn)輸出函數(shù)print是最簡(jiǎn)單的標(biāo)準(zhǔn)輸出函數(shù),可以接受零個(gè)或多個(gè)用逗號(hào)隔開(kāi)的表達(dá)式作為參數(shù)。該函數(shù)把參數(shù)轉(zhuǎn)換成一個(gè)字符串表達(dá)式,并將結(jié)果寫(xiě)到標(biāo)準(zhǔn)輸出如:Print“你好,Python”
屏幕上將會(huì)顯示“你好,Python”。02鍵盤(pán)輸入函數(shù)Python提供了兩個(gè)內(nèi)置函數(shù)從標(biāo)準(zhǔn)輸入讀入一行文本,默認(rèn)的標(biāo)準(zhǔn)輸入是鍵盤(pán)。(1)raw_input(2)input03文件讀寫(xiě)(1)打開(kāi)文件:在訪問(wèn)文件前,必須使用open()函數(shù)打開(kāi)該文件,創(chuàng)建一個(gè)file對(duì)象,然后才能進(jìn)行后續(xù)的文件訪問(wèn)操作。(2)關(guān)閉文件:完成所有的文件訪問(wèn)操作后,調(diào)用close()函數(shù)關(guān)閉該文件是個(gè)很好的習(xí)慣。close()方法刷新緩沖區(qū)里任何還沒(méi)寫(xiě)入的信息,并關(guān)閉該文件,這之后便不能再進(jìn)行寫(xiě)入。(3)讀文件:read()方法從一個(gè)打開(kāi)的文件中讀取一個(gè)字符串。需要注意的是,Python字符串可以是二進(jìn)制數(shù)據(jù),而不是僅僅是文字。(4)寫(xiě)文件:write()方法可將任何字符串寫(xiě)入一個(gè)打開(kāi)的文件。需要注意的是,Python字符串可以是二進(jìn)制數(shù)據(jù),而不是僅僅是文字。(5)文件定位:tell()方法返回文件當(dāng)前的讀寫(xiě)位置,seek(offset[,from])方法改變當(dāng)前文件的讀寫(xiě)位置異常是Python對(duì)象,表示一個(gè)錯(cuò)誤事件,該事件會(huì)在程序執(zhí)行過(guò)程中發(fā)生,影響程序的正常執(zhí)行。一般情況下,Python無(wú)法正常處理程序時(shí)就會(huì)拋出一個(gè)異常。當(dāng)Python腳本發(fā)生異常時(shí),我們需要捕獲并處理它,否則程序會(huì)終止執(zhí)行。在Python中,可以使用try/except語(yǔ)句來(lái)捕獲并處理異常。二、Python基本概念和語(yǔ)法(七)異常處理try:<語(yǔ)句塊>#運(yùn)行正常代碼except<異常1>:<語(yǔ)句塊1>#如果在try部分引發(fā)了異常1except<異常2>:<語(yǔ)句塊2>#如果引發(fā)了異常2else:<語(yǔ)句塊3>#如果沒(méi)有異常發(fā)生二、Python基本概念和語(yǔ)法(七)異常處理以下是示例代碼片段:try: fh=open("testfile","w") fh.write("這是一個(gè)測(cè)試文件,用于測(cè)試異常")exceptIOError: print"錯(cuò)誤:沒(méi)有找到文件或?qū)懳募 癳lse: print"內(nèi)容寫(xiě)入文件成功" fh.close()如果文件訪問(wèn)過(guò)程中出現(xiàn)錯(cuò)誤,系統(tǒng)將捕獲該異常,并在屏幕上顯示"錯(cuò)誤:沒(méi)有找到文件或?qū)懳募?提示信息。如果文件訪問(wèn)成功,系統(tǒng)將會(huì)在屏幕上顯示"內(nèi)容寫(xiě)入文件成功"提示信息。二、Python基本概念和語(yǔ)法(七)異常處理BaseException所有異常的基類(lèi)SystemExit解釋器請(qǐng)求退出KeyboardInterrupt用戶中斷執(zhí)行(通常是輸入^C)Exception常規(guī)錯(cuò)誤的基類(lèi)StopIteration迭代器沒(méi)有更多的值GeneratorExit生成器(generator)發(fā)生異常來(lái)通知退出StandardError所有的內(nèi)建標(biāo)準(zhǔn)異常的基類(lèi)ArithmeticError所有數(shù)值計(jì)算錯(cuò)誤的基類(lèi)FloatingPointError浮點(diǎn)計(jì)算錯(cuò)誤OverflowError數(shù)值運(yùn)算超出最大限制ZeroDivisionError除(或取模)零(所有數(shù)據(jù)類(lèi)型)AssertionError斷言語(yǔ)句失敗AttributeError對(duì)象沒(méi)有這個(gè)屬性EOFError沒(méi)有內(nèi)建輸入,到達(dá)EOF標(biāo)記EnvironmentError操作系統(tǒng)錯(cuò)誤的基類(lèi)IOError輸入/輸出操作失敗OSError操作系統(tǒng)錯(cuò)誤WindowsError系統(tǒng)調(diào)用失敗ImportError導(dǎo)入模塊/對(duì)象失敗LookupError無(wú)效數(shù)據(jù)查詢的基類(lèi)二、Python基本概念和語(yǔ)法(七)異常處理IndexError序列中沒(méi)有此索引(index)KeyError映射中沒(méi)有這個(gè)鍵MemoryError內(nèi)存溢出錯(cuò)誤(對(duì)于Python解釋器不是致命的)NameError未聲明/初始化對(duì)象(沒(méi)有屬性)UnboundLocalError訪問(wèn)未初始化的本地變量ReferenceError弱引用(Weakreference)試圖訪問(wèn)已經(jīng)垃圾回收了的對(duì)象RuntimeError一般的運(yùn)行時(shí)錯(cuò)誤NotImplementedError尚未實(shí)現(xiàn)的方法SyntaxErrorPython語(yǔ)法錯(cuò)誤IndentationError縮進(jìn)錯(cuò)誤TabErrorTab和空格混用SystemError一般的解釋器系統(tǒng)錯(cuò)誤TypeError對(duì)類(lèi)型無(wú)效的操作ValueError傳入無(wú)效的參數(shù)UnicodeErrorUnicode相關(guān)的錯(cuò)誤UnicodeDecodeErrorUnicode解碼時(shí)的錯(cuò)誤UnicodeEncodeErrorUnicode編碼時(shí)錯(cuò)誤UnicodeTranslateErrorUnicode轉(zhuǎn)換時(shí)錯(cuò)誤Warning警告的基類(lèi)DeprecationWarning關(guān)于被棄用的特征的警告FutureWarning關(guān)于構(gòu)造將來(lái)語(yǔ)義會(huì)有改變的警告OverflowWarning舊的關(guān)于自動(dòng)提升為長(zhǎng)整型(long)的警告PendingDeprecationWarning關(guān)于特性將會(huì)被廢棄的警告RuntimeWarning可疑的運(yùn)行時(shí)行為(runtimebehavior)的警告SyntaxWarning可疑的語(yǔ)法的警告UserWarning用戶代碼生成的警告任務(wù)實(shí)施從鍵盤(pán)輸入三個(gè)數(shù)字,判斷三個(gè)數(shù)字中的最大值。本任務(wù)可通過(guò)窮舉各種大小關(guān)系,將最大的值找出來(lái);也可假定三個(gè)數(shù)字中的num1最大,將其賦值給max_num,然后將其與剩下的兩個(gè)值進(jìn)行逐一比較來(lái)實(shí)現(xiàn);也可使用內(nèi)置的max()函數(shù)來(lái)實(shí)現(xiàn);還可使用三目運(yùn)算符來(lái)實(shí)現(xiàn)。最后兩種方法的代碼量最少,也更簡(jiǎn)單。ThankYou智能網(wǎng)聯(lián)汽車(chē)
計(jì)算平臺(tái)部署與測(cè)試
ROS的安裝與使用目錄01.C++的認(rèn)知02.Python的認(rèn)知03.ROS的認(rèn)知04.ROS的安裝05.ROS文件系統(tǒng)的構(gòu)建06.ROS通信系統(tǒng)的構(gòu)建03.ROS的認(rèn)知開(kāi)源的機(jī)器人軟件平臺(tái)任務(wù)描述大家熟悉的家用掃地機(jī)器人在作業(yè)過(guò)程中,通過(guò)APP制定的房間地圖和指定的路徑行走,完成清潔任務(wù)。想要實(shí)現(xiàn)這一系列的功能,離不開(kāi)一個(gè)能夠獲取圖形信息自主建圖以及能夠智能導(dǎo)航的系統(tǒng)。而這個(gè)系統(tǒng)恰好就像“心臟”,能夠提供一個(gè)成熟有效的管理機(jī)制和豐富的資源,讓所有模塊都能夠高效運(yùn)作起來(lái)。這個(gè)核心系統(tǒng)的研發(fā)也是機(jī)器人、無(wú)人駕駛等領(lǐng)域發(fā)展的關(guān)鍵。經(jīng)過(guò)近二十年的技術(shù)發(fā)展,機(jī)器人操作系統(tǒng)(ROS)是目前最主流的技術(shù)框架,應(yīng)用非常廣泛。主管希望你向新同事講解ROS的主要特性與常見(jiàn)的功能工具。(1)了解ROS的概念。(2)了解ROS發(fā)行了哪些版本。了解ROS的特性。(3)能夠說(shuō)出ROS的基本構(gòu)成。(4)能夠說(shuō)出ROS版本以及對(duì)應(yīng)的Ubuntu系統(tǒng)版本。(5)獲得多途徑檢索知識(shí)、分析解決問(wèn)題以及多元化思考解決問(wèn)題的方法,形成創(chuàng)新意識(shí)。(6)具有良好的團(tuán)隊(duì)協(xié)作精神和較強(qiáng)的組織溝通能力。(7)具備良好的職業(yè)道德,尊重他人勞動(dòng),不竊取他人成果。任務(wù)目標(biāo)任務(wù)準(zhǔn)備防護(hù)裝備常規(guī)實(shí)訓(xùn)著裝01教學(xué)設(shè)備安裝有ROS系統(tǒng)的計(jì)算機(jī)平臺(tái)02教學(xué)工具ROS03一、概述什么是ROSROS(RobotOperatingSystem)是一個(gè)開(kāi)源的機(jī)器人軟件平臺(tái),能為異質(zhì)計(jì)算機(jī)集群提供類(lèi)似操作系統(tǒng)的功能,包括硬件抽象描述、底層驅(qū)動(dòng)程序管理、公用功能執(zhí)行、程序間消息傳遞以及程序包發(fā)行管理等,可以極大地簡(jiǎn)化繁雜多樣的機(jī)器人平臺(tái)上的復(fù)雜任務(wù)創(chuàng)建和穩(wěn)定行為控制。ROS可以說(shuō)是?前機(jī)器?相關(guān)開(kāi)源社區(qū)最流?的項(xiàng)?之?,它是?個(gè)易?且完備的機(jī)器?開(kāi)發(fā)框架、?態(tài)乃?社區(qū),海量的機(jī)器?開(kāi)源項(xiàng)?(涵蓋感知、規(guī)劃、控制、定位、SLAM和建圖、可視化等?乎所有機(jī)器?領(lǐng)域)均使?ROS作為基礎(chǔ)。目前,ROS的應(yīng)用領(lǐng)域除了自動(dòng)駕駛和智能網(wǎng)聯(lián)汽車(chē)外,還包括物流倉(cāng)儲(chǔ)、工業(yè)生產(chǎn)和交通管理等。一、概述ROS發(fā)展簡(jiǎn)史ROS版本的演進(jìn)起源于2007年斯坦福大學(xué)人工智能實(shí)驗(yàn)室與機(jī)器人技術(shù)公司W(wǎng)illowGarage之間的合作,之后主要由WillowGarage來(lái)繼續(xù)研發(fā),目前這個(gè)項(xiàng)目已經(jīng)轉(zhuǎn)由開(kāi)源機(jī)器人基金會(huì)(OSRF)維護(hù)。ROS1.0版本發(fā)布于2010年,基于PR2機(jī)器人開(kāi)發(fā)了一系列機(jī)器人相關(guān)的基礎(chǔ)軟件包。一、概述ROS發(fā)展簡(jiǎn)史ROS2版本的演進(jìn)ROS2是從底層開(kāi)始全面重新開(kāi)發(fā)的新一代機(jī)器人操作系統(tǒng),不是ROS的簡(jiǎn)單升級(jí)。它有如下特點(diǎn):(1)?持多機(jī)器?;(2)對(duì)?型嵌?式設(shè)備和微控制器的?持;(3)實(shí)時(shí)系統(tǒng):?持實(shí)時(shí)控制,包括進(jìn)程間和機(jī)器間通信的實(shí)時(shí)性;(4)?持?理想?絡(luò)環(huán)境:在低質(zhì)量高延遲等網(wǎng)絡(luò)環(huán)境下系統(tǒng)仍然能夠?作;(5)對(duì)產(chǎn)品環(huán)境的?持的能力;(6)規(guī)范的編程模型以?持基于ROS的?規(guī)模?的構(gòu)建、開(kāi)發(fā)和部署。二、ROS的主要特點(diǎn)ROS的運(yùn)行架構(gòu)是一種使用ROS通信機(jī)制實(shí)現(xiàn)模塊間P2P松耦合協(xié)作的處理架構(gòu)。這種通訊機(jī)制包括基于服務(wù)的同步RPC通訊、基于Topic的異步數(shù)據(jù)流通訊,以及參數(shù)服務(wù)器上的數(shù)據(jù)存儲(chǔ)等,但是ROS本身不具備實(shí)時(shí)性。精簡(jiǎn)與集成基于ROS的系統(tǒng)具有模塊化的特點(diǎn),每個(gè)模塊都可以單獨(dú)編譯。豐富的工具包為了管理復(fù)雜的軟件框架,ROS利用大量的小工具去編譯和運(yùn)行多樣的ROS組件。開(kāi)源免費(fèi)ROS所有的源代碼都是公開(kāi)發(fā)布的,這有利于ROS各層軟件的調(diào)試和整合,不斷地改正錯(cuò)誤。點(diǎn)對(duì)點(diǎn)設(shè)計(jì)ROS的點(diǎn)對(duì)點(diǎn)設(shè)計(jì)以及服務(wù)和節(jié)點(diǎn)管理機(jī)制可以分散由計(jì)算機(jī)視覺(jué)和語(yǔ)音識(shí)別等功能帶來(lái)的實(shí)時(shí)計(jì)算壓力。多語(yǔ)言支持利用簡(jiǎn)單的、編程語(yǔ)言無(wú)關(guān)的接口定義語(yǔ)言去描述模塊之間的消息交互協(xié)議,支持多種不同的編程語(yǔ)言。三、ROS的總體框架文件系統(tǒng)級(jí)描述ROS程序文件如何組織和構(gòu)建計(jì)算圖級(jí)描述ROS程序如何運(yùn)行開(kāi)源社區(qū)級(jí)描述ROS程序的分布式管理ROS的總體結(jié)構(gòu),從代碼的維護(hù)者和分布情況來(lái)分,可以主要分成兩個(gè)部分:main:核心部分,它提供了一些分布式計(jì)算的基本工具,以及整個(gè)ROS核心代碼。universe:全球范圍的代碼,由不同國(guó)家的ROS社區(qū)組織開(kāi)發(fā)和維護(hù)。這些代碼又可以分為庫(kù)級(jí)、功能級(jí)和應(yīng)用級(jí)代碼。三、ROS的總體框架計(jì)算圖級(jí)描述ROS程序如何運(yùn)行
計(jì)算圖是ROS處理數(shù)據(jù)的一種點(diǎn)對(duì)點(diǎn)的網(wǎng)絡(luò)形式。ROS程序運(yùn)行時(shí),所有進(jìn)程以及相關(guān)的數(shù)據(jù)處理,都會(huì)通過(guò)點(diǎn)對(duì)點(diǎn)的網(wǎng)絡(luò)形式表現(xiàn)出來(lái)。計(jì)算圖級(jí)包括幾個(gè)重要概念:節(jié)點(diǎn)(node)消息(message)話題(topic)服務(wù)(service)ROS節(jié)點(diǎn)管理器(ROSMaster)三、ROS的總體框架ROS中有無(wú)數(shù)的節(jié)點(diǎn)、消息、服務(wù)、工具和庫(kù)文件,需要一個(gè)有效結(jié)構(gòu)去管理這些代碼文件。在ROS的文件系統(tǒng)級(jí)中,有兩個(gè)重要概念:文件系統(tǒng)級(jí)描述ROS程序文件如何組織和構(gòu)建包(package)ROS的軟件以包的形式組織起來(lái),包包含節(jié)點(diǎn)、ROS依賴(lài)庫(kù)、數(shù)據(jù)文件、配置文件、第三方軟件以及任何其它的邏輯構(gòu)成。包的目標(biāo)是提供一種易于使用的結(jié)構(gòu)以便更方便地實(shí)現(xiàn)軟件復(fù)用。堆(stack)堆是包的集合,提供比包更完整的功能。堆與版本號(hào)關(guān)聯(lián),同時(shí)也是發(fā)行ROS軟件的關(guān)鍵。開(kāi)源社區(qū)級(jí)描述ROS程序的分布式管理三、ROS的總體框架主要是指ROS資源的獲取和分享。通過(guò)獨(dú)立的網(wǎng)絡(luò)社區(qū),軟件開(kāi)發(fā)人員可以共享和獲取知識(shí)、算法和代碼,開(kāi)源社區(qū)的大力支持使得ROS系統(tǒng)得以快速成長(zhǎng)。這些資源包括:發(fā)行版(Distribution)軟件庫(kù)(Repository)ROS維基(ROSWiki)Bug提交系統(tǒng)(BugTicketSystem)郵件列表(Mailinglist)ROS問(wèn)答(ROSAnswer)博客(Blog)四、ROS開(kāi)發(fā)常用工具rvizGazeborqt工具TF坐標(biāo)變換rviz是ROS提供的一款三維可視化平臺(tái),它的主要目的是以三維方式顯示ROS消息,可以將數(shù)據(jù)進(jìn)行可視化表達(dá),另一方面它還可以給對(duì)象發(fā)布控制信息,從?實(shí)現(xiàn)對(duì)機(jī)器?的監(jiān)測(cè)與控制。rviz的典型界面如圖所示:四、ROS開(kāi)發(fā)常用工具rvizGazeborqt工具TF坐標(biāo)變換gazebo是一款免費(fèi)的機(jī)器人仿真軟件,能提供高保真度的物理模擬,一整套傳感器模型,以及對(duì)用戶和程序非常友好的交互方式。啟動(dòng)后的界面如圖所示:gazebo具有如下特點(diǎn):動(dòng)力學(xué)仿真三維可視化環(huán)境傳感器仿真可擴(kuò)展插件多種機(jī)器人模型TCP/IP傳輸云仿真終端工具四、ROS開(kāi)發(fā)常用工具rvizGazeborqt工具TF坐標(biāo)變換rqt集成了30多種工具,可以作為一個(gè)綜合的GUI工具來(lái)使用。rqt是基于Qt(一個(gè)廣泛用于計(jì)算機(jī)編程的GUI編程的跨平臺(tái)框架)開(kāi)發(fā)的,是一個(gè)圖形化用戶接口框架,它允許以插件的形式來(lái)實(shí)現(xiàn)各種圖形工具和接口,因此用戶可以方便自由地開(kāi)發(fā)和添加rqt插件。四、ROS開(kāi)發(fā)常用工具rvizGazeborqt工具TF坐標(biāo)變換在Ubuntu終端上執(zhí)行命令rqt,就可以進(jìn)入rqt的圖形窗口,進(jìn)行各種管理和調(diào)試操作,如圖所示。進(jìn)入上方菜單欄的Plugins(插件),里面有很多十分有用的用于ROS調(diào)試的插件,包括:topicsmonitormessagepublishermessagetypebrowerrobotsteeringbagnode_graphprocessmonitorlaunchimageviewplottftreerviz除了在rqt菜單中選擇插件之外,還可以在Ubuntu終端上執(zhí)行專(zhuān)用的命令,也可以達(dá)到同樣的調(diào)試效果。四、ROS開(kāi)發(fā)常用工具rvizGazeborqt工具TF坐標(biāo)變換TF(TransformFrame)就是坐標(biāo)轉(zhuǎn)換,包括了位置和姿態(tài)兩個(gè)方面的變換。TF軟件包實(shí)現(xiàn)ROS系統(tǒng)的坐標(biāo)變換,能讓用戶隨時(shí)間變化跟蹤多個(gè)參考系。TF使用一種樹(shù)形數(shù)據(jù)結(jié)構(gòu),根據(jù)時(shí)間緩沖并維護(hù)多個(gè)參考系之間的坐標(biāo)變換關(guān)系,以幫助用戶在任意時(shí)間,將點(diǎn)、向量等數(shù)據(jù)的坐標(biāo)在兩個(gè)參考系中完成坐標(biāo)變換。任務(wù)實(shí)施按照前面所了解的知識(shí)內(nèi)容和小組內(nèi)部討論的結(jié)果,制定工作方案,落實(shí)各項(xiàng)工作負(fù)責(zé)人,如任務(wù)實(shí)施前的準(zhǔn)備工作、實(shí)施中主要操作及協(xié)助支持工作、實(shí)施過(guò)程中相關(guān)要點(diǎn)及數(shù)據(jù)的記錄工作等。ThankYou智能網(wǎng)聯(lián)汽車(chē)
計(jì)算平臺(tái)部署與測(cè)試
ROS的安裝與使用任務(wù)4ROS的安裝目錄01.任務(wù)描述02.任務(wù)目標(biāo)03.任務(wù)準(zhǔn)備04.知識(shí)準(zhǔn)備05.任務(wù)實(shí)施06.評(píng)價(jià)反饋01.任務(wù)描述
目前,ROS的安裝是基于Linux系統(tǒng),在實(shí)現(xiàn)ROS的安裝之前,需要確認(rèn)已經(jīng)正確安裝好Ubuntu18.04系統(tǒng),主管要求你協(xié)助新人完成ROS的安裝與配置,你能完成這個(gè)任務(wù)嗎?02.任務(wù)目標(biāo)通過(guò)學(xué)習(xí),希望同學(xué)們完成以下任務(wù)。了解能夠安裝ROS的平臺(tái)。熟悉ROS的安裝方法。熟悉ROS安裝過(guò)程中常見(jiàn)問(wèn)題的解決方法。能夠根據(jù)不同的Ubuntu系統(tǒng)選擇對(duì)應(yīng)版本的ROS。能夠在常見(jiàn)的硬件平臺(tái)上安裝正確的ROS版本。能夠解決安裝過(guò)程中常見(jiàn)的問(wèn)題。具有良好的團(tuán)隊(duì)協(xié)作精神和較強(qiáng)的組織溝通能力。具備良好的職業(yè)道德。獲得多途徑檢索知識(shí)、分析解決問(wèn)題以及多元化思考解決問(wèn)題的方法,形成創(chuàng)新意識(shí)。03.任務(wù)準(zhǔn)備常規(guī)實(shí)訓(xùn)著裝防護(hù)裝備安裝有ROS系統(tǒng)的計(jì)算機(jī)平臺(tái)教學(xué)設(shè)備ROS教學(xué)工具04.知識(shí)準(zhǔn)備
到目前為止ROS發(fā)布了ROS1.0、BoxTurtle、CTurtle、Diamondback、ElectricEmys、GroovyGalapagos、Indigo1gloo、JadeTurile、KineticKame、LunarLoggerhead、MelodicMorenia和Noctic等版本。目前,使用比較廣泛的ROS版本是KineticKame和Melodic。一、ROS的發(fā)行版本W(wǎng)illowGarage于2007年1月啟動(dòng),并于2007年11月7日向SourceForge提交了第一份ROS代碼。WillowGarage公司和斯坦福大學(xué)人工智能實(shí)驗(yàn)室合作以后,在2009年初推出了ROS0.4,這是一個(gè)測(cè)試版的ROS,之后的版本才正式開(kāi)啟了ROS的發(fā)展成熟之路。在2010年1月22日,ROS1.0正式亮相。著名的ROSBoxTurtle版是2010年3月1日首次發(fā)布的,ROS中的許多堆棧在此版本中都有其最初的1.0版本。CTurtle于2010年8月2日發(fā)布,是ROS發(fā)行版的第二個(gè)版本。它主要是對(duì)ROSBox'Turtle中已經(jīng)發(fā)布的庫(kù)進(jìn)行增量更新。此后,和Ubunlu、Android系統(tǒng)一樣,每個(gè)版本都以C、D等按字母順序起名。Diamondback是ROS發(fā)行版的第三個(gè)版本,于2011年3月2日發(fā)布。它包含40多個(gè)新堆棧,包括對(duì)Kinect的支持、來(lái)自不斷發(fā)展的ROS社區(qū)的貢獻(xiàn)堆棧,以及點(diǎn)云庫(kù)的穩(wěn)定版本。Diamondback的設(shè)計(jì)比ROSCTurtle更小、更輕,且更易于配置。ElectricEmys于2011年8月30日發(fā)布,將ROS支持?jǐn)U展到許多新平臺(tái),如Android和Arduino。ROSFuerteTurtle是ROS發(fā)行版的第五個(gè)版本,于2012年4月23日發(fā)布。ROSFuerte進(jìn)行了重大改進(jìn),使其更容易與其他軟件框架和工具集成。具體工作包括重寫(xiě)構(gòu)建系統(tǒng)、遷移到Qt框架,以及繼續(xù)過(guò)渡到獨(dú)立庫(kù)。ROS旨在使機(jī)器人代碼更具可復(fù)用性,此版本為下一代優(yōu)秀的機(jī)器人庫(kù)奠定了堅(jiān)實(shí)的基礎(chǔ)。ROSGroovyGalapagos是ROS發(fā)行版的第六個(gè)版本,于2012年12月31日發(fā)布。在此版本中,專(zhuān)注于ROS的核心基礎(chǔ)架構(gòu),使其更易于使用、更模塊化、更具可擴(kuò)展性,可在更多操作系統(tǒng)/硬件架構(gòu)/機(jī)器人上工.作,最重要的是進(jìn)一步讓ROS社區(qū)參與進(jìn)來(lái)。ROSHydroMedusa是ROS發(fā)行版的第七個(gè)版本,于2013年9月4日發(fā)布。在此版本中,專(zhuān)注于將ROS中的許多軟件包轉(zhuǎn)換為新的Catkin構(gòu)建系統(tǒng),同時(shí)修復(fù)和改進(jìn)核心ROS組件。此外,RViz和rql等工具也有許多改進(jìn)。ROSKineticKame是第十個(gè)ROS發(fā)行版,它于2016年5月23日發(fā)布。其主要基于Ubuntu16.04(Xenial)版本進(jìn)行更新,支持Q5,同時(shí)支持的(Gazebo官方版本為7.x系列。ROSMelodicMorenia是第十二個(gè)ROS發(fā)行版。它于2018年5月23日發(fā)布,主要針對(duì)Ubunlu18.04(Bionic)版本,Melodic是第一個(gè)使用C++14而不是C++11的ROS版本。時(shí)至今日,ROS已經(jīng)相繼更新推出了多種版本,供不同版本的Ubunlu開(kāi)發(fā)者使用。為了提供最穩(wěn)定的開(kāi)發(fā)環(huán)境,ROS的每個(gè)版本都有一個(gè)推薦運(yùn)行的Ubuntu版本。ROS的安裝有兩種方式,分別是軟件源安裝和源碼編譯安裝。二、ROS的安裝1.軟件源安裝
軟件源安裝是通過(guò)源碼包安裝,可以自行調(diào)整編譯參數(shù),最大化地定制安裝結(jié)果,能較好地防止新手在安裝過(guò)程中,因?yàn)橐恍﹨?shù)設(shè)置錯(cuò)誤而導(dǎo)致的安裝錯(cuò)誤。而且它也相對(duì)比較安全,能在一定程度上防止惡意篡改,它的卸載和遷徙過(guò)程也極為方便和簡(jiǎn)單。2.源碼編譯安裝
源碼編譯安裝是指將使用特定的格式和語(yǔ)法所書(shū)寫(xiě)的文本代碼編譯成二進(jìn)制語(yǔ)言后,在計(jì)算機(jī)上完成安裝。源碼編譯安裝的步驟多,需要手動(dòng)解決軟件之間的依賴(lài)性,比較煩瑣且編譯安裝時(shí)間長(zhǎng),編譯過(guò)程中如有報(bào)錯(cuò)初學(xué)者很難解決。
在本任務(wù)中,采用的安裝方式是軟件源安裝。三、安裝步驟(1)設(shè)置ROS相關(guān)軟件源。在Ubuntu終端上執(zhí)行如下命令:sudosh-c'echo"deb$(lsb_release-sc)main">/etc/apt/sources.list.d/ros-latest.list(2)設(shè)置秘鑰。在Ubuntu終端上執(zhí)行如下命令:sudoapt-keyadv--keyserver'hkp://:80'--recv-keyC1CF6E31E6BADE8868B172B4F42ED6FBAB17C654(3)更新系統(tǒng),確保軟件包索引是最新的。在Ubuntu終端上執(zhí)行如下命令:sudoaptupdate(4)安裝ROS軟件包。在Ubuntu終端上執(zhí)行如下命令:sudoaptinstallros-melodic-desktop-full(5)設(shè)置ROS環(huán)境變量。在Ubuntu終端上執(zhí)行如下命令:echo"source/opt/ros/melodic/setup.bash">>~/.bashrcsource~/.bashrc(6)安裝rosinstall及其依賴(lài)軟件包。在Ubuntu終端上執(zhí)行如下命令:sudoaptinstallpython-rosdeppython-rosinstallpython-rosinstall-generatorpython-wstoolbuild-essential(7)初始化rosdep。在Ubuntu終端上執(zhí)行如下命令:sudorosdepinitrosdepupdate注意:由于網(wǎng)絡(luò)原因,rosdepupdate可能會(huì)失敗。此時(shí)需要修改/usr/lib/python2.7/dist-packages/rosdep2/目錄下的sources_list.py、gbpdistro_support.py、rep3.py文件,將其中的DOWNLOAD_TIMEOUT數(shù)值改大(缺省為15.0秒,可以改成100秒以上),多執(zhí)行幾次。四、安裝驗(yàn)證在Ubuntu終端上執(zhí)行如下命令:roscore如果能成功運(yùn)行,說(shuō)明ROS已經(jīng)成功安裝,如圖所示。05.任務(wù)實(shí)施按照前面所了解的知識(shí)內(nèi)容和小組內(nèi)部討論的結(jié)果,制定工作方案,落實(shí)各項(xiàng)工作負(fù)責(zé)人,如任務(wù)實(shí)施前的準(zhǔn)備工作、實(shí)施中主要操作及協(xié)助支持工作、實(shí)施過(guò)程中相關(guān)要點(diǎn)及數(shù)據(jù)的記錄工作等06.評(píng)價(jià)反饋(1)各組代表展示匯報(bào)PPT,介紹任務(wù)的完成過(guò)程。(2)以小組為單位,請(qǐng)對(duì)各組的操作過(guò)程與操作結(jié)果進(jìn)行自評(píng)和互評(píng),并將結(jié)果填入綜合評(píng)價(jià)表中的小組評(píng)價(jià)部分。(3)教師對(duì)學(xué)生工作過(guò)程與工作結(jié)果進(jìn)行評(píng)價(jià),并將評(píng)價(jià)結(jié)果填入綜合評(píng)價(jià)表中的教師評(píng)價(jià)部分。ThankYou智能網(wǎng)聯(lián)汽車(chē)
計(jì)算平臺(tái)部署與測(cè)試
ROS的安裝與使用任務(wù)5ROS文件系統(tǒng)的構(gòu)建目錄01.任務(wù)描述02.任務(wù)目標(biāo)03.任務(wù)準(zhǔn)備04.知識(shí)準(zhǔn)備05.任務(wù)實(shí)施06.評(píng)價(jià)反饋01.任務(wù)描述
經(jīng)典機(jī)器人PR2依靠強(qiáng)大的ROS,可以獨(dú)立完成多種復(fù)雜的任務(wù),例如PR2可以自己開(kāi)門(mén)、找到插頭給自己充電、打開(kāi)冰箱取出啤酒、打簡(jiǎn)單的臺(tái)球等等。實(shí)現(xiàn)上述功能PR2需要安裝、調(diào)用相關(guān)的ROS功能包,而這些功能包均以文件的形式存放。文件系統(tǒng)作為ROS的基礎(chǔ)框架,想要使用ROS工程實(shí)現(xiàn)各式各樣的功能,首先需要認(rèn)識(shí)ROS工程,了解文件系統(tǒng)。在助理工程師開(kāi)始使用ROS之前,你作為測(cè)試工程師,準(zhǔn)備向他介紹Catkin編譯系統(tǒng)、工作空間的創(chuàng)建和結(jié)構(gòu)、功能包的創(chuàng)建和結(jié)構(gòu),介紹ROS文件系統(tǒng)中常見(jiàn)的目錄、文件以及這些目錄存放的主要內(nèi)容和相關(guān)文件中定義的主要內(nèi)容。02.任務(wù)目標(biāo)通過(guò)學(xué)習(xí),希望同學(xué)們完成以下任務(wù)。了解能夠安裝ROS的平臺(tái)。了解ROS文件系統(tǒng)的常見(jiàn)結(jié)構(gòu)。熟悉創(chuàng)建工作空間的方法。熟悉創(chuàng)建功能包的方法。能夠說(shuō)出ROS文件系統(tǒng)中常見(jiàn)的目錄、文件及其作用。能夠正確創(chuàng)建功能包。具有良好的團(tuán)隊(duì)協(xié)作精神和較強(qiáng)的組織溝通能力。具備良好的職業(yè)道德。獲得多途徑檢索知識(shí)、分析解決問(wèn)題以及多元化思考解決問(wèn)題的方法,形成創(chuàng)新意識(shí)。能夠正確創(chuàng)建工作空間。03.任務(wù)準(zhǔn)備常規(guī)實(shí)訓(xùn)著裝防護(hù)裝備安裝有ROS系統(tǒng)的計(jì)算機(jī)平臺(tái)教學(xué)設(shè)備ROS教學(xué)工具04.知識(shí)準(zhǔn)備ROS將所有文件按照一定的規(guī)則進(jìn)行組織,不同功能的文件被放在不同的文件夾下。在構(gòu)建ROS文件系統(tǒng)前,首先了解文件系統(tǒng)中常見(jiàn)的幾個(gè)概念。
對(duì)于源代碼包,只有編譯才能在系統(tǒng)上運(yùn)行。早期的ROS編譯系統(tǒng)是rosbuild,隨著ROS的發(fā)展,rosbuild不能很好地滿足系統(tǒng)的需求。在ROS的Groovy版本推出后,Catkin替代rosbuild正式投入使用。Catkin是ROS的官方構(gòu)建體系,是ROS構(gòu)建系統(tǒng)的繼承者,ROS構(gòu)建系統(tǒng)Catkin結(jié)合了CMake宏和Python腳本,在CMake的正常工作流之上提供了額外的功能。一、Catkin編譯系統(tǒng)Catkin的設(shè)計(jì)比rosbuild更為傳統(tǒng),具有更好的分發(fā)包、更好的交叉編譯支持和更好的可移植性。Catkin的工作流與CMake非常相似,但同時(shí)為自動(dòng)“查找包”基礎(chǔ)結(jié)構(gòu)和構(gòu)建多個(gè)依賴(lài)項(xiàng)目提供了支持時(shí)間。Catkin操作簡(jiǎn)單、高效,可移植性更好,而且支持交叉編譯和更加合理的功能包分配。目前版本的ROS同時(shí)支持rosbuild和Catkin兩種編譯系統(tǒng),但rosbuild已經(jīng)被逐步淘汰,所以我們直接上手Catkin即可。Catkin是基于CMake的編譯構(gòu)建系統(tǒng),具有以下特點(diǎn):(1)Catkin沿用了包管理的傳統(tǒng),例如find_package()基礎(chǔ)結(jié)構(gòu)、pkg-config。(2)擴(kuò)展了CMake,可自動(dòng)生成find_package()代碼、pkg-config文件。(3)操作簡(jiǎn)單、高效,可移植性更好。(4)支持交叉編譯和更加合理的功能包分配。二、工作空間
工作
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 煤直接液化操作工安全宣貫競(jìng)賽考核試卷含答案
- 海底管道保溫工標(biāo)準(zhǔn)化競(jìng)賽考核試卷含答案
- ??诰羰课枧嘤?xùn)課件
- 景泰藍(lán)磨藍(lán)工崗前理論考核試卷含答案
- 化妝品制造工崗前理論知識(shí)考核試卷含答案
- 老年人入住手續(xù)辦理制度
- 浪琴手表培訓(xùn)課件
- 酒店財(cái)務(wù)會(huì)計(jì)制度
- 超市商品庫(kù)存預(yù)警制度
- 預(yù)拌混凝土生產(chǎn)線技術(shù)改造項(xiàng)目環(huán)境影響報(bào)告表
- 煤礦“春節(jié)”放假停、復(fù)工安全技術(shù)措施
- 全新水利部事業(yè)單位考試歷年真題試題及答案
- 河湖健康評(píng)價(jià)指南(試行)
- 回款協(xié)議合同協(xié)議書(shū)
- DL∕T 5768-2018 電網(wǎng)技術(shù)改造工程工程量清單計(jì)算規(guī)范
- YST 581.1-2024《氟化鋁化學(xué)分析方法和物理性能測(cè)定方法 第1部分:濕存水含量和灼減量的測(cè)定 重量法》
- 鐵道客車(chē)運(yùn)用與維修-客整所旅客列車(chē)技術(shù)檢查及質(zhì)量要求
- 獅子王-中英文-劇本臺(tái)詞(全)
- 金蟬環(huán)保型黃金選礦劑使用說(shuō)明
- 常見(jiàn)中草藥別名大全
- YY/T 0884-2013適用于輻射滅菌的醫(yī)療保健產(chǎn)品的材料評(píng)價(jià)
評(píng)論
0/150
提交評(píng)論