Rotate while strafing with mecanum wheels

I have a robot with a drivetrain that is comprised of 4 mecanum wheels. These wheels are able to move vertically and horizontally, as well as rotate. The robot is square (18in x 18in) with the front 2 wheels in line, back 2 wheels in line, left 2 wheels in line, and right 2 wheels in line.

My question is would it be possible to strafe (move horizontally) while rotating? Is this feasible with mecanum wheels? If so, what would be the required relative speeds of each wheel?

Any help is appreciated, thanks!

• Welcome to Robotics "I am a registered user". Can you edit your question to elaborate on the physical setup you have? What do you mean the "wheels are able to move vertically and horizontally"? Do you mean like on a suspension, or something else? (I am not asking about the way mecanum wheels work).
– Ben
Oct 23, 2020 at 13:23
• @Ben I edited the question that might clear up some confusion. Does that give you the information you need? Thanks Oct 23, 2020 at 13:46
• you did not answer @Ben's second question Oct 24, 2020 at 0:35

Yes. A robot with 4 fixed mecanum wheels is able to translate and rotate simultaneously. There are many links online which provide tutorials on how to do this:

The specific wheel velocities will change depending on your wheel configuration. But here is one example:

And here is a more general vector-way of thinking about the wheel velocities.

If you want to translate and rotate at the same time, you can simply add the two control inputs. For example, if you want to translate to the right, while also rotating counter-clockwise, you would do this:

// Move Right Translation
front_left_translation  = +trans_speed
front_right_translation = -trans_speed
back_left_translation   = -trans_speed
back_right_translation  = +trans_speed

// CCW Rotation
front_left_rotation  = -rot_speed
front_right_rotation = +rot_speed
back_left_rotation   = -rot_speed
back_right_rotation  = +rot_speed

// Output
front_left_control  = front_left_translation  + front_left_rotation
front_right_control = front_right_translation + front_right_rotation
back_left_control   = back_left_translation   + back_left_rotation
back_right_control  = back_right_translation  + back_right_rotation


Important These directions are robot relative.

For example, if you executed each of these commands (translation and rotation) in isolation for 1 second each, and it moved the robot 1 meter to the right, then rotated the robot 180 degrees. When you combined them, the robot would actually move in a circular arc.

The velocities would actually be valid for the initial time zero. But in the next time step, the robot is now turned slightly, so the translation vector will have to be different.