astuff/astuff_sensor_msgs

Is there a ROS driver for these messages available on ARM processors?

Opened this issue · 7 comments

I'd like to consume delphi-esr messages from this repo on a Jetson Xavier NX, which has an ARM processor. On x86 I can install the ROS driver just fine and it publishes these messages. But here are the relevant logs when trying to follow those same install steps on an ARM processor. Please let me know an alternative approach for installing on Ubuntu 18 ARM:

sh -c 'echo "deb [trusted=yes] https://s3.amazonaws.com/autonomoustuff-repo/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/autonomoustuff-public.list' && apt-get update && apt-get install --yes --no-install-recommends apt-transport-https ros-${ROS_DISTRO}-multisense ros-${ROS_DISTRO}-delphi-esr-msgs ros-${ROS_DISTRO}-derived-object-msgs ros-${ROS_DISTRO}-delphi-esr && apt-get clean
---> Running in 8c1e095e504e
Get:1 http://packages.ros.org/ros/ubuntu bionic InRelease [4683 B]
Hit:2 http://ports.ubuntu.com/ubuntu-ports bionic InRelease
Ign:3 https://s3.amazonaws.com/autonomoustuff-repo bionic InRelease
Get:4 http://ports.ubuntu.com/ubuntu-ports bionic-updates InRelease [88.7 kB]
Get:5 https://s3.amazonaws.com/autonomoustuff-repo bionic Release [2923 B]
Ign:6 https://s3.amazonaws.com/autonomoustuff-repo bionic Release.gpg
Get:7 https://s3.amazonaws.com/autonomoustuff-repo bionic/main arm64 Packages [974 B]
Get:8 http://packages.ros.org/ros/ubuntu bionic/main arm64 Packages [731 kB]
Get:9 http://ports.ubuntu.com/ubuntu-ports bionic-backports InRelease [74.6 kB]
Get:10 http://ports.ubuntu.com/ubuntu-ports bionic-security InRelease [88.7 kB]
Get:11 http://ports.ubuntu.com/ubuntu-ports bionic-updates/universe arm64 Packages [1893 kB]
Get:12 http://ports.ubuntu.com/ubuntu-ports bionic-updates/main arm64 Packages [1501 kB]
Get:13 http://ports.ubuntu.com/ubuntu-ports bionic-security/universe arm64 Packages [1203 kB]
Get:14 http://ports.ubuntu.com/ubuntu-ports bionic-security/main arm64 Packages [1118 kB]
Fetched 6706 kB in 5s (1439 kB/s)
Reading package lists...
Reading package lists...
Building dependency tree...
Reading state information...
E: Unable to locate package ros-melodic-delphi-esr

Unfortunately the delphi_esr_driver (more info on it here) is only available on amd64/x86 platforms at this time.

Hi @zoombinis, the delphi_esr_driver has been released on ARM for ROS melodic. Let me know if you are able to install and run the driver. The other CAN dependencies (kvaser_interface, kvaser-canlib-dev, etc.) are not yet released on ARM, but should be soon if things go smoothly.

@icolwell-as Thanks! But the only topic publishing is /can_rx

The SocketCAN does not appear to be working. Can you please confirm how to get other CAN topics working? In particular I need as_tx/radar_tracks.

The delphi_esr_driver has two ways of accessing CAN data:

  1. Via Kvaser hardware using the use_kvaser:=true launch file argument, which then launches the kvaser_interface package.
  2. Via Socketcan using the use_socketcan:=true launch file argument, which then launches the socketcan_bridge package.

Both of these options launch a CAN node that will publish CAN data. The delphi_esr node subscribes to the can_tx topic and converts the data transmitted from the sensor to the delphi_esr_msgs and radar_msgs.

We typically only use the kvaser option ourselves, but as long as socketcan_bridge is publishing valid data in the can_msgs/Frame format, then the driver should work. I just noticed the delphi_esr.launch file doesn't remap the topic from socketcan_bridge (which seems to publish to received_messages by default), so maybe you need to try some topic re-mapping.

I only saw topic /can_rx being published. If I add the argument for socketcan_bridge I only see the "received_messages" topic but I'm not sure how you're recommending I remap topics. Can you please clarify how I should edit the launch file to see the as_tx/radar_tracks topic on ARM?

You only see /can_rx because the delphi_esr_can node publishes that. The delphi_esr_can node subscribes to /can_tx, which is called /received_messages by the socketcan_bridge. Here is in an example launch file that could work:

<?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="false" />
  <arg name="kvaser_hardware_id" default="10051" />
  <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>
  
  <remap from="/received_messages" to="/can_tx" />
  <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>

The <remap from="/received_messages" to="/can_tx" /> line is what does the magic.
I also suggest running rqt_graph node after launching the driver to see the topic connections visually (you may have to play around with the check boxes to see everything).

Closing since the driver is now available on ARM (Melodic only for now until Noetic version is released).
@zoombinis, if you run into any more difficulty, please open a new issue or reach out to support.as.ap@hexagon.com