智能网联汽车计算平台部署与测试 课件全套 于万海 第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

提交评论