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
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