《从0开始搭建实现apollo9.0》系列四 CANBUS模块调用自己的车型

1、canbus文件

canbus相关的代码有三个文件夹,分别是canbus(主程序)、canbus_vehicle(车辆类型工厂)、drivers/canbus(硬件驱动)
在这里插入图片描述
其中canbus文件夹是canbus模块的主程序入口,构造函数为周期触发的函数,周期执行。该模块包括了函数的输入,输出,在vehicle内,定义VehicleController,用以调取车辆对应的类型。除了common、conf的配置内容外,其他均可不用修改。

class CanbusComponent final : public apollo::cyber::TimerComponent {

2、canbus_vehicle

为车辆类型的存储工厂,根据车辆类型存放,一种车型一个文件夹,内容为上一节中DBC生成的代码。
在这里插入图片描述

在这里插入图片描述
参考案例如上图,其中ge3_controller为之前讲述的canbus/vehicle调用的实例车型的最终函数侧,protocol内为报文的接口函数侧。主要修改的文件为ge3_controller,其中需要修改的函数如下:
在这里插入图片描述
chassis函数的作用是解析底盘反馈报文,赋值至chassis话题,其中的赋值内容根据chassis话题内容定义和报文内的定义进行匹配转换赋值。
以speed_mps为例:

if (chassis_detail.has_vehicle_speed_rpt_6f() &&
      chassis_detail.vehicle_speed_rpt_6f().has_vehicle_speed()) {
    chassis_.set_speed_mps(static_cast<float>(
        chassis_detail.vehicle_speed_rpt_6f().vehicle_speed()));
  } else {
    chassis_.set_speed_mps(0);
  }

brake函数例子:(根据自己协议的相关转化关系进行转化)

void GemController::Brake(double pedal) {
  // double real_value = params_.max_acc() * acceleration / 100;
  // TODO(QiL) Update brake value based on mode
  if (driving_mode() != Chassis::COMPLETE_AUTO_DRIVE &&
      driving_mode() != Chassis::AUTO_SPEED_ONLY) {
    AINFO << "The current drive mode does not need to set acceleration.";
    return;
  }

  brake_cmd_6b_->set_brake_cmd(pedal / 100.0);
}

tips:编写自己车型的函数时,可以参考apollo自带的车型的例子进行修改,新增一个就编译一下,方便定位问题。

4、drivers/canbus

drivers/canbus为硬件驱动,can_client为can卡方式,可在canbus/conf内进行选择。can_common为can的sender和receiver接口,可不做修改。
在这里插入图片描述
以上为canbus模块所修改的地方,修改完以上模块的代码后,CANBUS模块基本上就可以正常运行了。接下来就可以开展control与planning的模块了。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值