Comments (34)
Hi @vitoruapt ,
I agree that using the old odometer could be a problem. However, we should find a better solution tryin to get better info from the can, because these makes the calibration not viable. Also, for testing we must do the calibration at very slow speeds, possibly pushing the car in the DEM workshop. My experience is that we do these tests hundreds of times before everything works properly. Having to do these tests with the car moving outside the workshop while driving makes it very difficult to develop and validate the solution.
In summary, we can implement this odometry, but with this level of quality I think we cannot do the calibration of the atlascar sensors w.r.t. the vehicle.
@manuelgitgomes , this is important for you.
from atlascar2.
Hi @miguelriemoliveira
Right now the code already publishes ackermann_msgs of the speed and steering angle from the CAN-USB, I just need to test it (and the gps) to compare values.
from atlascar2.
You are very lucky :).
What is the frequency of msgs?
What are the units? Meters, radians?
from atlascar2.
@miguelriemoliveira
So I know that the steering angle is in degrees , I already move the steering wheel and I got a value of -44° which looks correct seeing the way that it's rotated! Speed I can't tell , in Diogo Figueiredo thesis he doesn't say and because the car is stopped I only receive zero ... talking about frequency I did rostopic hz /atlascar2/ackermann_msgs
and I'm getting the following values:
average rate: 1604.685
min: 0.000s max: 0.006s std dev: 0.00068s window: 1596
average rate: 1602.650
min: 0.000s max: 0.006s std dev: 0.00067s window: 3199
average rate: 1601.443
min: 0.000s max: 0.008s std dev: 0.00069s window: 4802
average rate: 1597.969
min: 0.000s max: 0.012s std dev: 0.00070s window: 6394
average rate: 1598.910
min: 0.000s max: 0.012s std dev: 0.00070s window: 8000
average rate: 1598.580
min: 0.000s max: 0.012s std dev: 0.00070s window: 9605
average rate: 1599.324
min: 0.000s max: 0.012s std dev: 0.00070s window: 11217
average rate: 1599.275
min: 0.000s max: 0.013s std dev: 0.00071s window: 12824
average rate: 1599.525
min: 0.000s max: 0.013s std dev: 0.00071s window: 14432
average rate: 1599.496
min: 0.000s max: 0.013s std dev: 0.00071s window: 16041
^@^Caverage rate: 1599.885
min: 0.000s max: 0.013s std dev: 0.00071s window: 16699
without using rate.sleep(), so we can have a 1600Hz!
from atlascar2.
I asked Engineer Rui to drive when I was acquiring data to here in the workshop, the value didn't change so I think it is in km since we only can drive very slow in here... and the code is equal to Diogo Figueirdos' code:
if (frame.can_id == 0x412)
{
//printf("velocidade: %d ",frame.data[1]);
status.nominalvalues.velocity = frame.data[1];
status.rawdata.vel_frame = frame;
}
and mine:
if msg.arbitration_id == 0x412:
speed = msg.data[1]
ackMsg.drive.speed = speed
So I think that the velocity may be in km/h but I'm not sure
from atlascar2.
I talked with Miguel pinto and he said that Diogo had a wrong ID, can be from the speed , I will try to talk to him so I can change the code if necessary
from atlascar2.
Kms will not be helpfull for us because they have very low resolution to compute odometry. Try to see if we get in meters or if we can get the displacement from the vehicle's odometer.
from atlascar2.
The frequency is more than enough. It may even be hampering the ROS communications, might as well as set a maximum of 100 Hz.
from atlascar2.
Okay, about the frequency it's done! About the km I will check what can be done!
from atlascar2.
Miguel created this table where we can see what we receive in the CAN messages. (In the thesis of Luís Cristovão it says that the velocity is in km/h)
I did this piece of code:
if msg is not None:
if msg.arbitration_id == 0x412:
# speed is in km/h
speed_km = msg.data[1]
dt = (current_time - last_time).to_sec()
# change to m/s
speed = (speed_km*1000)/dt
ackMsg.drive.speed = speed
last_time = current_time
I don't know if it will work but I will ask engineer Rui to help me tomorrow moving the vehicle..
Changing to meters I asked Miguel and he said that in his research he didn't find anything about that...
from atlascar2.
In here https://github.com/plaes/i-miev-obd2 it says odometer display but it is also in km...
But I think I can find a way! We also receive the rpm of the motor, with the formula:
We can find the velocity in m/s.
This must be more reliable right?
from atlascar2.
Hi @Sarxell ,
One thing I could not understand: the value is is kms, but is it an integer value or a float? I mean, if we go from kilometer
1.102 to 1.103 then its ok to compute the odometry.
About the equation: I think you need some constant to multiply because the rotations in the motor are not the same as in the wheels. The good thing is that you don't have clutch or gears so the constant will always be the same, right?
from atlascar2.
Hi @miguelriemoliveira , unfortunately the value of the kms is an integer .. yes I think I need the gear ratio that can be found in the specs of the car.
from atlascar2.
Ok, so if you use the rpms that should also be an integer, probably in rpms*1000.
Do some calculations to assess, based on all this how much resolution of movement we would have. 10cm? 1meter?
You know how to compute this?
from atlascar2.
So, in terms of code I already did it, the procedure is equal to the steering angle, we get the byte from the right transmission ID:
I'm already having trouble here because although the car is stopped, the rpm gives a value of 8984 , which doesn't make sense (the byte gives me a value of 39), so or the value of the ID is wrong or the used byte
Where bit can go from 0-255 (max values, I don't know the range which is used), doing the example of 10 and 11 bits it gives us:
rpm_10: 1560
rpm_11: 1816
Doing the velocities for both of these values:
v_10: 46.5584
v_11: 54.1988
We loose a lot between bits, 7.64 meters ...
from atlascar2.
hum, if this is true the can messages are useless for computing the odometry. Perhaps prof @vitoruapt may help here, since he has more experience with CAN. Can you talk to him?
from atlascar2.
Yes, I'm going to send him an email to see if he knows a better way or something that I am missing about the CAN messages
from atlascar2.
Hi @miguelriemoliveira ,
I talked with @vitoruapt , more bad news ... So the only way is really using the speed of km/h ...but at the worst chance is that the car uses a tacometer in which he only sends values to the CAN after 5,10 km/h
Today I'm going with the car to the parking lot to see this values
from atlascar2.
Bad news indeed ... @vitoruapt is it an option to install the odometer we had in the old atlascar?
from atlascar2.
Installing the odometer would not be very practical, nor necessary, I suppose. And finding volunteers to do it could be a challenge :-).
And I do not think that this is really bad news. In short: we have two main issues:
1-Minimum velocity measurable (is it 1 km/h, or more, like 10 km/h?)
2-Limited velocity resolution (1km/h ~ 28 cm/s)
Issue 1, if verified, does not allow odometry at very low speeds. So, we have no tracking when starting motion, mainly!
Issue 2 is not a severe problem. Having speed information at more than 1kHz allows us to integrate measurements along time and several approaches can be used, like moving averages.
Integrating variables is always a risk due to cumulative errors, but having the information at a so high rate allows averaging sets of successive measurements and reduce some errors. This might even be an interesting technical topic do discuss and analyze in the thesis ;-)
So, all summed, there is indeed a limitation for velocities below the minimum measurable (which is yet to be measured in this car) but that does not compromise the validity of the solution, and neither its results for this car when driving above the minimum velocity.
There is another concern which is the calibration of the velocity with the real distances traveled. I recommend to do some tests outdoors in a well marked floor (e.g. parking area at Crasto site) and figure out how well the system is performing and extract some calibration factors, at least for straight motion. The steering angle may be another source or error, but that can be left for a later concern ;-)
from atlascar2.
Theoretically, with the data available in the CAN bus, having the velocity information at 100 Hz allows you to "measure" a displacement as small as 0.28/100=0.0028 m, that is, less than 3 mm!
Of course, we should be moving at a minimum speed, which we do not know yet what is it, but I Diogo's thesis he did some tests at 6 km/h so I suppose that we can measure velocities this low...
from atlascar2.
I went with the car to the crasto's parking lot and I got values in the order of 2km/h , it's the minimum !
from atlascar2.
OK, not bad! Did you register all intermediate velocities (3,4,5,6, ... etc.) or some values are missing from the records?
from atlascar2.
With 100Hz I lost values when I got to 20km/h..
On another note @miguelriemoliveira , has I said yesterday, I went to test the new formula using the motor rpms
I checked the car specifications and I saw that he only has a diff gear ratio of 7.065 and the wheel radius is 0.285... So using the formula:
speed = (motor_rpm*math.pi*0.285)/(30*7.065)
I could find the speed (where the rpm are motor_rpm = (msg.data[6]*256 + msg.data[7]) - 10000
, having 2 bytes for more precision)
I went with @manuelgitgomes to test this new code and compare both velocities and got the following results:
(The values from the speed and the rpm are clear since the speed only changes 30cm between each value)
I think this way is much more precise, the only downside (that also happens with the speed) is when we are braking the rpms take their time to stop (values of 0.15km/h-0.045m/s)... This can be improved using a value to decrease this value when the CAN message sends the byte that we are braking... but we need to check in tests if this is really a problem or not since these values are very small
from atlascar2.
Hi @Sarxell ,
thank for the experiment. Can you make a graph with the values (with matlab for example) instead of the raw values and post it here? It would be much better to see.
Yesterday we talked to @vitoruapt and he said the gear ratio changes, so we thought of also exploring the possibility of using the odometer that we have on the old atlascar1 and install it on the atlascar2.
@manuelgitgomes was going with Eng. Rui Heitor to the old car today ...
from atlascar2.
I went with @Sarxell!
IMG_20220422_110758.jpg
We were having difficulties on extracting the odometer, so we took the rim to compare and the screws were not the same, so a new copulling is needed.
from atlascar2.
http://myimiev.com/forum/viewtopic.php?t=232 in this forum it says the gear ratio is fixed in this car... I will do the graph with the values for the professor to see how it went
from atlascar2.
http://myimiev.com/forum/viewtopic.php?t=232 in this forum it says the gear ratio is fixed in this car... I will do the graph with the values for the professor to see how it went
@vitoruapt can you take a look?
from atlascar2.
Here it is @miguelriemoliveira ! The graph using the different values from the motor rpm and the vehicle speed
from atlascar2.
http://myimiev.com/forum/viewtopic.php?t=232 in this forum it says the gear ratio is fixed in this car... I will do the graph with the values for the professor to see how it went
@vitoruapt can you take a look?
The car has different driving modes (https://designobserver.com/feature/mitsubishi-i-miev-electric-car/15058) that is why I assumed different gear ratios for each of them, but that can possibly be managed at software level and not at hardware as manual gear cars! So, if there is a direct connection from the motor rotation to the car wheels, excellent, that can solve the limitation of the speed read from the CAN ;-)
from atlascar2.
So we confirm that the speed is not usable, right? About the rpms we have some noise in the signal.
@Sarxell I did not understand very well. Do we have rpms all the time? Even when stopped?
But when you say
This can be improved using a value to decrease this value when the CAN message sends the byte that we are braking.
I see this difficult to do ... by how much would you decrease the value? Does not appear to be a way to get precise values ...
About the odometer, lets move the discussion to #36
from atlascar2.
@miguelriemoliveira when we stop the rpms gives us one or two values in the values of 0.045 and then it gives us zero since the motor needs time to stop, but yes we have rpm values all the time ( just sometimes they are zero)
I think I could only check if the values are precise if I test it with the odometry, this values where taken inside DEM so there wasn't much space to see the braking problem...because my biggest issue is "and if we are going "fast" and we brake suddenly?" I think that can be a problem but I can't test it with this weather
from atlascar2.
OK. We only need high precision for calibration, which is limited to very low speeds.
from atlascar2.
Done
from atlascar2.
Related Issues (20)
- Test of the point grey flea 2 camera HOT 13
- test of the LIDAR Sick LD MRS HOT 2
- novatel hardware HOT 9
- Find/Create odom messages for atlascar2 ackermann simulation HOT 7
- ATLAS PC boots very slow HOT 6
- Changing ackermann_steering_controller HOT 2
- Calibrating AtlasCar2 with VLP HOT 9
- Add sick lms151 to the atlascar2 simulation HOT 4
- Create a sick lrms gazebo sensor HOT 6
- Consistency between simulation and live mode HOT 1
- Install odometer from Atlascar1 in Atlascar2 HOT 23
- Odometry drift in ackermann controller HOT 7
- Separate how to run from instalation HOT 1
- Odometry implementation using an incremental encoder HOT 28
- Odometry calibration in AtlasCar2 HOT 35
- Arduino pulse count giving only positive values HOT 5
- Publish can messages to ROS and process their data HOT 4
- Labeling in the data collector HOT 1
- Interactive pattern wrong reference frame HOT 6
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from atlascar2.