On 4/2/21 7:17 AM, Ofer Saferman wrote: > Marcus Hi, > > Your suggestion below to install ntpd does not work. > The image does not include it. Although the old thread says otherwise I > think it refers to an older UHD release that did include ntpd. > Any accurate instructions on how to install it anyway? > Maybe opkg should be configured to access another repository? > Doing: opkg list | grep ntpd, does not yield anything useful so it is not > just a question of typing it correctly.
As far as I know, no image has been setup to use package feeds. I know ntpd worked in release4 images, pretty sure the newer image was redone and things have been left out that used to be there. Philip > > Regards, > Ofer Saferman > > On Thu, Apr 1, 2021 at 4:34 PM Marcus D. Leech <patchvonbr...@gmail.com> > wrote: > >> On 04/01/2021 06:00 AM, Ofer Saferman wrote: >> >> Hello Marcus, >> >> I am working on E310 with the latest UHD-3.15 SD card image. >> It seems not to include ntpd that is required to synchronize system time >> to GPS time. >> Any idea how to install it on the E310? >> >> Regards, >> Ofer Saferman >> >> sudo opkg install ntpd >> >> should work, but it has been a while since I installed any packages on my >> E310. >> >> The E310 is based on OpenEmbedded Linux, so all the info about installing >> and managing packages on OpenEmbedded apply. >> >> >> >> On Wed, Mar 31, 2021 at 11:40 PM Marcus D Leech <patchvonbr...@gmail.com> >> wrote: >> >>> Just use gettimeofday() or any of the myriad subtle variants available in >>> boost to get you the Linux system time, and use that in a call to >>> set_time_next_pps(). >>> >>> The fact that all your E310s will be running GPSD means they’ll be >>> adjusting system time appropriately and they’ll all agree on what time it >>> is, depending on the level of precision you need. >>> >>> Sent from my iPhone >>> >>> On Mar 31, 2021, at 3:50 PM, Ofer Saferman <o...@navigicom.com> wrote: >>> >>> >>> Thank you Rob. Your suggestions are always helpful. I will look into >>> using gps_gpgga. >>> Thank you Marcus. I am already adding one, per other examples posted here >>> and sync_to_gps example. Can you please comment how I can benefit from the >>> fact that E310 units use gpsd in Linux? >>> >>> Regards, >>> Ofer Saferman >>> >>> On Wed, Mar 31, 2021 at 10:13 PM Marcus D Leech <patchvonbr...@gmail.com> >>> wrote: >>> >>>> >>>> >>>> Sent from my iPhone >>>> >>>> On Mar 31, 2021, at 2:22 PM, Rob Kossler <rkoss...@nd.edu> wrote: >>>> >>>> >>>> Hi Ofer, >>>> Take a look at the Ettus source code gps_ctrl.cpp. In particular, look >>>> at the get_sentence() usage which in the case of "gps_time" waits for the >>>> next occurrence (wait=true), but for the others does not wait. But this >>>> doesn't fully explain the behavior you are seeing. If you do the >>>> following: >>>> 1) wait for PPS time to change >>>> 2) read the "gps_time" sensor >>>> 3) set_time_next_pps (use the value you just read) >>>> >>>> Add 1 to the time you just read before calling set_time_next_pps. >>>> >>>> >>>> It should still work because the "gps_time" command should just wait >>>> until the next PPS. I guess it depends upon how "synchronized" are the >>>> received NMEA string with the PPS edge. Step 1 above waits for the PPS >>>> edge, but maybe the NMEA string arrives 0.1 secs before or after that. I >>>> don't really know. Perhaps you need to switch to using "gps_gpgga" such >>>> that there is no additional wait added and also perhaps you should add step >>>> 1B which would be just a fixed delay of perhaps 0.4 secs so that you will >>>> read the NMEA string in between the PPS edges. >>>> Rob >>>> >>>> On Wed, Mar 31, 2021 at 1:22 PM Rob Kossler <rkoss...@nd.edu> wrote: >>>> >>>>> Hi Ofer, >>>>> I don't know why the "gps_time" sensor takes long to read. But, can you >>>>> try the other sensors (perhaps there is a "gps_gpgga" sensor?)? The time >>>>> is embedded in these as well. >>>>> Rob >>>>> >>>>> >>>>> On Wed, Mar 31, 2021 at 12:21 PM Ofer Saferman <o...@navigicom.com> >>>>> wrote: >>>>> >>>>>> Marcus Hi, >>>>>> >>>>>> If the gps_time "sensor" returns a value only once per second how come >>>>>> I manage to read it sometimes in less than 1 second? >>>>>> In my code the situation is worse than the simple example below. It >>>>>> usually takes more than 1 sec. to read it and sometimes even 1.7 or 1.8 >>>>>> seconds. I don't understand how the size or complexity of the code >>>>>> affects >>>>>> the time it takes to read gps_time. >>>>>> >>>>>> How to treat your comment about the use of GPSD and good >>>>>> synchronization as it relates to code? >>>>>> Should I not change the time source in code and go through the whole >>>>>> process of synchronization using gps_time? >>>>>> Can I "assume" the systems are synced just by the effect they were >>>>>> connected enough time to a GPS antenna? and then just access their time - >>>>>> radio_ctrl->get_time_last_pps()? >>>>>> How to use this information programmatically? >>>>>> >>>>>> Regards, >>>>>> Ofer Saferman >>>>>> >>>>>> >>>>>> ---------- Forwarded message ---------- >>>>>>> From: "Marcus D. Leech" <patchvonbr...@gmail.com> >>>>>>> To: usrp-users@lists.ettus.com >>>>>>> Cc: >>>>>>> Bcc: >>>>>>> Date: Wed, 31 Mar 2021 09:19:20 -0400 >>>>>>> Subject: [USRP-users] Re: Intermittent problem with GPS >>>>>>> synchronization for multiple E310 units >>>>>>> On 03/31/2021 06:49 AM, Ofer Saferman wrote: >>>>>>>> Hello, >>>>>>>> >>>>>>>> I have a system that uses 4 USRP E310 units. >>>>>>>> Each unit is connected to a GPS antenna. >>>>>>>> Time source is set to gpsdo. >>>>>>>> >>>>>>>> I run the same software remotely on all 4 units from a PC. Software >>>>>>>> runs on the units themselves. >>>>>>>> I print out messages to show if the reference is locked and the GPS >>>>>>> is >>>>>>>> locked and also what is the GPS time that each unit was >>>>>>> synchronized to. >>>>>>>> In some cases the units synchronize to the same GPS time and in >>>>>>> other >>>>>>>> cases there is 1 second difference between GPS time of different >>>>>>> units >>>>>>>> thus causing the units to be unsynchronized. >>>>>>>> >>>>>>>> I was wondering how this was possible. >>>>>>>> The synchronization process (documented by others in the past on >>>>>>> the >>>>>>>> mailing list) is: >>>>>>>> * Wait for ref and GPS lock >>>>>>>> * Wait for a pps edge (get_time_last_pps) >>>>>>>> * Read gps_time value >>>>>>>> * Sync system clock to GPS clock on next PPS edge >>>>>>> (set_time_next_pps + >>>>>>>> 1.0 sec) >>>>>>>> >>>>>>>> Something similar is also implemented in the sync_to_gps example. >>>>>>>> >>>>>>>> In order to debug the problem I decided to time the reading of the >>>>>>>> gps_time sensor to see if there is a clue why different units miss >>>>>>> the >>>>>>>> PPS edge and lock to a time of the next second. >>>>>>>> >>>>>>>> I was very surprised to find out that it takes between 0.9 to 1.2 >>>>>>>> seconds to read the gps_time sensor. >>>>>>>> This explains exactly why it is difficult to synchronize multiple >>>>>>>> units to the same time instance because if one unit takes 0.9 >>>>>>> seconds >>>>>>>> to read the sensor and the other unit takes 1.2 seconds to read the >>>>>>>> sensor then each unit will lock on a different GPS time 1 second >>>>>>> apart. >>>>>>>> >>>>>>>> Here is a short software I wrote to time the gps_time sensor >>>>>>> reading: >>>>>>>> --------------------------------------------------------- >>>>>>>> #include <uhd/utils/safe_main.hpp> >>>>>>>> #include <uhd/device3.hpp> >>>>>>>> //#include <uhd/usrp/multi_usrp.hpp> >>>>>>>> #include <uhd/types/sensors.hpp> >>>>>>>> #include <boost/program_options.hpp> >>>>>>>> #include <boost/format.hpp> >>>>>>>> #include <chrono> >>>>>>>> #include <iostream> >>>>>>>> >>>>>>>> namespace po = boost::program_options; >>>>>>>> >>>>>>>> int UHD_SAFE_MAIN(int argc, char *argv[]){ >>>>>>>> >>>>>>>> std::string args; >>>>>>>> >>>>>>>> po::options_description desc("Allowed options"); >>>>>>>> desc.add_options() >>>>>>>> ("help", "help message") >>>>>>>> ("args", po::value<std::string>(&args)->default_value(""), "device >>>>>>>> address args") >>>>>>>> ; >>>>>>>> >>>>>>>> po::variables_map vm; >>>>>>>> po::store(po::parse_command_line(argc, argv, desc), vm); >>>>>>>> po::notify(vm); >>>>>>>> >>>>>>>> //print the help message >>>>>>>> if (vm.count("help")){ >>>>>>>> std::cout << boost::format("Timinig of gps_time: %s") % >>>>>>> desc >>>>>>>> << std::endl; >>>>>>>> return ~0; >>>>>>>> } >>>>>>>> >>>>>>>> uhd::device3::sptr usrp = uhd::device3::make(args); >>>>>>>> //uhd::usrp::multi_usrp::sptr usrp = >>>>>>> uhd::usrp::multi_usrp::make(args); >>>>>>>> >>>>>>>> uhd::sensor_value_t gps_time = >>>>>>>> >>>>>>> usrp->get_tree()->access<uhd::sensor_value_t>("/mboards/0/sensors/gps_time").get(); >>>>>>>> //uhd::sensor_value_t gps_time = >>>>>>> usrp->get_mboard_sensor("gps_time", 0); >>>>>>>> >>>>>>>> std::chrono::steady_clock::time_point start_time, end_time; >>>>>>>> std::chrono::duration<double> time_diff; // Default unit for >>>>>>> duration >>>>>>>> is seconds. >>>>>>>> >>>>>>>> for(int ii=0 ; ii<20 ; ii++) >>>>>>>> { >>>>>>>> start_time = std::chrono::steady_clock::now(); >>>>>>>> gps_time = >>>>>>>> >>>>>>> usrp->get_tree()->access<uhd::sensor_value_t>("/mboards/0/sensors/gps_time").get(); >>>>>>>> //gps_time = usrp->get_mboard_sensor("gps_time", 0); >>>>>>>> end_time = std::chrono::steady_clock::now(); >>>>>>>> time_diff = end_time - start_time; >>>>>>>> >>>>>>>> std::cout << "gps_time[" << (boost::format("%02d") % ii) << "]: " >>>>>>> << >>>>>>>> int64_t(gps_time.to_int()) << ". Time to read \"gps_time\": " << >>>>>>>> (boost::format("%0.9f") % time_diff.count()) << " seconds" << >>>>>>> std::endl; >>>>>>>> } >>>>>>>> >>>>>>>> return 0; >>>>>>>> } >>>>>>>> >>>>>>> -------------------------------------------------------------------------------- >>>>>>>> Here are the results of one typical run: >>>>>>>> gps_time[00]: 1617183840. Time to read "gps_time": 0.884164380 >>>>>>> seconds >>>>>>>> gps_time[01]: 1617183841. Time to read "gps_time": 0.877966469 >>>>>>> seconds >>>>>>>> gps_time[02]: 1617183842. Time to read "gps_time": 1.170869661 >>>>>>> seconds >>>>>>>> gps_time[03]: 1617183843. Time to read "gps_time": 0.882917987 >>>>>>> seconds >>>>>>>> gps_time[04]: 1617183844. Time to read "gps_time": 1.172120154 >>>>>>> seconds >>>>>>>> gps_time[05]: 1617183845. Time to read "gps_time": 0.879271985 >>>>>>> seconds >>>>>>>> gps_time[06]: 1617183846. Time to read "gps_time": 0.878609099 >>>>>>> seconds >>>>>>>> gps_time[07]: 1617183847. Time to read "gps_time": 1.115639282 >>>>>>> seconds >>>>>>>> gps_time[08]: 1617183848. Time to read "gps_time": 1.125365551 >>>>>>> seconds >>>>>>>> gps_time[09]: 1617183849. Time to read "gps_time": 0.843803231 >>>>>>> seconds >>>>>>>> gps_time[10]: 1617183850. Time to read "gps_time": 1.125065740 >>>>>>> seconds >>>>>>>> gps_time[11]: 1617183851. Time to read "gps_time": 0.847519817 >>>>>>> seconds >>>>>>>> gps_time[12]: 1617183852. Time to read "gps_time": 1.121398945 >>>>>>> seconds >>>>>>>> gps_time[13]: 1617183853. Time to read "gps_time": 0.844371533 >>>>>>> seconds >>>>>>>> gps_time[14]: 1617183854. Time to read "gps_time": 1.124722726 >>>>>>> seconds >>>>>>>> gps_time[15]: 1617183855. Time to read "gps_time": 0.845688380 >>>>>>> seconds >>>>>>>> gps_time[16]: 1617183856. Time to read "gps_time": 1.129568096 >>>>>>> seconds >>>>>>>> gps_time[17]: 1617183857. Time to read "gps_time": 0.882436229 >>>>>>> seconds >>>>>>>> gps_time[18]: 1617183858. Time to read "gps_time": 1.168227593 >>>>>>> seconds >>>>>>>> gps_time[19]: 1617183859. Time to read "gps_time": 0.881948247 >>>>>>> seconds >>>>>>>> >>>>>>> ----------------------------------------------------------------------------------- >>>>>>>> In the code you can find commented out the usual way to access the >>>>>>>> sensor using multi_usrp and get_mboard_sensor. The results are >>>>>>> quite >>>>>>>> similar. >>>>>>>> >>>>>>>> I wonder if anybody encountered this issue before or addressed it >>>>>>> in >>>>>>>> any way. >>>>>>>> I wonder why it takes so much time to get the value of GPS time >>>>>>> when >>>>>>>> it is a simple parsing of an NMEA message coming from the GPS >>>>>>> receiver. >>>>>>>> >>>>>>>> I am trying now various tricks to make the software robust and >>>>>>> immune >>>>>>>> to this phenomenon. I can report my findings further if I succeed >>>>>>> to >>>>>>>> find a workaround if there is any interest. >>>>>>>> >>>>>>>> Can anyone comment on this? Can this be resolved so that the >>>>>>> reading >>>>>>>> of gps_time will be much faster? >>>>>>>> Is there another way to get GPS time faster indirectly? Maybe from >>>>>>>> parsing NMEA messages ourselves? >>>>>>>> >>>>>>>> Regards, >>>>>>>> Ofer Saferman >>>>>>>> >>>>>>> This probably has to do with the way that particular "sensor" >>>>>>> works--the >>>>>>> NMEA time value is only emitted once per second, and the >>>>>>> code for that sensor has some heuristic for determining >>>>>>> "freshness" >>>>>>> of the value. >>>>>>> >>>>>>> I'll point out that on E310, the system is configured to use GPSD, so >>>>>>> that the Linux system time across several systems that have all been >>>>>>> "listening" to GPS for a while will all be synchronized quite well. >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>> -- >>>>>> This message has been scanned for viruses and >>>>>> dangerous content by *MailScanner* <http://www.mailscanner.info/>, >>>>>> and is >>>>>> believed to be clean. _______________________________________________ >>>>>> USRP-users mailing list -- usrp-users@lists.ettus.com >>>>>> To unsubscribe send an email to usrp-users-le...@lists.ettus.com >>>>>> >>>>> _______________________________________________ >>>> USRP-users mailing list -- usrp-users@lists.ettus.com >>>> To unsubscribe send an email to usrp-users-le...@lists.ettus.com >>>> >>>> >>> -- >>> This message has been scanned for viruses and >>> dangerous content by *MailScanner* <http://www.mailscanner.info/>, and >>> is >>> believed to be clean. >>> >>> >> -- >> This message has been scanned for viruses and >> dangerous content by *MailScanner* <http://www.mailscanner.info/>, and is >> believed to be clean. >> >> >> > > > _______________________________________________ > USRP-users mailing list -- usrp-users@lists.ettus.com > To unsubscribe send an email to usrp-users-le...@lists.ettus.com > _______________________________________________ USRP-users mailing list -- usrp-users@lists.ettus.com To unsubscribe send an email to usrp-users-le...@lists.ettus.com