【Apollo】控制canbus模块启动,关闭

时间:2024-10-31 18:17:15

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