毫米波雷達可能是自動駕駛中最容易落地的傳感器,正好實驗室有一隻天天拿來吃灰的索性用起來,探索下雙目+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下載源碼:https://github.com/astuff/kvaser_interface
編譯好之後在相關目錄看到這三個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