智能網聯汽車計算平臺部署與測試 課件全套 于萬海 第1-5章 無人駕駛系統實現 - 無人駕駛汽車的架構建模與代碼生成+學習任務1、2_第1頁
智能網聯汽車計算平臺部署與測試 課件全套 于萬海 第1-5章 無人駕駛系統實現 - 無人駕駛汽車的架構建模與代碼生成+學習任務1、2_第2頁
智能網聯汽車計算平臺部署與測試 課件全套 于萬海 第1-5章 無人駕駛系統實現 - 無人駕駛汽車的架構建模與代碼生成+學習任務1、2_第3頁
智能網聯汽車計算平臺部署與測試 課件全套 于萬海 第1-5章 無人駕駛系統實現 - 無人駕駛汽車的架構建模與代碼生成+學習任務1、2_第4頁
智能網聯汽車計算平臺部署與測試 課件全套 于萬海 第1-5章 無人駕駛系統實現 - 無人駕駛汽車的架構建模與代碼生成+學習任務1、2_第5頁
已閱讀5頁,還剩175頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

智能網聯創新實驗室無人駕駛整體設計實現目錄1無人駕駛概述2無人駕駛結構3無人駕駛選型4關鍵技術淺析目錄1無人駕駛概述2無人駕駛結構3無人駕駛選型4關鍵技術淺析Page.

4無人駕駛概述Page.

5無人駕駛評價體系Page.

6無人駕駛分級Page.

7無人駕駛代表技術Page.

8智能駕駛輔助系統

ADAS目錄1無人駕駛概述2無人駕駛結構3無人駕駛選型4ROS基本命令Page.

10Page.

11無人駕駛結構Page.

12無人駕駛結構目錄1無人駕駛概述2無人駕駛結構3無人駕駛選型4ROS基本命令Page.

14無人駕駛結構Page.

15無人駕駛部件圖Page.

16無人駕駛控制器輸入電壓10V-14V功率350W接口CAN×6千兆以太網×11CVBS/LVDS×4HDMI×1usb3.0×2usb-cSD讀卡器尺寸164mm

寬)

x

360mm

深)

x174mm(高)重量4.7kgCPUIntel

I5-6500T顯卡NVIDIAGTX1070

8G內存16G

DDR4硬盤500G固態/1T固態(可選)系統Ubuntu16.06/Windows

10工作溫度0°C-80°C風扇24G網絡全網通定位精度1.2/0.5/

0.01SPS/DGNSS/RTK

(m)數據更新率800HzPage.

17無人駕駛器件主要慣性測量單元全球定位系統車輛控制總線感知融合系統感知融合系統Page.

18控制器件鏈接目錄1無人駕駛概念2無人駕駛結構3

無人駕駛選型 4關鍵技術淺析Page.

20無人駕駛關鍵技術場景認知決策規劃地圖定位擬人控制Page.

21無人駕駛關鍵技術謝謝!智能網聯創新實驗室無人駕駛系統目錄1ROS概述2ROS安裝3ROS框架4ROS基本命令目錄1ROS概述2ROS安裝3ROS框架4ROS基本命令Page

. 4Page

. 5無人駕駛結構Page

. 6無人駕駛結構Page

. 7ROS概述200020132014201520162017斯坦福大學機器人軟件系統框架2007 2010柳樹車庫Willow

Garage發起Page

. 8ROS概述200020132014201520162017斯坦福大學機器人軟件系統框架2007 2010柳樹車庫Willow

Garage發起LTSPage

. 9ROS

10年Page.

10ROS概述ROS(Robot

Operating

System)是一個適用于機器人的中間件/

操作系統。雖然ROS的名字為“機器人操作系統”,但不是真正的操作系統,只是說它可以提供類似于操作系統的一些服務,比如底層通訊,

分布式控制。對于機器人的相關功能,不使用ROS也能實現.

但ROS使得機器人軟件搭建的工作更方便,效率更高。Page.

11ROS概述+++Page.

12ROS概述+++分布式進程管理進程間通信Node節點Page.

13ROS概述+++仿真數據可視化圖形界面數據記錄Page.

14ROS概述+++控制規劃視覺建圖Page.

15ROS概述+++軟件包管理文檔教程Page.

16ROS概述ROSRepositories(>50)

Map:Page.

17ROS特點目錄1ROS概述2ROS安裝3ROS框架4ROS基本命令Page.

19ROS安裝1,配置Ubuntu系統打開軟件中心,選擇Edit,SoftWareSources,在Ubuntu

SoftWare一欄中選中

restricteduniverse

multiverse。2,配置

sources.listsudosh-c'echo"deb/ros/ubuntu

$(lsb_release-sc)main">

/etc/apt/sources.list.d/ros-latest.list‘3,安裝keyssudoapt-keyadv--keyserverhkp://--recv-key0xB01FA116Page.

20ROS安裝1,配置Ubuntu系統打開軟件中心,選擇Edit,SoftWareSources,在Ubuntu

SoftWare一欄中選中

restricteduniverse

multiverse。2,配置

sources.listsudosh-c'echo"deb/ros/ubuntu

$(lsb_release-sc)main">

/etc/apt/sources.list.d/ros-latest.list‘3,安裝keyssudoapt-keyadv--keyserverhkp://--recv-key0xB01FA116Page.

21ROS安裝4,安裝ROS更新源$sudoapt-get

update安裝桌面完整版$sudoapt-getinstall

ros-kinetic-desktop-full桌面安裝$sudoapt-getinstall

ros-kinetic-desktop5,初始化rosdeprosdep

能夠輕松的安裝系統依賴項目$sudorosdep

init$rosdep

update6,配置環境$echo"source/opt/ros/kinetic/setup.bash">>

~/.bashrc7,安裝rosinstallrosinstall可以很容易的為ROS功能包下載source樹$sudoapt-getinstall

python-rosinstallPage.

22ROS安裝Page.

23ROS安裝目錄1ROS概述2ROS安裝3ROS框架4ROS基本命令Page.

25ROS框架Page.

26ROS框架Page.

27ROS框架在工作空間下用tree命令,顯示文件結構Page.

28ROS框架Page.

29ROS框架Page.

30ROS框架Page.

31ROS框架Page.

32ROS框架文件系統級ROS文件系統級指的是可以在硬盤上查看的ROS源代碼,包括以下幾種形式:Message:消息的描述,定義ROS中發送的消息的數據結構,儲存在mypackage_name/msg/message_type.msg下Service:服務的描述,定義ROS中需求和響應的數據結構,儲存在mypackage_name/srv/service_type.srv下注意:為了簡化代碼量且更好的支持兼容各發行版的功能包,功能包集的概念已經在catkin中被移除。故文件系統級中的功能包集,StackManifest不再討論Page.

33ROS框架計算圖是ROS處理數據的一種點對點的網絡形式,描述程序是如何運行的。Page.

34ROS框架Page.

35ROS框架Page

. 36ROS欣賞目錄1ROS概念2ROS安裝3

ROS框架 4ROS基本命令Page.

38ROS基本命令我們將使用wiki上的包來講解,首先安裝tutorial軟件包sudoapt-getinstall

ros-indigo-ros-tutorialsrospack

獲取功能包的相關信息rospack<command>

[package_name]eg.

rospack

find

[package_name]

絕對路徑rospack

depends

[package_name]

輸出所有依賴項roscd

改變當前目錄到指定的功能包

絕對路徑roscd[locationname[/sub

dir]]rosls列出功能包包含的所有文件(夾)rosls[locationname[/subdir]]Page.

39ROS基本命令catkin_create_pkg

創建ROS功能包catkin_create_pkg[package_name][depend1][depend2]

[denpendn]catkin_make

編譯ROS功能包(rootdirectionof

catkin_ws)catkin_makecatkin_init_workspace

初始化工作空間

生成CMakeList.txt(directionofcatkin_ws/src)

catkin_init_workspaceTab

Completion

TAB補全Page.

40ROS基本命令節點都是各自獨立的可執行文件,節點能夠通過主題,服務或參數服務器與其他節點通信,ROS通過節點將代碼和功能解耦,提高了系統的容錯能力和可維護性。roscore

是你在運行所有ROS程序前首先要運行的命令,為了保證節點能通訊,至少要有一個roscore在運行,roscore定義為master+parameter

server+rosoutrosnode:rosnodepingrosnodelistrosnodeinforosnodemachinerosnodekillrosnode

cleanuptestconnectivityto

nodelistactive

nodesprintinformationabout

nodelistnodesrunningonaparticularmachineorlistmachineskillarunning

nodepurgeregistrationinformationofunreachable

nodesrosrunrosrun[--prefixcmd][--debug]PACKAGEEXECUTABLE

[ARGS]Page.

41ROS基本命令rqt_graph能夠創建一個顯示當前系統運行情況的動態圖形,我們借助它來學習主題和節點之間的關系,執行rosrunrqt_graph

rqt_graphrostopic:rostopicbwrostopicdelayrostopicechorostopicfindrostopichzrostopicinforostopiclistrostopicpubrostopic

typedisplaybandwidthusedby

topicdisplaydelayoftopicfromtimestampinheaderprintmessagesto

screenfindtopicsby

typedisplaypublishingrateoftopicprintinformationaboutactivetopiclistactive

topicspublishdatatotopicprinttopictype獲取幫助:rostopic

command

-hPage.

42ROS基本命令msg文件存放在package的msg目錄下,srv文件則存放在srv目錄下,實際上就是每行聲明一個數據類型和變量名。可以使用的數據類型如下:int8,int16,int32,int64(plus

uint*)float32,

float64stringtime,

durationothermsg

files(header)variable-lengtharray[]andfixed-length

array[C]創建和使用msg

srvrossrv/rosmsg:rossrv/rosmsg show Showservice/messagedescriptionrossrv/rosmsg listListall

services/messagesrossrv/rosmsgmd5Displayservice/message

md5sumrossrv/rosmsgpackageListservices/messagesina

packagerossrv/rosmsgpackagesListpackagesthatcontain

services/messagesPage.

43ROS基本命令服務是節點之間通訊的另一種方式。服務允許節點發送請求(request)并獲得一個響應(response)rosservice:rosserviceargsrosservicecallrosservicefindrosserviceinforosservicelistrosservicetyperosserviceuriprintservice

argumentscalltheservicewiththeprovidedargsfindservicesbyservice

typeprintinformationabout

servicelistactiveservicesprintservice

typeprintserviceROSRPC

uri獲取幫助:rosserverice

command

-h與rossrv區別:provides

information

related

to

ROS

service

definitionsPage.

44ROS基本命令參數服務器能夠存儲整型、浮點、布爾、字符串、字典和列表等數據類型。rosparam使用YAML標記語言的rosparam:rosparamsetrosparamgetrosparamloadrosparamdumprosparamdeleterosparam

listset

parameterget

parameterloadparametersfromfiledumpparameterstofiledelete

parameterlistparameter

names獲取幫助:rosparam

command

-hPage.

45ROS基本命令launch在ROS應用中,每個節點通常有許多參數需要設置,為了方便高效操作多個節點,可以編寫launch文件,然后用roslaunch命令運行roslaunch:roslaunch[options][package]<filename>[arg_name:=value...]roslaunch[options]<filename>[<filename>...]

[arg_name:=value...]launch文件的一般格式,參數:<launch><node

.../><rosparam

/><param

.../><include

.../><env

.../><remap

.../><arg.../></launch>Page.

46ROS框架Page

. 47ROS欣賞謝謝!智能網聯創新實驗室無人駕駛系統編成目錄1ROS編成2ROSCPP3ROSPY4ROSLISP目錄1ROS編成2ROSCPP3ROSPY4ROSLISPPage.

4ROS編成Page.

5ROS編程Page.

6ROS概述roscpp:ROS中的C++客戶端庫,執行效率高,在ROS中使用最廣泛。rospy:ROS中的python客戶端庫,使得ROS可以享有面向對象的腳本語言所帶來的便利。rospy注重開發效率而不是運行效率,master,roslaunch和很多工具都是采用rospy開發的。roslisp:用于LISP的客戶端庫,它目前用于開發規劃庫。其他實驗庫:rosjava,roslua目錄1ROS編成2ROSCPP3ROSPY4ROSLISPPage.

8ROSCPP簡單的主題發布者和主題訂閱者:編寫主題發布者節點需要:初始化ROS系統廣播消息:在foo主題上發布Foo_type_msg類型的消息已指定頻率發布消息到foo主題編寫主題訂閱者需要:初始化ROS從foo主題訂閱消息Spin,然后等待消息到達當消息到達時,Msg_Callback()函數被調用Page.

9ROSCPPPage.

10ROSCPP簡單的服務器端和客戶端:服務器端客戶端如何使用參數提取參數boolgetParam(conststd::string&key,parameter_type

&output_value)constparameter_typeparam(conststd::string&

param_name,parameter_type&

default_val)設置參數voidsetParam(conststd::string&key,parameter_type&v)

const刪除參數booldeleteParam(conststd::string&key)

const檢查存在性boolhasParam(conststd::string&key)

constPage.

11ROSCPPPage.

12ROSCPPPage.

13ROSCPPPage.

14ROSCPPHello

World程序節點:

2個節點talker

(talker.cpp)

:

包含一個發布者節點listener

(listener.cpp)

:

包含一個接收者節點間的通訊:Topic(話題的名稱):“chatter”Message(傳遞的數據類型):std_msgs::StringString為

ROS自定義的數據類型String中包含唯一變量為

std::string

dataPage.

15ROSCPPHelloWorld程序Page.

16ROSCPPHello

World程序Page.

17ROSCPPHelloWorld程序目錄1ROS編成2ROSCPP3ROSPY4ROSLISPPage.

19ROSPYrospy是ROS的純Python客戶端庫。rospy客戶端API使Python程序員能夠快速與ROS

主題,服務和參數進行交互。rospy的設計有利于運行時性能的實現速度(即開發者時間),以便可以在ROS內快速對原型和測試進行算法測試。它也非常適合非關鍵路徑代碼,例如配置和初始化代碼。許多ROS工具都是用rospy編寫的,以利用類型內省功能。許多ROS工具,例如rostopic

和rosservice,都建立在rospy之上。Page.

20ROSPY編寫發布節點“Node”(節點)是ROS術語,表示被連接到ROS網絡的可執行文件。在這里,我們將創建發布者("talker")節點,這將持續的廣播一個消息。目錄更改為beginner_tutorials包,你在前面的教程中創建一個package(包):$roscd

beginner_tutorials我們創建一個“腳本”文件夾來存儲我們的Python腳本:$mkdir

scripts$cd

scripts那么示例腳本下載talker.py到新的腳本,目錄,使其可執行:$wget/ros/ros_t...

_listener/talker.py$chmod+x

talker.py您可以查看和編輯文件

$

rosed

beginner_tutorials

talker.py

或者看下面。Page.

21ROSPY//

切換行號顯示#!/usr/bin/env

python#licenseremovedfor

brevityimport

rospy//每個Python

ROS

節點都會有這樣的聲明在頂部from

std_msgs.msg

import

String

//

std_msgs.msg導入,使我們可以重新使用std_msgs

/String消息類型發布。def

talker():pub

=

rospy.Publisher('chatter',

String,

queue_size=10)

//聲明節點發布到話題使用消息類型是String。String這里實際上是std_msgs.msg.String類。該queue_size參數是在新的ROS

hydro中,

若subscriber

(訂閱者)接收并不是足夠的快的情況下

,限制隊列消息的數量。rospy.init_node('talker',

anonymous=True)

//是非常重要的,因為它會告訴rospy節點的名稱—直到rospy有這方面的信息,就不能開始與ROS

Master(ROS控制器)通信。在這種情況下,您的節點將命名為talker.

。rate=rospy.Rate(10)

#

10hz //該行創建了一個Rate的對象。其為了方便實現sleep()方法,它提供了一個便捷的途徑在所需的速度下循環。隨著它的參數10,我們應該預料到每秒10次經過一個循環while

not

rospy.is_shutdown():

//這個循環是一個很標準的rospy結構:檢查rospy.is_shutdown()標志位,然后進入while循環。你必須察看is_shutdown()來檢查你的程序應該退出rospy.get_time() rospy.loginfo(hello_str)hello_str

=

"hello

world

s"pub.publish(hello_str)rate.sleep()if__name

=='__main

':try:talker() //除了標準的

Python

__main

check之外,還將獲得一個rospy.ROSInterruptException.except

rospy.ROSInterruptException:pass //當按下Ctrl-C鍵被按下或當節點關閉時,可以通過rospy.sleep()和rospy.Rate.sleep()方法關閉節點。這引發異常的原因是為了在執行代碼

sleep()

后繼續執行。目錄1ROS編成2ROSCPP3

ROSPY 4ROSLISPPage.

23ROSLISPRoslisp是用于在慣用Common

Lisp中編寫ROS節點的客戶端庫。該庫的編寫是為了支持易用性,快速編寫節點腳本以及對正在運行的ROS系統進行交互式調試。Roslisp是穩定的ROS核心發行版的一部分,并遵循ROS版本策略。Roslisp已經在Ubuntu(Jaunty或更高版本)上進行了相當廣泛的測試,并在某種程度上在OS

X

10.5上進行了測試。Roslisp基于Common

Lisp

的SBCL版本。它被定義為roslisp

ROS軟件包中的系統依賴項。謝謝!智能網聯創新實驗室無人駕駛汽車的架構建模與代碼生成第一部分原型建模方法概述第二部分原型建模方法優勢第三部分原型建模開發過程第四部分原型建模開發案例第五部分原型建模開發實踐

目錄

CONTENTS第三章智能網聯汽車建模15.1原型建模方法概述5.1原型建模方法概述5.1原型建模方法概述基于模型設計5.1原型建模方法概述5.1原型建模方法概述5.2原型建模方法優勢車載控制器軟件開發趨勢5.2原型建模方法優勢軟件失效導致的車輛召回統計5.2原型建模方法優勢實施ISO26262的目的5.2原型建模方法優勢ISO26262對軟件開發的需求5.2原型建模方法優勢ISO26262定義的軟件開發過程5.2原型建模方法優勢ISO26262建模/編程語言的選擇和相關標準5.2原型建模方法優勢傳統開發方式和MBD開發對比5.2原型建模方法優勢傳統開發方式和MBD開發對比5.3原型建模開發過程ISO26262設計工具/驗證工具的選擇5.3原型建模開發過程ISO26262等效性測試過程5.3原型建模開發過程ISO26262定義的軟件開發過程5.3原型建模開發過程ISO26262對軟件開發的過程5.3原型建模開發過程ISO26262對軟件開發的過程5.3原型建模開發過程ISO26262對軟件開發的過程5.4原型建模開發案例ISO26262對軟件開發的案例5.4原型建模開發案例ISO26262對軟件開發的案例5.4原型建模開發案例ISO26262對軟件開發的案例5.4原型建模開發案例ISO26262對軟件開發的案例5.4原型建模開發案例ISO26262對軟件開發的案例5.4原型建模開發案例概念及架構階段仿真5.4原型建模開發案例輔助架構設計5.4原型建模開發案例代碼生成后的等效測試5.4原型建模開發案例代碼生成后單體驗證5.4原型建模開發案例ISO26262對軟件開發的案例5.4原型建模開發案例ISO26262對軟件開發的案例5.4原型建模開發案例ISO26262對軟件開發的案例5.4原型建模開發案例ISO26262對軟件開發的案例5.4原型建模開發案例MBD開發流程5.4原型建模開發案例ISO26262對開發回顧5.5原型建模開發實踐simulink基本功能模塊輸入和輸出5.5原型建模開發實踐simulink基本功能模塊輸入和輸出5.5原型建模開發實踐simulink基本功能模塊輸入和輸出Simulink處理三類數據:信號-在仿真期間計算的模塊輸入和輸出狀態-在仿真期間中計算的代表模塊動態的內部值參數-影響模塊行為的值,由用戶控制5.5原型建模開發實踐simulink基本功能模塊搭建一個簡單的Car系統5.5原型建模開發實踐simulink基本功能模塊搭建一個簡單的Car系統啟動MATLAB?。在MATLAB工具條上,點擊Simulink按鈕。5.5原型建模開發實踐simulink基本功能模塊搭建一個簡單的Car系統點擊BlankModel模板。SimulinkEditor打開。從File菜單中,選擇Saveas。在Filename文本框中,輸入您的模型的名稱,例如simple_model。點擊Save。模型使用文件擴展名.slx進行保存。5.5原型建模開發實踐simulink基本功能模塊搭建一個簡單的Car系統下面是大多數工作流常用的一些模塊庫:Continuous-

連續狀態的系統的模塊Discrete-

離散狀態的系統的模塊MathOperations-實現代數和邏輯方程的模塊Sinks-

存儲并顯示所連接信號的模塊Sources-

生成模型的驅動信號值的模塊5.5原型建模開發實踐simulink基本功能模塊搭建一個簡單的Car系統點擊并拖動每個模塊。要調整模塊大小,請點擊并拖動一個角。5.5原型建模開發實踐simulink基本功能模塊搭建一個簡單的Car系統在輸出端口和輸入端口之間創建線條來連接模塊。5.5原型建模開發實踐simulink基本功能模塊搭建一個簡單的Car系統在模型窗口上,通過更改工具欄上的值來設置仿真停止時間。運動模型對接近傳感器建模。在這種情況下,數字傳感器用于測量汽車與10米(30英尺)外的障礙物之間的距離。模型基于下列條件來輸出傳感器的測量值和汽車的位置值:汽車在到達障礙物時會緊急剎車。在現實世界中,傳感器對距離的測量不夠精確,從而導致隨機數值誤差。數字傳感器以固定時間間隔運行。5.5原型建模開發實踐simulink基本功能模塊搭建一個簡單的Car系統添加新模塊和連接:添加一個用來測量與障礙物之間距離的傳感器。修改模型。根據需要擴展模型窗口,以容納新模塊。求實際距離。要想求出障礙物位置和車輛位置之間的距離,需要添加Subtract模塊。還要添加Constant模塊來為障礙物的位置設置常量值10。建模真實傳感器常見的不完美測量。使用Sourceslibrary中的Band-LimitedWhiteNoise模塊產生噪聲。將Noisepower參數設置為0.001。通過使用MathOperations庫中的Add模塊將噪聲添加到測量中。對每0.1秒觸發一次的數字傳感器進行建模。在Simulink中,以給定時間間隔對信號進行采樣需要一個樣本和保持器,由零階保持器實現。從Discrete庫中添加Zero-OrderHold模塊。將該模塊添加到模型后,將SampleTime參數更改為0.1。添加另一個Outport,用來連接傳感器輸出。保留Portnumber參數的默認值。5.5原型建模開發實踐simulink基本功能模塊搭建一個簡單的Car系統連接新模塊。Integrator,Second-Order模塊的輸出已連接到另一個端口。要在該信號中創建分支,請左鍵點擊該信號以突出顯示可供連接的端口,然后點擊適當的端口。5.5原型建模開發實踐simulink基本功能模塊搭建一個簡單的Car系統在模型窗口上,通過更改工具欄上的值來設置仿真停止時間。運行模型。查看器顯示兩個信號:actualdistance(黃色)和measureddistance(藍色)5.5原型建模開發實踐simulink基本功能模塊搭建一個簡單的Smart_braking系統此模型包含以下組件和數據流:當踩下油門踏板時,汽車移動。接近傳感器測量它與障礙物之間的距離。警報系統基于該接近度生成警報。警報系統自動控制剎車以免撞到障礙物。5.5原型建模開發實踐simulink基本功能模塊搭建一個簡單的Smart_braking系統要查看完整的樹,請點擊模型窗口左下角的Hide/ShowModelBrowser按鈕5.5原型建模開發實踐simulink基本功能模塊基于模型的設計優點:讓各個工程團隊使用同一個設計環境將設計與要求直接掛鉤將測試與設計相結合,不斷發現并更正錯誤通過多域仿真對算法進行優化自動生成嵌入式軟件代碼和文檔開發和重用測試套件5.5原型建模開發實踐simulink基本功能模塊基于模型的設計優點:讓各個工程團隊使用同一個設計環境將設計與要求直接掛鉤將測試與設計相結合,不斷發現并更正錯誤通過多域仿真對算法進行優化自動生成嵌入式軟件代碼和文檔開發和重用測試套件5.5原型建模開發實踐149simulink基本功能模塊Simulink中基于模型的設計工作流示例5.5原型建模開發實踐150simulink基本功能模塊5.5原型建模開發實踐simulink基本功能模塊雙輪驅動確定建模目的在設計模型之前,請明確目的和需求。目的決定模型的結構和詳細程度。如果目的只是弄清楚機器人可以走多快,那么只對線性運動進行建模就足夠了。如果目的是為設備設計一組輸入,使它按照給定的路徑移動,那就會涉及到旋轉組件。如果目的是避障,那么系統就需要一個傳感器。要實現此目的,模型必須能夠:確定電機停止后機器人多長時間能停止下來;提供一系列線性運動和旋轉運動的命令,使機器人能夠在一個二維空間內移動;第一個建模目的是讓您能夠分析運動,以便設計傳感器。第二個目的是讓您能夠對設計進行測試。5.5原型建模開發實踐simulink基本功能模塊雙輪驅動作業設計:兩個電動輪子在兩個維度上移動。其中包括:線性運動特性旋轉運動特性用于確定系統在兩個維度上的位置的變換用于測量機器人與障礙物之間的距離的傳感器5.5原型建模開發實踐simulink基本功能模塊雙輪驅動提示系統的模型包括:施加在輪子上的輸入作用力、兩個相同的輪子、旋轉動態特性、坐標變換、一個傳感器。5.5原型建模開發實踐simulink基本功能模塊雙輪驅動提示:如下所示放置并重命名這五個Subsystem模塊。雙擊模塊名稱并鍵入新名稱。5.5原型建模開發實踐simulink基本功能模塊雙輪驅動

提示:確定子系統之間的輸入和輸出連接(例如,信號線)。輸入和輸出值在仿真過程中動態變化。模塊之間的連接線代表數據傳輸。謝謝!《自動駕駛學習任務1:消息場景設計》發布與訂閱智能網聯創新實驗室學習任務1:

消息發布與訂閱1.代碼講解2.實際操作3.視頻演示《上機實踐部分——自動駕駛場景編程》1代碼講解?python版本的節點發布與訂閱由pub1.py和sub1.py實現。?在pub1.py中首先新建一個名為pub1的節點。if

name

==

'

main

':rospy.in

it

node("pub1")test1()rospy.spin()pass學習任務1:

消息發布與訂閱《上機實踐部分——自動駕駛場景編程》?在函數test1中創建/test1主題,

發布的是Twist類型的消息

隨后新建一個Twist消息并

設置好內容后發布。def

test1():whileTrue:pub=rospy.Publisher("/test1",Twist,

queue

size=10)twist

=Twist()twist.linear.x=

1.0twist.angular.z=

1.0pub.publish(twist)學習任務1:

消息發布與訂閱《上機實踐部分——自動駕駛場景編程》?

在sub1.py中首先新建一個名為sub1的節點并訂閱/test1主題。if

name

==

'

main

':rospy.in

it

node("sub1")rospy.Subscriber("/test1",Twist,test1)rospy.spin()pass?隨后在回調函數test1中打印消息。def

test1(msg):print(msg)pass學習任務1:

消息發布與訂閱《上機實踐部分——自動駕駛場景編程》?C++版本的節點發布與訂閱由pub2.cpp和sub2.cpp實現。?在pub2.cpp中首先新建一個名為pub2的節點

創建/test2主題,

發布的是Twist類型的消息

隨后新建一個Twist消

息并設置好內容后發布。#include

"ros/ros.h"#include

"geometry_msgs/Twist.h"int

main(int

argc,

char**

argv){ros::in

it(argc,

argv,

"pub2");ros::NodeHandle

node;geometry_msgs::Twist

msg;ros::Publisher

pub=node.advertise<geometry_msgs::Twist>("/test2",10);while

(ros::ok()){ros::spinOnce();msg.linear.x=

1.0;msg.angular.z=

1.0;pub.publish(msg);}return

0;};學習任務1:

消息發布與訂閱《上機實踐部分——自動駕駛場景編程》在sub2.cpp中首先新建一個名為sub2的節點并訂閱/test2主題

。在回調函數test2中打印消息。intmain(intargc,

char

**argv){ros::in

it(argc,argv,

"sub2");ros::NodeHandlenode;ros::Subscribersub=node.subscribe("/test2",

1,

test2);while

(ros::ok()){ros::spinOnce();}return

0;}voidtest2(constgeometry_msgs::Twist::ConstPtr&msg){ROS_INFO("speed:%.2f,steer:%.2f",msg->linear.x,msg->angular.z);}學習任務1:

消息發布與訂閱《上機實踐部分——自動駕駛場景編程》2實際操作?

新建終端,

輸出roscore啟動Master。學習任務1:

消息發布與訂閱《上機實踐部分——自動駕駛場景編程》cdaliyun_demosourcedevel/setup.bashrosrunraceworldpub1.py?打開終端,

輸入如下命令開啟sub1

終端中可以看

到輸出。cdaliyun_demosourcedevel/setup.bashrosrunraceworldsub1.py學習任務1:

消息發布與訂閱?打開終端,

輸入如下命令開啟pub1。《上機實踐部分——自動駕駛場景編程》?打開終端,

輸入如下命令開啟sub2

終端中可以看

到輸出。cdaliyun_demosourcedevel/setup.bashrosrunraceworldsub2?打開終端,

輸入如下命令開啟pub2。cdaliyun_demosourcedevel/setup.bashrosrunraceworldpub2學習任務1:

消息發布與訂閱《上機實踐部分——自動駕駛場景編程》?

打開終端,

輸入rostopic

list命令查看當前所有rostopic

可以找到我們代碼中新建的/test1和/test2主題。?

分別輸入rostopic

info/test1和rostopic

info/test2可以查看每個主題的發布者與訂閱者。學習任務1:

消息發布與訂閱《上機實踐部分——自動駕駛場景編程》

END

《學習任務2:鍵盤自動駕駛場景設計》控制無人車智能網聯創新實驗室學習任務2:

鍵盤控制1.代碼講解2.實際操作3.視頻演示《上機實踐部分——自動駕駛場景編程》1代碼講解?鍵盤控制程序使用的是raceworld1場景,

由raceworld1.launch文件啟動

找到/root/aliyun_demo/src/raceworld/launch文件夾中的raceworld1.launch文件并打開。?在launch文件內加載了多個控制器,

其中left_rear_wheel_velocity_controller,

right_rear_wheel_velocity_controller,left_front_wheel_velocity_controller,

right_front_wheel_velocity_controller,left_steering_hinge_position_controller和right_steering_hinge_position_controller接收ROS消息,

分別控制了左右后輪速度,

左右前輪速度和轉向

角度。<node

name="controller_manager"p

kg="controller_manager"type="spawner"respawn="false"output="screen"args="left_rear_wheel_velocity_controllerlerleft_front_wheel_velocity_controllerllerleft_steering_hinge_position_controllerright_rear_wheel_velocity_controlright_front_wheel_velocity_controright_steering_hinge_position_controllerjoint_state_controller"/>學習任務2:

鍵盤控制《上機實踐部分——自動駕駛場景編程》?在加載控制器代碼的下面,

調用了一個名為servo_comannds1.py的代碼文件。<node

p

kg="raceworld"type="servo_commands1.py"name="servo_commands"output="screen">?打開/root/aliyun_demo/src/raceworld/scripts文件夾中的servo_comannds1.py文件我們可以看到,

代碼中新建了一

個名為servo_comannds

的節點,

訂閱并接收/deepracer1/ackermann_cmd_mux/output消息。def

servo_commands():globalflag_moverospy.in

it_node(

'servo_commands

',anonymous=True)rospy.Subscriber("/deepracer1/ackermann_cmd_mux/output",AckermannDriveStamped,set_throttle_steer)rospy.spin()學習任務2:

鍵盤控制《上機實踐部分——自動駕駛場景編程》?在接收到AckermannDriveStamped類型消息后經過適當的轉換,

將速度和轉向信息發布給之前所述六個控制器。def

set_throttle_steer(data):globalflag_movepub_vel_left_rear_wheel=rospy.Publisher("/deepracer1/left_rear_wheel_velocity_controller/command",Float64,queue_size=1)pub_vel_right_rear_wheel=rospy.Publisher("/deepracer1/right_rear_wheel_velocity_controller/command",Float64,queue_size=1)pub_vel_left_front_wheel=rospy.Publisher("/deepracer1/left_front_wheel_velocity_controller/command",Float64,queue_size=1)pub_vel_right_front_wheel=rospy.Publisher("/deepracer1/right_front_wheel_velocity_controller/command",Float64,queue_size=1)pub_pos_left_steering_hinge=rospy.Publisher("/deepracer1/left_steering_hinge_position_controller/command",Float64,queue_size=1)pub_pos_right_steering_hinge=rospy.Publisher("/deepracer1/right_steering_hinge_position_controller/command",Float64,queue_size=1)throttle=data.drive.speed*28print("Throttle:",throttle)steer=data.drive.steering_angleprint("Steer:",steer)pub_vel_left_rear_wheel.publish(throttle)pub_vel_right_rear_wheel.publish(throttle)pub_vel_left_front_wheel.publish(throttle)pub_vel_right_fron

溫馨提示

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

評論

0/150

提交評論