muffinspawn / fms Goto Github PK
View Code? Open in Web Editor NEWMy personal FMS task management and field-testing repository.
My personal FMS task management and field-testing repository.
When the LT becomes uninitialized, put the component into an "uninitialized" state to force the user to reinitialize.
Need to
Figure out how the geodicists handle custom coordinate systems after they have located the tracker in the Fermilab coordinate system. Then implement this functionality in the client.
Instructs the Motion component to go home, and then calibrates to this positition using stand reflector measurements.
The tracker should have a mode where it scans the search area for a target.
Detect when the laser tracker needs to be reinitialized and do the following:
Important items are how to locate, how the coordinate transforms are calculated, why only three coordinates are required, and communications sequence and event flow.
In order for the client to work in DS coordinates, the client must be able to translate to/from actual coordinates. Since the LT device we have does not support determination of the orientation parameters, we can either
Since it's a simple matter of inverting the transform matrix, I will implement option 1.
The LT API Initialize function should allow for setting the weatherMonitorStatus to ReadOnly. Also, functionality should be added to the API to
Furthermore, the LT component should be updated to have a property that indicates which algorithm to use to calculate the refraction index. If it is "Leica:, then weatherMonitorStatus will be set to ReadAndCalculateRefractions, otherwise it will be set to ReadOnly and the component will monitor the environment parameters and set the refraction index properly before each measurement.
Refer to issues #17 for details on manually calculating the refraction index.
Include raw, local, atmospheric readings, and refractive index.
At the moment the Position Client has a basic input for the absolute move distance and rotation angle. It would be better to fetch the HomeDistance and HomeAngle properties from Position after the home operation and have the input distance and angle to be relative to those values.
While I'm at it, a display of the current distance and angle (relative to the home values) would be nice as well.
When one of the synchronous AT4xx COM calls returns an error, it usually just contains a status code. Descriptions of these codes are listed in the TPI manual. Add functionality to the API to parse error messages and substitute the status code description for the raw code.
Implement the Emma event sequence that measures all of the propeller reflector positions.
Create a client that can be used to operate the laser tracker by interfacing with the laser tracker EMMA component.
When listening for SystemStatusChange callbacks, the status ES_SSC_MeasStatus_NotReady will be sent if the tracker loses a lock. When it re-gains a lock it will send ES_SSC_MeasStatus_Ready. Set the status between "running" and "ready" on respective notifications.
Things left to do:
In order to calculate the transformation between LT coordinate system (LTCS) and the local coordinate system (DSCS), approximate LTCS coordinates must be put in the appropriate section of the Property component INI file so that the Position component can search for the targets and measure them. This requires that someone shoot the targets of the reference network every time the LT device is moved.
To make this easier, we should make a simple LabVIEW VI that records the LTCS coordinates each time a target is locked-in. An INI file can then be generated, and the list can be edited either before (via table manipulation) or after (via direct file editing) creation. This file can then be used as needed to populate the Property component INI.
See comments in issue #20.
Specifiy a set of target with their approximate locations. Automatically measure them.
Instead of a home.nack when a find.nack is received, an error.dat is sent.
Add support for loading and saving the calibration target information from/to a configuration file.
Instead of using a CSV file to read reference target coordinates in the local coordinate system (DSCS), use use the Properties component to set LT Client component properties for these values. The standard cluster update scheme will have to be replaced by a dynamic generation of properties held in some sort of map structure.
The tracker is capable of two-face measurements for increased accuracy. These should be used when measuring the network, and so the option should be enabled when the target name begins with "ref#".
Make sure the LT component mini-doc is up-to-date. Make sure to add information on the intricacies of the EMMA calls such as data variants and constraints.
Take all the LT class functions that call the AT4xx COM API and make them into an independent API. The API functions should not be dependent on EMMA or anything else particular to the LT component.
Send position data to data.system via a position.dat event. This command has data consisting of a step ID in the form run#.sequence#.step#. This will be broadcast, needs to be consumed by Position, and attached to the above sent data.
To get the Position component working we need a Motion component that responds to commands. At this point it doesn't matter if the component doesn't actually drive anything.
Implement the Emma event sequence that measures all of the stand reflector positions
Although using the DLL provided with the AT4xx API does not seem to work with Python (IDispatch error), it should be possible to use SWIG to wrap the C++ classes provided, and then manage the network connection natively in Python.
Need a basic client to test out the component.
Create a test app for the LT API that doesn't use EMMA.
Position Client is complaining about variant-to-data conversion in MOVE_NACK after a failed LT find.cmd.
The optional starting of the EMMA dispatcher, mock laser tracker, and laser tracker component clutters the laser tracker client block diagram. Instead of trying to modularizing the application and risking over complicating it, simply create a companion application that starts and stops all of the dependencies for testing purposes.
Both the com component and client should log their activities for auditing purposes.
Based on this paper:
https://ojs.cvut.cz/ojs/index.php/gi/article/view/gi.14.2.2,
the refractive index of the tracker should be calculated manually and updated in a special way to keep it current.
From issue #46:
I have finished the implementation, but I am nervous. If the LT goes uninitialized in the middle of a step (move, find, measure, find, measure.... sequence), the component will have to be re-initialized manually/by the script because it cannot distinguish between find.ack from the re-init or one from a pending step find.
My inclination is to modify the behavior to
save the inputs to the step,
flush the inbound queue,
abort Motion,
abort Laser Tracker
re-init,
flush the inbound queue again, and
redo the step from the start using the saved inputs.
There's a pathological case whereby an exit or abort could be issued during re-init, so it should respond appropriately to these events.Also, abort will have to be implemented in Motion and Laser Tracker if the default functionality is insufficient.
Add a property that turns on/off the automatic broadcasting of running/ready states.
At least initially we do not want any motion compensation, so we need to be able to turn it on/off (new property).
Additionally, we may want to manually apply a pre-compensation. Thus we need a way to configure motion compensation and modify the requested coordinates accordingly.
Finally, in order to study whether compensation is necessary and what values may be needed, the errors should be exposed in the client.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.