百度apollo: 1. apollo的安装,运行,以及特性
2018-04-03 18:12
573 查看
1. 安装Ubuntu14.04,无需多说。2. 安装Ros-indigo
(1)执行
(5)完成后执行一下代码初始化ros
(6)然后设置环境变量
–Realtime patch (实时补丁)
–Latest e1000e intel ethernet driver(针对最新e1000e英特尔以太网驱动程序)
–Bugfix for Nvidia driver under realtime patch(修复实时补丁下Nvidia显卡的bug)
–Double free in the inet_csk_clone_lock function patch
Other cve security patches(其他cve安全补丁)
(1)在Apollo github下载百度编译好的内核
(2)解压并安装
–增强了ROS的去中心化特性
–基于共享内存的更高效的通信
–支持Protobuf。下载apollo-platform并解压:
将文件夹中的ros拷贝到apollo工程中:
至此,apollo部署完毕,接下来进行测试。
4 . 安装Apollo下载源码:
安装docker环境:
先注销再重新登录,然后测试一下docker是否安装成功:
设置环境:
这一步时间较长
最后编译:
5. apollo测试(如果没有进入docker环境,先进入docker)
在浏览器输入http://localhost:8887后回车,出现以下界面开启Dreamview,然后点击右上方的Dreamview。
新开一个终端里输入:
然后就可以看到界面播放demo.bag数据啦:
|解决优化:共享内存能减少传输中的数据拷贝,显著提升传输效率
|问题:单路传感器消息有多个消费者时负载成倍增长
|解决优化:共享内存可以有效满足一对多的传输场景
共享内存本身的特性能够支持一次写入、多次读取功能。对于一对多传输场景,不同的使用者就可以同时读取,实现一次写入,多次读取的功能,成倍提升传输效率。|通信性能优化效果
A、一对一传输过程中,共享内存吞吐量达到socket两倍,一对多传输过程中,共享内存传输对带宽的优势进一步扩大。B、共享内存传输延迟比Shared节省一半,对强实时性系统的自动驾驶汽车帮助很大。C、共享内存CPU资源占用要比socket减少很多,一定程度上提升计算算法和能力。6.2 去中心化的网络拓扑|ROS特点:ROS以Master为中心构建hybridp2p拓扑网络
ROS是以Master为中心构建Hybrid p2p拓扑网络,带来了比较强的容错性,当某个算法出现异常导致崩溃的时候,不会引起整个的异常,为局部异常处理提供便利。|问题:Master作为拓扑网络的中心,一旦异常将影响整个网络
整个系统非常依赖Master这个单点,一旦Master异常,所有节点都不能发现其他节点,这样整个系统就不能正常工作。|解决优化:使用RTPS服务发现协议实现完全的P2P网络拓扑
在ROS中添加基于RTPS服务协议功能,网络构建不会以Master作为中心,而是通过域概念作为划分,所有节点加入域中,会通过RTPS协议相互广播通知其他节点,然后节点间会建立点对点连接,来发布订阅消息,以替代Master作为中央信息交换的功能。|使用RTPS服务发现过程A. Sub节点启动,通过组播向网络注册
B、通过节点发现,两两建立unicast
C、向新加入的节点发送历史拓扑消息
D、收发双发建立连接,开始通信
6.3 数据兼容性扩展|Message是ROS中描述软件组件接口的语言
Message是ROS中描述接口的一种语言,当两个节点之间需要建立连接的时候,通常需要满足两个条件。一是接收和发送的Topic属于同一个话题,二是两个模块定义的模式要完全一致。|ROS使用msg描述文件定义模块间的消息接口
ROS怎么定义message?ROS使用msg文件对数据接口进行抽象化的描述,并可以生成不同语言的接口实现,以满足不同语言的通信交流需求。|问题:接口升级后,不同版本的模块难以兼容
兼容性的问题,当项目规模比较小时,影响不大;但是对于无人自动驾驶比较庞大的项目时,影响就很大。当某一个模块接口升级了,需要把所有相关模块升级到最新版本之后,才能在一起进行基础功能的连调。同时对于线下仿真调试的时候,有时需要把某一个模块回到历史版本验证或定位某一个问题,这时候若接口之间出现升级,就会出现不兼容问题,导致系统运行障碍。|问题:接口升级后,历史数据也面临无法使用的问题
接口兼容性问题会对历史数据使用造成更大影响,自动驾驶汽车系统中历史数据是非常宝贵和重要资源,对于这种问题有一些解决方式,一是通过离线数据批量转换和在线方式,二是转换成新数据。|解决优化:protobuf能够很好支持向后兼容
使用protobuf来替代ROSmessage,最大好处是可以完全覆盖message中本身包含的类型,有利于把既有的ROSmessage迁移到protobuf格式下。此外protobuf有非常好的版本兼容性。|解决优化:protobuf消息格式与ROS深度集成
在Apollo ROS中,做了一整套对protobuf的支持, 在工程中可以不需要做protobuf和ROS message的转换,直接publish protobuf格式的消息,调试工具也能够非常正确的解析出来正确的protobuf消息。这样既能够很好解决兼容性问题,也不会产生额外的学习成本和使用成本。
7.2 关于去中心化的网络拓扑 apollo在ROS中添加基于RTPS服务协议功能,但是去中心化的功能在ROS2里面已经被解决,因此,具体哪个优化更加好,还等待后续测试。
7.3 关于数据兼容性扩展 在Apollo中在模块内部使用protobuf来替代ROSmessage,个人认为这是Apollo最主要的优化,关于protobuf的介绍可以看我整理的protobuf分类。
(1)执行
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu trusty main" > /etc/apt/sources.list.d/ros-latest.list'(2)执行
wget http://packages.ros.org/ros.key -O - | sudo apt-key add -(3)更新源
sudo apt-get update(4)安装ros-indigo-desktop-full
sudo apt-get install ros-indigo-desktop-full大概需要半个小时左右
(5)完成后执行一下代码初始化ros
sudo rosdep init若提示
rosdep update则执行rosdep update
(6)然后设置环境变量
echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc source ~/.bashrc以上的这个设置是永久性的,不需要每次打开一个终端都需要进行一次设置。到此安装完成,终端执行roscore进行测试即可。3 .安装apollo-kernelapollo-kernel的改进:
–Realtime patch (实时补丁)
–Latest e1000e intel ethernet driver(针对最新e1000e英特尔以太网驱动程序)
–Bugfix for Nvidia driver under realtime patch(修复实时补丁下Nvidia显卡的bug)
–Double free in the inet_csk_clone_lock function patch
Other cve security patches(其他cve安全补丁)
(1)在Apollo github下载百度编译好的内核
(2)解压并安装
tar zxvf linux-4.4.32-apollo-1.5.0.tar.gz cd install sudo ./install_kernel.sh完成后重启进入新内核 3. 安装apollo-platform主要是对ros做出了如下改进:
–增强了ROS的去中心化特性
–基于共享内存的更高效的通信
–支持Protobuf。下载apollo-platform并解压:
https://github.com/ApolloAuto/apollo-platform/releases/download/1.5.1/ros-indigo-apollo-1.5.1-x86_64.tar.gz
将文件夹中的ros拷贝到apollo工程中:
rsync -av ros/ ~/apollo/third_party/ros_x86_64 apollo目录下执行: source ./third_party/ros_x86_64/setup.bash
至此,apollo部署完毕,接下来进行测试。
4 . 安装Apollo下载源码:
git clone https://github.com/ApolloAuto/apollo.git[/code]
安装docker环境:
cd ~/apollo bash docker/scripts/install_docker.sh
先注销再重新登录,然后测试一下docker是否安装成功:
docker ps
设置环境:
bash docker/scripts/dev_start.sh bash docker/scripts/dev_into.sh
这一步时间较长
最后编译:
bash apollo.sh build
5. apollo测试(如果没有进入docker环境,先进入docker)
cd ~/apollo
bash docker/scripts/dev_start.sh bash docker/scripts/dev_into.sh
source ./third_party/ros_x86_64/setup.bash //执行后可以在docker下使用ros
sh scripts/hmi.sh //进入交互环境
在浏览器输入http://localhost:8887后回车,出现以下界面开启Dreamview,然后点击右上方的Dreamview。
新开一个终端里输入:
rosbag play -l ./docs/demo_guide/demo.bag
然后就可以看到界面播放demo.bag数据啦:
6. apollo中ros的改进:
6.1 通信性能优化|问题:自动驾驶大量使用传感器引发很大的传输带宽需求自动驾驶系统为了能够感知复杂的道路情况,需要多种传感器协同工作才能覆盖不同的场景、不同路况需求。多传感器共同使用会对车载系统造成很大压力。|解决优化:共享内存能减少传输中的数据拷贝,显著提升传输效率
|问题:单路传感器消息有多个消费者时负载成倍增长
|解决优化:共享内存可以有效满足一对多的传输场景
共享内存本身的特性能够支持一次写入、多次读取功能。对于一对多传输场景,不同的使用者就可以同时读取,实现一次写入,多次读取的功能,成倍提升传输效率。|通信性能优化效果
A、一对一传输过程中,共享内存吞吐量达到socket两倍,一对多传输过程中,共享内存传输对带宽的优势进一步扩大。B、共享内存传输延迟比Shared节省一半,对强实时性系统的自动驾驶汽车帮助很大。C、共享内存CPU资源占用要比socket减少很多,一定程度上提升计算算法和能力。6.2 去中心化的网络拓扑|ROS特点:ROS以Master为中心构建hybridp2p拓扑网络
ROS是以Master为中心构建Hybrid p2p拓扑网络,带来了比较强的容错性,当某个算法出现异常导致崩溃的时候,不会引起整个的异常,为局部异常处理提供便利。|问题:Master作为拓扑网络的中心,一旦异常将影响整个网络
整个系统非常依赖Master这个单点,一旦Master异常,所有节点都不能发现其他节点,这样整个系统就不能正常工作。|解决优化:使用RTPS服务发现协议实现完全的P2P网络拓扑
在ROS中添加基于RTPS服务协议功能,网络构建不会以Master作为中心,而是通过域概念作为划分,所有节点加入域中,会通过RTPS协议相互广播通知其他节点,然后节点间会建立点对点连接,来发布订阅消息,以替代Master作为中央信息交换的功能。|使用RTPS服务发现过程A. Sub节点启动,通过组播向网络注册
B、通过节点发现,两两建立unicast
C、向新加入的节点发送历史拓扑消息
D、收发双发建立连接,开始通信
6.3 数据兼容性扩展|Message是ROS中描述软件组件接口的语言
Message是ROS中描述接口的一种语言,当两个节点之间需要建立连接的时候,通常需要满足两个条件。一是接收和发送的Topic属于同一个话题,二是两个模块定义的模式要完全一致。|ROS使用msg描述文件定义模块间的消息接口
ROS怎么定义message?ROS使用msg文件对数据接口进行抽象化的描述,并可以生成不同语言的接口实现,以满足不同语言的通信交流需求。|问题:接口升级后,不同版本的模块难以兼容
兼容性的问题,当项目规模比较小时,影响不大;但是对于无人自动驾驶比较庞大的项目时,影响就很大。当某一个模块接口升级了,需要把所有相关模块升级到最新版本之后,才能在一起进行基础功能的连调。同时对于线下仿真调试的时候,有时需要把某一个模块回到历史版本验证或定位某一个问题,这时候若接口之间出现升级,就会出现不兼容问题,导致系统运行障碍。|问题:接口升级后,历史数据也面临无法使用的问题
接口兼容性问题会对历史数据使用造成更大影响,自动驾驶汽车系统中历史数据是非常宝贵和重要资源,对于这种问题有一些解决方式,一是通过离线数据批量转换和在线方式,二是转换成新数据。|解决优化:protobuf能够很好支持向后兼容
使用protobuf来替代ROSmessage,最大好处是可以完全覆盖message中本身包含的类型,有利于把既有的ROSmessage迁移到protobuf格式下。此外protobuf有非常好的版本兼容性。|解决优化:protobuf消息格式与ROS深度集成
在Apollo ROS中,做了一整套对protobuf的支持, 在工程中可以不需要做protobuf和ROS message的转换,直接publish protobuf格式的消息,调试工具也能够非常正确的解析出来正确的protobuf消息。这样既能够很好解决兼容性问题,也不会产生额外的学习成本和使用成本。
7. Apollo对ROS优化总结
7.1 关于通信性能优化 通信性能优化过程中通过指针或者调用值的方式实现了共享内存,该方法支持一次写入、多次读取。这里就不多说了。7.2 关于去中心化的网络拓扑 apollo在ROS中添加基于RTPS服务协议功能,但是去中心化的功能在ROS2里面已经被解决,因此,具体哪个优化更加好,还等待后续测试。
7.3 关于数据兼容性扩展 在Apollo中在模块内部使用protobuf来替代ROSmessage,个人认为这是Apollo最主要的优化,关于protobuf的介绍可以看我整理的protobuf分类。
相关文章推荐
- hadoop2.7.4 安装配置以及java wordcount 运行出错的总结
- MAVEN安装、并在Myeclipse下,装配本地仓库以及建web项目并在tomcat下运行完整过程笔记
- JVM的运行原理以及JDK 7增加的新特性(一)
- vue.js学习笔记之安装以及项目的创建和运行
- 【转】如何安装JDK以及配置Java运行环境
- 在ubuntu_linux下安装eclipse以及运行c++程序的安装步骤
- 【Java SE】如何安装JDK以及配置Java运行环境
- VS2015 安装mvc4安装包以及vs2010 sp1后导致Razor语法失效代码不高亮(能正常运行)/视图页面无法智能提示(.cshtml)解决办法
- 基于RedHatEnterpriseLinux V7(RHEL7)下SPEC CPU 2006环境搭建以及测试流程(之一)——介绍、安装准备、安装、config文件以及运行脚本介绍
- Xcode8安装使用以及新特性
- win7 x64下安装mysql-workbench 5.2以及解决无法运行问题
- linux 下wine 和plyaonlinux 安装以及卸载 (linux下运行windows软件的神器)
- Mac上安装 Ruby运行环境以及CocoaPods的安装使用教程
- Python前世今生以及种类、安装运行环境
- Hadoop在Linux下伪分布式的安装 以及wordcount实例的运行
- 从”JAVA“而终 3 :配置java运行环境以及Myeclipse的安装
- 在ubuntu linux下安装eclipse以及运行c++程序的安装步骤17832人阅读 本文档免费下载 本人linux版本是ubuntu 9.10 , 下载的eclipse版本 和 c++ 插件
- Docker下载安装JDK,以及安装运行Tomcat
- R-ArcGIS探秘(1)安装以及Sample运行
- ubuntu14.04 安装 ddd 以及运行 ddd 遇到的问题