Your welcome! I'll try to answer the new questions:
(Let me know if something doesn't make sense, and I'll try to explain in more detail and/or better :smiley: )
To move backwards you just need to multiply the above vector by negative one, then it should move backwards. So to move backwards using the above code, you need something like this: $cannon_barrel.translate(unit_circle_pos * RECOIL_SPEED * delta_time * -1)
(That's assuming I remember correctly. It's been awhile since I've worked in 2D.)
Translate moves a node by the inputted amount (relative to the node's position). If you are at position X:4 Y:4 and call translate(Vector2(-1, 2)) then you'll get a position of X:3 Y:6. Translate is primiarlly used to move nodes around without having to do a more messy bit of code to get the same result (otherwise you'd have to do node.position = node.position + translate_vector instead of node.translate(translate_vector)).
Maybe this page from the docs will help? It's a little long and can be overwhelming, but it explains how the coordinate system works in Godot (you can skip the 3D stuff if you want)
Also, I was just looking at this topic on the forums where I helped someone with a similar problem. There he is using velocity and then adding the velocity to his position instead of using translate. You may want to try using $cannon_barrel.position += (unit_circle_pos * RECOIL_SPEED * delta_time) or $cannon_barrel.global_translate(unit_circle_pos * RECOIL_SPEED * delta_time * -1) instead and see if one of those work better, because then it will be moving in global space as opposed to local space.