void neighbors_collision_log(neighbors_t *neighbors)
{
	uint8_t ind, i;
	float relative_position[3];
	float dist;
	for (ind = 0; ind < neighbors->number_of_neighbors; ind++)
	{
		for (i = 0; i < 3; i++)
		{
			relative_position[i] = neighbors->position_estimator->local_position.pos[i] - neighbors->neighbors_list[ind].extrapolated_position[i];
		}
		dist = vectors_norm_sqr(relative_position);
		
		if (dist < neighbors->collision_dist_sqr && !neighbors->collision_log.collision_flag[ind])
		{
			neighbors->collision_log.count_collision++;
			if (neighbors->collision_log.count_near_miss != 0)
			{
				neighbors->collision_log.count_near_miss--;
			}
			neighbors->collision_log.collision_flag[ind] = true;
			print_util_dbg_print("Collision with neighbor:");
			print_util_dbg_print_num(ind,10);
			print_util_dbg_print(", nb of collisions:");
			print_util_dbg_print_num(neighbors->collision_log.count_collision,10);
			print_util_dbg_print("\r\n");
		}
		else if (dist < neighbors->near_miss_dist_sqr && !neighbors->collision_log.near_miss_flag[ind])
		{
			neighbors->collision_log.count_near_miss++;
			neighbors->collision_log.near_miss_flag[ind] = true;
			print_util_dbg_print("Near miss with neighbor:");
			print_util_dbg_print_num(ind,10);
			print_util_dbg_print(", nb of near miss:");
			print_util_dbg_print_num(neighbors->collision_log.count_near_miss,10);
			print_util_dbg_print("\r\n");
		}
		else if (dist > neighbors->near_miss_dist_sqr)
		{
			neighbors->collision_log.collision_flag[ind] = false;
			neighbors->collision_log.near_miss_flag[ind] = false;
		}
	}
}
Mission_handler::update_status_t Mission_handler_navigating::update()
{
    /**********************************
    Determine if arrived for first time
    **********************************/
    // Find distance to waypoint
    local_position_t wpt_pos = waypoint_.local_pos();
    float rel_pos[3];
    for (int i = 0; i < 3; i++)
    {
        rel_pos[i] = wpt_pos[i] - ins_.position_lf()[i];
    }
    float dist2wp_sqr = vectors_norm_sqr(rel_pos);
    float vel_sqr     = vectors_norm_sqr(ins_.velocity_lf().data());

    // Check if radius is available
    float radius = 0.0f;
    waypoint_.radius(radius);
    if (radius == 0.0f)
    {
        // TODO use a configuration for this default radius
        radius = 2.0f;
    }

    // Check if we reached the waypoint
    bool is_arrived = (dist2wp_sqr < (radius * radius)) && (vel_sqr < 1.0f); // TODO use a config for this speed threshold
    if (is_arrived)
    {
        // If we are near the waypoint but the flag has not been set, do this once ...
        if (!waypoint_reached_)
        {
            // Send debug log ...
            print_util_dbg_print("Waypoint reached, distance: ");
            print_util_dbg_putfloat(sqrt(dist2wp_sqr), 3);
            print_util_dbg_print(" m. Less than acceptable radius:");
            print_util_dbg_putfloat(sqrt(radius * radius), 3);
            print_util_dbg_print(" m.\r\n");

            // ... as well as a mavlink message ...
            mavlink_message_t msg;
            mavlink_msg_mission_item_reached_pack(mavlink_stream_.sysid(),
                                                  mavlink_stream_.compid(),
                                                  &msg,
                                                  waypoint_handler_.current_waypoint_index());
            mavlink_stream_.send(&msg);

            // ... and record the travel time ...
            travel_time_ = time_keeper_get_ms() - start_time_;

            // ... and set to waiting at waypoint ...
            waypoint_reached_ = true;

            // If the waypoint is not autocontinue, use its heading
            if (waypoint_.autocontinue() == false)
            {
                // Use waypoint's heading
                waypoint_.heading(position_command_.heading);
            }
        }
    }

    /*******************
    Determine status code
    ********************/
    // First check if we have reached the waypoint
    if (waypoint_reached_)
    {
        // Then ensure that we are in autocontinue
        if ((waypoint_.autocontinue() == 1) && (waypoint_handler_.waypoint_count() > 1))
        {
            // Differentiate between dubin and direct to
            return MISSION_FINISHED;
        }
    }

    return MISSION_IN_PROGRESS;
}