Don't ad-block us - support your favorite websites. We have safe, unobstrusive, robotics related ads that you actually want to see - see here for more.
0 Members and 1 Guest are viewing this topic.
1. I'm planning to purchase Arduino microcontroller. I've read few forums and can't decide which one is most suitable for my project (mini, diecimila)?
2. what IMU to choose? what would be the best module to choose with regards to price/quality ratio?
3. I'd like to purchase 2 motors, but again .. which? most people who did such kind of projects had problems with backlash, i.e. their robot was oscillating all the time. some suggest to use stepper motor, but it is consuming a lot of power.
Do you really need higher speed for self balancing robot?
Have a look at these cheap but powerful (80MHz) Arduino compatible boards:http://www.digilentinc.com/Products/Catalog.cfm?NavPath=2,892&Cat=18
[...] At a quick glance I don't see UARTs on the feature list.
I am assuming the timers can all be configured as native PWM output with hardware match registers. The chipKIT Max32 is right one I think with USB.
Quote from: mike_522 on October 04, 2012, 11:54:04 AM Do you really need higher speed for self balancing robot?You will be doing some pretty complex math. Your main filter will be using feed back on motor position, a rate sensor to detect speed of tipping, a gyro to detect angle from vertical, and input command on movement. All of that means if you limit yourself in processing power upfront, you end up with a poor filter and you're stuck with the oscillation you wanted to avoid.But I've never done this type of project before. Take a look that Kalman filter you will probably be using and see what it requires for processing power.
//---------------------------------------------------------------------// taskBalance// This is the main balance task for the HTWay robot.//// Robot is assumed to start leaning on a wall. The first thing it// does is take multiple samples of the gyro sensor to establish and// initial gyro offset.//// After an initial gyro offset is established, the robot backs up// against the wall until it falls forward, when it detects the// forward fall, it start the balance loop.//// The main state variables are:// gyroAngle This is the angle of the robot, it is the results of// integrating on the gyro value.// Units: degrees// gyroSpeed The value from the Gyro Sensor after offset subtracted// Units: degrees/second// motorPos This is the motor position used for balancing.// Note that this variable has two sources of input:// Change in motor position based on the sum of// MotorRotationCount of the two motors,// and,// forced movement based on user driving the robot.// Units: degrees (sum of the two motors)// motorSpeed This is the speed of the wheels of the robot based on the// motor encoders.// Units: degrees/second (sum of the two motors)//// From these state variables, the power to the motors is determined// by this linear equation:// power = KGYROSPEED * gyro +// KGYROANGLE * gyroAngle +// KPOS * motorPos +// KSPEED * motorSpeed;//task taskBalance(){ Follows(main); float gyroSpeed, gyroAngle; float motorSpeed; int power, powerLeft, powerRight; long tMotorPosOK; long cLoop = 0; ClearScreen(); TextOut(0, LCD_LINE1, "HiTechnic-HTWayC"); TextOut(0, LCD_LINE4, "Balancing"); tMotorPosOK = CurrentTick(); // Reset the motors to make sure we start at a zero position ResetRotationCount(LEFT_MOTOR); ResetRotationCount(RIGHT_MOTOR); while(true) { CalcInterval(cLoop++); GetGyroData(gyroSpeed, gyroAngle); GetMotorData(motorSpeed, motorPos); // Apply the drive control value to the motor position to get robot // to move. motorPos -= motorControlDrive * tInterval; // This is the main balancing equation power = (KGYROSPEED * gyroSpeed + // Deg/Sec from Gyro sensor KGYROANGLE * gyroAngle) / ratioWheel + // Deg from integral of gyro KPOS * motorPos + // From MotorRotaionCount of both motors KDRIVE * motorControlDrive + // To improve start/stop performance KSPEED * motorSpeed; // Motor speed in Deg/Sec if (abs(power) < 100) tMotorPosOK = CurrentTick(); SteerControl(power, powerLeft, powerRight); // Apply the power values to the motors OnFwd(LEFT_MOTOR, powerLeft); OnFwd(RIGHT_MOTOR, powerRight); // Check if robot has fallen by detecting that motorPos is being limited // for an extended amount of time. if ((CurrentTick() - tMotorPosOK) > TIME_FALL_LIMIT) { break; } Wait(WAIT_TIME); } Off(MOTORS); TextOut(0, LCD_LINE4, "Oops... I fell"); TextOut(0, LCD_LINE8, "tInt ms:"); NumOut(6*8, LCD_LINE8, tInterval*1000);}
I doubt you'll find one because it's like like looking for a new car and ignoring those that can go 150 km/hr purely because you only need one that goes to 80 km/hr.Just buy a 6 DoF and ignore the axes you don't need.
What do you think of using two of them motors: http://www.pololu.com/catalog/product/1117?I'm thinking to connect them directly to the wheels. I think this way the responce will be less oscillatory. Problem with this is that the shaft is not long enough to accomodate an encoder, which will be self built.
Problem is that they are not going to be strong enough to move Your robot You need some sort of gearbox to go with it. You won't be able to totally get rid of backlash, You can reduce it though by using belt drive. If You put small pulley of the gearbox output and double size pulley on the wheel shaft, you get only half of backlash than You would get when mounting wheel directly on gearbox shaft.