Three-wheeled rover with skid steering and servo controlled tailwheel

Hi,

I made a short video of my rover driving a mission with active tailwheel control. Without the servo controlled tailwheel/castor, I never got the rover to drive straight, because every gradient would cause the rear to roll down that gradient and the stabilisation was not strong enough to counter it. Or if I set the PIDs high enough to drive straight, the rover would totally freak out when stopping. The tailwheel control works by feeding the throttle values for the left and right motor into an arduino, which then calculates the tailwheel angles with a little trigonometry and sends out the PWM value to the tailwheel servo. It also tried to use throttle and groundsteering values, because this would make the calculation easier, but each time I setup throttle and steering on output 2 and 4 (1 and 3 are going to the ESCs), I got different results. Sometimes the throttle would only go to +/-50 from neutral, or the steering value would jump around randomly. Yes, I know skid steer and conventional steering output at the same time is not supported and tested.

1 Like

Video looked pretty good. Have you tried reverse?

Reverse works, too. I had to set PILOT_STEER_TYPE from 3 to 2, so the tailwheel can stay in the same orientation when changing from forward to reverse. Otherwise it would start 90° to the needed direction and the servo had to move it in the right direction against the force of the already moving rover. To make both forward and reverse mechanical equal it would be nice to have zero castor length, but such a wheel does not exist. The way it is now, the rover just has to go slower in reverse to protect the servo.

Any chance of a patch to this page to include a video?

http://ardupilot.org/copter/docs/common-all-vehicle-types.html

This is not a feature I added to ardurover, but an external arduino doing the calculations for the tailwheel, so I do not know if it belongs to that page. I probably would be old and grey, before I figure out how to add it to ardurover.

1 Like

Just in case anybody is interested, I made some improvements to the tailwheel sketch and the rapid, kind of digital movements of the tailwheel seen in the video are now gone. They were caused by a too large deadzone. If the rover drove at low speeds/throttle, the minimal angle the tailwheel would go to was about +/-45°. At higher speeds the steering got smoother, but sometimes the tailwheel would move too far and the rover even entered dead bug mode once (it rolled on its back). I now calculate the throttle and steering values from the left and right throttle and that means I can calculate the tailwheel angle from those two values directly without a bunch of if/else statements. I also filter the two input signals and the servo output, so I do not need a big deadzone anymore to catch the occasional spike in the PWM readings.

Sebastian, thanks for sharing! I have plans eventually to build a larger vehicle and your tail wheel design could be the ticket.

Very nice Sebastian! Are you willing to share this code publicly?

Yes, no problem. The code is a mess though. I will look at it again, clean it up a bit and add comments. But do not hold your breath, I am in the process of rebuilding the rover with 10 inch hubmotor wheels to get rid of the chain and sprocket.

I just finished the first test drive with the hubmotors, RC only.
I use two 36V, 350W, 10 inch hubmotor wheels with 2 VESC 4.12 (100€ on ebay for two). The wheel pair did cost 60€ on amazon and right now they are offered by the same seller for 35€ (correction: it is only one wheel for 35€) used. I tested with 4s and seems that wil give me enough speed for my rover. The VESC are truly amazing, no fiddling with which motor/sensor wire goes where. It is all autodetected. They have a bunch of control input options, including UAVCAN/CAN, but I will use PWM/PPM for now. You can run the motors current, duty cycle or RPM (PID) controlled and I am right now trying to tune the PID, so both motors run at the same speed for a given input.
Another benefit is, the rover is now much more quiet. The RC ESCs I used before used a drive frequency of 8kHz and a brake frequency of 1kHz, which caused a whine and squeal during accelerating and braking. All rattling from the drivetrain is gone too, of course. Now I have to figure out, if all of the BECs and step up/down converters in the rover can take 4s and then I will rewire the lipo connection board to get 4s 16Ah instead of 2s 32Ah.

2 Likes

Here is a short video of my rover, now with hubmotors. I was driving around in acro mode.

3 Likes

Dear Sebastian,

I see you had used VESC for a Pixhawk project.

I did the same but until now not working.

All components (VESC, Pixhawk, motors) separately are properly working but full assembly not.

Means that if I put in communication all of them motors are not spinning.

I am using Dual VESC 4.2 and Pixhawk 2.4.8

Motors are hub 500W motors.

I went through skid steering indications of Ardurover (Servo output = Throttle left and right). Motors are not moving. I am just able to ARM the vehicle but nothing more.

Even the simple pre-arm Motor test failed (motor are not spinning).

I also changed in the Servo Output from Throttle left (or right) to RC pass Thru. But nothing at motors happened.

Do you know if I need to do something with VESC tool? Something like arming the VESC through such software (VESC tool)?

Or through Mission planner to change any particular parameters?

Many thanks. Regards.

Andrea

There can be a few things not setup correctly.

  1. Do you have a safety button connected to the pixhawk? If not, did you set “BRD_SAFETYENABLE” to 0?
  2. The VESC has only the UART control app enabled by default, you need to select “UART and PPM” or only “PPM” under app “General”.
    Then you choose the control mode under app “PPM”. I use “duty cycle” for my rovers.
    I do not know how familiar you are with the vesc tool. Keep in mind that the all settings need to be written to the vesc by pressing the write motor settings and/or app settings button. If you switch from one VESC to another, the fields in the vesc tool keep the values from the previous VESC. The best practice is to press connect, read motor, read app settings each time you change between the VESCs. Otherwise it is easy to mess up the settings.
    If you need more info, feel free to ask.
1 Like

Hello Sebastian,

BRD_SAFETYENABLE is now 0.

I had also programmed VESC on “UART and PPM”. Duty cycle on PPM app.

But motors still not spinning.

Which other parameters could be further involved and improved?

Thanks. Regards.

Andrea

1 Like

The VESCs have a arming safety like other ESCs. If you enable realtime view in the vesc tool (the symbol below the arrow keys on the right side) and then go to app “PPM” and select the mapping tab. The green bar shows the PPM signal the VESC is receiving from the pixhawk. Even if the pixhawk is sending 1500us, the VESC might read something a bit off.
If the value is beyond the default deadzone, the VESC will not arm.
You can calibrate the VESC to the pixhawk signal in the mapping tab.
Set PPM from “duty cycle” to “off” and write the app settings.
Then you can use the servo output screen in Missionplanner to set the trim/center value to the min,max values. This will set the outputs directly to the set value, as soon you click outside the box, so be sure you have set ppm mode to off in VESC tool. Otherwise the motors might start to run.
After you set center to min max, set it to 1500 again. In the VESC tool PPM mapping tab, you should see the min, max, center values updated. Click apply and the values are entered in the fields at the top. Write the app settings to transmit the values to the VESC. Now the values the pixhawks sends and the VESC values are in sync and the VESC should arm itself.
Change PPM back to duty cycle.

Hello Sebastian,

It is working! Wonderful!

Thanks for your precious support!

Many thanks. Best regards.

Andrea

Hello Sebastian,

sorry to bother you again. I am currently stuck in another issue.

I do not see any output Throttle (Throttle left=73 and Throttle right=74) applied to my ESC on the Servo Output page of Mission Planner. And motors are not spinning.

If, instead of Throttle, I use PassTru, the left stick is moving both green bars, at Position 1 and 3.

If I am going to check radio calibration, left stick (up and down) is controlling green bar of Roll and Throttle. Right stick (up and down) is just controlling Pitch.

At the end of the day, only TX left stick (up and down) is working. Moreover the result at motor level is not clean. Sometimes the right wheel is moving and sometimes the left. The wheel movement is nervous.

Another point not clear for me is the dual VESC. Right in the middle it owns a ON/OFF switch to put (or not) in communication both VESCs.

Should I consider dual VESC like two separate entities (put OFF the switch) or leave the switch ON?

Looking forward to hearing from you.

Many thanks. Regards.

Andrea

Hi Andrea,

from your description, I would say you have a mixer programmed in your TX. This is why one stick direction moves both roll and throttle input.
Your TX should output independent channels with no mixing active. PWM values should be ca. 1000/1500/2000us.
I am not familiar with dual VESCs, but you need two independent ESCs, so the switch should be OFF.
Ardurover features two safety stages. One is the safety button, the other is arming. Passthrough is not affected by this, but proper setup with throttle left and throttle right is. So you have to press the safety switch (or disable it by setting BRD_SAFETYENABLE to 0)
and then arm the rover. The best option for a skid steering rover is to use a switch for arming/disarming, because stick input for arming/disarming might cause the rover to pivot at full speed. Arming may not be possible, because there are different checks that must be passed to arm the rover. For bench testing, you can set ARMING_CHECK to 0, but set it back to 1 when you actually use the rover.
Please feel free to ask, if you have further questions.

Ciao Sebastian,

It is true. TX was mixed up.

I cleaned it, switched off and configured the VESC like two indipendent VESCs (is the Pixhawk controlling both wheels speed in order to avoid motor damages?).

Now rover is working in manual mode and with servo output in PassTru.

Still not working in Throttle right (or left). I still do not see green bars moving at Servo output.

Are there other reasons behind not working of Throttle output?

Could the rover be used in Auto mode and make a mission with the PassTru output (even if it is not the proper setup)?

Many thanks. Regards.

Andrea

Hi Andrea,
sorry, I had to quote myself. I did not want to write it all again.

The rover will only work, if it is setup correctly. Passtrough is only doing exactly that. It passes the input signals to the output, without doing anything to it. If there is no input from the TX, there will be no output and therefor the rover will not do anything in auto mode.