ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question
0

robot pose ekf

asked 2014-03-20 22:51:53 -0500

mark_vision gravatar image

updated 2014-03-21 01:06:42 -0500

demmeln gravatar image

Hi all, i'm trying to make this node run just with my IMU Microstrain 3DM-GX3-25. For this I use the node provided here.

If I run them as they are the IMU is outputting the data correctly, while the ekf node is receiving nothing.

Then i realized that the ekf node is subscribing to imu_data topic and the driver is publishing on imu/data

I changed the code of ekf to make it subscribing to imu/data but it's still waiting for ever.

I'm using Hydro on Ubuntu 12.04, and I modified the launch file to use only the IMU info (no odom, no vo).

Any suggestions?

EDIT: in addition I always receive an error when I start the IMU

[ERROR] [1395392758.782776169]: Imu: calibration check failed: average angular drift = 57.875961 mdeg/sec > 11.459156 mdeg/sec

but the IMU is shooting data anyway so it should work anyway.

EDIT2: the callback returns here:

if (!robot_state_.waitForTransform(base_footprint_frame_, imu->header.frame_id, imu_stamp_, ros::Duration(0.5))) {
    // warn when imu was already activated, not when imu is not active yet
    if (imu_active_)
        ROS_ERROR("Could not transform imu message from %s to %s", imu->header.frame_id.c_str(), base_footprint_frame_.c_str());
    else if (my_filter_.isInitialized())
        ROS_WARN("Could not transform imu message from %s to %s. Imu will not be activated yet.", imu->header.frame_id.c_str(), base_footprint_frame_.c_str());
    else
        ROS_DEBUG("Could not transform imu message from %s to %s. Imu will not be activated yet.", imu->header.frame_id.c_str(), base_footprint_frame_.c_str());
    return;
}

The stupid thing is that i don't see any WARN or ERROR on the screen...

edit retag flag offensive close merge delete

2 Answers

Sort by ยป oldest newest most voted
0

answered 2014-03-21 01:53:31 -0500

demmeln gravatar image

updated 2014-03-28 01:19:38 -0500

As a general remark, the robot_pose_ekf node is not a general purpose pose estimation EKF, but was developed specifically for the PR2 to improve its odometry with help of IMU and possibly VO. It is restricted to planar movement, and I'm not sure if it even works with IMU input alone.

For the above Edit2, where exactly does the callback return, does it go inside the if for sure?

Edit 2:

Re "seeing the output in stdout": have you put a output=screen for that node in your launch file?

Re the ROS_DEBUG("Could not transform imu message from %s to %s. Imu will not be activated yet.", imu->header.frame_id.c_str(), base_footprint_frame_.c_str()); warning: The warning does tell you something about the problem. You need to make sure that there is a tf transform between your base_footprint frame your IMU frame. Usually this is done by specifiying the links in the URDF of your robot model and the use robot_state_publisher with it.

Edit 3 : also check out this question & answer: http://answers.ros.org/question/12562...

edit flag offensive delete link more
0

answered 2014-03-23 23:28:17 -0500

mark_vision gravatar image

yes it for sure reach last else branch ( ROS_DEBUG("Could not transform imu message from %s to %s. Imu will not be activated yet.", imu->header.frame_id.c_str(), base_footprint_frame_.c_str());) By the way, why I cannot see the warning and the messages on the stdout? I've replaced all that stuff with the INFO_STREAM macro to understand where the flow was going.

edit flag offensive delete link more

Comments

Please do not post follow-ups as 'answers'. Use the edit funciton for your question or the comment function.

demmeln gravatar image demmeln  ( 2014-03-28 01:09:52 -0500 )edit

Question Tools

1 follower

Stats

Asked: 2014-03-20 22:51:53 -0500

Seen: 1,640 times

Last updated: Mar 28 '14