[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
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
Asked by javcursor on 2019-06-19 02:08:21 UTC
Comments