查看原文
其他

开发者说 | Apollo 3.5的构建方法

Apollo社区开发者 Apollo开发者社区 2022-07-29

Apollo 3.5彻底摒弃ROS,改用自研的Cyber作为底层通讯与调度平台。

另外,随着Apollo仓库中大文件数量增多,为提高代码更新效率,Apollo改用Git LFS来管理代码仓库。


Git LFS 是 Github 开发的一个 Git 的扩展,用于实现 Git 对大文件的支持


因为,在开发过程中,设计资源占用很大一部分空间,像Png和Psd等文件是二进制(blob)的,体积也很庞大。


但Git的Diff/Patch等是基于文件行的。对于二进制文件来说,Git需要存储每次Commit的改动。


每次当二进制文件修改,发生变化的时候,都会产生额外的提交量,导致Clone和Pull的数据量大增,在线仓库的体积也会迅速增长。


LFS(Large File Storage) 就是为了解决这一问题而产生的工具。


它将你所标记的大文件保存至另外的仓库,而在主仓库仅保留其轻量级指针。


在开发者检出版本时,根据指针的变化情况下更新对应的大文件.而不是在本地保存所有版本的大文件。

可以说,Apollo 3.5是一个全新的代码仓库,与之前的版本几乎不兼容。因此不能在原有代码的基础上更新,而必须重新从GitHub仓库重新下载代码。


感谢社区荣誉布道师—贺博士对Apollo 3.5构建方法的解析。阿波君希望这篇文给感兴趣的同学带来更多帮助。




1# Required for Ubuntu 14.04 / 16.04.
2curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
3
4# Ubuntu 14.04 / 16.04 / 18.04.
5sudo apt-get install -y git-lfs
6
7# Ensure that git-lfs is setup correctly in your git configuration files.
8# Run it only once.
9git lfs install




使用如下命令下载Apollo源代码,可根据你的习惯使用Option 1Option 2克隆Apollo仓库。


1# Option 1: Clone the Apollo repository with SSH
2git lfs clone git@github.com:ApolloAuto/apollo.git
3# Option 2: Clone the Apollo repository with HTTPS
4git lfs clone https://github.com/ApolloAuto/apollo.git
5# Change to the "apollo" directory 
6cd apollo
7# Checkout the "master" branch
8git checkout master
9# Set the environment variable "APOLLO_HOME"
10echo "export APOLLO_HOME=$(pwd)" >> ~/.bashrc && source ~/.bashrc


注意:如果需要基于Apollo 3.5开发,则还需做如下操作


(小提示:git@github.com:davidhopper2003/apollo.git是我在GitHub的仓库名,大家一定要替换为自己在GitHub上的仓库名):

1# Remove the "origin" repository
2git remote remove origin
3# Set my own fork "git@github.com:davidhopper2003/apollo.git" to "origin" repository
4# Please modify "git@github.com:davidhopper2003/apollo.git" to your fork
5git remote add origin git@github.com:davidhopper2003/apollo.git
6# Set "git@github.com:ApolloAuto/apollo.git" to "upstream" repository
7git remote add upstream git@github.com:ApolloAuto/apollo.git
8# Display updated repositories.
9git remote -v



因为Apollo 3.5几乎是一个全新代码库,因此你自己的Fork仓库提交记录已完全更改,不要使用git pull --rebase命令去变基。


而应该在备份你Fork仓库工作的前提下,使用如下命令,强行将你的Fork仓库与Apollo 3.5 master分支同步后,再进行后续开发(注意一定要先备份你的工作):


1# It will take a long time
2git lfs fetch --all
3git push -f origin master




使用如下命令编译Apollo源代码(小提示:启动Docker时,-C选项表示从国内服务器下载镜像,但有时会出现下载镜像失败的情形,如遇到该问题,可将-C选项去掉,直接从美国服务器下载镜像)。

1# Start the docker.
2bash docker/scripts/dev_start.sh -C
3# Step into the docker.
4bash docker/scripts/dev_into.sh
5# Build the apollo project in the docker.
6# -j 8 depends on the number of CPU cores on your machine.
7bash apollo.sh build -j 8




在Docker内部,使用如下命令运行Apollo项目:


1bash scripts/bootstrap.sh


在Chrome或Firefox浏览器中打开网址http://localhost:8888/,如下图所示:



在Dreamview中打开Sim Control选项,并在右上侧选择“Sunnyvale Big Loop”地图,如下图所示:



在Dreamview中切换左侧标签至“Module Controller”页。


开启“Planning”与“Routing”模块,如下图所示:



在Dreamview中切换左侧标签至“Default Routing”页,选择“Route: Reverse Early Change Lane”。


若看到道路输出车辆规划轨迹,并且车辆向前行驶,表明Apollo 3.5项目构建运行成功。



可以在Docker内部使用cyber_monitor监控各模块运行情况(取代原有的scripts/diagnostics.sh命令):


1cyber_monitor


进入监控界面后,可以使用上下左右方向箭头调整所需监控的模块,按q键退出监控界面(操作方法与原有的scripts/diagnostics.sh命令相同):






5.1 出现编译错误


在Docker中出现类似如下的编译错误:



这是因为之前的bazel缓存导致,解决办法是:退出并停止当前Docker,删除缓存,重新启动Docker,并编译之:


1# exit the docker if you are in it.
2exit
3# Stop the docker.
4bash docker/scripts/dev_start.sh stop
5# delete all of the bazel cache files.
6cd ~/.cache/bazel
7sudo rm -rf _bazel_*
8cd ~
9sudo rm -rf .BRANCH_*
10# Start the docker.
11bash docker/scripts/dev_start.sh -C
12# Step into the docker.
13bash docker/scripts/dev_into.sh
14# Build the apollo project in the docker.
15# -j 8 depends on the number of CPU cores on your machine.
16bash apollo.sh build -j 8






Q:

@mengzhishen: 


你好,你运行bash scripts/bootstrap.sh 的时候,

nohup:failed to run command

'cyber_launch':permission denied这个错吗



A:

@知行合一2018:


这个可能是你Docker安装得有问题,重新安装Docker试试看。





Q:

@Mountain_xiu: 


博主,你好!我按照您这个文档来弄的。


bash scripts/bootstrap.sh启动dreamview启动成功了。


但是当我在chrome或者firefox输入网址localhost:8888时。网页没有出来,请问是怎么回事呀? 


我在docker中ps dreamview已经有这个进程



A:

@知行合一2018:


不用下载,打开Sim Control开关后,自动会将加载相关地图数据






自Apollo平台开放已来,我们收到了大量开发者的咨询和反馈,越来越多开发者基于Apollo擦出了更多的火花,并愿意将自己的成果贡献出来,这充分体现了Apollo『贡献越多,获得越多』的开源精神。为此我们开设了『开发者说』板块,希望开发者们能够踊跃投稿,更好地为广大自动驾驶开发者营造一个共享交流的平台!



* 以上内容为开发者原创,不代表百度官方言论。

  已获开发者授权,原文地址请戳阅读原文。


﹏﹏﹏﹏﹏﹏﹏﹏   END  ﹏﹏﹏﹏﹏﹏﹏﹏






点击阅读原文,了解更多



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存