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;
}