First, welcome to the Orekit forum
estimator.addMeasurement(...) is the good way.
You probably have an error when initializing the
PV measurement. I see two possible errors. First, I don’t see the
ObservableSatellite in the error message. You maybe forget it. Secondly, I think you use arrays instead of
Vector3D to provide the position and velocity data to the
For the first problem, the
ObservableSatellite object is used to represent the satellite for which the orbit is estimated and from which the measurement comes from. If you have only one satellite, you will only have one instance of
ObservableSatellite. You can initialize it only once like that:
observableSatellite = ObservableSatellite(0)
Now, I show you an example on how initializing a
PV object based on your data.
date = AbsoluteDate(2022, 4, 16, 11, 52, 00.000, TimeScalesFactory.getUTC())
position = Vector3D(-2768386.5930000003, 5275182.704, 3672200.745)
velocity = Vector3D(-759.6318531000001, 4028.2763631999997, -6338.7818408)
pv = PV(date, position, velocity, 1.0, 0.01, 1.0, observableSatellite)
A last remark, I saw you used a sigma of 1.0 meter for position data and 1.0 meter per second for velocity data. I recommend you to reduce the sigma for velocity data compared to the one for position data. Having 2-3 orders of magnitude less for velocity is more realistic. Therefore a value of 1 cm per second (i.e., 0.01) is more relevant.
If you want an example of a full Python-based orbit determination using Orekit, you can have a look on Clément Jonglez’s tutorial on his GitHub repository. He uses PV data stored in a CSV file to perform the orbit determination.