-
-
Notifications
You must be signed in to change notification settings - Fork 77
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Improve powercurve for Flow/Magic with T1901 brake and T1904/T1932 head unit (antifier) #143
Comments
Well giuseppe. The calculations are described in the manual and -if accessible for you- openly available in the python code; suggestions are always welcome. |
I try to explain better my think 1a) if there is a slow speed in climbing an uphill there should be an higher speed in downhill. I noticed that in a downhill of 12%, fortiusant shows max 20km/h while ROUVY was 63km/h. It's also true that in an uppung hill same grade of 10 % speed of ROUVY was half of Fortiusant 1b) in the same downhill if I pedal or not I got 40w , in real world no pedalling no watts or changing the gear I got more watts.
A part of all, as you know, I do appreciate all your work that you are doing for free, I print "IFlow FortiusAnt by Wouter JD" on Strava account to thank you |
Hi @BikeBeppe64
Zwift commands to ride uphill with -12% The two formula's are not necessarily the same. At the other hand, this seems related to #102 |
I'm digging into this "Power curve" subject and get the following impression: headunit/brake combinations T1932/T1941 and T1902/T1901 work, but the others don't. Please respond to this post: what bundle did you buy, and what brake and what head unit do you use?
|
My bundle T2250 Tacx I-Flow - T1901- T1932 |
I might have some pointers to help out. I have a Flow (1901 Brake) and 1932 combination. Could not get FortiusAnt to work. Calibration attempts with error messages, However, i have downloaded and adapted both antifier(power_curve) and FortiusAnt, now they both do work. I have been calibrating the Flow + software with a powermeter on the bike. I probably have missed the way it was intended to work, but I basically don't see see how the current implementation in usbTrainer would work correctly with my combination in grade mode. Yesterday I finished an 1 hour time trial in Rouvy AR and everything worked well. Have also used the adapted antifier with Rouvy Workouts and Zwift. Anyway, thx for FortiusAnt, Wouter, I like it. |
Welcome @cyclingflow to the FortiusANT community I'm always curious to know who I communicate with, where FortiusANT is used and what configuration is used. I am very interested in your clsTacx1901UsbTrainer because that seems to solve a set of issues. Great to hear that you understand the subject, we can make numerous Flow'ers happy, I think! |
Based upon who reported power issues and the responses to the question what head unit/brake is used, I can share the following information and this matches with the reaction of @cyclingflow.
|
I have forked FortiusAnt and Antifier. (Antifier will be needed primarily because of the power_curve script. You could include it in FortiusAnt, but is currently certainly not up to your standards. And needs conversion to python3) I will be uploading modified files. I think some clarifications of the changes I made my help you in understanding, and may be bold enough to suggest a few minor 'refactor' suggestions. |
@cyclingflow I could download from your forked/branched implementation - this no issue. But it would be very helpful, if you would want to execute a test as done by @yegorvin, see manual "2.6.3 Test for i-Magic (T1902)". In your case, you have a working model, so no need to tweak. Purpose is to redefine TargetPower2Resistance(self), converting TargetPower to TargetResistance (using WheelSpeed). If you don't mind, please merge logfile.py (so you can create the json-file) and add Then perform a test in manual mode (-m flag): (16 minutes test time after good warming up)
and [if there is energy left - we could start with the results of the first test] in manual grade mode (-M flag):
the JSON file should provide the resulting data. Using the JSON file contents, I will see whether I can execute the mathematics like done for @yegorvin. |
@cyclingflow would you mind doing the test as described? Would help us forward in understanding how i-Magic should be addressed |
Well, i have been doing lots of calibration tests to provide curve_factor_power factors. Have just been doing such a grid test, results not yet satisfactory. But let me explain where i stand. Your requested test will not fully show the crucial results. The plot below does. |
DIFFERENCES IN IMPLEMENTATION What are the difficulties in the current coding for using 1 Flow type 1901 brake?
So, I took the easy way, and started with antifier's approach, with an estimation per level, a clear grade mode vs power mode, It worked, although not completely (next section). In the end, things might be simplified even more. |
THE ANTIFIER APPROACH Antifier's approach can be easily understood if you take a look at a plot of speed vs reference power (power meter), based upon a run of a adapted power_curve.py script. I have done many the last days, because it introduced a new problem: inconsistent results over reruns. You can clearly see it is highly linear -as aspected-, but does not go through (0,0) as a single multiplier approach assumes. Using this approach, with a linear equation (including intercept or constant b in most tutorials) for each level, and a calibration run of power_curve.py, you get reasonable results, for higher wattages!. My initial run had an average power of 203 as estimated by the new FortiusAnt usbTacx1901Trainer, and an average reference power of 196W. Which is fine, especially given the fact that i use a one crank power meter on a leg with busted knee: a clear tendency to underperform the other leg. However, consideration of the reason for the unexpected huge intercepts for high resistance levels, made me think of two problems in this approach. |
ANTIFIER APPROACH PROBLEMS First, my suspected reason of the plot as shown above. For lack of data (inobtainable) at low speeds, you cant really see it, but i expect that the plot should curve back to (0,0) at low speeds. What i think the brake does, is slowly increase the brake to the required resistance level at a certain speed, say 10 kph, and being fairly linear afterwards. Makes sense to me given the electro-magnetic nature, but a specialist may comment/explain otherwise. (For example, if possible, it would probably require high currents at low speeds to induce the required resistance.) Problem1 Problem2 Now, as an estimation problem all equations could be solved in the least squares framework, using an combined approach to all 14 estimation problems with inequality constraints on the parameters. For me fun to do, and not too difficult, but I suspect it to be overkill. If i can find an empirically satisfying relationship between the slopes, possibly related to resistance values, everything can be simplified again. Moreover, if that is the case, re-calibration for other users could be made much easier. Relevant, because of differences in drive train losses, and tire resistance. For now, I have manually regularized the parameters to satisfy the constraints (increasing slopes, increasing intercepts). |
THE GOOD NEWS The bad news is that my current power_curve_factors file is not good enough: This also shows that this brake has a very limited bandwith. The missing test values are the result of not low enough or not high enough resistance values. They simply can't be done. You cant even do 50W on 10 kph, hence 7.5 kph. I guess this a complicated way of saying why tacx developed the fortius and other variants. This brake's concept has limits in simulating reality, but in my opinion does not limit very much it's usefulness for many virtual training sessions, unless you are true powerhouse exceeding the maximum power limits. M2CW |
UPLOAD. Ok, done. My executable was to big. In stead, you can obtain everything by going to the prelease click on assets, and download zip "FortiusAnt3.6Test0.1.zip". Notes:
I will be updating the factor file. (Wouter, sorry need some help: solve the binary problem, your wishes for versioning etc. Also a pointer for creating the log file, if you want one. I currently used my bike computer's fit files to analyze the true power) |
There is a bug in power calculation, i will bring out a new release. I have now more knowledge of my calibration/reference power issues. I realized that i do not need power_curve.py, but are far better off with using my bike computer and the resulting fit file, to analyze speed vs power, provided i set the wheel circumference exactly right. Results are much better, but also indicate i have a problem with my stages crank power meter: power readings are not consistent over cadence differences. A couple of months ago i noticed a large difference in the calibration factor of the device, having been consistent in the months before, and being consistently differently after. |
@cyclingflow great work you perform; thank you very much. Last year, around this time, I started with the antifier software and was impressed by the tables and approach. BUT it works! The Fortius and the Flow both work based upon formula's and hence I believe that also the 1932/1901 combi must be possible to be programmed analogously What I have done now, to understand the subject better, I have ported the formula's to excel to visualize the calculations. Conclusion of the exercise: the FortiusANT/USB formula provides results in the same range as antifier formula's; but not close enough to be satisfying. Summary:
|
I will explain a bit about my motivation in pursuing accuracy. It became clear to me that there were some systematic differences. Generally i have best results if manually put the brake on the 7th resistance level. The differences are fairly consistent, as long as you keep checking your tire presure, and use the calibration procedures. a couple of months ago, the power meter changed, and differences between flow and power meter are a bit larger. Still, the power meter accurately measures force, at least within 3% accuracy, as i have tested using weights. Measurement Errors of the setup
Given these observation my personal preference is to not introduce additional approximation errors, keeping 1 a small as they are now, while working at an approach that tries to deal with 2 by using a calibration procedure. Note that the 1901 brake does not have a calibration test as a motor brake does. |
@WouterJD Comments on current implementation and manual. I have to admit i'm a bit pissed off right now. After all the work i have done, you seem to ignore the advice and info of an expert on these matters. It's notthat you did not do a great job on the program, the formula's the communication protocols. You did do a great job! It's just that you have showed a little less knowledge in this particular area. |
My comments
|
|
My final comment. Flow's estimates as standard. A more regularized approach might be justified by fears of overfitting in the 14 equation approach. As @WouterJD has said, people have appreciated the tacx trainers, and although some critique exist on the accuracy of the power readings, they have been widely perceived as useful tools (based upon comments here, multiple reviews.) Therefore, we may simplify the extraction of formula's for the purpose of FortiusAntifer, by not looking at external bike power reference values, but also looking at the provided power readings of a device like the T1682 or T2202.
I was planning to provide you with these 5 factors optimize to work out in your formula's. I simply assume our paths will diverge. |
Thanks. Let's work together to get a solid magnetic brake implementation. My position at this moment is that I prefer formula-based over the table-driven approach [I really prefer to avoid estimation-loops (0...13) as much as possible]. Unless proven that no solid formula can be created. Thanks for all time co-invested. |
Contains the table-based and formula-based algorithm and I believe the results are very close. |
What I would like to have is the result of the test as described in the manual: 2.6.5 Test for i-Flow (T1901-T1932). This would provide a solid foundation for further development. |
Daarmee bedoelde ik overigens "doe ff relaxed aub". |
Hi Wouter & Cyclingflow,
Mark. |
My speed vs Power Runs I have done evrything in Matlab sofar, did not get around to compiling a table in xlsx. Have done so now. /~https://github.com/cyclingflow/FortiusANT/blob/3.6.b.0.3/pythoncode/CyclingFlow.SpeedvsPower.xlsx Notes:
5 The green rows are the ones i use, based upon the feeling whether i had done the calibration and tire pressure, knob resistance, right. Right now these tables are a little bit lower than my current readings because i have increased tire resistance to prevent slipping. |
Thanks, this looks really good! More or less exactly what I had hoped for 👍 It would of course still be helpful to gather data from other people's trainer/different settings/two-sided power meters to see how it generalizes and what accuracy to expect. But this should be more than good enough to test my ideas for now. |
Yes. We are using the same line of thinking. But let's see if you come to different conclusions. |
Didn't see there was active comms on this issue as well... |
Here is some data. Tyre pressure 100psi (23mm continental gator skin). |
I'm sure you have better tools but I have used vim and excel to look at my data. |
The second set of files have useful data in the last third of the time period - decreasing from 3700 to 2600. Actual power 500w down to 280w. |
I was having trouble correlating the timestamps of th two data sets, so I checked. My Garmin time is running 44s behind my PC time. Maybe because it has been on INDOOR mode and not updating from GPS? |
I combine the two datasets into one and adjust the time and used 40 seconds; Now adjusted to 44 :-) I react under issue #153 since discussion has moved there |
Closed on behalf of #153 |
#143 powercurve i magic Fortius Antifier v4.0 Released 11-12-2020
Hi @BikeBeppe64 I have created this issue on your request, so it's not forgotten:
Ciao Wouter tutto bene? Scusa il disturbo...
Just my 2 cents for FortiusAnt
I think that Python could do better algorithm... ;-) and I don't know how to help you.
The text was updated successfully, but these errors were encountered: