Hi,
First of all i should thank you all for this great site which gives great feedback not only team members but also people like us interested with all these stuff.
Anyway, for our final project at university we will built a prototype forklift which is driven with mecanum drives. We have almost completed the lift mechanism and now we are focusing drive mechanism of our forklift. I should mention that we have 1 week left
Since we have no experience about this kind of drive systems, and we have some big problems that confuses us.
First of all, 4 wheels must be on the same plane. I mean even with a slight change of height of any wheel, driving will fail since all 4 mecanum wheels have to be operating related with each other. We can of course use a suspension system but that will cost time. So is it possible to mount the wheels directly to the chassis with same height?
Yet, we are all mechanical engineering students and we are barely related with PIC. So we avoid complex codes as much as we could and built a PIC code for a simple button configuration. For the button configuration, we have 6 buttons which are for forward,backward,rightside,leftside, CW-rotation and CCW-rotation. No other motion (turning while forward motion for example) is necessary then again we avoid them. I am giving the code below. Is it enough to drive? (please donât laugh ) We dont want to control the speed, so PWM is not necessary.
I am desperately waiting for your helps.
Thanks in advance.
SAMPLE PIC CODE
#include <16f877a.h> #use delay(clock=20000000)
int main()
{
int i=0;
set_tris_a(0xff);
set_tris_b(0x00);
set_tris_e(0x00);
output_b(0x00);
output_e(0x00);
while(1)
{
i=input_a();
switch(i)
{
case 1:
{
output_b(0x55);
output_e(0x01);
break;
}
case 2:
{
output_b(0xaa);
output_e(0x01);
break;
}
case 4:
{
output_b(0x96);
output_e(0x01);
break;
}
case 8:
{
output_b(0x69);
output_e(0x01);
break;
}
case 16:
{
output_b(0x66);
output_e(0x01);
break;
}
case 32:
{
output_b(0x99);
output_e(0x01);
break;
}
default:
{
output_b(0x00);
output_e(0x01);
}
}
}
}
If this were for a FIRST Robotics Competition robot, I would say, just make sure the frame can flex. The problem is, you donât want flex on a forklift frame. So you pretty much have no choice but some form of suspension.
[strike]Perhaps you could implement a control system which compensates for traction loss caused by un-evenly balanced wheels.
It would not be easy but it would be perhaps easier to implement a basic control algorithm then building a chassis, bases on your personal capabilities.[/strike]
Just reread your post.
You should be able to mount all 4 wheels no problem to the chassis at the same height.
Regarding the drive: if you are going for a simple drive like you mentioned perhaps you should in fact implement a PWM, and experiment with different values for the motors to achieve a balanced motion.
for example if more weight is on the front wheels you would only give them perhaps half the power when going sideways:
this will, of course, only work on flat surfaces. any bumps or irregularities and you are back to square one with the need for a suspension, like Eric mentione.
Our first aim is not to blow up at project demo, i.e. next week
So, there wont be any bump surfaces⌠Then we can agree that there is no need of suspensions, right?
I was about to ask that problem which you explained. When load is lifted center of mass will shift to front side. So torque values at front wheels will be greater and of course this will cause a reduction in speed at front wheels while back wheels are still rotating with same speed. When this happens, there is no problem in forward or backward motion. However side motion -just like you said- will be irrelevant. About that, we couldnt find a solution. I have watched some videos with huge frames running with mecanum wheels. And clearly, the weight was not distrubuted to each wheel equally! How come they dont fail?
In short, when torques of wheels are not same this will cause different speeds. However same speeds of all wheels are needed in order to get a straight line. How can we manage that?
You want to control your wheel speed. That means youâll need a way to measure the wheel speed and adjust motor power to make the wheels move at the rate you want.
For a quick demo, you might be able to get away with a âbang-bangâ controller that simply turns on wheel power when the speed is too low, and turns it off when the rate is too high. For best results, youâll want some form of PID control (look it up, there are a lot of good explanations out there).
For a quick demo, you might be able to get away with a âbang-bangâ controller that simply turns on wheel power when the speed is too low, and turns it off when the rate is too high. For best results, youâll want some form of PID control (look it up, there are a lot of good explanations out there).
Do all teams here (going on mecanum wheels) use a close loop control system with a velocity feedback from wheels?
Or your suggestion is just for this case?
P.S. I dont want to control the speed unless strictly necessary??
If you want to drive straight when your weight is not distributed equally over all your wheels, controlling speed is strictly necessary.
Not all teams do feedback control of their wheel speed with software. A good driver with analog joysticks directly mapped to speed controllers can be an effective feedback element. But with your wish to use discrete pushbuttons, youâll need some good programming in order to maintain straight line driving.
Shouldnt it be the opposite? If front side weights more, that results reduction of speed in front side while power is the same. Then in order to equall the speeds we must decrease the speed in back wheels as well.
Or did i miss something?
When my team has experimented with mecanum drive we found that placing the wheels in the same plane didnât necessarily help with angular drift. The problem is that even minuscule changes in floor height caused large changes in traction and the base would inevitably change angle. In addition we found that wheel slip was a big problem and directly measuring wheel speed didnât correct for drift either, even in a non competition environment such as our programing lab.
The best solution that we found was to measure the change in the angle of the base using a yaw rate sensor and implementing a PID control loop to keep the base facing the intended direction.
Of course we also found that a suspension to keep all four wheels in contact with the ground was helpfull. I could see were this would be a problem for a forklift and there was some debate on the team regarding if the suspension was necessary. I can understand where writing a complex control loop for the wheel could provide significant difficulty in this case but our team found that the best solution came from closed loop control of the four motors.
Thank you for your feedback.
But I couldnt follow exactly.
Did you use a PID control because of changing torque values resulting various speeds on wheels?
Or you just meant; when there exists a tiny little insignificant height change on the road (even on a flat surface), linear motion of system becomes impossible while 4 motors rotating with the same speed? And is this because wheels dont touch the surface with the same amount?
By the way did you manage to drive your system without a suspension system which is replaced by a PID control?
The code implemented by my team had an x input from the joystick, a y input from the joystick, and a theta input. If the theta component was nonzero that meant that the robotâs base needed to rotate. Theta was calculated by combining the input from the joystick with input from a yaw rate sensor that was on the base of the robot. This sensor measures the speed at which the base of the robot was rotating, this rotational velocity was then integrated to get the angle of the robotâs base.
This system would correct the angle of the base if it drifted away from the intended value. This had the effect that if the base was pushed by an external force it would move back to the original orientation. It also meant that if the angle of the base changed while driving in a straight line it would correct back to the original orientation and the robot would move in a straight line.
While this was not the entire thrust of my other post this is very true. We never found a surface flat enough to keep the robot moving in a straight line without closed loop control of the wheel.
In regards to your question of driving without a suspension. No we never used a drive that had PID control of the wheels without a suspension. However, we once had one motor partially fail and while the robot didnât move in a straight line very well, the control of the orientation of the base was still accurate. When pushed the base would still return to the original orientation, in fact it hid it so well that we had to test each motor individually before we could figure out which one wasnât responding correctly.
After some discussions, we have decided to use a very simple suspension mechanism (by using 2 springs for each wheel) and beside get feedback of velocities of each wheels with a shaft reader (?) .
What we intend to do is that using suspensions will allow the wheels to touch the surface always. And also we want to arrange the velocities of wheels according to each other. Since weight distribution of frame will not unique, i am assuming that torque values will change and wheel velocities will not remain equal every time which is not supposed to be in order to go on a straight line for both forward and side motion.
Again i am assuming that motor rotation of a wheel which has higher torque on it, due to the weight, will lower.
**1) At this point i have to be sure, is that assumption true?
**
Also we had some research on yaw rate sensor and considering limited time and cost, decided to use shaft reader sensors on 4 wheels; so that we will equalize the all 4 motor rotation to each other with the value of the lowest feedback. Overall velocity of the forklift will reduce but that will not be a problem.
**2) Is it appropriate to use such a control and will it be efficient?
**
Finally, i also think that (although i am not sure myself and everyone says the opposite) even with a suspension system and on a flat surface, all wheels wont grab the ground at the same amount. I mean they will touch it allright but not with a same force. Although it affects in insignificant amount (which we are ready to sacrifise by the way) i need to ask again,
**3) Will that cause any dissarrangement on wheel speeds even while all 4 motors are rotating with the same speed. **
Since we are about to over these disscusions and start to built the base, we dont want to dissappoint later. And comments of people having history with mecanums, about these issues are having great importance to us.
1: I think you are describing the situation backwards. A higher torque means greater power applied from the motor. More weight on the wheel will generally give a lower speed because of more rolling resistance, so the assumption is true even though the wording sounds wrong.
2: If your goal is merely to drive straight, the scheme of reducing wheel speeds to match the lowest one should work. You will probably want to make sure you know not to use the artificially lowered speeds as a basis for lowering other wheel speeds further.
3: As long as your wheels do not slip on the floor, you donât have to worry about the difference between wheel rotation speed and travel speed. Given a good tread surface and enough weight, slip should not be an issue.