#robotics | Logs for 2016-08-15

Back
[07:51:20] <[VEGETA]> anyone know how to make an IMU unit out of MPU6050 or any equivalent chip?
[07:53:00] <z64555> IMU mentioned
[07:53:27] <[VEGETA]> ؟
[07:53:38] <z64555> lemme pull up the chip to see what it is first
[07:55:09] <z64555> Well, that basically is an IMU on a chip, so what you're probably interested in is the software needed to pull data from it in a meaningful way
[07:56:17] <z64555> You could also put in some data filtering on the accelerometer if you intend to mount the IMU on a position that isn't the CoR
[07:57:18] <z64555> Sadly I don't have any experiance with that particular chip, but it looks like there's several tutorials on the net
[07:57:20] <z64555> http://playground.arduino.cc/Main/MPU-6050
[07:57:25] <z64555> there's one for adruino
[07:59:43] <z64555> the chip appears to be an I2C/SPI only device, so, can't simply read voltages off it
[08:00:11] <z64555> gotta hook it up to a uC
[08:00:34] <z64555> [VEGETA]: hope that helps a bit
[08:01:10] <[VEGETA]> my interest is to be able to use it in a custom board not a breakout board.
[08:02:51] <z64555> you'll still need a microcontroller or something that can read the I2C bus
[08:03:22] <z64555> BTW. All that breakout board does is provide the necassarily electronics to get the chip running. power supply etc.
[08:03:46] <[VEGETA]> yes, i will certainly use a micro
[08:03:58] <[VEGETA]> but i haven't used i2c before so meh :D
[08:04:25] <z64555> it might be good to grab a cheap chip to play with first
[08:05:02] <[VEGETA]> and all that arduino thing is not helpful too much because of ready-to-use libs
[08:05:10] <[VEGETA]> which can not be used with PICs and such mcus
[08:06:27] <z64555> all it includes is <Wire.h> which is just something so you can access the IO pins easily
[08:07:10] <[VEGETA]> but how to get the values from the i2c message... i mean 0 degree, 12 degree... etc
[08:07:29] <z64555> look at the base example, and the datasheet of the chip
[08:07:36] <z64555> http://playground.arduino.cc/Main/MPU-6050#sketch
[08:08:43] <z64555> the first 600 or so lines is just naming the registers
[08:08:52] <z64555> to make it a bit easier to call
[08:09:25] <z64555> line 639 defines a structure that has the data
[08:10:25] <z64555> line 730 is where the data is read
[08:11:26] <z64555> line 803 is where the read function is
[08:14:08] <z64555> Once you get the raw values off the chip, you can do a conversion function into floats or w/e so you can use it
[08:15:08] <[VEGETA]> raw data is gyro, accel data? the final data required for robots are yaw, ptch, roll i guess right?
[08:15:58] <z64555> :[
[08:17:03] <z64555> raw data is the values off of the gryo and accelerometer. In some cases it's already in degree/sec and meter/sec, but in many cases it's in a different format specific to the chip
[08:18:33] <z64555> the "final data" is the raw data that has been remapped into the correct units (degree/sec, meter/sec^2), and optionally filtered
[08:18:59] <[VEGETA]> there is a short sketch before the base code
[08:19:05] <[VEGETA]> so short compared to it
[08:20:48] <[VEGETA]> i didn't understand this line:
[08:20:49] <[VEGETA]> AcX=Wire.read()<<8|Wire.read(); // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)
[08:22:16] <z64555> yeah that is a bit confusing
[08:23:28] <z64555> AcX=(Wire.read()<<8) | Wire.read();
[08:23:33] <z64555> maybe that'll help
[08:23:59] <z64555> AcX is an int16_t
[08:24:06] <z64555> Wire.read() gives int8_t
[08:24:21] <z64555> so that line reads two bytes, and combines them into a 16-bit word
[08:24:37] <z64555> It does this by reading a byte
[08:24:55] <z64555> shift it over by 8 bits, so that it occupies the upper byte of the 16bit word
[08:25:16] <z64555> and then read in the second byte, and combine it to form the 16-bit word
[08:25:50] <z64555> tbh, I would've used a union there.
[08:26:40] <z64555> AcX.byte[1] = Wire.read(); AcX.byte[0] = Wire.read();
[08:29:11] <z64555> (It just goes to show the importance of placing spaces between operators and operands!)
[08:34:14] <z64555> the short sketch appears to read just the raw data
[08:34:34] <[VEGETA]> isn't that what the big one does too
[08:37:00] <z64555> yes. It does a few other things as well, the bulk of the big example is just naming stuff according to what is called in the data sheet
[08:37:02] <z64555> presumably
[08:38:13] <z64555> it also generalizes the read/write proccess. so all you'd have to do is call a function to read data, and call a function to write to it
[08:40:41] <[VEGETA]> so is it really necessary to name all these stuff? i mean if the code works why bother
[08:40:58] <[VEGETA]> cuz we want to get the final raw data...
[08:43:32] <z64555> No, it's not necessary to the function of the program. It may make maintenance easier since it names things as they appear in the datasheet of the chip
[08:45:13] <[VEGETA]> short code seems easy, but i need to learn i2c first
[08:47:49] <z64555> (be sure to cite that website as a source, btw)
[08:53:39] <[VEGETA]> will the short code work with PIC mcus or any general compiler?
[08:53:50] <[VEGETA]> what additions should I do
[09:01:06] <z64555> the short code will not work with PIC unless you provide the necassary functions to do so
[09:01:57] <z64555> you'd essentially need to implement the Wire library
[09:03:44] <z64555> just by looking at the short code, without looking at Wire.h, I can tell you that Wire is a class that deals with the I2C module
[09:03:50] <z64555> at the very least
[09:16:42] <[VEGETA]> so either write i2c code from scratch or port the lib to pic code
[09:22:54] <[VEGETA]> I found this lib: https://github.com/jrowberg/i2cdevlib/
[09:25:24] <z64555> that might work
[09:25:48] <z64555> TBH, though, you might want to put the time in to make a simple I2C library so you get an idea of how it works
[09:26:25] <z64555> even if you don't end up using it in your final product
[09:37:37] <[VEGETA]> I think about making a custom board for a robot. it will include mpu6050, pic24 or any good mcu, motor driver ics, .... etc
[09:37:48] <[VEGETA]> this is why i am asking for a non-arduino thing
[09:40:41] <[VEGETA]> I think about using CircuitMaker from Altium
[09:41:22] <[VEGETA]> since I won't buy CircuitStudio :D < using a cracked version is the way to go but since CM exists it is not good
[09:43:06] <[VEGETA]> do you have some experience in PCB design
[09:43:25] <[VEGETA]> this will be my first board ever :D and it is freaking big as a start
[09:44:21] <z64555> nope! sorry. I've been skirting the idea for years but never got into it
[09:45:16] <z64555> most of my projects go around getting breakout boards and mounting them onto the board
[09:45:34] <z64555> reduces the amount of work I have to do when troubleshooting
[09:46:03] <z64555> if a chip on a board goes bad, I can just yank out that module and replace it, instead of needing to replace the whole thing
[09:46:15] <z64555> *replace the module
[09:47:02] <[VEGETA]> yes! that is the problem
[09:47:09] <[VEGETA]> aside from programming...
[09:47:21] <[VEGETA]> i need to make sure the schematic is correct
[09:47:27] <[VEGETA]> for all chips
[09:49:26] <z64555> I recommend using a breakout board for the IMU. makes it easier to handle and you can reuse it
[09:49:48] <z64555> unless this is for something like a final product you intend to mass produce
[09:50:19] <[VEGETA]> well, mass product is not in mind now
[09:50:31] <z64555> then by all means, use shelf products
[09:50:32] <[VEGETA]> but a "product" is... it is a mobile robot base
[09:51:51] <[VEGETA]> if i used breakouts, then i will for sure need to design a complete board
[09:51:55] <[VEGETA]> so it is the same
[09:52:11] <[VEGETA]> i don't want to make a robot for fun alone
[09:52:21] <z64555> why would you need to design a complete board?
[09:52:22] <[VEGETA]> i need to make one board for the whole robot
[09:52:56] <[VEGETA]> in order to interface this base with ROS in later stages
[09:53:09] <z64555> ROS is software?
[09:53:24] <[VEGETA]> after the board itself is capable of outputting odom and driving motors and stuff
[09:53:43] <z64555> they have H-bridge breakouts?
[09:53:43] <[VEGETA]> think about it as similar to kobuki or roomba
[09:54:42] <z64555> the thing I don't like about making custom boards for prototypes is that prototypes sometimes/often change
[09:55:10] <z64555> you find that a certain chip doesn't work as well as expected, and another chip that will do the job has a completely different pinout
[09:55:17] <z64555> welp! there goes your custom board
[10:00:09] <z64555> I recommend going with breakout boards until you get a working proof-of-concept going
[10:00:43] <z64555> at that point, most of the variables in the project will be solved, so making a custom board will be more economical
[10:02:01] <z64555> unless you need a very specific set of requirements from a module, which would then dictate the use of a custom board /for that module/
[10:04:37] <z64555> as far as interfacing with ROS is concerned, it may be as simple as needing a breakout board for the connector, which you can then use something like a ribbon cable to connect that to the uC
[10:45:37] <[VEGETA]> well, your plan sounds reasonable
[10:46:07] <[VEGETA]> connection with ROS pi3 needs only a serial connection so it won't be an issue
[10:52:33] <[VEGETA]> this is exactly what I aim for: https://hackaday.io/project/8588/instructions
[10:52:41] <[VEGETA]> this project is so good and unique
[10:54:42] <SpeedEvil> what project?
[10:54:54] <SpeedEvil> Oh - the hackaday one
[10:55:37] <SpeedEvil> Interesting - I wouldn't call it unique.
[10:58:13] <[VEGETA]> why not? it is really good
[10:58:56] <[VEGETA]> as you see, it uses breakout boards
[10:59:16] <[VEGETA]> i would want to make one single board to contain it plus other features
[11:14:49] <SpeedEvil> It's a fairly mundane robot. The only interesting thing is he's published a how-to.
[11:15:36] <SpeedEvil> To be fair - it's very rare to get in-depth how-tos.
[11:32:39] <[VEGETA]> i wanna make a similar one but using 4 wheels with motors
[11:32:50] <[VEGETA]> can that still be considered differential drive?
[11:37:01] <SpeedEvil> Well, with four wheels, you need something more complex
[11:37:13] <SpeedEvil> as you have to skid-steer to a degree
[11:40:34] <[VEGETA]> till now, i couldn't understand what is skid-steer compared to diff drive
[11:40:57] <[VEGETA]> i mean, if i connected left motors both at once... as if they are one motor
[11:43:10] <[VEGETA]> isnt this considered diff drive too?
[11:43:49] <[VEGETA]> btw, this is a good project for robot board: http://workspace.circuitmaker.com/Projects/Details/lincoln-barnes/7003311-robot-prototype-2016
[11:45:07] <SpeedEvil> you cannot steer a four wheeled vehicle with the four wheels pointed in the same direction without two or more tyres moving left or right - rather than forward/backward
[11:45:47] <SpeedEvil> this is skidding - as the wheels are fighting you, not spinning.
[11:46:48] <[VEGETA]> i meant, left motors are back... right motors are forward = moving left
[11:46:58] <[VEGETA]> so instead of one motor, they are 2
[11:51:22] <SpeedEvil> Unless the wheels can also piviot, they will scrub
[11:51:45] <SpeedEvil> More battery use, tyre wear, noise, vibration, floor damage, tripping over carpets, ...
[11:52:30] <[VEGETA]> pivot?
[11:53:16] <SpeedEvil> swivel so they are in line with their course over the ground
[11:55:41] <[VEGETA]> so connecting them like i explained won't work?
[11:55:51] <SpeedEvil> define 'work'
[11:55:54] <SpeedEvil> It will turn.
[11:56:00] <[VEGETA]> i mean like diff drive robots
[11:56:05] <[VEGETA]> they "work" xD
[11:56:14] <SpeedEvil> It will turn with high friction
[11:56:22] <SpeedEvil> https://en.wikipedia.org/wiki/Skid-steer_loader
[11:56:46] <[VEGETA]> isn't it normal though?
[11:59:00] <SpeedEvil> What?
[11:59:12] <SpeedEvil> Skid-steer is not reasonable for many surfaces.
[11:59:17] <SpeedEvil> It works in some cases.
[12:00:02] <SpeedEvil> It is almost designed to (if indoors) fuck up floor coverings.
[12:00:03] <[VEGETA]> is this called 4WD differential drive or skid steer?
[12:00:27] <SpeedEvil> The two are orthogonal
[12:00:42] <SpeedEvil> differential drives alter the speed of the wheels.
[12:00:53] <[VEGETA]> but if i use normal diff drive with 2 front wheels not connected to motors.. rotation will be an issue
[12:00:54] <SpeedEvil> This cannot make the vehicle turn if the wheels do not skid.
[12:01:21] <SpeedEvil> That is why most robots of this sort have a caster wheel, not two fixed front wheels
[12:01:29] <SpeedEvil> if there are undriven wheels
[12:01:41] <SpeedEvil> Or you have proper steering, with the wheels turning.
[12:04:16] <[VEGETA]> but i saw some 4wd robots with only 2 driven motors
[12:04:26] <[VEGETA]> here, rotation point will differ
[12:04:42] <[VEGETA]> since diff drive with 2 wheels has the rotation point in the center
[12:04:51] <[VEGETA]> for 4 wheels, it won't be there
[12:05:04] <[VEGETA]> it will be in the center between the 2 driven wheels
[12:05:32] <[VEGETA]> which is not (in this case) the center point of the robot
[12:05:55] <SpeedEvil> You can't spin a 4 wheeled thing with all four wheels pointed straight and have some wheels not move not front and back.
[12:05:58] <[VEGETA]> so the robot won't be able to turn 360 deg in place...
[12:06:07] <SpeedEvil> This only works if they are tangent to a circle
[12:07:00] <SpeedEvil> This doesn't matter if the wheels are powered or not - it's just geometry
[12:08:18] <[VEGETA]> so skid steering is bad for indoor robots?
[12:08:30] <[VEGETA]> what is the solution then for 4wd robot
[12:09:05] <SpeedEvil> For a very light robot, it might be OK, but it tends to ruck up carpets and such
[12:09:15] <SpeedEvil> why four wheels, not two and a caster - like say teh roomba
[12:09:41] <SpeedEvil> the 'right' solution is proper steering - with the wheels turning if you actually need 4 wheels - like a car.
[12:11:22] <[VEGETA]> i don't wanna use ackermann steering
[12:11:36] <[VEGETA]> by no means
[12:11:58] <[VEGETA]> diff drive is great because it is simple to use and calculate odometry
[12:12:09] <[VEGETA]> that is why i want it
[12:13:16] <[VEGETA]> famous robots like jakal does use skid steering
[12:14:17] <SpeedEvil> Skid, and your wheels are not rotating at the simply calculated speed over ground
[12:14:58] <SpeedEvil> For indoors, you are going to fuck up floor coverings of various sorts.
[12:16:35] <[VEGETA]> so whether there are driven wheels or not it won't matter right? it will still be considerer skid
[12:17:53] <SpeedEvil> yes. Unless the wheels are casters
[12:17:56] <SpeedEvil> (two of)
[12:18:05] <SpeedEvil> http://patentimages.storage.googleapis.com/EP0816206B1/00370001.png - there are alternatives to ackerman
[12:19:11] <[VEGETA]> what are "casters" in this case
[12:20:29] <SpeedEvil> wheels which can piviot freely and rotate so they are always moving 'forwards' - as found on at least two wheels of all shopping trolleys
[12:20:48] <SpeedEvil> http://www.harborfreight.com/media/catalog/product/cache/1/image/9df78eab33525d08d6e5fb8d27136e95/i/m/image_21949.jpg
[12:23:17] <[VEGETA]> this will be different that what I wanted
[12:23:32] <[VEGETA]> i thought Jakal and the others work well indoor
[12:24:29] <SpeedEvil> It depends on the conditions. They will scrub floors, which will disturb carpets, cause scratches, ...
[12:24:37] <SpeedEvil> In some cases, this is not an issue
[12:25:51] <[VEGETA]> if i want to use ackerman steering, it will be hard
[12:26:03] <[VEGETA]> especially calculating odometry properly
[12:37:25] <[VEGETA]> speedevil, you are right, some wheels do not move but skid: https://www.youtube.com/watch?v=tl6DqHCMDoE
[12:37:34] <[VEGETA]> but it is used indoor
[12:39:35] <[VEGETA]> do you know another solution for 4 wheels that is easy when calculating Odometry?
[12:54:32] <SpeedEvil> The above two wheeled + caster 'chef' robot will work just fine - as it turns around the driving wheels.
[12:57:10] <[VEGETA]> i know, but i wanted a car like robot whether it is skid or ackerman.
[12:57:19] <[VEGETA]> but calculating odometry is hard in this case
[12:58:47] <[VEGETA]> I found this page claiming it could calculate odom: http://robotics.stackexchange.com/questions/1861/question-about-car-like-robot-localization-based-on-dead-reckoning
[12:58:51] <fractex> is your preference on this just for appearance?
[12:59:11] <[VEGETA]> they also mention this: http://robotics.stackexchange.com/questions/1653/calculate-position-of-differential-drive-robot
[12:59:21] <[VEGETA]> which they claim it works for all types
[13:08:43] <[VEGETA]> fractex, well not entirely but to a good degree.
[13:09:09] <[VEGETA]> is there a way to calculate odometry from IMUs? instead of kinematics
[13:27:39] <deshipu> yes, but it drifts
[13:29:14] <[VEGETA]> how is it possible?
[13:37:10] <z64555> dead reckoning.
[13:37:57] <z64555> It performs kinematic equations on the data from the accelerometers and gyros to determine how much you have moved
[13:38:34] <[VEGETA]> and is it accurate enough? I don't remember seeing a robot that uses it online
[13:38:50] <z64555> But, as deshipu pointed out, it drifts considerably. due to the gryo's sensing the Earth's rotation and due to round-off error
[13:39:20] <z64555> If you want any precise measurements, you will have to use a reference object somewhere
[13:39:56] <[VEGETA]> like what?
[13:40:05] <z64555> like some tape on the floor
[13:40:47] <[VEGETA]> hmm but this won't work on a robot that is supposed to be independent
[13:41:10] <z64555> or some beacons that emit a radio signal or IR where the robot can calculate its distance to
[13:41:32] <[VEGETA]> what do you think about skid steering (4wd)? speed evil mentioned some indoor problems of it
[13:41:46] <[VEGETA]> calculating its odometry is somehow easy
[13:42:53] <z64555> oh that, they use tank drives
[13:43:16] <z64555> but with wheels and optionally mechanum wheels
[13:43:21] <z64555> s/and/or
[13:43:57] <[VEGETA]> i mean without tank-like wheels.. just normal wheels
[13:43:59] <z64555> Those are easy to determine odometry by tracking the left/right speeds
[13:44:02] <[VEGETA]> i see Jackal robot
[13:44:16] <z64555> no, not with tank treads
[13:44:17] <[VEGETA]> jackal is great (and so pricey)
[13:44:23] <z64555> https://en.wikipedia.org/wiki/Skid-steer_loader
[13:44:49] <z64555> also see the https://en.wikipedia.org/wiki/Mecanum_wheel
[13:45:10] <[VEGETA]> is it necessary to put motors on all 4 wheels
[13:45:15] <[VEGETA]> or just the back ones
[13:45:37] <[VEGETA]> what about encoders too? i guess for them only on one left wheel and one right wheel
[13:46:24] <z64555> hm, I'm not sure about the motors. My gut tells me "no" but I'm an EEEN
[13:47:28] <[VEGETA]> will it do damage to the ground?
[13:47:42] <[VEGETA]> Jackal and Husky doesn't seem to mention it
[13:48:14] <z64555> if you use regular wheels that have too much grip it'll leave marks on the tile
[13:48:32] <z64555> or concrete
[13:48:48] <z64555> that's why they call it a "skid" drive
[13:48:57] <z64555> because it skids across the ground when turning
[13:50:05] <[VEGETA]> well, is that problem occur too much
[13:50:19] <[VEGETA]> the videos i saw doesn't seem to mention it
[13:59:08] <[VEGETA]> z64555, look at this one: https://youtu.be/zjCoQ5W0wE0?t=101
[13:59:25] <[VEGETA]> what I want is a robot like this one but maybe a little bigger
[13:59:29] <[VEGETA]> no more
[13:59:44] <[VEGETA]> look, it doesn't do any bad markings on the ground or something
[14:02:59] <z64555> yeah, that's a smooth tile or concrete floor, and the weight of the bot is light enough to where it's not an issue
[14:04:03] <[VEGETA]> so on a carpet it will be bad?
[14:08:10] <z64555> might be OK. you'll just have to find out
[14:09:47] <[VEGETA]> i don't wanna buy the thing then turns out it is bad xD
[14:10:15] <[VEGETA]> all i want to put on the robot is a kinect sensor plus some lightweight boards in the future
[14:11:01] <[VEGETA]> aside from skid steering, what are the other choices for a robot that looks like a car
[14:11:24] <[VEGETA]> for ackerman steering, the problem is odometry calculation
[14:14:48] <z64555> ackerman steering is not that big of a deal for odometry
[14:15:10] <z64555> only real thing you've got to contend with is backlash in the wheels
[14:15:41] <[VEGETA]> i couldn't find good examples of it online, not like diff drive
[14:16:30] <z64555> a super-simple drive is to use a 1WD ackerman
[14:16:47] <z64555> and put rotory encoders/sensors on both back wheels
[14:17:08] <[VEGETA]> i must have 4 wheels (car shape)
[14:17:18] <z64555> m8.
[14:17:24] <[VEGETA]> encoders are for back wheels of course
[14:17:25] <z64555> a 1WD IS car shaped
[14:17:37] <z64555> it means that only 1 wheel is driven, or has power to it
[14:17:38] <[VEGETA]> you mean 1 front wheel
[14:17:45] <z64555> no
[14:17:48] <[VEGETA]> oh
[14:18:08] <z64555> 4 wheels, 1WD, means 3 wheels are undriven or free-wheeling
[14:19:05] <z64555> so long as all wheels have good traction you won't have any issues
[14:19:25] <[VEGETA]> but how can it move?
[14:20:38] <z64555> whaddya mena how can it move
[14:20:42] <z64555> the motoro moves it
[14:20:44] <z64555> *motor
[14:21:08] <[VEGETA]> i think i didn't understand the concept
[14:21:10] <z64555> Reason you have differentials for 2WD is so that you have power to two wheels, in case the driven wheel looses friction
[14:21:40] <[VEGETA]> yes, both wheels are driven
[14:21:43] <[VEGETA]> no skid
[14:21:53] <z64555> no, this is not skid.
[14:21:56] <z64555> this is ackerman
[14:22:28] <z64555> Draw it out, make some vectors for rotation and translation
[14:22:49] <[VEGETA]> in 2wd diff drive, both wheels are driven, no skid
[14:23:02] <[VEGETA]> for 4wd with no steering, it is skid
[14:23:06] <z64555> and in a 1wd you don't have skid either
[14:23:14] <[VEGETA]> 2 driven or 4 driven doesn't matter
[14:23:18] <z64555> because it's ackerman. Don't get confused
[14:23:37] <[VEGETA]> i don't get this "1ws" and it is ackerman
[14:23:49] <[VEGETA]> ackerman is about rotating front wheels
[14:23:55] <z64555> Yes it is ackerman. Ackerman refers to how the steering is made, not the driven wheels behind it
[14:24:26] <[VEGETA]> so you will have 2 back driven wheels (for or back)
[14:24:30] <z64555> no
[14:24:42] <z64555> you will have 2 back wheels, with only 1 driven. for a 1wd
[14:25:02] <[VEGETA]> one of them is driven, the other is not?
[14:25:11] <z64555> yes. that is what a 1wd means.
[14:25:25] <[VEGETA]> ok, what about the front 2 wheels?
[14:25:35] <z64555> they're ackerman. and undriven
[14:26:11] <[VEGETA]> but how is that gonna simplify odom calc? if it is ackerman then it is already harder than diff drive
[14:26:40] <z64555> just track the two back wheels
[14:27:12] <z64555> say your pivot point is between the two back wheels
[14:27:20] <[VEGETA]> ok...
[14:27:30] <z64555> and then go from there
[14:27:31] <[VEGETA]> then i wanna move forward then left
[14:28:21] <z64555> right, so you'll be making a curve instead of an L
[14:29:25] <z64555> your X and Y with reference to the work area will be parametric
[14:29:51] <z64555> which, it still is with the tank/skid drive, but a different formula
[14:30:46] <[VEGETA]> do you know a real world example of it? video or something
[14:31:10] <z64555> yes, I drive one quite frequently
[14:31:58] <z64555> sigh, you might want to grab a cheap RC car and watch it closely
[14:32:14] <z64555> as it does turns, and practice driving it
[14:32:32] <[VEGETA]> cheap rc car use ackerman with 2 backwheels drive together
[14:32:44] <z64555> not all of them
[14:32:52] <[VEGETA]> well, most
[14:33:13] <[VEGETA]> you said calculating odometry for ackerman is not hard
[14:33:29] <[VEGETA]> well, i don't seem to see a good example of it online
[14:33:33] <z64555> it's not as hard as you're making it out to be
[14:33:34] <[VEGETA]> i keep searching
[14:33:48] <[VEGETA]> i say this cuz no examples
[14:33:59] <[VEGETA]> compared to diff drive
[14:34:20] <z64555> mechanically, it's the same as a differential drive
[14:34:27] <z64555> its just that one wheel is powered
[14:34:35] <z64555> movement wise it's exactly the same.
[14:35:14] <z64555> provided that all wheels have good friction (HINT)
[14:35:56] <z64555> seriously man, just draw something on paper
[14:36:34] <z64555> apply your basic Newtonian laws to it
[14:36:35] <[VEGETA]> i am searching online for this
[14:37:00] <[VEGETA]> the only problem with it is the front 2 wheels that steer with an angle
[14:37:25] <z64555> not everything is online as tutorials or even as documents
[14:37:25] <[VEGETA]> this is the difference between it and traditional diff drive or skid
[14:38:09] <z64555> Do you know about physics, and vectors, and torque and rotational movment?
[14:39:08] <[VEGETA]> tbh i don't remember everything
[14:40:06] <[VEGETA]> diff drive stuff seemed easy enough
[14:40:21] <[VEGETA]> skid is the same too
[14:40:31] <[VEGETA]> but ackerman is not
[14:40:59] <[VEGETA]> plus the other problem is getting suitable front wheels to match the chassis
[14:43:53] <z64555> Ok. lemme just get this 1WD stuff out of the way since you seem to have trouble understanding what's going on
[14:44:04] <z64555> Lets start off with two wheels on an axel
[14:44:17] <z64555> one has a motor on it, the other spins freely
[14:45:07] <z64555> There is a law created by a man named Newton. Is says "For every action there is an opposite and equal reaction"
[14:45:45] <z64555> For our two little wheels. If the driven wheel moves it creates a torque
[14:46:33] <z64555> the wheel moves forward
[14:46:46] <z64555> the other wheel moves backward
[14:47:26] <[VEGETA]> ok this is known
[14:47:28] <z64555> so the entire axel rotates about the center
[14:47:35] <z64555> with the two wheels on the ground
[14:48:22] <z64555> ok. now we add one or two more wheels in front of it, in an ackerman setup or a tricycle setup
[14:48:29] <z64555> doesn't matter
[14:48:46] <[VEGETA]> 2 front wheels that steer
[14:48:53] <[VEGETA]> not driven
[14:48:58] <z64555> right, doesn't matter for this analysis
[14:49:09] <z64555> as long as they're not driven
[14:49:39] <z64555> Front wheel(s) are currently pointed forward
[14:50:01] <z64555> Assuming the wheel does not slip. It cannot go anywhere except along its tread
[14:50:25] <z64555> since the wheels are pointed forward, this means the wheel can only go backward, or forward
[14:50:43] <[VEGETA]> right
[14:51:04] <z64555> going back to our wheels on the back axel. The motor is trying to rotate about its center still
[14:51:08] <z64555> but it cannot
[14:51:19] <z64555> because the front wheel(s) are there
[14:51:37] <z64555> preventing the back axel from turning left/right
[14:51:48] <z64555> now
[14:51:51] <z64555> guess what happens.
[14:52:55] <z64555> it moves forward.
[14:53:18] <z64555> This is because the back axel cannot rotate about our previous axis
[14:53:50] <z64555> so instead, it translates, which moves it forward
[14:55:08] <[VEGETA]> ok
[14:55:54] <[VEGETA]> so if you want to move right you steer front wheels right, and make the left wheel forward
[14:55:55] <z64555> from a quaternion standpoint, the addition of the front wheels (and their orientation) affects the center of rotation of the back axle
[14:56:21] <z64555> Yes, if you want to move right, you steer right, and if you want to move left, you steer left and also move forward
[14:56:30] <z64555> JUST like with a car
[14:56:53] <z64555> (going back to my earlier statement about quaternions)
[14:57:04] <[VEGETA]> i understand
[14:57:08] <z64555> It affects the center of rotation by pushing it off to the side
[14:57:19] <[VEGETA]> so the difference between this and the 2wd ackerman is...
[14:57:26] <z64555> with the wheels straight ahead, the cener of rotation is infinity
[14:57:42] <[VEGETA]> when calculating odom u assume they are like 2wd diff drive
[14:57:56] <z64555> Difference between 1wd and 2wd ackerman is just the fact that only one wheel is powered
[14:58:30] <z64555> so any odometry caclulations that apply to a 2wd ackerman also apply to a 1wd ackerman
[14:59:37] <[VEGETA]> these odom calculations where my problem as i stated previously
[14:59:52] <[VEGETA]> so how does 1wd makes it different than 2wd
[15:00:26] <z64555> means you don't have to put a differential calulation in your uC in order to power the wheels
[15:01:07] <z64555> also cheaper since you're using just one motor, but means that you *must* have good contact with the ground
[15:01:53] <z64555> this condition is usually met, since you have wheels of the same type
[15:01:57] <[VEGETA]> i must use 1 motor at a time but both back wheels should have motors.. or maybe one is enough
[15:02:10] <z64555> for a 1WD all you use is one motor
[15:02:31] <z64555> if you go with a 2WD you'll need to output different power to them
[15:02:54] <[VEGETA]> all that is understandable
[15:02:57] <z64555> which is easy enough, just take in the angle of the front wheels and pass it through an equation
[15:03:05] <[VEGETA]> but how do you calc odom for ur 1wd
[15:03:26] <z64555> I keep telling you it's the same as your 2wd ackerman
[15:03:48] <[VEGETA]> front wheel angle is determined by the pwm signal of the servo
[15:04:30] <[VEGETA]> and i keep telling you i didn't figure out the equations for the 2wd ackerman yet xD
[15:04:35] <[VEGETA]> which is my problem
[15:04:40] <z64555> lol.
[15:04:45] <[VEGETA]> :D
[15:04:52] <z64555> ok, don't go by the front wheels for tracking
[15:05:06] <z64555> that's on the right-hand side of your control equation
[15:05:40] <z64555> track how your back wheels are spinning for odometry
[15:06:07] <[VEGETA]> yes this will be the same as diff drive
[15:06:12] <z64555> reason for this is because you can (WILL) have backlash on the front wheels turning.
[15:06:17] <[VEGETA]> but the back wheels will run at the same speed
[15:06:24] <z64555> no! they wont!
[15:06:48] <z64555> the back wheels will NOT be running at the same speed in a turn!
[15:06:57] <[VEGETA]> isn't it like this: back wheels go forward or backward at the same speed while front ones steer?
[15:07:10] <z64555> because if they did, you'd be going in a straight line (or otherwise you're in a skid)
[15:07:44] <z64555> https://en.wikipedia.org/wiki/Differential_(mechanical_device)
[15:08:18] <[VEGETA]> but in a car, this happens. they run at the same speed while the front wheels steer it left or right
[15:08:21] <[VEGETA]> this is not skid
[15:08:29] <z64555> still, no. they do not go the same speed!
[15:09:08] <[VEGETA]> what? really?
[15:09:13] <z64555> See, your left and right wheels go a different linear speed because they are traveling along two circles of different circumferance
[15:09:58] <[VEGETA]> but they will consume the same current.. because of the same pwm
[15:10:06] <z64555> forget the pwm
[15:10:22] <z64555> that's just cluttering the mechanics right now
[15:10:27] <[VEGETA]> same pwn = same current = same speed
[15:11:03] <z64555> still no. Even if you supply the same amount of power to different motors, that does *not* mean they'll operate at the same speed with a different load
[15:11:45] <z64555> one motor will work harder (heat up more) the other will work less
[15:12:06] <[VEGETA]> assuming going straight they will be the same right?
[15:12:12] <z64555> or if you're unlucky they'll skid
[15:12:15] <[VEGETA]> but you say when turning they won't
[15:12:31] <z64555> yes. that's what I'm saying. Straight-ahead means both wheels are going same speed
[15:12:38] <z64555> turning means they are different speeds
[15:12:59] <z64555> Ok. What's the formula to transform translational speed into rotational speed?
[15:13:50] <[VEGETA]> so if the front wheels steer no skid happens, if they don't it will.
[15:14:56] <[VEGETA]> linear speed = radius * angular speed
[15:15:13] <[VEGETA]> radius is that of the wheel
[15:15:14] <z64555> it's very unlikely that will happen. The driven wheel would have to overcome at least twice the amount of friction in order to skid the front wheels
[15:15:45] <z64555> Ok. so we've got v = r*w
[15:16:02] <z64555> where v is linear speed, r is radius, w is rotational speed
[15:16:15] <[VEGETA]> w can be got from encoder ticks and wheel circumference
[15:16:19] <z64555> (these are actually vectors, not just speed)
[15:16:24] <z64555> yes
[15:16:36] <[VEGETA]> we got w and we have r then v is ours
[15:16:42] <z64555> Ok so you've got car turning
[15:16:49] <z64555> it has a known rotational speed
[15:17:03] <z64555> What are the linear speeds of its wheels?
[15:17:21] <[VEGETA]> it is v
[15:17:24] <z64555> no
[15:17:28] <z64555> why?
[15:17:45] <[VEGETA]> isn't v linear speed?
[15:17:56] <z64555> has to do something with r
[15:18:00] <[VEGETA]> or you want x comp or y comp
[15:18:46] <z64555> In a differential drive, r to the wheels is equal
[15:19:09] <z64555> for this excercise, a differential drive behaves like two wheels
[15:19:29] <[VEGETA]> r is the radius of the wheel
[15:19:32] <z64555> no.
[15:19:49] <z64555> r is the radius from the center of rotation of the car to the wheel
[15:20:19] <[VEGETA]> we assumed centre of rotation is the centre point between the 2 wheels
[15:20:43] <z64555> yes, we're using a different frame of reference here
[15:21:39] <[VEGETA]> assume it is 0.5 m between it and one wheel
[15:21:41] <z64555> we're using a different frame of reference because we're trying to find the linear speed of the wheels relative to the world
[15:22:44] <z64555> when we are tracking, we use the center of the back axel as our frame of reference to make it easy for us
[15:23:10] <z64555> because then we can pretend it was a differential
[15:23:22] <[VEGETA]> yes this is what i understood
[15:23:53] <z64555> but here, we're trying to explain why the wheels do not rotate the same speed
[15:24:02] <z64555> when they are turning on an ackerman
[15:24:57] <z64555> https://en.wikipedia.org/wiki/Ackermann_steering_geometry#/media/File:Ackermann_turning.svg
[15:25:10] <z64555> notice the "Centre of turning circle"
[15:25:26] <[VEGETA]> yes
[15:25:37] <[VEGETA]> that is different than diff drive
[15:25:59] <z64555> only when the differential drive is spinning and not moving forward/backward
[15:26:16] <z64555> if it is turning while moving, it behaves exactly the same
[15:27:00] <z64555> Now. the reason why the wheels turn at different speeds is because their radius to the center of rotation is different
[15:27:25] <z64555> and possibly vice-versa
[15:28:30] <z64555> so the inner wheel turns at a slower rate than the outside wheel
[15:28:49] <z64555> this is why cars needs a differential mechanism on the back axel
[15:29:10] <z64555> and why the two DC motors should have a different voltage going to them
[15:30:04] <z64555> You may also want to note how the two front wheels are tangent to the center of rotation
[15:30:16] <SpeedEvil> hmm
[15:30:35] <SpeedEvil> I suppose if you put DC motors in series, that is exactly equivalent to a conventional diff.
[15:30:46] <SpeedEvil> (this may be a bad idea for other reasons)
[15:31:28] <z64555> Yes, I believe doing that would do the trick
[15:32:10] <z64555> you would need some way of making sure the motors have the same characteristics, though
[15:32:39] <z64555> perhaps have the stator winding hooked up to something
[15:32:49] <z64555> so as to augment the B field of the magnet(s)
[15:36:18] <z64555> (which can't be done with simple DC motors unless you modify them)
[15:40:24] <z64555> [VEGETA]: understand any of that?
[15:44:17] <z64555> btw, if anybody in the channel noticed I goofed somewhere, by all means point it out :)
[15:44:31] <z64555> I'd like to be wrong and know about it than to be wrong and ignorant
[15:45:09] <z64555> although I'd really like to be actually right. lol
[15:47:49] <SpeedEvil> Skimming it all seems reasonable
[17:54:18] <anonnumberanon> z64555, although once you start getting into really hard stuff and be wrong most of the time it's a pain in the dick heh
[17:55:06] <z64555> yeah, that's when you curl up into a bottle of something nice and question your career choices. :D
[17:55:39] <z64555> such a morbid thought
[18:38:45] <[VEGETA]> I am back! I read through the lines
[18:39:21] <[VEGETA]> z64555> Now. the reason why the wheels turn at different speeds is because their radius to the center of rotation is different
[18:39:44] <[VEGETA]> this means the total distance of the outer is bigger than the inner... this will surely affect speed
[18:40:00] <[VEGETA]> despite giving them the exact same power and pwm
[18:40:06] <[VEGETA]> sounds reasonable
[18:41:37] <orlock> this is why cars have differential gears
[18:43:43] <[VEGETA]> but for robots they don't have
[18:47:28] <[VEGETA]> i think the best choice is the 4wd skid steer
[18:47:46] <[VEGETA]> simpler control and odometry calculation
[18:50:33] <[VEGETA]> because writing odometry code for ackermann still beyond me... I would need to read more
[18:50:43] <[VEGETA]> and there is no good source
[18:57:55] <[VEGETA]> i hope the problem of indoor movement is negligible
[19:11:56] <z64555> I keep telling you it's not that difficult :P
[19:12:14] <z64555> Tracking where an ackerman robot is, is not the difficult part
[19:12:37] <z64555> making it go to the exact spot you want is
[19:13:03] <z64555> and even then, it's not that difficult. just make sure it has enough space to back up and turn into it
[19:14:53] <[VEGETA]> well, i was about to say your last 2 lines. ackermann robot can not do 360 degree rotation and thus it will be hard to get into place
[19:15:39] <[VEGETA]> i found a youtube video of someone making it with ROS and it is very accurate!
[19:16:12] <[VEGETA]> look here: https://www.youtube.com/watch?v=NXyAOodmKuw
[19:16:43] <z64555> sadly I cannot watch the video at that time, I have slow internet until the 25th
[19:16:52] <z64555> er, *at this time
[19:17:44] <[VEGETA]> which country are you in?
[19:21:33] <Tom_itx> ^^ that's where PID comes into play
[19:24:55] <z64555> I'm in the US of A
[19:25:20] <z64555> specifically somewhere in Texas that doesn't have decent broadband on the landlines
[19:25:31] <z64555> gotta go through a cell phone provider
[19:26:08] <Tom_itx> sux
[19:26:42] <z64555> thanks for your sympathy, at least :P
[19:27:33] <Tom_itx> i thought Texas had bigger better everything
[19:28:12] <Wetmelon> o/
[19:28:23] <z64555> we do, just not where I'm currently at
[19:38:10] <[VEGETA]> see this for odometry of ackerman: http://digital.csic.es/bitstream/10261/133933/1/car-like-robot.pdf
[19:39:26] <Tom_itx> i know what ackerman is
[19:41:58] <z64555> ok. care to share anything we might not know about ackerman steering?
[19:43:08] <Tom_itx> it's all there in the numbers
[19:43:38] <Tom_itx> one trick is getting the front geometry right so not to wear or skid the opposing front wheel
[19:43:51] <Tom_itx> even tricker on a 6wheel with ackerman
[19:45:47] <z64555> isn't the center of rotation for a 6-wheel in between the two rear axles?
[19:46:03] <Tom_itx> same as 4
[19:46:28] <fractex> is there an advantage to doing that instead of putting the center of rotation on the center axle?
[19:46:29] <Tom_itx> http://what-when-how.com/automobile/the-ackermann-principle-as-applied-to-steering-automobile/
[19:46:59] <Tom_itx> 2 steered wheels rotate around 2 separate arcs
[19:48:49] <[VEGETA]> but how to know the center point or rotation?
[19:49:02] <[VEGETA]> see the figure here: http://digital.csic.es/bitstream/10261/133933/1/car-like-robot.pdf
[19:49:31] <[VEGETA]> it is the point "O", how to determine it?
[19:53:19] <z64555> Tom_itx: are you talking about the parallel-set?
[19:54:10] <Tom_itx> the front 2
[19:55:15] <z64555> Fig 27.24?
[19:55:59] <Tom_itx> yeah
[19:56:10] <[VEGETA]> this is a good paper: http://www.lcad.inf.ufes.br/wiki/images/b/b8/Ackerman-steering.pdf
[19:56:58] <Tom_itx> i believe point O could be derrived from the perp of the front wheel in relation to the rear axle plane
[19:57:07] <Tom_itx> and likely changes
[19:57:40] <z64555> I don't get it, Wouldn't placing the center of rotation on either of the two rear axles cause one to skid?
[19:58:19] <Tom_itx> if you had a positrack it would but that's why they use a planetary gear in the rear diff
[19:58:47] <Tom_itx> instead of a hard axle
[19:59:14] <Tom_itx> it stands to reason one rear wheel will travel further in any given arc than the other one
[19:59:14] <[VEGETA]> still, how to get calculations when one parameter doesn't exist
[19:59:44] <[VEGETA]> some using rear wheels to get the (x,y) while using IMU to get theta
[20:01:20] <z64555> not too sure why they did that, perhaps for some redundancy in the measurements
[20:02:35] <[VEGETA]> there should be a difference between the total robot pose angle theta and the steering angle of the front wheels
[20:03:32] <[VEGETA]> I don't quite get how they get the point "O", center of rotation
[20:04:06] <Tom_itx> O changes dynamically with the ammount of steer
[20:04:18] <[VEGETA]> it is the connection between center of mass line and the line of steering angle
[20:04:22] <Tom_itx> it looks like a point perp to the front wheel and parallel to the rear axle
[20:04:40] <z64555> yeah, center of mass doesn't come into play yet
[20:05:19] <[VEGETA]> center of mass is the point you want to be the ref point
[20:05:21] <Tom_itx> centerpoint of the turn radius
[20:05:22] <z64555> The center of rotation is a line intersection between the rear axle and the front wheels
[20:05:42] <[VEGETA]> tom, how to use these equations then?
[20:05:49] <z64555> in this case, no, center of mass is not the point you want to be as the reference point
[20:05:51] <[VEGETA]> start with what to get final results
[20:06:02] <Tom_itx> https://sweetmfg.biz/uploads/files/tech-04understandingsteering-4.pdf
[20:06:51] <z64555> hm, well. I take that back, If you stick your accelerometer on the CoM you can measure the lateral G's on the cargo
[20:07:07] <z64555> so you can monitor when you're likely to tip over
[20:09:15] <[VEGETA]> tom, you have the speed the distance between front and back wheels as well as the distance between rear wheels... but...
[20:09:30] <[VEGETA]> you don't know how to calculate the center of rotation
[20:09:33] <Tom_itx> i'm not Mr Ackerman :D
[20:09:57] <[VEGETA]> you know the points of front wheels but how to determine the point
[20:10:14] <z64555> calm down m8
[20:10:42] <z64555> Draw a line parallel to the back axle
[20:11:04] <z64555> then draw two lines from the front wheels, each perpendicular to their tread
[20:11:31] <[VEGETA]> in paper it is not hard, but in code...
[20:11:40] <z64555> common man it's lines
[20:11:57] <z64555> y = mx + c
[20:11:58] <[VEGETA]> :P
[20:12:26] <[VEGETA]> it is 3:45 AM... damn!
[20:12:45] <z64555> good we still got 15 minutes before things go South on us
[20:12:59] <Tom_itx> the math is all in those posts
[20:16:36] <z64555> I'd think with a 6-wheel ackerman, you'd have to have a bit of a differential steering on the 4 rear wheels to get them to not skid
[20:16:59] <[VEGETA]> well, i guess it won't need to know the O point
[20:17:30] <[VEGETA]> because "S" is the steering angle of the servo which is the same for both wheels in most cases
[20:17:34] <z64555> [VEGETA]: you do if you need to do precise turning
[20:17:53] <z64555> uh. no
[20:18:14] <z64555> in traditional ackerman, if both front wheels have the same angle, then the tracks will collide
[20:18:36] <[VEGETA]> well, the servo controlling them is the same
[20:18:43] <z64555> (well, traditional ackerman has both weels with the same angle)
[20:18:45] <[VEGETA]> how can they get different angles
[20:18:57] <z64555> by a mechanism
[20:19:12] <Tom_itx> at each wheel end
[20:19:51] <Tom_itx> study the first post i gave you on front wheel geometry
[20:21:13] <[VEGETA]> if the servo controlling them is one, how they get different steering angles?
[20:21:33] <[VEGETA]> steering angles around the vertical axes of the car i guess it is
[20:21:34] <Tom_itx> there is but one steering wheel in a car. the same way
[20:21:44] <zhanx> blah blah blah, android x86 install
[20:23:07] <[VEGETA]> Tom, steering angle is measured around what?
[20:23:22] <Tom_itx> i closed the pages already
[20:23:28] <[VEGETA]> and isn't it the same angle the servo takes
[20:23:42] <Tom_itx> no not necessarily
[20:23:45] <zhanx> steering angles
[20:23:47] <zhanx> ok
[20:23:55] <Tom_itx> zhanx explain ackerman
[20:23:57] <zhanx> you have the axle
[20:23:57] <Tom_itx> to them
[20:24:17] * z64555 has an axle in hand
[20:24:20] <zhanx> depending on left or right is a triangle
[20:24:20] <z64555> ok
[20:24:20] * Tom_itx moves [VEGETA] to the front of the class
[20:24:40] <zhanx> now. this triangle is important.
[20:25:20] <zhanx> think of it like this. the servo is steering box on a car. if your angle is too high. you can't provide enough power
[20:25:31] <z64555> http://what-when-how.com/automobile/the-ackermann-principle-as-applied-to-steering-automobile/
[20:25:45] <zhanx> i lift trucks for fun
[20:25:45] <z64555> Fig. 27.24 and 27.25 perhaps
[20:26:04] <zhanx> let me look
[20:26:31] <Tom_itx> oh that's the one i posted
[20:26:36] <z64555> yes
[20:26:37] <zhanx> that is the math
[20:26:58] <Tom_itx> get them to read it.. mkay?
[20:27:06] <zhanx> but seriously the lower the angle from the box to the wheels the better.
[20:27:23] <zhanx> if your angle is too high you eat servos due to toque
[20:27:45] <zhanx> 27.32 on that page
[20:28:10] <zhanx> what this page is missing is unstrung weight
[20:28:29] <[VEGETA]> let's assume i set the servo to 30 degree...
[20:28:39] <zhanx> meaning the weight of the vehicle on the tires. not moving
[20:28:43] <[VEGETA]> how to know the angles
[20:28:46] <zhanx> ok
[20:29:35] <zhanx> your main bar between the tires. aka the steering arm. your drag link is 30 degrees.
[20:29:59] <zhanx> so, the on a level surface drage link is 0
[20:30:10] <zhanx> the angle on the drag* link is 30
[20:30:16] <zhanx> to the to servi
[20:30:20] <zhanx> servo*
[20:30:55] <zhanx> if your servo big enough? easy measure current draw without moving
[20:31:19] <zhanx> if it maxes out and you didn't even hit a limit. your angle is too hit
[20:31:20] <[VEGETA]> w8
[20:31:45] <z64555> ah, so you're tuning the turning capability to the servo?
[20:31:47] <zhanx> I normally for vehicles as in real trucks do from 15-18 degrees
[20:32:03] <[VEGETA]> my question is if the servo has moved to 30 deg... how can you determine inner wheel angle and outer one?
[20:32:18] <zhanx> no I am checking of the servo will burnout out due to weight and torque to move the tires
[20:32:47] <[VEGETA]> the servo is just gonna steer
[20:32:51] <[VEGETA]> it won't drive
[20:32:59] <z64555> [VEGETA]'s still trying to figure out how to find the center of rotation
[20:33:08] <zhanx> camber
[20:33:29] <z64555> eh, I don't think it's camber, of the car as it is turning
[20:33:37] * z64555 looks up the word
[20:33:39] <[VEGETA]> ?
[20:33:51] <zhanx> camber is the angle of the wheel as it moves
[20:34:06] <zhanx> you also have toe
[20:34:12] <[VEGETA]> the question is about theta_i and theta_o
[20:34:22] <zhanx> angles in and out relative to the car
[20:34:40] <zhanx> I am answering the steering part and how to figure it out
[20:34:41] <[VEGETA]> relative to the vertical axes of the car
[20:34:49] <zhanx> this math is all done many times over
[20:35:20] <[VEGETA]> my argument is that theta_i and theta_o is the same since the servo controlling them is one...
[20:35:27] <[VEGETA]> maybe this is the wrong part
[20:36:05] <[VEGETA]> the papers seem to know the center of rotation point THEN determine the angles
[20:36:08] <zhanx> ok i am a diesel mechanic, i work on this stuff in real life
[20:36:20] <[VEGETA]> but since we don't know this point yet, how to ?
[20:36:27] <zhanx> test
[20:36:36] <zhanx> i use rainbow tables
[20:36:50] <zhanx> computer is faster to calculate them
[20:37:13] <[VEGETA]> based on what? this is the problem
[20:37:26] <zhanx> 0. i.e the center line
[20:37:29] <zhanx> in mm
[20:37:38] <[VEGETA]> calculate the angles first or the point of rotation first
[20:37:51] <zhanx> point of rotation
[20:38:02] <zhanx> then the angles (i think that is easier)
[20:38:13] <[VEGETA]> aha but how to calc point of rotation?
[20:38:21] <z64555> inverse kinematics is always fun. :D
[20:38:25] <[VEGETA]> since i couldn't, i thought the opposite
[20:38:28] <zhanx> you need to define your car in it
[20:39:07] <zhanx> like how is this, if you just define some defaults and test all off that
[20:39:53] <[VEGETA]> the point of rotation will change all the time depending on steering
[20:40:02] <[VEGETA]> so the software should know how to get it
[20:40:30] <zhanx> Tom_itx,
[20:40:42] <z64555> heh, that point of rotation will go out to infinity. just a heads up
[20:40:58] <zhanx> it will and the steering can only move so far fyi
[20:41:24] <zhanx> over kill is this
[20:41:26] <zhanx> one
[20:41:28] <Tom_itx> what?
[20:41:33] <z64555> lol
[20:41:50] <zhanx> test the left right limits on the servo with the steering
[20:42:06] <zhanx> ugh
[20:42:14] <z64555> I'm not aware if he has any parts for it yet
[20:42:14] <[VEGETA]> look at page 14: http://www.fieldrobotics.org/users/alonzo/pubs/reports/WMR_Kinematics.pdf
[20:42:52] <Tom_itx> get some hands on experience with it
[20:43:28] <zhanx> [VEGETA], i do this for a living on semi trucks when thy hit things as they fall asleep at the wheel. the math is easy
[20:43:50] <[VEGETA]> it says the mechanism makes the 2 front wheel steer in different angles
[20:44:01] <zhanx> inverse
[20:44:03] <[VEGETA]> but what i said that the robot won't have this mechanism
[20:44:22] <[VEGETA]> it will have a servo steering both front wheels at the same angle
[20:44:31] <z64555> lol.
[20:44:43] <zhanx> which is like a steering box on a normal car
[20:45:16] <zhanx> stop you need a test bed and that is all
[20:45:49] <z64555> yeah, he seems to be missing the concept of mechanical linkages
[20:45:54] <zhanx> yes
[20:46:01] <Tom_itx> he's got a broken link
[20:46:16] <zhanx> my last build i use 15 ton hemi joints to just get the truck home
[20:46:29] <z64555> If I knew what the exact term for it was, I could point him to the wiki
[20:46:49] <zhanx> hemi joints and tie rod ends
[20:47:01] <zhanx> ball joints for the top and bottom
[20:47:12] <zhanx> drag arm in from the steering box
[20:47:38] <zhanx> c v joints for just in case
[20:48:00] <zhanx> i can list every part of a front end if needed
[20:48:13] <zhanx> just describe it
[20:48:54] <[VEGETA]> what is that i am missing then?
[20:49:52] <z64555> https://en.wikipedia.org/wiki/Linkage_(mechanical)#/media/File:Rack-and-pinion_4_bar.gif
[20:49:53] <z64555> here
[20:50:05] <z64555> See how the angles are differend on A?
[20:50:20] <z64555> That's an example of how you can get a different angle than from your source
[20:51:02] <z64555> no, that is not the exact mechanism used on car wheels
[20:51:27] <[VEGETA]> ok nice
[20:51:31] <[VEGETA]> but look at this
[20:51:32] <[VEGETA]> http://www.aliexpress.com/item/New-4-wheel-Motor-Smart-Robot-Car-Chassis-with-steering-engine-For-Arduino-Free-Shipping/32266961086.html?spm=2114.01010208.3.1.y5ZhR1&ws_ab_test=searchweb201556_7,searchweb201602_3_10057_10056_10055_10049_10017_10059_10058_10060_10061_10062,searchweb201603_9&btsid=84b8d744-02bf-48ff-b221-d8d2b67937bc
[20:51:37] <[VEGETA]> this is what i have now
[20:52:41] <zhanx> that is basically rack and pinion
[20:53:07] <zhanx> from what i can ssee
[20:53:27] <[VEGETA]> so will it have different angles?
[20:53:31] <zhanx> no
[20:53:48] <[VEGETA]> that is what i was talking about
[20:53:54] <[VEGETA]> all the time
[20:53:58] <zhanx> due to the design it will have only left and right angles
[20:54:08] <zhanx> no camber, no toe
[20:54:24] <z64555> ew. no. that's a parallel ackerman
[20:54:34] <[VEGETA]> so the steering angle of the servo is the one to be used here
[20:54:43] <zhanx> that is the simplest steering he can have
[20:55:07] <z64555> possibly also next to worst
[20:55:08] <zhanx> servo limits and calc angles off that in a look up table
[20:55:16] <zhanx> z64555, true
[20:55:22] <orlock> Robot i'm building at the moment is 4 wheels
[20:55:35] <orlock> but 2 groups of 2 wheels, each on the same axle
[20:55:53] <orlock> so effectivly its two 8cm wide wheels
[20:55:59] <zhanx> orlock, explain for me
[20:56:08] <zhanx> i tried
[20:56:23] <z64555> Hey, I learned. :D
[20:56:25] <[VEGETA]> so you think it is a bad idea to use that chassis
[20:56:26] <z64555> Thanks
[20:57:03] <z64555> [VEGETA]: it would be good enough for you to play with. You will want to modify it if you want better steering
[20:57:40] <[VEGETA]> z64555, i want accurate odometry and pose estimation. no tolerance in this
[20:57:58] <[VEGETA]> i wanted to build 4wd skid one due to simplicity
[20:58:01] <z64555> yeah, well it's more than what you currently have, which is 0 robot
[20:58:10] <[VEGETA]> but you guys told me it will make problems
[20:58:35] <z64555> everything has its problems :D
[20:58:38] <[VEGETA]> z, if you wanna make a robot you should think about it first
[20:59:04] <z64555> I did that one time. I ended up thinking too much and not building a robot at all
[20:59:18] <[VEGETA]> no no! i won't think too much
[20:59:26] <z64555> you are already, it seems :)
[20:59:44] <[VEGETA]> but if i made that ackermann robot while don't know at all how to calc odom... then it is all useless
[21:00:07] <[VEGETA]> z64555, don't troll me man... it is 4:30 am xD
[21:00:09] <z64555> I keep telling you that you can track it easily enough
[21:00:51] <z64555> so you hook that up to a PID that can handle some slop and the refine stuff as you learn
[21:01:30] <[VEGETA]> well, these angle thing made it hard even more...
[21:01:31] <rue_shop4> oo lots of cnversation today
[21:01:32] <zhanx> z64555, might make robots
[21:01:39] <[VEGETA]> plus, where to get a good chassis and parts for it
[21:01:40] <zhanx> i might be making robots
[21:02:00] <zhanx> my 5 foot biped is waiting on motors orlock
[21:02:14] <zhanx> next month the welding will be done
[21:02:37] <z64555> [VEGETA]: for your parallel ackerman setup, just assume that the wheel is in the middle (right where the servo is) and see how well you PID can cope with it
[21:03:06] <z64555> you can then linearize the system by saying "Ok, within this range of angles, it behaves in a predicatable, and controllable manner"
[21:03:33] <z64555> and then you can start cranking out demos and impressing people with a robot that grabs a beer from the fridge
[21:03:33] <zhanx> heck you can control it with an arduino at that point
[21:04:05] <zhanx> still looking for my r/c car turned autobot. photos.
[21:04:23] <zhanx> its easy and all i did with solder and test
[21:04:36] <z64555> zhanx: didn't they have those in the '80's?
[21:04:42] <orlock> Had first birthday party for the boy on the weekend
[21:04:49] <orlock> i survived
[21:04:52] <zhanx> yep and i made a remake of them
[21:04:56] <z64555> oh, I think I saw one on the toy shelves in the Walmart not too long ago
[21:04:56] <zhanx> nice
[21:05:05] <[VEGETA]> why you think famous robots like husky and jackal doesn't use ackermann steering
[21:05:06] <zhanx> ir sensors etc
[21:05:27] <z64555> [VEGETA]: because they're way more advanced than what you can handle at the moment
[21:05:32] <zhanx> power consumption
[21:05:43] <orlock> husky? jackal? famous?
[21:05:48] <orlock> i have never heard of them?
[21:05:51] <zhanx> ackermann sucks
[21:06:10] <z64555> ok maybe not the husky
[21:06:13] <[VEGETA]> z64555, that is irrelevant. they use 4wd skid not ackermann... why?
[21:06:15] <zhanx> its power to heat/loss ratio is high
[21:06:47] <orlock> zhanx: say, caught up on mr robot?
[21:06:53] <z64555> hm, nor the jackal
[21:07:03] <zhanx> no, i need more argon to finish the welding
[21:07:09] <z64555> they use 4wd skid because it's mechanically simple
[21:07:16] <z64555> hell on terrain an tires, though
[21:07:20] <orlock> zhanx: i mean the show
[21:07:45] <zhanx> no, and dont tell me, i and planning on saterday getting caught up
[21:07:50] <orlock> ok
[21:07:51] <orlock> good
[21:08:04] <[VEGETA]> yes, 4wd is simpler
[21:08:08] <zhanx> sorry I was referenceing th never ending robot build
[21:08:16] <[VEGETA]> and these robots have accurate odometry
[21:08:39] <z64555> but they're hard on the terrain, which you mentioned you had carpet
[21:08:39] <zhanx> [VEGETA], and so does your printer
[21:09:12] <zhanx> you forgetting every tire is measured
[21:09:16] <[VEGETA]> zhanx?
[21:09:29] <zhanx> if one is slipping its tossed out
[21:09:54] <[VEGETA]> it is a very expensive robot which had lots of development
[21:09:54] <zhanx> Math is a wonderful thing.
[21:10:04] <[VEGETA]> and they picked skid
[21:10:04] <z64555> there is a rotary encoder on each of the wheels, is what he is saying
[21:10:11] <zhanx> [VEGETA],
[21:10:15] <zhanx> thanks zhanx
[21:10:17] <zhanx> oops
[21:10:20] <zhanx> z64555,
[21:10:32] <z64555> no no, thank youself :P
[21:10:38] <zhanx> :p
[21:10:51] <z64555> ok. So there's an encoder on each of the wheels
[21:10:59] <zhanx> [VEGETA], I have 138 joints on this robots
[21:11:04] <z64555> Then that's likely fed through a big ol' kalman filter
[21:11:04] <zhanx> robots
[21:11:26] <zhanx> i said that cause each limb is a robot on its own
[21:11:33] <zhanx> they all talk to a pc
[21:11:45] <zhanx> beagle bone black if it can handle it
[21:11:50] <z64555> to calculate its forward/reverse velocity as well as its rotation
[21:12:32] <zhanx> and i have lots of work to do before i even take a photo of it
[21:12:52] <[VEGETA]> you said jackal is hard on terrain
[21:13:01] <z64555> as zhanx had said, the kalman filter takes care of hte condition when one of the wheels slips
[21:13:13] <[VEGETA]> didn't they think of that? before selling it +20k $
[21:13:14] <zhanx> cause a bunch of wire and pseudo code means zero
[21:13:39] <zhanx> [VEGETA], robots suck
[21:13:42] <z64555> zhanx: yeah, I could snap a pic of my electronics pile and call it a "robot" lol
[21:14:07] <zhanx> its a case of can i program it to see everything and what did i forget
[21:14:22] <zhanx> z64555, i feel ya
[21:14:28] <theBear> heh, that shit flies ? wow, in that case i live 24/7 surrounded by robots, i often bump into 2 or 3 of em just going to the kitchen
[21:14:48] <zhanx> after i get more argon, it might look like a robot
[21:14:54] <z64555> [VEGETA]: I don't think the state of the terrain was that big of an issue when they designed it. They made it to traverse, not to preserve
[21:15:01] <zhanx> theBear, strolls down a lane at
[21:15:33] <[VEGETA]> my concern is indoor use only
[21:15:42] <zhanx> z64555, they made it and it also had at one time ir markers if i remember right for course correction
[21:16:07] <[VEGETA]> i couldn't find cheap mobile robots for research purposes
[21:16:25] <theBear> a few weeks ago my spastic foot decided i hadn't been flat on the floor for too long, and tripped me AND 2 robots over just outside the door of this room, eventually when it was all over i noticed i literally had a pile of giant lcd tvs and random crap ontop of me, flat on the floor going medium "OWWWCH <oooh, tsssssssssss aaaaaaah, ssssssssss>" and i couldn't help but giggle so much it took 10 times longer than it should to dig myself out
[21:16:26] <[VEGETA]> the jackal quote was a total joke
[21:16:35] <theBear> not a lotta people can honestly say THAT sentence
[21:16:35] <zhanx> you check hack a day? my spider bot is on there is was 1500
[21:16:42] <theBear> both my one and the jackal thing
[21:17:07] <theBear> sounds like a crappy spider bot... i never seen a real spider read hackaday, for example <grin>
[21:17:24] <[VEGETA]> thebear, you have a clearpath jackal?
[21:17:35] <theBear> maybe next time encourage it to hangout under toilet seats and in little dark corners
[21:17:39] <zhanx> theBear, and you like my spider bot till it was stolen
[21:17:48] <theBear> [VEGETA], i dunno, but i think i probly would know if i did <grin>
[21:18:05] <z64555> [VEGETA]: seriously just start with what you got, so you have something to work off of
[21:18:06] <theBear> zhanx, i certainly don't dislike it, just doesn't sound very spidery is all
[21:18:23] <z64555> You cannot divide by zero, but you can divide by 0.01
[21:18:24] <theBear> then get more stuff, and use that too
[21:18:40] <zhanx> http://hackaday.com/2010/02/11/veteran-robot-features-eight-legs-and-beagleboard/
[21:18:43] <theBear> i can divide by zero, just that my calculator doesn't answer me back
[21:18:46] <[VEGETA]> z64555, hmm i feel like making a simple 4wd is better as a start
[21:19:01] <z64555> so try it then
[21:19:39] <[VEGETA]> i wanted to but you people discouraged me hhhhhhhhhh
[21:19:50] <[VEGETA]> i will when i have some money
[21:19:56] <[VEGETA]> now i have 0$ xD
[21:19:58] <z64555> that's why we discouraged you
[21:20:04] <z64555> :)
[21:20:05] <theBear> zhanx, ROFL, it should have a amaerican-flag bandanna and a wheelchair and wear a dirty old army shirt with a bunch of little badges/pins on the collar, if it gonna be a veteran <cheeky grin>
[21:20:21] <zhanx> blah
[21:20:40] <theBear> zhanx, maybe your bot and it could swap names depol style, and they might both make more sense
[21:20:44] <[VEGETA]> cuz of my money?! xD
[21:20:53] <theBear> and blah my ass ! that was effing hilarious !
[21:21:04] <zhanx> lol theBear
[21:21:17] <theBear> [VEGETA], you know the saying, "mo' money means mo' problems" <grin>
[21:21:20] <zhanx> heck my drone never made it
[21:21:26] <zhanx> it got shot down
[21:21:52] <zhanx> never make flying robots in a combat zone fyi
[21:22:27] <z64555> excellent target practice material
[21:22:28] <rue_shop4> zhanx, ah good show!
[21:22:33] <rue_shop4> oh 6 year late
[21:22:49] <zhanx> just a bit
[21:22:58] <zhanx> rue is in the flash back machine
[21:23:00] <[VEGETA]> now this is interesting : https://www.youtube.com/watch?v=DTlRSJIrpfU
[21:23:02] <orlock> zhanx: target practice by friendlies?
[21:23:08] <rue_shop4> you have cad files I can print one with?
[21:23:12] <zhanx> yes damn marines
[21:23:23] <orlock> hah
[21:23:27] <zhanx> rue, maybe i will look
[21:23:35] <orlock> Ok, what did they use?
[21:23:40] <zhanx> .50
[21:24:10] <z64555> [VEGETA]: go to sleep already
[21:24:18] <orlock> Impressed they hit it?
[21:24:27] <[VEGETA]> z64555 i will, what about you?
[21:24:32] <z64555> I think they might've sprayed. lol
[21:24:45] <zhanx> orlock, no, it was on a test flight circle
[21:24:46] <z64555> [VEGETA]: what about me?
[21:25:06] <zhanx> like shooting a duck
[21:25:10] <[VEGETA]> will u sleep now?
[21:25:17] <z64555> I'm in central time. it's only 9pm here
[21:25:39] <z64555> (8:58pm if you want to be exact)
[21:45:25] * z64555 reads backscroll
[21:45:32] <z64555> ah, missed that bit about the IR beacons
[21:54:57] <zhanx> happens