HELP; moving omni robot to move sideways

Hey guys!

I have made a robot with four omni wheels in its corners, like this:


My question is which direction to rotate which in order for the robot to move sideways?

Thanks in advance.

First question. Are you using omni wheels or mecanum wheels?

The answer will change depending. If you are using omni wheels, they should be aligned at four corners like so. If not, you will need to use mecanums or move them to that orientation. Mecanums need to be on the correct side, as there are left mecanums and right mecanums.

After that, is this an FRC robot or something else? If you are, there’s a nice method in WPILib called mecanumDrive_Cartesian that will resolve the motcrs from joystick axes for you. If you are not using WPILib, then you can still look at that code to find the math.

Do you have Omni Wheels:

or Mecanum Wheels:

If you have omni wheels you aren’t gonna go sideways unless you add something to push you sideways or have them at 45 degrees to each other.

If you have mecanum wheels then this is the simple version:

And this is the more in depth version:

I’m sure there are other FRC specific resources available as well.

You could also use 5 omni wheels in a “H” configuration to achieve the movement you want.

Search CD for “kiwi drive” which is a term that describes the 4-omni wheels (seen in the previous post) positioned on 45 degree ‘slants’ in relationship to the front, back, and sides of your robot.

Search “mecanum wheel set up” (or similar) if you’re using those wheels. These wheels should form a “X” pattern when mounted.

Search CD for “H Drive” for the five omni setup.

  • Both Kiwi and Mecanum set ups generally require some moderate to advanced programming/configuration while the “H” drive will “cost” you an extra motor and wheel, but can generally be controlled with little to no extra programming (depending on your platform/hardware choice).

I have omni wheels.

So you are saying I have to put them in a 45 degree orientation, and no other way like controlling the speed of each motor?

Looks like I have made a mistake going for omni wheels. I was told that omni are very similar to Mecanum.

I have omni wheels.

So there is no way to make it move sideways and it has to be a 45 degree orientation? What if I control the speed of each motor independently?

I was told omni are very similar to mecanum, and I was able to get them for a good price; that’s why I went with omni wheels.

If you run the wheels at different speeds, you might turn, but you won’t go sideways if all the wheels are facing forward.

They’re similar in the fact that they’re “budget alternatives to developing a swerve drive” but they function incredibly differently. You could put them something like:


that and achieve somewhat what you’re looking for (akin to a Kiwi Drive) but be aware that an all omni wheel drive gives everyone around you just as much say in where your robot is going as you do.

If you want your project to move sideways then yes you have to have them at 45 degrees.
If you aren’t able to mount at 45 then and H drive is your best bet seeing as you already have the wheels. But you will need another omni wheel, motor, (gear box recommended) and motor controller.

If you want to strafe (move sideways) the omni wheels should be mounted at 45 degrees, like this:


What if I control the speed of each motor independently?


I was told omni are very similar to mecanum

They are similar . But they’re not identical.

I appreciate your help guys!

I can still salvage this situation. I will be able to mount them in 45 degree orientation; that’s no problem.

One more thing, does the distance between the wheels have to be square, or rectangle will be fine?

Mounting three in a triangular shape at 45 degrees to each other could also allow it to move sideways I think, but that could make it unstable depending on your design. I think rectangle should be fine as long as the distances are equal(front to back on both sides and front(or rear) left to front(or rear) right.

Rectangle will be fine. As you deviate from a square, the robot will not turn as quickly for the same motor speed, but lower turning speed is not usually a problem for a holonomic drive system.

But basically the robot will be able to go sideways whether the frame was square or rectangular, right?

In order to drive in an arbitrary direction with omni wheels, the wheels must be independently driven (four gearboxes for four wheels) and not all pointing the same direction. The angle does not actually have to be 45 degrees; if you will be driving forward/reverse most of the time and just need the “strafe” motion for minor adjustments, you can angle them at (for example) 30 degrees.

To search for various configurations of omni wheels, I suggest:

  • omni tank (4 wheels on two drive trains, no sideways driving)
  • kiwi (three wheels, most commonly oriented 120 degrees apart)
  • killough (3 wheels in Vex and FTC, but more commonly 4 wheels at an angle in FRC)
  • slide or H drive (5+ wheels on 3 axes); omni tank plus one or more wheels mounted perpendicularly, most commonly forming the letter H.

Another variant of killough that we played with diagrams o a few years ago had four wheels at the corners of the robot, each aligned with a different side. This should drive similarly to regular killough or mecanum, but be more stable due to the larger wheelbase and not require non-square cuts. See attached image. (Again, we just brainstormed the idea; we never tried to build one.)

Wouldn’t this be functionally the same as Killough, just a different geometry for the wheelbase?

I would say yes, though the size and shape could change the speed. But it should work.

Interesting. It looks like it would be a bit slow with only two wheels driving it in each direction while the others are being “dragged” on small rollers.

Depends on what exactly you mean by “functionally the same”.

The inverse kinematics would be entirely different.

To go forward you would power only 2 wheels (with possible small corrections to the other 2 wheels to track straight).

To strafe you would power only 2 wheels.

Also when going true forward or true strafe, angular wheel speed times wheel radius would translate directly to forward (or strafe) vehicle speed with GeeTwo’s “Killough variant”. Not so with “standard” Killough with angled wheels.

Yes, as I noted, the two advantages were that no non-square cuts were required, and that the contact patches of the wheels with the carpet are farther apart for a given chassis size. Unless you designate the front of the robot as one of the corners, you would have to rotate the inverse kinematics 45 degrees. In principle it would be simpler. Designating the wheels:

1 2
3 4

As pictured, an assuming that a positive input to each motor causes a clockwise torque to the robot chassis, and assuming a “strafe plus rotation” joystick setup, the linear inverse kinematics would be:

Wheel 1: R + X
Wheel 2: R - Y
Wheel 3: R + Y
Wheel 4: R - X

Edit2: Also, it would have more usable interior space for controls and other mechanisms.