Hi,
I am thinking of using the Odrive controller to control two hobby brushless motors (Turnigy SK3 149kV) for a differential drive system for a remote controlled street rover. In a differential drive system, the difference between motor velocities determines which way the rover moves. The rover will be driven on smooth asphalt and in speeds exceeding 20 mph so it is important that the velocity control of each motor is accurate for straight line travel. The weight will be approximately 35 lbs. The rover will receive remote control inputs via a receiver. Those inputs will either be processed by a micro-controller board or go straight to the motor controller(s) . I was hoping you might be able to answer my questions and/or provide advice for this project. Thank you.
Questions:
Can you control both motors simultaneously with the board?
Can the controller take the inputs directly from the receiver (Outputs are PWM) or is some processing necessary?
Will programming the board for a differential drive system be fairly straightforward?
Are there any reference projects/designs for this type of project?
I am in the early stages, but I am using a laptop on top of the rover itself. I am working on some real-time vision software using the opencv libraries which is why I am using a laptop for both control over the odrive as well as camera control.
For controls, I am using a bluetooth enabled controller and communicating through the laptop’s bluetooth.
As for your questions.
I am not entirely sure if the motors are reading inputs at exactly the same time, but I do know that my rover goes completely straight when sending the same speed to both motors.
There a couple threads on this forum that describe the method of PWM directly. Check this link
I have done some testing in both Python and C++ as for communication to the ODrive from the computer, and for the most part, the programming for controlling the motors has been pretty straight forward.
My designs are not exactly ready to be shared, but I do have a video that I could upload of it working.
edit: video: https://www.youtube.com/watch?v=9-yZWmAXVW4
Sorry about the heavy breathing, was getting over a cold.
This was an early version of the rover, but you can get an idea of what I am talking about.
Good to hear your rover goes completely straight. I read up on the PWM stuff and I think i’ll avoid it if possible. I’m thinking I can send control signals from an Arduino, maybe via UART. What interface type are you using to communicate from the computer to the ODrive?
Also, if you don’t mind me asking, which motors did you go with and are you happy with their performance?
I’m also considering using a couple of torque VESCs (for electric skateboards) to control the brushless motors instead of the ODrive. Only problem then may be outputting a PPM signal from the arduino. I read briefly there may be a arduino servo library that could do it but need to research some more. Anyways, enough rambling. Thanks again!
Tony, I am using the python libraries directly to control my motors from my laptop.
The motors I am using are the following. They are part of Oskars motor list and are still have the best power/$ ratio. I haven’t really had any issues with them yet. I am also using a 2:1 ratio so that I am getting even more torque.
Funny that you say that about the vescs, because I actually started this project with a couple of vescs instead. I was using the hobby king vesc hard, and was finding it very hard to make the motors work with encoders. If you go the sensored brushless motor route, the vesc might be worth checking out. However, the odrive has definitely made my project much easier.
I am considering using sensored brushless motors with the VESCs. The VESCs i’m looking at take PPM inputs which can be sent from an arduino via the “servo library”. Although I am uncertain how well that system will work. Based on your experience/research do you think the sensored motors and VESCs will be suitable for reliable velocity control?
I am also still considering using the Odrive with sensorless brushless motors and encoders. Only thing is I am not really sure how I will setup the onboard control system. I found a limited arduino library(https://github.com/madcowswe/ODrive/blob/master/Arduino/ODriveArduino/ODriveArduino.h) on github for the Odrive. Maybe I can alter that code to change the velocities based on signals from the remote control receiver.
The uncertainties in either path is even making me consider using brushed DC motors. That route comes with its own set of problems, mainly finding motors that have enough torque, rpms, and can handle sustained operation without overheating. (I need 1 Nm + of continuous torque (total) @ 2800 RPM. Possibly considering these CIM motors
For all of the systems I am trying to drive the wheels directly with no gear down.
Based on your experience, do you have any recommendations or lessons learned in general?
Guess i’m reaching that point where i’ll just have to make a decision on one path or the other.
In my honest opinion, you are probably better off using the ODrive. I think you will find it much more simpler moving forward. The arduino libraries are actually pretty decent and are well documented throughout this site.
You could easily use an arduino to receive remote signals from your controller and use the arduino map function to adjust vel speeds for the ODrive accordingly. For example, if you are using an rc remote control with a transceiver on the arduino, you could set up an interrupt routine to check remote signal and adjust your odrive vel value accordingly.
As for not gearing down your motors, if you are only ever going to be driving the rover over asphalt, you should be okay.
A couple things that I have learned so far. A 3D printer is your best friend, ha. If you do decide to gear down your output, use 3mm or 5mm HTD belts and pulleys. I spent way too long trying to use GT2 pulleys, and they just don’t allow the torque transfer required for all terrain type roving if you go down that route.
All in all, I found that the ODrive is much more user friendly (although sometimes clunky with the initial interfacing), but after you get the hang of it, changing values and re running tests are much easier than the VESC.
I have decided to use the Odrive moving forward and DC brushed will be my emergency backup plan. Just put one of the v3.5 24V on backorder, hopefully I can get it by the end of the month. I appreciate your advice in general and i’ll keep your tips for gear down in mind as well.