0
$\begingroup$

Rosanswers logo

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


Originally posted by mark_vision on ROS Answers with karma: 275 on 2014-03-20

Post score: 0

$\endgroup$

1 Answer 1

0
$\begingroup$

Rosanswers logo

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/is-robot_pose_ekf-acting-correctly/


Originally posted by demmeln with karma: 4306 on 2014-03-21

This answer was ACCEPTED on the original site

Post score: 0

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.