If the milestone was created before the participant registered, then the most common cause is that the milestone doesn't have that specific participation type associated with it. Once this is added, the badge should appear.

If the milestone is associated with the participation type, then double-check the milestone badge is enabled:
  1. Edit the Teamraiser
  2. Go to step 8. Manage Milestones
  3. Click Edit next to the Milestone
  4. Go to step e. Configure Milestone Achievement Badge
  5. Mark the checkbox for "Yes, enable the achievement badge for this Participant Milestone"
If you have configured a milestone that is a participant's latest achievement, but this option is not checked it will then not display any badge on their participant or team page. Since Teamraiser milestones are not cumulative (Are TeamRaiser Milestones cumulative?) even though they meet the criteria, the setting prevents the badge from displaying and so another badge will not display until they reach the next milestone. If you decide not to use a milestone, you should instead delete it so that it doesn't interfere with the display of the other badges (unless your intention is you'd like them to receive a milestone autoresponder but not display a badge on their participant or team page).