Apr 19, 2009

NXT Wheel: remote control for mobile robots

Remember the NXT Switchboard, the NXT-based remote control I posted some weeks ago about? It allows you to remotely control each motor of a NXT robot independently. However, it turned out that it's better suited for immobile robots as it's usually pretty difficult to actually steer a mobile robot when you need to control each of the driving motors on your own.
So I decided to create another remote control particularly aimed at such car-like mobile robots, called NXT Wheel; as a consequence, it has a large hand wheel and a speed throttle:

The response time is somewhat low, though...

11 comments:

Robotica said...

cool i sure do like the Cat!

Brian Davis said...

Why is the response time so sluggish?

BlueToothKiwi said...

Excellent design - I have had the big green wheels for nearly two years and I never thought of using it on a remote steering wheel. Well done!

Also, I like the steering on the Mesarati - the worm --> turntable gearing.

However, like Brian, I dont understand the sluggishness re response time either - It can be one of three things:

(1) Cheshire Cat had a bit too much to drink or had too many Easter eggs over the holidays

(2) leJOS not very good at Bluetooth polling

(3) The extra lag in the stepped steering - thanks to the worm to turntable gearing.

Just my 2c.

Tim

Edward said...

I have noticed a few remotes that have been posted over the past few years. I downloaded and tried one of them, but they all seem to have a shortcoming that I have not figured out how to overcome. From the video, it looks like this one does the same thing too. I would like a remote that will turn a certain number of degrees on the vehicle based on a certain number of degree input on the remote. It appears that once the remote steering wheel is turned, the vehicle starts to turn but does not stop until it hits a mechanical stop in the direction of turn. For example, I want to turn the remote 20 degrees and have the vehicle turn 20 degrees. I dug into the NXT-G code on the one that I downloaded, and did what I thought I should do to make it do what I want. Unfortunately, it didn't work. If anyone knows how to do this with NXT-G, please post and let me know.

megamindstorm101 said...

smart cat I would have never expected a cat to know how to drive that...well i guess it did crash but hey its only a cat :)

nice robot its a cool litle steering whel but unfortunately not everyone gets those giant green wheels which are great for steering :(

Matthias Paul Scholz said...

Brian and BlueToothKiwi, yes, the response time is far too high presently and I'm still looking into the reason why it is that way. It might be that I'm not using the according leJOS API reasonably, but that's just a first assumption.

By teh way, the worm gear is rather robust (I'm decidedly a fan of worm gears and turntables), but naturally, it's not very suited for triggering fast turns...

Matthias Paul Scholz said...

Edward,
I wouldn't consider that a shortcoming of the remote controls you mention - it's just the way the wheel in any car works: when you turn the wheel say 20 degrees, your car's front axis will turn 20 (or another associated number of) degrees also and then stop turning (this is exactly what the NXTerati's front axle is doing); but of course, the car itself will continue to turn when you drive on in that state, as the front wheels are not facing forward then. Consequently, the car will keep turning until you bring back the wheel into straight position.

The behavior you want to see can be programmed, no question - but it's somewhat exotic and decidedly different from the way people usually steer cars.

Edward said...

What it looked like it was doing on the video was turning until some physical stop was achieved. Maybe yours is not doing that, but the other one that I tried out did. The performace that you state, is what I want. If I turn the controller 10 degrees I want the vehicle's steering motor to turn 10 degrees AND THEN STOP TURNING. You are correct that this is the way an automobile works. The problem is that with the system that I tried, if I turned the remote any amount at all, the vheicle's motor would turn in the appropriate direction, BUT IT WOULD NOT STOP. That is where the problem is. Again, any help would be appreciated.

Robotica said...

Edward,

The reason why most remote programs (like Philo’s Brians, and mine) are not the way you would want it because we created a general functioning remote, that uses the input angle as an measurement for the output speed and not the output angle.

Otherwise the car, only drives so far as the throttle would turn, about have a turn…..

Since you can explain to us in words what the program for steering should do I think you also can program it in NXT-G.

Keep in mind that:
The receiving program (the car) should keep track of the wheel position (store this in a variable (turn_angle)) and compare that to the input position (from the BT sender). Only when the two are different the car should move the motor in the direction to match the input (angle) value, and while moving store the current output value back into the turn_angle.
Now this requires a loop and the only way to jump out of this loop is when the two values are equal.
There is a catch!
1) The output turn_angle is bound to limits (not possible to turn further then the max turn angle.)
2) Due to gearing the ratio might not be 1:1, but if you move the remote a small bit, the motor on the car should move 4 times
3) You want a small centre bandwidth to make the car more stable when driving straight, and not so nervous.
4) Due to measurement errors, your center can shift a bit, you should therefore initialize the turning radius before you start driving by turning first full to the left, until the motor goes into stall, and then full to the right, again until stall. Then calculate the difference, and divide it by 2 to determine the center.

I hope this helps you in getting your car program running like a proportional remote car.

Martyn

Robotica said...

Edward,

The reason why most remote programs (like Philo’s Brians, and mine) are not the way you would want it because we created a general functioning remote, that uses the input angle as an measurement for the output speed and not the output angle.

Otherwise the car, only drives so far as the throttle would turn, about have a turn…..

Since you can explain to us in words what the program for steering should do I think you also can program it in NXT-G.

Keep in mind that:
The receiving program (the car) should keep track of the wheel position (store this in a variable (turn_angle)) and compare that to the input position (from the BT sender). Only when the two are different the car should move the motor in the direction to match the input (angle) value, and while moving store the current output value back into the turn_angle.
Now this requires a loop and the only way to jump out of this loop is when the two values are equal.
There is a catch!
1) The output turn_angle is bound to limits (not possible to turn further then the max turn angle.)
2) Due to gearing the ratio might not be 1:1, but if you move the remote a small bit, the motor on the car should move 4 times
3) You want a small centre bandwidth to make the car more stable when driving straight, and not so nervous.
4) Due to measurement errors, your center can shift a bit, you should therefore initialize the turning radius before you start driving by turning first full to the left, until the motor goes into stall, and then full to the right, again until stall. Then calculate the difference, and divide it by 2 to determine the center.

I hope this helps you in getting your car program running like a proportional remote car.

Martyn

Brian Davis said...

Actually, I did develop a remote very much like that, for Serenity. If I turned the controller 10°, it turned the motor 10°, and stopped (more to the point, it maintained a very small difference between the position of the motor mount and the requested position from the remote control). And due to the motor encoders being accurate, there was no need to make a corrected positioning (although using the "hard stops" to determine where the centerpoint is upon set-up is a great one).

Related Posts Plugin for WordPress, Blogger...