Robotics StackExchange | Archived questions

[Autoware] Inclined localizer, wrong detected obstacle height

Hi everyone,

I have needed to incline my localizer, in Setup tab I have:

x = 2.2, y = 0, z = 1.86, roll = 0.0, pitch = 0.2138, yaw = 0.0

I have my map and I can navigate it well, but the euclideanclusterdetect resulting bounding boxes are inclined and the height limits are not well applied. Also aren’t well obstacles from velocity_set

I have seen in lidareuclideancluster_detect/ cluster.cpp line 259

tf::Quaternion quat = tf::createQuaternionFromRPY(0.0, 0.0, rz);

None inclination has been considered, if I put pitch = -0.2138, I can see bounding boxes as they should be but the z position calculated isn't is good.

I pass under a roof that is at 3 meter with respect to base_link and with a height limit above the sensor of 0.3 meter to search obstacles it mark it as obstacle.

I can see using Veloview (after configure x, y, z, and pitch) correct values of x,y,z from this roof.

Any help?

Screenshots: url


Ubuntu 16.04 Ros Kinetic Autoware 1.9

Asked by javcursor on 2019-06-13 04:32:47 UTC

Comments

Answers

One way of solving this is registering a new "corrected" coordinate frame in the tf tree (let's call it lidar) with the desired pitch (have a look at the ROS tf package). Once this is done, just set the clustering param output_frame to use your new corrected frame lidar in the launch file or through Runtime Manager. The boxes will be transformed for you inside the code.

Asked by amc-nu on 2019-06-18 19:49:34 UTC

Comments

Ok, I will try it.

If I didn't understood wrong, I've to do the tf from localizer (Velodyne) to base_link

 <!-- base_link_to_localizer -->
   <arg name="x" default="2.2"/>
   <arg name="y" default="0"/>
   <arg name="z" default="1.86"/>
   <arg name="yaw" default="0"/>
   <arg name="pitch" default="0.2138"/> 
   <arg name="roll" default="0"/>
   <arg name="frame_id_baselink2localizer" default="base_link"/>
   <arg name="child_frame_id_baselink2localizer" default="velodyne"/>
   <arg name="period_in_ms" default="10"/>
   <node type="static_transform_publisher" pkg="tf" name="base_link_to_localizer" args="$(arg x) $(arg y) $(arg z) $(arg yaw) $(arg pitch) $(arg roll) $(arg frame_id_baselink2localizer) $(arg child_frame_id_baselink2localizer) $(arg period_in_ms)"/>

And the new one ("lidar"), is it with respect to localizer?

 <!-- localizer_to_lidar -->
   <arg name="x_lidar" default="0"/>
   <arg name="y_lidar" default="0"/>
   <arg name="z_lidar" default="0"/>
   <arg name="yaw_lidar" default="0"/>
   <arg name="pitch_lidar" default="-0.2138"/>
   <arg name="roll_lidar" default="0"/>
   <arg name="frame_id_localizer2lidar" default="velodyne"/>
   <arg name="child_frame_id_localizer2lidar" default="lidar"/>
   <arg name="period_in_ms_lidar" default="10"/>
   <node type="static_transform_publisher" pkg="tf" name="localizer_to_lidar" args="$(arg x_lidar) $(arg y_lidar) $(arg z_lidar) $(arg yaw_lidar) $(arg pitch_lidar) $(arg roll_lidar) $(arg frame_id_localizer2lidar) $(arg child_frame_id_localizer2lidar) $(arg period_in_ms_lidar)"/>

With this new tf, cluster points height should be similar to the height obtained with Veloview?

Thanks,

javcursor

EDIT_UPDATE:

I've tried it and if I'm doing it well I don't get the expected result

new screenshots

Asked by javcursor on 2019-06-19 02:08:21 UTC

Comments