I am using a companion computer to control a pixhawk by uploading waypoints to it, monitoring the vehicles progress, uploading more waypoints, etc. The missions that are uploaded are ROI / Waypoint pairs i.e.
Seq 0 is the home waypoint
Seq 1 is an ROI
Seq 2 is a waypoint
Seq 3 is an ROI
Seq 4 is a waypoint

I have been monitoring the mission’s progress via the MISSION_CURRENT message however I would like to use the MISSION_ITEM_REACHED (theoretically to give a more timely update when a waypoint is reached) however I appear to only receive a MISSION_ITEM_REACHED after the ROIs (and actually not all of them–there appear to be some that a message that never got sent). For waypoints I never receive a MISSION_ITEM_REACHED message, but do receive a STATUSTEXT message indicating the command has been reached (and incidently I do not receive a STATUSTEXT message have to ROIs are processed).

What’s the criteria for when a MISSION_ITEM_REACHED message is sent?

I am also very interested on your findings.

Did you ever solved this and how did you get it to provide a MISSION_ITEM_REACHED message?

I never solved this…if I recall right we just made do with the mission current

I have also recently looked into this again. Looks like the mission item (waypoint) is considered reached when the target which the position controller is chasing reaches the waypoint (not the actual drone).
If you look at the “Hit Rad” section of the waypoint description (Copter Mission Command List — Copter documentation) they say:
" the waypoint will be considered complete when the virtual point that the vehicle is chasing reaches the waypoint. This can be 10m (or more) ahead of the vehicle meaning that the vehicle will turn towards the following waypoint long before it actually reaches the current waypoint"

So I guess it would also relate to the speed at which you are flying. If you fly slow the virtual point would lead by a smaller margin that it would if you were flying faster.

ArduCopter 4.1.x uses S-curves for navigation. So the item reached logic has probably changed.