Make anything travel along an arbitrary curve with <animateMotion>. The killer attribute is rotate="auto" — it turns the traveler to face its direction of travel.
<path id="road" d="M30 200 C120 40, 300 40, 360 140 ..." />
<g>
<polygon points="0,-9 20,0 0,9 5,0" fill="#c8ff00"/>
<animateMotion dur="5s" repeatCount="indefinite" rotate="auto">
<mpath href="#road"/> <!-- reuse an existing path by id -->
</animateMotion>
</g>
<!-- CSS equivalent (modern): offset-path: path('...'); offset-rotate: auto; -->
Both arrows are point-identical in position at every instant — only rotate="auto" differs. Notice how the green arrow banks through the S-curve while the blue one slides sideways. Drag duration to change speed; Replay calls setCurrentTime(0).