Vision position estimation fusing with MSF framework, imu-camera setting problem

Hello guys!
I am testing vision position estimate in LPE mode.
I am using MSF framework to fuse vision and imu data.
I can get pretty good position estimation information from VISION_POSITION_ESTIMATE message(not using vision for heading, but it seems that is not enough, because when I switch to POSCTL mode, QuadCopter keep fly around in a circle. It looks like this:

And this is my flying log file:

As mhkabir suggested, I should use vision for heading, I know by set ATT_EXT_HDG_M can enable this function. But I don’t really know how to mess with MSF settings. This is my MSF settings:

data_playback: false
core/core_fixed_bias: false

#########IMU PARAMETERS#######
####### pixhawk - MPU6050
core/core_noise_acc: 0.013
core/core_noise_accbias: 0.000108
core/core_noise_gyr: 0.00065
core/core_noise_gyrbias: 0.00000212

pose_sensor/pose_fixed_scale: false
pose_sensor/pose_noise_scale: 0.0
pose_sensor/pose_noise_p_wv: 0.0
pose_sensor/pose_noise_q_wv: 0.0
pose_sensor/pose_noise_q_ic: 0.0
pose_sensor/pose_noise_p_ic: 0.0
pose_sensor/pose_delay: 0.02
pose_sensor/pose_noise_meas_p: 0.005
pose_sensor/pose_noise_meas_q: 0.02
pose_sensor/pose_initial_scale: 5.60

# q_ic is the quaternion representing the rotation of the camera in IMU frame. Unit quaternion here as we rotate the coordinate frames in SVO parameters.
pose_sensor/init/q_ic/w: 1.0
pose_sensor/init/q_ic/x: 0.0
pose_sensor/init/q_ic/y: 0.0
pose_sensor/init/q_ic/z: 0.0

# p_ic is the translation between the IMU and the camera in meters.
pose_sensor/init/p_ic/x: 0.1 
pose_sensor/init/p_ic/y: 0.0
pose_sensor/init/p_ic/z: 0.065

pose_sensor/pose_absolute_measurements: true
pose_sensor/pose_use_fixed_covariance: true
pose_sensor/pose_measurement_world_sensor: false # we do not publish the world in camera frame as set in SVO parameters.

pose_sensor/pose_fixed_scale: false
pose_sensor/pose_fixed_p_ic: true
pose_sensor/pose_fixed_q_ic: true
pose_sensor/pose_fixed_p_wv: false
pose_sensor/pose_fixed_q_wv: false

I have a downward-facing camera with image top the same as pixhawk forward direction. So I think keep pose_sensor/init/q_ic/w:1 x:0 x:0 y:0 z:0 should be fine. But that can not make ATTITUDE.roll/pitch/yaw and VISION_POSITION_ESTIMATE.roll/pitch/yaw the same.
Could anyone help? Thanks!

Hi @rawk-v,

Sorry can’t help with your question. But I was wondering are you using mavros to feed in the vision_position_estimate (via mavros/vision_pose/pose)? and if so, do you need to adjust any parameter in LPE other than the vision_on and the corresponding weight?

Thank you


@tuofeichen Yes, I use mavros to send vision data to FCU, but the topic is /mavros/vision_pose/pose_cov.
And I disable gps too in LPE estimator. Also you need to set ATT_EXT_HDG_M=1 if your want to fuse vision heading.

Hi @rawk-v,
Thanks, I figured what I did wrong by looking into mavros. It seems like we also need to assign the timestamp otherwise it won’t transmit the message with same timestamp. But thanks anyway!


How did you manage to figure out a solution for your problem? What do you mean by assigning timestamp ?


I know this question is a bit outdated, but would you happen to remember how to setup the MSF? I’ve been trying to look for a tutorial online but I haven’t had much luck. I want to try to use MSF with SVO for making a position hold controller.

Thank you!