Can’t reset the secondary query by wp_reset_postdata()

wp_reset_query is meant to be used with a loop, because it resets the global $wp_query object. get_posts, on the other hand, just returns an array to be iterated with ie. foreach. setup_postdata does not populate the $wp_query object: https://codex.wordpress.org/Function_Reference/setup_postdata.

For a custom query, you would either use the WP_Query class, or you could reset your posts array using standard PHP functions like reset.

https://codex.wordpress.org/Function_Reference/wp_reset_query