Robotics StackExchange | Archived questions

viso2 tf_tree problem

Hello to everybody.

I want to use the mono odometer from vo for Odometry in the robot_localization. The first step which is allready not working is the vo. I always get the following error message:

[ WARN] [1455205411.959462457]: The tf from 'base_link' to 'camera' does not seem to be available, will assume it as identity!

I allready looked for 2 days for a solution but i just found out that i have to use a static what i allready did. I use a static transform for the odom->base_link

my launchfile looks linke this:

<!-- **********Run the ROS package image_proc********** -->
    <node ns="camera" pkg="image_proc" type="image_proc" name="image_proc">
    </node>

<!-- **********Run the viso2_ros package********** -->
<node pkg="viso2_ros" type="mono_odometer" name="mono_odometer" output="screen">
    <remap from="image" to="camera/image_rect"/>
    <param name="odom_frame_id" value="odom"/>
    <param name="base_link_frame_id" value="base_link"/>
    <param name="publish_tf" value="true"/>
    <param name="invert_tf" value="false"/>

    <!-- Matcher params -->
    <param name="nms_n" value="3" /><!-- default:3 Minimum distance between maxima in pixels for non-maxima-suppression 2-->
    <param name="nms_tau" value="50" /><!-- default:50 Interest point peakiness threshold 60-->
    <param name="match_binsize" value="50" /><!-- default:50 Matching width/height (affects efficiency only)  60-->
    <param name="match_radius" value="200" /><!-- default:200 Matching radius (du/dv in pixels)  110-->
    <param name="match_disp_tolerance" value="2" /><!-- default:2 dv tolerance for stereo matches (in pixels). 2-->
    <param name="outlier_disp_tolerance" value="5" /><!-- default:5 Disparity tolerance for outlier removal (in pixels).  10-->
    <param name="outlier_flow_tolerance" value="5" /><!-- default:5 Flow tolerance for outlier removal (in pixels).  5-->
    <param name="multi_stage" value="1" /><!-- default:1 0=disabled, 1=multistage matching (denser and faster).  -->
    <param name="half_resolution" value="1" /><!-- default:1 0=disabled, 1=match at half resolution, refine at full resolution. -->
    <param name="refinement" value="1" /><!-- default:1 0=none, 1=pixel, 2=subpixel.  -->

    <!-- Bucketing params -->
    <param name="max_features" value="2" /><!-- default:2 Maximum number of features per bucket 15-->
    <param name="bucket_width" value="50.0" /><!-- default:50.0 Width of the bucket 60-->
    <param name="bucket_height" value="50.0" /><!-- default:50.0 Height of the bucket 60-->

    <!-- Mono params -->
    <param name="camera_height" value="1.0" /><!-- Height of the camera above the ground in meters. -->
    <param name="camera_pitch" value="0.0" /><!-- Pitch of the camera in radiants, negative pitch means looking downwards.  -->
    <param name="ransac_iters" value="2000" /><!-- Number of RANSAC iterations.  -->
    <param name="inlier_threshold" value="0.00001" /><!-- Fundamental matrix inlier threshold.  -->
    <param name="motion_threshold" value="100.0" /><!-- Threshold for stable fundamental matrix estimation.  -->
</node>
<node pkg="tf" type="static_transform_publisher" name="camera_broadcaster" args="0 0 0 1.5708 -1.5708 0 base_link camera 150" />

i need the tranform for moving the camera in the right direction. if i dont use the tf and the identity is used i can only use the VO with a pointing to the ceeling camera.

maybe im missing something or not seeing something.

thanks for any help.

Asked by moody on 2016-02-11 10:52:31 UTC

Comments

Answers

Hi moody,

if you don't set the transformation between /base_link and /camera, the odometry measurements will be relative to the camera axis (z forward, x right, y down). If you know where the camera is placed relative to the robot /base_link, you can provide a static transform as you did in order to receive the odometry readings in the robot coordinate system.

Asked by Miquel Massot on 2016-03-15 11:19:11 UTC

Comments