我们学习Apollo时可能会面临两个难点:1.项目是基于Docker
部署的 2.项目时基于Bazel
编译的
为了便于学习,我们一般还是在本地源码编译好,可方便的调试,另外,大多数人应该对CMake更熟悉一点,因此,在Github上找到了这样一个基于CMake编译的CyberRT开发框架。
项目Github地址:https://github.com/minhanghuang/CyberRT
CyberRT介绍:https://developer.apollo.auto/cyber_cn.html
CyberRT教程:https://cyber-rt.readthedocs.io/en/latest/
CyberRT
是一款开源、高性能的运行时框架,专门为自动驾驶场景设计。它由百度 Apollo 项目开发和维护。CyberRT 旨在解决自动驾驶系统中固有的高并发、低延迟和高吞吐量等挑战。
CyberRT 的主要特点:
1.面向组件的架构: CyberRT 采用面向组件的架构,每个组件封装一个特定的功能,并通过定义良好的接口与其他组件进行通信。这种模块化方法促进了代码的重用性、可维护性和可扩展性。
2.数据驱动通信: CyberRT 利用数据驱动通信范式,实现了组件之间的高效数据交换。数据通过通道发布和订阅,确保只有感兴趣的组件才能接收相关信息。
3.资源管理: CyberRT 提供高效的资源管理能力,确保计算资源得到有效分配,以满足不同组件的需求。这有助于优化性能并防止资源瓶颈。
4.确定性执行: CyberRT 提供确定性执行机制,保证任务以可预测的顺序并在指定的时间约束内执行。这对于像自动驾驶这样的实时应用至关重要。
使用 CyberRT 的优势:
1.增强性能: CyberRT 优化的通信和资源管理机制有助于提高整体系统性能,实现更快的速度数据处理和任务执行。
2.降低延迟: 数据驱动通信方法和确定性执行功能最大限度地降低了延迟,确保对传感器数据和关键事件的及时响应。
3.提高可扩展性: 面向组件的架构和资源管理功能促进了可扩展性,使框架能够处理自动驾驶系统不断增长的复杂性和计算需求。
CyberRT 主要用于自动驾驶应用,作为管理和协调各种软件组件的基础运行时框架。它支持高效的数据交换、任务执行和资源管理,确保自动驾驶系统的平稳运行。除了自动驾驶,CyberRT 还可以潜在应用于其他需要高性能、低延迟和实时通信的领域,例如机器人、分布式系统和工业自动化。
如果系统访问Github正常的话,直接按照项目里的README安装就可以。
# 安装依赖
sudo apt update
sudo apt install -y libpoco-dev uuid-dev libncurses5-dev python3-dev python3-pip
python3 -m pip install protobuf==3.14.0
# 下载项目并编译
git clone --single-branch --branch v9.0.0 https://github.com/minhanghuang/CyberRT.git
cd CyberRT
sudo python3 install.py
source install/setup.bash
mkdir build && cd build
cmake ..
make -j$(nproc)
如果有问题的话,也可以看我fork后的这个项目:https://github.com/frankwang98/CyberRT
这里我没有指定protobuf的版本,在ubuntu直接apt安装即可:sudo apt-get install libprotobuf-dev protobuf-compiler
安装第三方库install.py这里,将一些github库加了代理,便于下载安装。
安装完成后,可以运行自带的示例验证安装。
发布和订阅示例:
# talker
source setup.bash
./cyber/examples/cyber_example_talker
# listener
source setup.bash
./cyber/examples/cyber_example_listener
组件示例:
source setup.bash
cyber_launch start share/examples/common_component_example/common.launch
./cyber/examples/common_component_example/channel_prediction_writer
./cyber/examples/common_component_example/channel_test_writer
此外,CyberRT也也有一些类似ROS的工具,如:
# cyber_channel list echo等
source setup.bash
cyber_channel list
source setup.bash
cyber_channel echo /apollo/test
# cyber_node
cyber_node list
cyber_node info
# cyber_service
cyber_service list
cyber_service info
# cyber_launch
cyber_launch start share/examples/common_component_example/common.launch
# monitor
cyber_monitor
# recorder
cyber_recorder info
cyber_recorder play
cyber_recorder record
cyber_recorder split
cyber_recorder recover