毫米波雷达可能是自动驾驶中最容易落地的传感器,正好实验室有一只天天拿来吃灰的索性用起来,探索下双目+esr的ADAS相关
- ESR驱动移植和ros可视化主要参考 AutonomouStuff ROS Wiki
- CAN卡驱动主要参考Fix linuxcan (Kvaser SDK) Install
can卡驱动安装
1.Linuxcan PPA
PPA(个人软件包存档)现在可用于Ubuntu 14.04+来将Kvaser Linuxcan安装为DKMS(动态内核模块系统)模块。这使您不必在每次新内核升级后都重建/修复linuxcan。重启后,linuxcan应该可以像以前一样工作,并在新的内核安装上自动重建。Kvaser发行的新版本将在此PPA上可用。
sudo apt-add-repository ppa:jwhitleyastuff/kvaser-linux
sudo apt-get update
sudo apt-get install kvaser-canlib-dev kvaser-drivers-dkms
要在重新启动后验证功能,请执行以下命令:
cd /usr/src/linuxcan/canlib/examples
./listChannels
这将输出类似于以下设备的列表:
Found 1 channel(s).
channel 0 = Kvaser Leaf Light v2, 73-30130-00685-0, 25593, 3.3.0.769
2.Kvaser 的ros驱动安装
下载并安装必备软件和驱动程序包。
1.驱动程序包依赖can_msgs包进行基础通信。对于ubuntu 16.04 ros
sudo apt install ros-kinetic-can-msgs
ESR驱动
根据提示从git下载源码:GitHub - astuff/kvaser_interface: A Kvaser CAN interface ROS abstraction layer.
编译好之后在相关目录看到这三个ELF程序
list_channels
查看设备列表
一个没有ROS依赖性的简单工具,它返回所有Kvaser设备以及这些设备上可用通道的列表
Card 0:
S/N: 44263
UPC: 73-30130-00685-0
Name: Kvaser Leaf Light v2
Firmware rev: v4.3.239
Driver: leaf v8.28.846
Channel 0:
Index: 0
Max Bitrate: 0
canmonitor
一个简单的工具,没有ROS依赖关系,可以将在给定通道索引(-i-默认:0)和比特率(-b-默认:500000)上接收到的CAN消息输出到终端。
启动ROS驱动程序
ROS提供了一个实用程序(由调用roslaunch)来启动具有特定配置的节点(称为启动文件)。启动文件允许在ROS环境中启动一个节点(或多个节点)的多种配置或复杂配置。AutonomouStuff在AutonomouStuff驱动程序包中提供了所有驱动程序的示例启动文件。可以在以下位置找到示例启动文件<as_drivers_install>/install/share/<node_name>/launch/。如果ROS_PACKAGE_PATH中包含AutonomouStuff驱动程序包位置,则无需提供启动文件的路径。
要使用roslaunch运行特定驱动程序的启动文件:
roslaunch <package_name> <file_name>.launch
如
roslaunch delphi_esr delphi_esr.launch
为启动文件中定义的参数提供值:
roslaunch delphi_esr delphi_esr.launch can_hardware_id:=<ID> can_circuit_id:=<ID> esr_frame_id:=<frame_id>
ROS运行
rosrun可用于手动调用二进制文件。这使用与启动文件中的<node>定义相同的信息。
使用rosrun以下命令运行驱动程序:
rosrun <package_name> <node_name> <rosparams and arguments>
如
rosrun delphi_esr delphi_esr_can _can_hardware_id:=<ID> _can_circuit_id:=<ID> _sensor_frame_id:=<frame_id>
或者,您也可以使用可执行文件的路径来调用该可执行文件
./delphi_esr_can _can_hardware_id:= _can_circuit_id:= _sensor_frame_id:=
Delphi_ESR ROS 正确启动:
DRIVER_NAME: delphi_esr
msgs_name:delphi_esr_msgs
该驱动程序读取并解析由Delphi ESR创建的CAN和以太网数据。与Delphi ESR的CAN接口仅提供跟踪信息。以太网接口提供原始检测。
支持的硬件
- 德尔福ESR 2.5 12V
- 德尔福ESR 2.5 24V
- Delphi ESR 9.21.21(仅适用于CAN)
- Delphi ESR 9.21.15(仅适用于CAN)
delphi_esr_can
发布的话题
讯息类型 | 主题名称 | 描述 |
can_msgs/Frame | CAN_RX | 有关该主题的所有数据都打算通过CAN接口发送到传感器。 |
delphi_esr_msgs/EsrStatus1 | parsed_tx / radarstatus1 | 来自ESR的第一状态消息。 |
delphi_esr_msgs/EsrStatus2 | parsed_tx / radarstatus2 | 来自ESR的第二状态消息。 |
delphi_esr_msgs/EsrStatus3 | parsed_tx / radarstatus3 | 来自ESR的第三状态消息。 |
delphi_esr_msgs/EsrStatus4 | parsed_tx / radarstatus4 | ESR的第4条状态消息。 |
delphi_esr_msgs/EsrStatus5 | parsed_tx / radarstatus5 | ESR的第5条状态消息。 |
delphi_esr_msgs/EsrStatus6 | parsed_tx / radarstatus6 | 来自ESR的第六条状态消息。 |
delphi_esr_msgs/EsrStatus7 | parsed_tx / radarstatus7 | ESR发出的第7条状态消息。 |
delphi_esr_msgs/EsrStatus8 | parsed_tx / radarstatus8 | ESR的第8条状态消息。 |
delphi_esr_msgs/EsrStatus9 | parsed_tx / radarstatus9 | ESR的第9条状态消息。 |
delphi_esr_msgs/EsrValid1 | parsed_tx / radarvalid1 | 关于来自ESR的数据有效性的第一条消息。 |
delphi_esr_msgs/EsrValid2 | parsed_tx / radarvalid2 | 关于来自ESR的数据有效性的第二条消息。 |
delphi_esr_msgs/EsrTrack | parsed_tx / radartrack | ESR产生的所有轨道(未过滤)。 |
delphi_esr_msgs / EsrTrackMotionPower | parsed_tx / trackmotionpower | 有关每个轨道的运动和功率的信息。 |
perception_msgs/ObjectWithCovarianceArray | as_tx /对象 | ESR检测到的对象的抽象,详细表示。 |
radar_msgs/RadarStatus | as_tx / radar_status | 所有雷达状态信息的高级抽象。 |
radar_msgs/RadarErrorStatus | as_tx / radar_error_status | 所有雷达错误状态和有效性信息的高级抽象。 |
radar_msgs/RadarTrackArray | as_tx / radar_tracks | ESR生成的所有轨道(为有效性而过滤)的高级抽象。 |
visualization_msgs/Marker | as_tx / radar_markers | 基于抽象雷达轨迹的可视化信息(打算在RViz中使用)。 |
订阅的主题
讯息类型 | 主题名称 | 描述 |
can_msgs/Frame | CAN_TX | 驱动程序将解析发布到该主题的所有数据。这应该连接到CAN接口。 |
delphi_esr_msgs/EsrVehicle1 | parsed_rx / vehicle1_msgs | 向ESR提供车辆信息的第一条消息。 |
delphi_esr_msgs/EsrVehicle2 | parsed_rx / vehicle2_msgs | 向ESR提供车辆信息的第二条消息。 |
delphi_esr_msgs/EsrVehicle3 | parsed_rx / vehicle3_msgs | 向ESR提供车辆信息的第三条消息。 |
delphi_esr_msgs/EsrVehicle4 | parsed_rx / vehicle4_msgs | 向ESR提供车辆信息的第四条消息。 |
delphi_esr_msgs/EsrVehicle5 | parsed_rx / vehicle5_msgs | 向ESR提供车辆信息的第五条消息。 |
geometry_msgs/TwistStamped | as_rx / vehicle_motion | 用于发布抽象的车辆运动信息的主题,该信息被解析为ESR特定的消息并发送到雷达。 |
参数
~sensor_frame_id
传感器参考系的ID。这将附加到所有已发布的邮件中。
~sensor_upside_down
可以发送给ESR的标志,以定位设备并接收有关轨道位置的准确信息。
~viz_mature_tracks_only
允许对RViz中的轨道进行可配置的可视化,以消除正在发布的较不成熟轨道的噪声。
delphi_esr_eth
发表的话题
讯息类型 | 主题名称 | 描述 |
network_interface/TCPFrame | tcp_tx | 驱动程序从传感器接收到的所有原始TCP数据的副本。 |
delphi_esr_msgs/EsrEthTx | parsed_tx / esr_eth_tx_msg | 驱动程序从传感器通过以太网接收的所有数据的解析版本。 |
raadar_msgs/RadarDetectionArray | as_tx / radar_detections | ESR产生的所有检测的高级抽象。 |
visualization_msgs/Marker | as_tx / radar_markers | 基于抽象雷达探测的可视化信息(打算在RViz中使用)。 |
订阅的主题:无
参数
~sensor_frame_id
传感器参考系的ID。这将附加到所有已发布的邮件中。
~ip_address
用于连接到ESR的IP地址。
~ip_port
用于连接ESR的端口(默认值:5555)。
launch文件:
roslaunch delphi_esr delphi_esr.launch
根据自己CAN卡硬件自行改写部分参数,机器码相关
<?xml version="1.0"?>
<launch>
<arg name="esr_frame_id" default="esr_1" />
<arg name="esr_upside_down" default="false" />
<arg name="viz_mature_tracks_only" default="false" />
<arg name="use_kvaser" default="true" />
<arg name="kvaser_hardware_id" default="044263" />
<arg name="kvaser_circuit_id" default="0" />
<arg name="use_socketcan" default="false" />
<arg name="socketcan_device" default="can0" />
<include file="$(find kvaser_interface)/launch/kvaser_can_bridge.launch" if="$(arg use_kvaser)">
<arg name="can_hardware_id" value="$(arg kvaser_hardware_id)" />
<arg name="can_circuit_id" value="$(arg kvaser_circuit_id)" />
<arg name="can_bit_rate" value="500000" />
</include>
<node pkg="socketcan_bridge" type="socketcan_bridge_node" name="socketcan_bridge" if="$(arg use_socketcan)">
<param name="can_device" value="$(arg socketcan_device)" />
</node>
<node pkg="delphi_esr" type="delphi_esr_can" name="delphi_esr_can">
<param name="sensor_frame_id" value="$(arg esr_frame_id)"/>
<param name="sensor_upside_down" value="$(arg esr_upside_down)"/>
<!-- removes the noise of new tracks in rviz and only vizualizes the mature tracks -->
<param name="viz_mature_tracks_only" value="$(arg viz_mature_tracks_only)"/>
</node>
</launch>
最后出图
总结
比较机械化,参照AF代理商wiki就能完成,坑也没有。重点是之后的传感器融合和双目和lidar