New Focus Algorithm

Robert Lancaster rlancaste at gmail.com
Sat May 7 18:59:04 BST 2022


Hi again John,

I have some nice tricks that might help you with #5. If you have been accidentally working in the master branch of the original repo, you can in the terminal go to the Kstars source folder and type

git diff > mychanges.patch

Then copy that file somewhere else on your computer.  Now I assume you have made a fork in gitlab by now?  If you have that downloaded, you can go into that source folder and type

git apply mychanges.patch (or whatever the path to this file happens to be)

I would recommend moving your changes into a new branch so you can keep the master branch of your repo pristine and matching master (something I haven’t perfectly followed in the past, but I have been admonished multiple times for this and finally it caused me bad enough issues with my fork that I am finally listening to this advice!)

git checkout -b newFocuserBranch (or something like that)

Then you can commit your changes to the new branch.  The neat thing is that once you push your changes in your new branch to your fork on Gitlab, when you go online to your forks page on Gitlab, it automatically asks you if you want to make an MR with it.  It is really cool.  The way I used to do it, in the master branch of my repo, it didn’t do this automatically, plus I had to then rebase my fork after it got merged.  And then if my merge request was not accepted for some reason, it caused me big problems.

My hope is that I can update the KStars on OS X Craft repo to have some tools in the future to make this easier to work with.  I have some of that in the KStars INDI Mac Dev Repo, but I would like to add this to the KStars on OS X Craft Repo, along with the default to be to assume that all changes will go into a branch, not master.

Does this help?

Rob

> On May 7, 2022, at 1:37 PM, Hy Murveit <murveit at gmail.com> wrote:
> 
> Thanks John,
> 
> I just commented on the MR, and we should probably mainly communicate there from now on. Just to answer a few of your points above:
> 
> #1: Thanks! Tests are good!
> 
> #2: I appreciate that you don't want to break Linear, and I'm thankful for your caution. However, as I said in the MR comment, why not try and use the FocusAlgorithmInterface from focusalgorithms.h? You can still put your Linear1Pass implementation (inheriting from that interface) in a separate file.
> 
> #3: We usually put constants that are not user-changeable in the .cpp file near the top, or in the .h file. I totally agree that too many parameters for users to adjust can be counter-productive, but I also guarantee that as soon as you release this, some user will request the ability to change some of your parameters ;) I think in the end you release and see, and perhaps allow user modification later.
> 
> #4: Up to you if you want to include this in your algorithm. As you say, it might make sense to get the basic thing in good shape first.
> 
> #5: you need to become familiar with git rebase. Please take a good look at https://invent.kde.org/education/kstars/-/blob/master/README.md <https://invent.kde.org/education/kstars/-/blob/master/README.md> and find the section called 'rebasing your changes'. Honestly there are much better sources on the web for learning git, but this is a start. You should probably brush up on git from one of the web tutorials, but feel free to ask questions here. I'm far from an expert myself, but have learned enough to get by.
> 
> #6: to fix compiling: grep through the CMakeLists.txt files in KStars, and anywhere you see, e.g. focusalgorithms.cpp, add your new cpp files in the same way. I think that would be just in KStars/CMakeLists.txt.
> 
> Hy
> 
> 
> On Sat, May 7, 2022 at 7:05 PM John Evans <john.e.evans.email at gmail.com <mailto:john.e.evans.email at gmail.com>> wrote:
> Thanks all,
> 
> I've created a MR, so you should be able to see the code. I had a bit of a struggle with Git (first time using it) but hopefully OK now. 
> 
> Couple of points:
> 1. I'll update kstars/Tests/focus/testfocus.cpp as Hy suggests to include some L1P tests.
> 2. kstars/ekos/focus/focusalgorithms.cpp/h has not been changed. I cloned this to focusalgorithmslinear1pass.cpp/h in order to minimise the chances of breaking the linear algorithm.
> 3. Currently there are 3 parameters for the solver algorithm that control the number of iterations and the precision required for a "solve". I've picked values that work on my equipment and the simulator but may not be appropriate for all equipment. These parameters are hard-coded into curvefit.h but would probably be better in a config file so could be changed without a rebuild. I don't think exposing these to end users would be a great idea. What would be the best way to do this? (put them in kstarsrc?)
> 4. Hy, I have currently bypassed the HFR adjustment algorithm for most of L1P. This may not be best but for now it avoids a lot of work that's hard to verify to get a star subset to do further processing on. It will be unchanged for the other focus algos (Linear, etc) though. Whether its worth doing more work on this is probably dependent on how much benefit people are getting out of it, so I'd appreciate any thoughts on this?
> 5. I started working on the code before forking Git (school boy error I know) so I'll need to make sure I don't blat anybody else's changes. Can Git help me here? (I've manually diff'd the 6 changed files and think 5 are OK - all the changes look to be mine) but manager.cpp has been changed. What's the best way to sync this up?
> 6. The build process will need to change to include the new files: curvefit.cpp/h focusalgorithmslinear1pass.cpp/h. So locally I've changed CMakeLists.txt but I haven't included anything with the MR as I don't know what to do?
> 
> Regards,
> John.
> 
> On Sat, 7 May 2022 at 09:38, Hy Murveit <murveit at gmail.com <mailto:murveit at gmail.com>> wrote:
> John,
> 
> Thanks very much for doing this. Here are a few quick notes:
> Please check out kstars/Tests/focus/testfocus.cpp. You'll find some unit tests for the Linear algorithm there, and you can model unit tests for your new scheme after that. You can also use that test to help check that you haven't changed the standard Linear.
> Please include the new scheme in kstars/ekos/focus/focusalgorithms.cpp/h which is where most of Linear is implemented. (Haven't had a chance to look, I assume you're already doing that, but just in case.)
> I'd be happy to help code review, as will some of the others, I'm sure. 
> Feel free to continue asking questions on this email list, and later on the merge review (MR) page once you've started that. Any question is welcome. There are some instructions on the kstars README page about git and MRs if you want to refer to that.
> Looking forward to it,
> Hy
> 
> On Sat, May 7, 2022 at 10:24 AM Jasem Mutlaq <mutlaqja at ikarustech.com <mailto:mutlaqja at ikarustech.com>> wrote:
> Hello John,
> 
> I've been following your progress on INDI forum and this is indeed looking very good. I believe after this is merged in KStars, we need to create a table for the different algorithms used to explain use cases, pros/cons for each, which type of equipment they are mostly suited for..etc.. This should help clear up any confusion for end users.
> 
> We can only comment on the code after you submit an MR to KStars, and then we'll start the review process. This is very exciting and I'm looking forward to it.
> 
> --
> Best Regards,
> Jasem Mutlaq
> 
> 
> 
> On Sat, May 7, 2022 at 11:06 AM John Evans <john.e.evans.email at gmail.com <mailto:john.e.evans.email at gmail.com>> wrote:
> Hello Everyone,
> 
> Hope you're all well? I have been working on a change to improve focus on my rig. Iterative and Polynomial don't work so well for me on the ASI EAF, due, I think to backlash. The Linear algorithm works best but the second pass usually overshoots the ideal focus position.
> 
> So I built a "Linear 1 Pass" algo, that is based on Linear for the 1st pass, but instead of doing a second pass it moves straight to the minimum of the first pass.
> 
> I've implemented a couple of curve types (Hyperbola and Parabola) using a generic GSL curve fitting algorithm which could be extended in the future if necessary. The fitting can be done either giving each point equal weighting or weighting them based on the HFR standard deviation of the stars.
> 
> See the enclosed document for more details.
> 
> I have written most of the code and it basically works on my rig and the simulator. I have a couple of things still to work out though, and more testing to do.
> 
> Since this is the first Kstars change I have done (using QT on Mac) I have been following Ron Lancaster's work on getting Kstars running on Mac. In terms of coding standards I've just followed what's been done in the areas I've changed. If there are any resources that someone could point me to, that would be great.
> 
> If anyone has any feedback on the change that would also be great (I'll also post on the forum to see if there are any suggestions).
> 
> I estimate I'll be finished with coding and testing in a couple of weeks. I would like feedback on deployment as I'm not familiar with the process at all. So if anyone can point me to any resources that would be very helpful.
> 
> At the moment I'm thinking:
> 1. Release 1 - deploy Linear 1 Pass code but concentrate on minimising risk to breaking existing code, esp the Linear algorithm. I have cloned some Linear code for this.
> 2. Release 2. When Release 1 is working as expected, interface Linear 1 Pass code with Linear in a more integrated way, removing cloned code. If any features of Linear 1 Pass would be useful for other focus algos, this could be done here.
> 
> The reason I'm thinking of doing this in 2 steps is that I'm a novice with C++ and this seems the best way to minimize the risks of breaking existing code. However, I'm happy to take advice from more experienced people here.
> 
> If anyone would like to offer to help me, do a code review, etc., that would be really appreciated. As I mentioned I'm a novice with C++ so probably not doing things in the best way, but happy to be guided. Also, any suggestions on:
> 1. Test cases to write for this change.
> 2. Best way to profile the code, test for memory leaks, etc.
> 3. Since this would run on a range of different machines, how to configure for different setups, things to watch out for, etc.
> 
> Thanks for reading!
> 
> Regards,
> John.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/kstars-devel/attachments/20220507/d035d3e8/attachment-0001.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 1618 bytes
Desc: not available
URL: <http://mail.kde.org/pipermail/kstars-devel/attachments/20220507/d035d3e8/attachment-0001.bin>


More information about the Kstars-devel mailing list