Apollo Cyber RT 功能介绍
和ROS & ROS2中类似,Cyber RT中支持两种数据交换模式:一种是Publish-Subscriber模式,常用于数据流处理中节点间通信。即发布者(Publisher)在channel(ROS中对应地称为topic)上发布消息,订阅该channel的订阅者(Subscriber)便会收到消息数据;另一种就是常见的Service-Client模式,常用于客户端与服务端的请求与响应。Node是整个数据拓扑网络中的基本单元。一个Node中可以创建多个读者/写者,服务端/客户端。读者和写者分别对应Reader和Writer,用于Publish-Subscribe模式。服务端和客户端分别对应Service和Client,用于Service-Client模式。
mainboard 是 在cyber里实际 启动 模块 写代码的地方
而dreamview 是交互的,backend 是后端,其中hmi.cc里面的socket,receive是这个接收bridge来的信号的
接收之后,这个socket,receive函数解析,然后交给worker处理,worker调用triger来启动模块。
Apollo以Dreamview为启动一切模块的中心,在Dreamview界面中启动Planning模块的前端操作,后端的响应函数HMI::RegisterMessageHandlers()
位于/apollo/modules/dreamview/backend/hmi/hmi.cc
文件中,
HMI::RegisterMessageHandlers()中的
HMIAction_Parse(action,&hmi_action)
用于解析动作参数,hmi_worker_->Trigger(hmi_action, value)
;用于执行相关的动作:
nohup mainboard -p control_sched -d /apollo/modules/canbus/dag/canbus.dag
这里不能写compute_sched,这是不同的模块
pkill -f /apollo/modules/canbus/dag/canbus.dag
#include <unistd.h>
system("pkill -f /apollo/modules/canbus/dag/canbus.dag");
sleep(2);
system("nohup mainboard -p control_sched -d /apollo/modules/canbus/dag/canbus.dag &");
#include <thread>
#include <chrono>
switch (package_down_.adc_type()) {
case ROUTING_RUESTING:
AINFO << "package_down_.adc_type:ROUTING_RUESTING";
routing_request_.CopyFrom(package_down_.adc_routing_request());
routing_request_writer_->Write(routing_request_);
break;
case LOADING_STATE:
AINFO << "package_down_.adc_type:LOADING_STATE";
loading_state_.CopyFrom(package_down_.adc_loading_state());
loading_state_writer_->Write(loading_state_);
break;
case DOU_STATE:
AINFO << "package_down_.adc_type:DOU_STATE";
dou_state_.CopyFrom(package_down_.adc_dou_state());
dou_state_writer_->Write(dou_state_);
break;
case REMOTE_CONTROL_AND_ESTOP:
AINFO << "package_down_.adc_type:REMOTE_CONTROL_AND_ESTOP";
remote_control_and_estop_.CopyFrom(package_down_.adc_remote_control_and_estop());
remote_control_and_estop_writer_->Write(remote_control_and_estop_);
// 重启 canbus
system("pkill -f /apollo/modules/canbus/dag/canbus.dag");
std::this_thread::sleep_for(std::chrono::seconds(5));
system("nohup mainboard -p control_sched -d /apollo/modules/canbus/dag/canbus.dag &");
break;
default:
break;
}