I'm trying to use this package with this two sensor, an IMU and a Camera that gives back the pose with respect to a marker, using the ar_sys package.
In my opinion, the first problem is with the frame.
I have map_frame(fixed) -> marker_frame (fixed) and than the camera_frame-->imu_frame
It is right that the map_frame is my map_frame, the odom_frame is my marker_frame and the base_link is my imu_frame (which is in the centre of the robot)?
If I understand right, the frame between marker and camera is provided by robot_localization. But if I don't create odom(marker)->base_link(imu) transform the EKF return an error (Could not obtain transform from marker1->imu )
The solution probably is in this sentence:
MAKE SURE something else is generating the odom->base_link transform. Note that this can even be another instance of robot_localization! However, that instance should not fuse the global data.
But how is possible that base_link has two parents?
Here the launch file: (fcu is my imu frame)
<launch> <node pkg="robot_localization" type="ekf_localization_node" name="ekf_localization" clear_params="true"> <param name="frequency" value="25"/> <param name="sensor_timeout" value="0.1"/> <param name="two_d_mode" value="false"/> <param name="map_frame" value="map"/> <param name="odom_frame" value="marker"/> <param name="base_link_frame" value="fcu"/> <param name="world_frame" value="map"/> <param name="transform_time_offset" value="0.0"/> <param name="pose0" value="/poseCov"/> <param name="imu0" value="/mavros/imu/data"/> <rosparam param="pose0_config">[true, true, true, false, false, true, false, false, false, false, false, false, false, false, false]</rosparam> <rosparam param="imu0_config">[false, false, false, true, true, true, false, false, false, true, true, true, true, true, true]</rosparam> <param name="pose0_differential" value="false"/> <param name="imu0_differential" value="true"/> <param name="pose0_relative" value="false"/> <param name="imu0_relative" value="true"/> <param name="imu0_remove_gravitational_acceleration" value="true"/> <param name="print_diagnostics" value="true"/> </node>
Post score: 1
Comment by l0g1x on 2015-09-03:
+1 for this as im trying to setup the same configuration. FYI, youll need to change the source to publish a PoseWithCovarianceStamped, and not a PoseStamped as a input for robot_localization. Im not too sure what the covariances should be, but in the process of trying to model the values dynamicaly.
Comment by Juliuss on 2015-09-04:
Hi, I use a node that converts PoseStamped into PoseWithCovarianceStamped, I'm trying to estimate the covariance and then I will keep that matrix constant.
Comment by Tom Moore on 2015-09-04:
I'll look into this soon. I don't know anything about
ar_sys, so I'll have to investigate. Looking at the configuration, I'd say you need something generating a marker->fcu transform.
Comment by Juliuss on 2015-09-04:
Without using Kalman i can create the transform between camera and marker using the PoseStamped from ar_sys. So I have Map->marker->camera->fcu. (fcu is my imu frame, i forgot to say it). But if I create the transform, how can robot_localization overwrite it?
Comment by l0g1x on 2015-09-09:
any update on this? Ive tried a different solution where i just use the ar_sys pose as a pose input into robot_localization but the pose data shows Z increasing when my robot gets farther away along the world x-axis. im not sure what to do at this point.
Comment by l0g1x on 2015-09-11:
Just going to slip this reference in here incase you or someone decides to go with ekf_localization_node in @tmoore 's suggestion for Node 1, where you'll probably have imu as the only input to the ekf_node