![]() |
Unique ways of controlling your robot (driving)
The 2008 competition is mine and my team's rookie year. This year I was the sole student programmer with about no experience with programming. I received tons of help from my mentors and I was able to help program the robot with their assistence. Because of this a lot of the time I was doing things on my own and I did a lot of experimenting.
With my mentors, we came up with quite a few ways of driving the bot. I won't share the code right away (I need to get it first), but would anyone like to share and explain their methods of controlling the driving of the robot? I'm really curious what you guys did. These are the things we tried (I'll share the code when I get it)... 1. Double Joystick: very hard to control. We tried a lot to make it more controlable, but it never worked out well. 2. Single Joystick 1: One speed, 4 ways of moving robot. Push the joystick up and it moves forward. Push it down it moves backwards. Left it turns a bit left and right it turns a bit right. 3. Other single joystick controlls: We made a few other single joystick control systems. One we used in the competition. I apologize in advance if broke some sort of rule :o |
Re: Unique ways of controlling your robot (driving)
Quote:
Most teams use the double-stick method. Some use single. Others have been known to use the following:
|
Re: Unique ways of controlling your robot (driving)
My favorite form of driving the base of the robot so far has been double joysticks, because it gives a great deal of control, in my opinion. This year, however, we went with a single joystick with the idea that it would leave my other hand free for some push button semi-automatic controls such as u-turns and lane shifting. That hasn't panned out (yet) but with a little bit of work we've gotten our controls working decently well, the single joystick needs a little more tweaking than dual joysticks.
Our joystick itself was fairly unique though(one of a kind as far as I know), what with being a weighted companion cube. |
Re: Unique ways of controlling your robot (driving)
My personal favorite is a PS2 controller with the USB chicklet. The two analog sticks act the same as joysticks, but it just feels a lot more natural and allows you to have more control than sticks (imo).
|
Re: Unique ways of controlling your robot (driving)
we attempted a mechanum drive this year but never got the strafing to work right. but we had forward backward on the left y axis and left / right steering on the right x axis (along with strafing on the left x axis but that didn't work like i said) and it made it very easy to drive strait since you could tweak the direction with your right hand and just keep ur left at the speed you like.
i recommend people try this cause its nice and very intuitive ...forest |
Re: Unique ways of controlling your robot (driving)
We do it like one-stick but we split the x and y axis out onto different joysticks (kind of like Halo). This makes it really easy to drive dead straight (just let go of the turning joystick), gives a bit finer "feel" to the controls than one-stick, and is much more intuitive than tank drive. We have tried other methods, and some of our members prefer to drive tank-style; however, myself and last year's driver both found Halo-style to be the best compromise, so that is what we've used.
|
Re: Unique ways of controlling your robot (driving)
Well, one of the reasons why I as the driver (and I think most of my team) didn't like the tank control/duel joystick was partially because our robot was so powerful. The gearing ratio made it so actually stearing the it was one thing, but making it turn gradually and not suddenly turn around in a great circle was another thing. We tried all different things with the programming, but it never worked as well as we hoped. I eventually came up with a system that I used in the competition. The results were the best I could hope for. When you turned the joystick to the top left hand corner, it made a nice curve and just by turning it a bit, I could change the turning direction so if there were robots in the way I could easily menuver around them.
When we first entered the competition we only used 1/4th the power our robot was capable of. Because the rug made it so the robot was slower but a lot more controllable we upped it to 1/2 the power and added a turbo trigger. If the joystick is in a certain area the robot will automatically go straight at max speed. I think I could bring up the code, I have it on my computer somewhere.... |
Re: Unique ways of controlling your robot (driving)
Quote:
|
Re: Unique ways of controlling your robot (driving)
I have been driving two years (171) and we have had tank drive both years. I really like this because it isolates the two sides of bot. But I will admit that I want to try the halo style so i will email my programmer right away. In my opinion I believe the one joystick is cramming to much onto one contoller, I'd rather isolate and have more precision(imo). But variety is the spice of life so I think its great how everyone does something different.
|
Re: Unique ways of controlling your robot (driving)
I suspect you had trouble with twin stick control because you did not map the values to a cubic curve to desensitize it.
|
Re: Unique ways of controlling your robot (driving)
We do something rather unique to our drive system.
There are two joysticks. On one of them, we use both axis. The X axis translates the robot left and right, and the Y axis translates the robot forwards and backwards. We only use one axis on the other joystick. This joystick is responsible for the rotation of the robot. By using both sticks together, the software places an imaginary point in space that the robot "rotates" around. However, this control system only works on an omni directional drive system. |
Re: Unique ways of controlling your robot (driving)
For our mecanum setup, we used one stick for all translation (sliding while facing same way, includes forwards/backwards) and another stick for the rotation on the X-axis.
The drivers had different preferences as to which side they were on so they were interchangeable. |
Re: Unique ways of controlling your robot (driving)
For our Mecanum drive system, 357 uses a 3-axis joystick. The X axis and the Y axis are used for forward/backward/ and translation motions, while the Z axis is used for spin. In the past we used a 2 axis joystick and isolated translational movement to only occur when the drive held the trigger of the joystick.
|
Re: Unique ways of controlling your robot (driving)
Team 1629 has always used a single joy stick to drive and an array of buttons and switch sto control the functions until this year. This year, while the buttons and switchs are still there, we used a steering wheel to drive. We figured "hey its a race right, race cars already work well, so we will drive it just like a race car." (If you havent checked out our drive train check it out at http://www.team1629.com Its pretty cool.)
|
Re: Unique ways of controlling your robot (driving)
I like that halo idea. Things seem more intuitive and less pressure if you can train each hand to do a different task.
Here are some arguments to try single-joystick driving instead of classical tank drive. Keep in mind this is just my opinion. I also have a control systems background so I feel it's easier and more advantageous to do a system rather than leave some things up to driver control. Personally, I think classical "tank" drive puts too much of the drive processing on the driver, and agree with the OP that it's harder to control. Movements aren't as smooth as they could be and it's hard to process inputs for improvements in the code. Driving backwards and driving while the bot is pointed at the driver also becomes harder without alot of practice. Think about a bunch of cones setup on the track and you have to slalom through them while also making the left-hand turns around the track. Without alot of practice, tank drives will usually make it through such a course slower/quirkier than the single-joystick setup. This year, the slalom consists of 5 other dynamically placed bots and 3 other trackballs on the field, so I believe this comparison is valid. With a single joystick, in code I can create a system that has some variables (aka coefficients). Based upon the variables I can determine different integral-based rotational neutral zones, scale within certain regions of joystick movement, how the robot reacts based upon its direction, and can eliminate jerky joystick movements that translate to jerky bot movements for both rotation and lateral at the same time. For tank drive, doing all of these things requires at least twice the code so you can determine a rotation vector, where as single-joystick drive rotation is a direct input. Some of this stuff isn't easy to do, and sometimes isn't even necessary depending on the way the driver naturally drives. Some drivers can intuitively drive without all of the fancy code. Yet imagine how much more they could concentrate on game strategy if they didn't have to focus so much on the drive itself. Just my .02. |
Re: Unique ways of controlling your robot (driving)
I love our steering wheel:
![]() |
Re: Unique ways of controlling your robot (driving)
Quote:
Code:
speed = left + right; |
Re: Unique ways of controlling your robot (driving)
Really, and this is the programmer side of me talking, you have to taylor-make the controls to the driver/operator. Everybody's brain is wired different, so there isn't any one great answer.
In 2006 (I think) I saw a team that had a mechanum drivetrain that used a single joystick drive with a twist (:rolleyes: pun)... they added a twisting handle to one of the white joysticks to control the spin motion that a mechanum drive is capable of. Cool idea. As a driver (hopefully I'm not alone on this and someone has a similar experience) some people just 'get' a tank (2 joystick/differential) drive system. Our driver we had through the 2006 season wouldn't take anything else really... he could feel the way the robot drove and found it simplest to do tank drive. Personally, I agree. Our robot runs most efficiently if we run down our homestretch going forwards, grab the ball, and use the bounce of the ball running into the opposite wall of the field to speed up our acceleration comming back on the other side of the track. This requires me to be able to drive the robot backwards, something that I think would be much more difficult with any other kind of input system I can think of. -q |
Re: Unique ways of controlling your robot (driving)
I'm my experience, I've grown to love a two Joystick Tank system. Usually the programmer will set the maxes so that max forward is always perfectly straight. I've used a lot of different controls with my vex robot's and the only time I don't use a tank is when I'm using my custom mecanums.
|
Re: Unique ways of controlling your robot (driving)
We used the normal tank drive system in 2006 and 2007. To make it a little easier to control, we hacked off the long joystick arms. It worked alright, but it was still pretty difficult to conrol when trying to manipulate turns. Going in a gradual in high gear was also near impossible!
This year we decided to go with a controller used for racing remote control cars, and it worked amazingly well (photo here). The guts of the controller were removed, and it was programed to work with feedback from gear tooth sensors in the transmission. The steering wheel allows for fine control during high speed maneuvers, something that is very useful for this years game. Turning the wheel without throttling makes the bot turn in place, and reversing the throttle makes it behave like a car driving backwards. I think everyone on the team who tried our new drive system agreed that it was much easier to control than the tank style. |
Re: Unique ways of controlling your robot (driving)
Quote:
Only one question... when something goes south and your bot slams the wall on turn three... who do you blame? :p |
Re: Unique ways of controlling your robot (driving)
Quote:
|
Re: Unique ways of controlling your robot (driving)
Quote:
With a bit of programming, you can make a 6WD system drive perfectly straight and steer like an ackermann type drive train, while still retaining the maneuverability and on-the-spot turning of a tank drive system. A picture of our setup can be found here. Again, I urge all teams to give it a shot! I can guarantee that it will improve the performance of your robot and reduce the strain on your driver. |
Re: Unique ways of controlling your robot (driving)
1 Attachment(s)
Here is code for the system I used. I created this system and I used it in the competition. I apologize that it might be hard to read and understand.
-One joystick control -Uses a function that changes turning rate You can view the code by opening the attachment below. I didn't want to copy+paste the text directly in the post, it's too long. Also, note this is old code. In the actual competition we made some minor adjustments, but besides that it's almost identical to the newer version. |
Re: Unique ways of controlling your robot (driving)
I am really happy with 2 stick tank drive. It gives me lots of control and allows me to do things with the robot that I'm not sure I could do with other control systems.
This may be a bad metaphor but think of tank drive as a car with a manual transmission and some other trick control system as a car with an automatic. An automatic is easy to use and a new driver can do very well with it but it takes control away and gives it to a computer that in most cases doesn't know when you are approaching a turn or anything else. A manual transmission takes longer to get used to but once it is mastered, it is faster in most racing situations. Once you master the basics of tank steer(going straight, smooth turns, inverting inputs when the robot is going towards the driver) it can be made to do some amazing things. I could be completely wrong as I don't have any experience driving a robot with anything other than tank steer but I think what I said is true. |
Re: Unique ways of controlling your robot (driving)
Quote:
-Greg P. |
Re: Unique ways of controlling your robot (driving)
We use one joystick.
Having mechanums, we can move in any direction. Being of the video game generation, I had it programmed like a helicopter. Forward is forward, back is back, left is a left straife, right is a right straife, twist left is a left rotation, twist right is a right rotation. It makes a bunch of intuitive sense. You can think of it as a helicoper or think of it as a first person shooter. We use a Saitek Avaitor USB joystick, attached to a USB chicklet. The top buttons are for the launch, arm pick up, and arm drop. More techie description: +Y = Forwards -Y = Backwards +X = Right Straife -X = Left Straife +Z = Right twist (right turn) -Z = Left twist |
Re: Unique ways of controlling your robot (driving)
Quote:
|
Re: Unique ways of controlling your robot (driving)
Err, too bad I don't have any cool video of it but it didn't take that long to adapt to, probably 1 or 2 minutes to stop running into walls and another 3 or so minutes to drive it pretty well. You learn to drift your turns to smooth them out, just a thing you naturally develop with time.
Edit: Actually, you'll see us at us at the Championships so maybe you can check it out there. |
Re: Unique ways of controlling your robot (driving)
Quote:
|
Re: Unique ways of controlling your robot (driving)
Quote:
Stiffer springs in the joystick would have helped, but we moved onto a different control system that has helped our omni-drive bots win regionals in back-to-back years. Left stick: Y axis is forward/backward X axis is turning (e.g. single stick drive with a skid-steer bot) Right stick: Y axis does nothing X axis strafes It seems unintuitive on paper, but if you have experience driving skid-steer bots with a single stick, it lets you transfer that knowledge while allowing you to strafe when needed. |
Re: Unique ways of controlling your robot (driving)
Quote:
|
Re: Unique ways of controlling your robot (driving)
Quote:
We don't translate at angles very often anyhow - the nature of our drive geometry is designed to strongly favor the cardinal directions. |
Re: Unique ways of controlling your robot (driving)
Part of training drivers is giving them multiple options to steer the bot. We programmed our controller so if you hit a button, it switches between different drive modes. This made it so anyone could practice any mode they wanted to just by hitting a button, not by reprogramming the robot.
One reason why I made this thread was also show off their actual programming for controlling their bots. I'm very interested in what other programmers decided to do. I've always liked unique ways of doing things, not for the sake of being different, but being inovative. Inovation means something new and because I'm new to programming new is all I know. If anyone is willing to explain or share their code so I can study it and learn from what other people do, that would be great. The drive mode my team uses in the competition was developped from an algorithm. When I was thinking of better ways of controlling the bot, I thought a single joystick mode would be definately better than the 2 joystick tank control. I like algoritms better than plotting points on the joystick. It's more clean in my opinion and easier to reprogram. I thought of how the robot should moving according to the position the joystick is in. If I push it forward, it goes farward. The more I push farward the faster it should go. What if I push the joystick diagnal so it's in the top left corner? I think the robot should turn gradually left in a wide arc. So, I looked at motor speeds and plotted them onto a graph. forwards (255, 255) backwards (0,0) arc left (127, 255) arc right (255, 127) 255 the motors will be spinning full clockwise. 127 the motors will not be spinning. 0 the motors will be spinning full counterclockwise. And so on... I eventually discovered a cool way of doing this based on this... On the joystick y-axis would run from bottom to top where bottom is 0 and top is 255. On the joystick x-axis would run from left to right where left is 0 and right is 255. leftMotors = -127 + (y-axis + x-axis) rightMotors = -127 + (y-axis + oposite of the x-axis (x-axis mirrored)) oposite of the x-axis means that if on the x axis it were really 255, it would count as 0 in the code. |
Re: Unique ways of controlling your robot (driving)
Quote:
Please keep in mind that I am not intending to bash any single joystick control system or any other very innovative control systems. I am only stating how we have done our robots in the past and the reasons behind our choices. |
Re: Unique ways of controlling your robot (driving)
Quote:
I preferred the airplane mode. Everyone else liked tank mode best. Quote:
|
Re: Unique ways of controlling your robot (driving)
Is it really? I understood what it did, just not the logic behind it. How did they get those numbers? And by cool, I meant neat 8} not cool like "that's not what coool people do". Actually, I think we did try that code, but for some reason the controls were a bit different.
|
Re: Unique ways of controlling your robot (driving)
My favorite control setup is where you have a wheel and a throttle stick. The wheel controls turn radius not difference in power or something like that. The throttle stick is used to give the bot forward velocity. To deal with the fact that you can't do an in place turn that way, we have a button that you press to turn in place.
We currently implement this with motor power only, but I would like to implement it in using a PID controller. I just haven't been able to put good enough sensors on our bot to achieve that. Not enough resolution on the quadrature encoders. |
Re: Unique ways of controlling your robot (driving)
Quote:
Code:
pwm13 = pwm14 = Limit_Mix(2000 + p1_y + p1_x - 127);The first line adds the x and y values, correcting the offset so that when both inputs are neutral (127) the sum is also neutral. The second line does the same thing as the first, but it "mirrors" the x value by subtracting it from 254 first. Then it obscures that step by combining the new +254 and the -127 from the first line into a single +127. |
Re: Unique ways of controlling your robot (driving)
Weird, it's mine exact. Wonder why it didn't seem the same when I was controlling it.... I guess I feel a bit stupid recreating the code that was right infront of me. What I don't understand is where is the code that says if(x-axis + y-axis < 0) motors = 0 or there the other way around if it's more than 255?
|
Re: Unique ways of controlling your robot (driving)
Quote:
|
Re: Unique ways of controlling your robot (driving)
I don't have the code infront of me, and I don't remember its full content, but yes I understand what it does.
|
Re: Unique ways of controlling your robot (driving)
Quote:
It has worked pretty well for us, barring some mechanical problems. Here is some example code because Our forum is going through overhaul and I REALLY don't like the code blocks there. too hard to read. Code:
/*!You can check it out more here: http://team1675.org/forum/viewtopic....start=15#p1352 (Out website is in overhaul so it may be a little funky.) Feel free to ask me any questions! |
Re: Unique ways of controlling your robot (driving)
I started driving 395's 'bot at the end of the Florida regional. We used to run a single joystick for our tank drive (Y did forward and backwards, X did pivots). I wasn't too fond of the very limited maneuverability the system provided though, so now we've gone dual joystick (using only Y axis to control the forward and backwards of each tread.) It's much more effective in my opinion. Although I always wanted to try a game controller, since I'm an avid Xbox player, and I think it would make the transition from racing game to robot racing easier.
|
Re: Unique ways of controlling your robot (driving)
We have switched between 1 and 2 several times:
2002 - 1 2003 - 2 2004 - 1 2005 - 1 2006 - 2 2007 - 2 2008 - 2 and Steering Wheel We really liked the way it worked this year, we tried 1 with steering wheel, but you have more control we feel with 2 joysticks, so one driver had the steering wheel and other had the 2 joysticks. They really had to communicate well, which they did. The steering wheel was used mainly to help get out tight places and to turn left sharper, in both cases it proved to be the best solution for our particular bot as we consistently would get 5-7+ laps after the auto period. |
Re: Unique ways of controlling your robot (driving)
We didn't have too many practice sessions with the robot really. We also had to make an adjustment or two because of LACK of communication. Our robot has an arm to herd and a poker which pops up and pushes the ball off. Now, when we were practicing sometimes for some reason some how whoever was controlling the poker popped it up and instead of going under the rack and then popping it off, we rammed into it and we sent the plastic rack crashing down. Unfortunately, the rack or w/e you want to call it in the competition isn't made of plastic.
In the practice matches the day before our regional competition we did exactly that. We rammed into the rack with our poker up. Because our robot has a very low center of gravity and because it ways 117 pounds, we didn't tip over. We crashed into it full force and for the entire practice match we were tipped diagnal and couldn't get the robot to move. This wasn't neccessarily bad, but other robots kept ramming into ours and by the end of the two minutes our robot's arm was bent and it completely jammed. We got a new arm easily enough, but we had to change the code so that you could not use the poker if we were driving. I have a question which I hope is relevent enough to the thread topic. Has anyone heard of a robot or would know if it's possible to get some sort of electronic compass onto the robot so it would know which way points north? |
Re: Unique ways of controlling your robot (driving)
i really liked 233's set up. the way if unfolded was just really cool
|
| All times are GMT -5. The time now is 04:37. |
Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Copyright © Chief Delphi