无人驾驶(在apollo中添加新车辆)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/feixiaoxing/article/details/88691656

【 声明:版权所有,欢迎转载,请勿用于商业用途。  联系信箱:feixiaoxing @163.com】

    目前最火的自动驾驶平台其实是百度的apollo,但是大家有没有想过,apollo是如何利用工控机和汽车之间进行通信的呢?换句话说,服务器本身是如何向汽车发送加速、减速、转向的命令呢?答案就是can总线。

1、can模块的位置

https://github.com/ApolloAuto/apollo/tree/master/modules/canbus

2、如何添加各品牌商的汽车

    我们知道,apollo除了各个传感器的标定(以camera为例,常用的标定就有摄像头内参标定、旋转矩阵标定、帧率标定、分辨率标定、阀值标定等等)、算法的标定之外,另外一个重要功能就是尽量方便各个品牌商在apollo平台添加自己的汽车。但是各个品牌之间对于can总线的定义并不是通用的,很多都是各个OEM厂家自己定制的。大家可以看一下目前apollo支持哪些乘用车,地址在这https://github.com/ApolloAuto/apollo/tree/master/modules/canbus/vehicle。观察一下,目前除了长城的wey之外,其他支持的车型还是以国外的汽车为主。

3、最适合用来学习的车辆

    就个人而言,目前最喜欢看的代码还是lincoln汽车的代码,它的代码是最规整的、也是最清晰的,protocol协议也是最漂亮的。地址在这,https://github.com/ApolloAuto/apollo/tree/master/modules/canbus/vehicle/lincoln

4、常用的can消息有哪些

    按照lincoln汽车作为例子来说,目前它支持的can消息有加速消息、刹车命令、刹车消息、油箱信息、档位信息、gps信息、陀螺仪信息、授权信息、杂项信息、转向命令、环视信息、加速命令、发动机信息、胎压信息、转向命令、版本信息和车速信息。地址在这,https://github.com/ApolloAuto/apollo/tree/master/modules/canbus/vehicle/lincoln/protocol

5、消息类型

    大部分消息其实都是recv消息,真正send的命令很少

LincolnMessageManager::LincolnMessageManager() {
  // TODO(Authors): verify which one is recv/sent
  AddSendProtocolData<Brake60, true>();
  AddSendProtocolData<Throttle62, true>();
  AddSendProtocolData<Steering64, true>();
  AddSendProtocolData<Gear66, true>();
  AddSendProtocolData<Turnsignal68, true>();

  AddRecvProtocolData<Brake61, true>();
  AddRecvProtocolData<Throttle63, true>();
  AddRecvProtocolData<Steering65, true>();
  AddRecvProtocolData<Gear67, true>();
  AddRecvProtocolData<Misc69, true>();
  AddRecvProtocolData<Wheelspeed6a, true>();
  AddRecvProtocolData<Accel6b, true>();
  AddRecvProtocolData<Gyro6c, true>();
  AddRecvProtocolData<Gps6d, true>();
  AddRecvProtocolData<Gps6e, true>();
  AddRecvProtocolData<Gps6f, true>();
  AddRecvProtocolData<Tirepressure71, true>();
  AddRecvProtocolData<Fuellevel72, true>();
  AddRecvProtocolData<Surround73, true>();
  AddRecvProtocolData<Brakeinfo74, true>();
  AddRecvProtocolData<Throttleinfo75, true>();
  AddRecvProtocolData<Version7f, true>();
  AddRecvProtocolData<License7e, true>();
}

6、如何添加自己的车辆

    基本步骤其实很简单,

    a,在vehicle_factory.cc文件中注册自己的车辆

    b,在vehicle目录下创建一个目录,比如为某个国产车辆品牌abc

    c,进入vehicle,创建abc_vehicle_factory.cc文件、abc_message_manager.cc文件、abc_controller.cc三个文件

    d,继续创建一个protocol目录

    e,在protocol目录中完成abc_message_manager.cc中提到的各个can消息

    f,进一步完成abc_controller.cc文件,VehicleController.cc中没有实现的虚函数,需要全部实现

    g,更新canbus_conf.pb.txt文件,添加abc的相关信息

    h,先用apollo仿真环境测试一遍,最后再用实际车辆运行一下

7、can模块的作用

收发命令

https://github.com/ApolloAuto/apollo/tree/master/modules/canbus

8、后续的话

    现在汽车其实是一个大的计算平台,所以不管是刹车、加速、减速,本质上都是作为一个传感器存在的。它和最终的执行机构不是直接连接在一起的,所以正是有了can平台和can信号,我们才能利用外面的工控机来对车辆进行设置和控制。

8、官方教大家如何添加新车辆

    大家也可以看看百度apollo是如何叫大家添加新车辆的,https://github.com/ApolloAuto/apollo/blob/master/docs/howto/how_to_add_a_new_vehicle.md

后续的话:

    apollo不管是文档还是代码设计方面还是有很多可以学习的东西,建议大家好好掌握一下,对个人的提高和成长很有裨益。

猜你喜欢

转载自blog.csdn.net/feixiaoxing/article/details/88691656