Autonomous Kart Hardware

Hello everyone,

I’m new to Arduino (and electronic modeling in general) and have, more or less, a trial by fire design project that I would appreciate some hardware input on.

My design group is currently attempting to autonomously drive a motorized cart via GPS and IMU sensors.

Here are the details:

DC brushed motor is being indirectly controlled via two linear actuators connected to the gas and brake pedals (recommendations on compatible/convenient actuator with the Arduino interface?). Would most likely be a 12V linear actuator.

Steering column controlled via a step motor (see recommendation comment above).

GPS Receiver Model: BX982 (http://trl.trimble.com/docushare/dsweb/Get/Document-581007) ← Was donated.

IMU yet to be decided (are there Arduino compatible IMU senors?)

I currently have an Arduino Uno R3 and a small proto board for wiring. I have very little electronic wiring experience and was curious as to how this thing would have to be wired up/what additional Arduino hardware components I would need. Any help would be greatly appreciated and I thank you for any input in advance.

Yuzzum321: DC brushed motor is being indirectly controlled via two linear actuators connected to the gas and brake pedals (recommendations on compatible/convenient actuator with the Arduino interface?). Would most likely be a 12V linear actuator.

I take it this is an electric motor powered cart? If so, then I would interface into whatever the pedals are controlling. Likely, the "gas" pedal is controlling some form of a potentiometer or hall-effect sensor controller, that is then controlling the motor controller. If you can get some specifications, datasheets or whatever on those items as well as the motor controller, that would be the best place to start, rather than a mechanical linkage (unless you have some reason to do so - like you intend the cart to be driven manually as well as autonomously).

Yuzzum321: Steering column controlled via a step motor (see recommendation comment above).

I would use a linear actuator to control the steering; while a stepper motor could be used, you'd need a fair-bit of torque (thus a gearbox). Plus, if you have the right linear actuator, it might come with a position sensor (potentiometer usually) - vs with a stepper, you would have to integrate this yourself.

Whatever method you use to control speed and steering - your first goal with the project should be on fail-safe mechanisms; you need to design the system and the code for "worst case" scenarios (like if the accelerator gets stuck with the steering jammed to the left). You should have on the robot a giant blinking red stop button (you should have some blinking beacon on the robot regardless); you should also have some kind of "pullout" switch that will kill power completely when removed (like jetskis use). You should also have a remote kill switch available. Your code should be written such that should anything out of the ordinary is detected, it will kill/shutdown power to the electric motor(s) and apply the brakes.

Do this first; don't wait until after you have everything else done before you think about security and safety, else you will run into problems trying to integrate the systems. Furthermore, having this in place early may save you from injury later (note: do all of your early "bench testing" with the vehicle securely placed on "blocks" so that none of the wheels are on the ground; this will prevent issues in the event of bad code and "runaway" situations). When you are dealing with a vehicle that can potentially weigh a lot and move faster than walking speed, you have the potential for injury in the event of a mishap.

You might also consider using arduinos as specialized controllers - I.E. program an arduino chip to function as the servo controller - it controlls the motor bridge and reads a potentiometer and just requires a servo pulse in as position information.

The temptation is to put all your eggs in one chip and then the code in that chip gets so complex that it is unmanageable. Add inexpensive pieces as building blocks so the level of complexity is lower.

Your steering controller could be a stepper or a DC motor along with feedback to the controlling arduino, but all the main board has to send to steer is a PPM pulse.

It would also allow you to modularize your project - Different people have different skill sets and this would also provide assignments to everyone, and not just pile it on the person working on the main control sequence.

Thanks for the input cr0sh! Our group is, more or less, stuck with using linear actuators for the brake and gas (we'll be able to make it work). I just wasn't entirely sure if I would potentially need voltage dividers/amplifiers and whatnot to control these.

I'm primarily concerned with the GPS hookup (it has an RS-232 output) and its communication with the Arduino (USB), and just need a basic wiring explanation for the actuators and stepper motor.

I'll take that into consideration kf2qd! I definitely don't want to be working on this code all be myself! :)

Thank you all for taking the time to read and comment!

Yuzzum321: I'm primarily concerned with the GPS hookup (it has an RS-232 output) and its communication with the Arduino (USB)

You'll need a RS232 to TTL converter for this (eBay is littered with them -- they're cheap). That will reduce your connections to 5V, GND, TX and RX. The 5V and GND should be obvious, and the TX and RX will be set to pins defined by a GPS library such as TinyGPS. I'd assume you'll also need to configure your Trimble GPS to activate the serial port; you want it sending out ASCII NMEA data, and an update at 1Hz with 9600 baud for starters. Having never touched a GPS unit like this one I don't know how that's done (you'll need to read the manual) but the specs show it's possible.

Using the USB or Ethernet interfaces on the GPS unit with the Arduino would overly complicate the issue so you'll want to avoid those.

Yuzzum321:
Thanks for the input cr0sh! Our group is, more or less, stuck with using linear actuators for the brake and gas (we’ll be able to make it work). I just wasn’t entirely sure if I would potentially need voltage dividers/amplifiers and whatnot to control these.

Most linear actuators are simply 12 or 24 volt motors - so you should just need a motor driver of some sort rated for the voltage and current needs of the linear actuators. Check to see whether your linear actuators have position sensing and/or limit switches; most will have limit switches, but not all have position sensing. Some have nothing, others may have a “slot” encoder (that gives out a number of pulses to indicate travel). If all you have is the slot encoder, what you can do is have the vehicle “self-calibrate” by running the actuator to the stops, and recording the count from one stop to another; that way you can judge “distance” of travel by monitoring the count later. You’ll of course need a way to “lock out” the accelerator when calibrating it (don’t assume you can calibrate it once and it will be good always - it may or may not be).

You’ll also definitely want some kind of cut-out on the accelerator control, since linear actuators usually aren’t “back-drivable”; if the connection to the linear actuator comes undone, you’ll have an out-of-control robot cart on your hands - so make it so that the system can recognize this, and shut things down if it happens (in addition to on-board manual controls, as well as a remote disable). Note that at least one on-board manual control should be completely separate from any microcontroller interface. Your remote cut-off switch control should also be separate. Finally, any relays or other power switching systems should fail to off-state when the coils (or other) are “de-energized”.