Code Monkey home page Code Monkey logo

satrot's Introduction

SatRot - Taking Everyone to Space 📡 🌍 🌙 🔭 👾 🌠 🚀

Build Status Version GitHub issues GitHub closed issues GitHub closed pull requests GitHub forks GitHub stars GitHub license GitHub code size in bytes GitHub repo size Twitter Follow

SatRot Logo

Table of Contents 📒

Motivation 💪 🔥

There has being alot of interest buzzing around ever since the space race started in 1955. Equipments and materials to communicate with satellites especially low earth orbit (LEO) satellites have being expensive and inaccessible. These satellites (both natural and artificial) move really fast across the sky. Hand tracking becomes tedious and tiring. Solar panels also need to follow the sun across the sky for 90° incident rays so as to increase it's efficiency.

This is where satRot comes in. SatRot takes everyone interested into the domain of the amateur satellite observation or communication community.

What is SatRot? ✨

SatRot is a very cheap, modular and smart satellite rotator. It has the ability to automatically and manually control a load device such as an antenna for satellite communications, solar panel to track sun, telescope to observe patch of the night sky and others. The construction materials are so cheap and easy to build that high school students can DIY build the system.

The GUI has 2 main modes. A manual mode that a user can use to manually track a celestrial body using a mouse on the system. this provides a solid flexiblity for serach and observation of the sky. The second mode is the automatic mode. This mode allows the user to set a satellite to track whenever the satellite comes into view. This can be used to automatically transmit or receive information from satellite when it rises and before setting. This uses a kernal interrupt so as not to monopolize CPU resources. Ability to search and predict which and when satellites are coming over your location anywhere on earth.

How SatRot works 🔧

Applications/Usefulness

  • Can be used to track fast moving satellites. Especially those in LEO with short fly by times.
  • Solar panel can be mounted to track the sun and increase its efficiency
  • Can be used as a teaching aid for young students about satellite technologies
  • Telescope can be mounted on it and used to track a celestrial body in the sky
  • Tracking the ISS and the activities on-board becomes possible
  • When Starlink becomes fully operational, SatRot could be used to gain internet access anywhere in the world.

Who is SatRot for? 😍

SatRot is for anyone interested in the realm of satellite technology, telecommunications, amateur radio, application of raspberry pi. In short, anyone is free to join, use and participate in the SatRot project.

Requirements 👀

Mechanical 🔩

The mechanical requirements are not much. Most of the parts will be printed using a 3D printer and few fastening bolts, nuts and screws. (N.B: due to the covid-19 issue the world is facing, we cannot access the workshops to complete the mechanical parts). Bellow are the few items required at the moment.

  • Access to 3D printing
  • M2.5 bolts and nuts
  • Brass or plastic spaces
  • Tripod stand

see wiki for full mechanical requirements.

Electrical and Electronics 📟

We wanted to make satrot modular, portable and completely standalone. This required some components that need to provide adequate power and control. Below are some requirements.

  • A4988 stepper driver chips
  • MPU-9250
  • Nema17 2A stepper motors
  • 12V batteries

see wiki for full EE reequirements. A soldering skill and basic circuit knowledge is also required.

Software 💻

The main coding language is C/C++ and as such, a basic understanding of C/C++ is required. The software engineering heavily relies on a GUI development. Qt development package is the ideal package for a project like this.

Dependencies and Packages

# C++14

- sudo apt-get install -qq g++-6
- sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-6 90
- sudo apt-get --yes install qt5-default qt514-meta-full qt514tools qt514webengine qt514base qt514imageformats qt514svg libqt5webkit5-dev qt514charts-no-lgpl qt514xmlpatterns
- sudo apt-get install zlib1g-dev g++ cmake doxygen graphviz libboost-all-dev libssl-dev
# only on the raspberry pi
- sudo apt-get install wiringpi 

Proceed to the software development section on wiki for more info.

Device and Operating System

The device used for the project is a raspberry pi 3 B with the raspbian (GNU/Linux) operating system installed on it.

Telecom 📡

This section requires majorly:

  • Custom antenna
  • RTL-SDR
  • RG58 50ohm cable
  • SMA connectors

more on wiki

How to ...

Build and install

git clone https://github.com/Ahmad138/SatRot.git

# To install main-GUI on ubuntu
cd satrot/Software/SatRot-GUI
mkdir build && cd build
qmake ..
make

sudo make install
cd GUI-Main
./GUI-Main

# To install RotorDriver-GUI on raspberrypi 3
cd satrot/Software/RotorDriver-GUI
mkdir build && cd build
qmake ..
make

sudo make install
cd RotorDriver
./RotorDriver

# To run tests, cd into each module test you want to perform and run it. for example:
cd build/apiTest
make check

NB: If you are facing issues building using 'make', look at this issue and see if it applies to you. if not, open a new issue and ask for help.

Use

Maintain

Project maintenance will be performed by the creators and contributors. Anyone is free to join us in maintaining and growing this project.

Screenshots

Examples and Videos

For videos and demonstrations, visit our YouTube channel

Documentation

A detailed documentation is outlined in the wiki section of the repository. Files, documents, construction materials, instructions, costs and others are all listed and defined over in the wiki section.

For the newbee nerds out there, checkout our Doxygen docummentation for the software.

Issue Tracking

If there is any issue or suggestions (including spelling/grammatical errors) to the development of the project, feel free to open an 'issue' on the issue tab and properly define the issue. The problem will be rectified as soon as possible by the community.

Social Media @sat_rot

Like, Follow, Share to stay updated and help us grow the community.

Authors

Ahmad Muhammad 🙈 🤓 🤖 Github | 🐦 Twitter | 🤡 Facebook

Mohamed Salih 🙉 😎 🤖 Github

Mohamed Salim 🙈 😊 🤖 Github

See who did what here

Support Us

You can support us by sending us a thank you note or bringing someone into the vast world of satellite technology. Your support gives us boost to continue maintaining this project. Also give us a shout out whenever possible.

License

The MIT License

Copyright (c) 2020 - SatRot

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

satrot's People

Contributors

ahmad138 avatar sonofsalah-2425778 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

satrot's Issues

Stepper keeps rotating continuously

During the testing of stepper class, the stepper needs to move to angle 180 CW at a slow speed and move back CCW to angle 90 at a faster rate. Unfortunately, due to logical error, the motor rotates continously.

Issue compiling on Ubuntu

Describe the bug
after cloning, i tried compiling using qmake but it kept failing.

To Reproduce
Steps to reproduce the behavior:

  1. clone the repo and cd into the Software/SatRot-GUI
  2. mkdir build && cd build
  3. qmake ..
  4. make

Expected behavior


/home/ahmad/anaconda3/include/qt/QtWidgets/qstyleoption.h:654:5: note: because ‘QStyleOptionSizeGrip’ has user-provided ‘QStyleOptionSizeGrip::QStyleOptionSizeGrip(const QStyleOptionSizeGrip&)’
  654 |     QStyleOptionSizeGrip(const QStyleOptionSizeGrip &other) : QStyleOptionComplex(Version, Type) { *this = other; }
      |     ^~~~~~~~~~~~~~~~~~~~
/home/ahmad/anaconda3/include/qt/QtWidgets/qstyleoption.h: In member function ‘QStyleOptionSizeGrip& QStyleOptionSizeGrip::operator=(const QStyleOptionSizeGrip&)’:
/home/ahmad/anaconda3/include/qt/QtWidgets/qstyleoption.h:645:24: warning: implicitly-declared ‘QStyleOptionComplex& QStyleOptionComplex::operator=(const QStyleOptionComplex&)’ is deprecated [-Wdeprecated-copy]
  645 | class Q_WIDGETS_EXPORT QStyleOptionSizeGrip : public QStyleOptionComplex
      |                        ^~~~~~~~~~~~~~~~~~~~
/home/ahmad/anaconda3/include/qt/QtWidgets/qstyleoption.h:510:5: note: because ‘QStyleOptionComplex’ has user-provided ‘QStyleOptionComplex::QStyleOptionComplex(const QStyleOptionComplex&)’
  510 |     QStyleOptionComplex(const QStyleOptionComplex &other) : QStyleOption(Version, Type) { *this = other; }
      |     ^~~~~~~~~~~~~~~~~~~
/home/ahmad/anaconda3/include/qt/QtWidgets/qstyleoption.h: In copy constructor ‘QStyleOptionSizeGrip::QStyleOptionSizeGrip(const QStyleOptionSizeGrip&)’:
/home/ahmad/anaconda3/include/qt/QtWidgets/qstyleoption.h:654:108: note: synthesized method ‘QStyleOptionSizeGrip& QStyleOptionSizeGrip::operator=(const QStyleOptionSizeGrip&)’ first required here
  654 | eOptionSizeGrip &other) : QStyleOptionComplex(Version, Type) { *this = other; }
      |                                                                        ^~~~~

/home/ahmad/anaconda3/include/qt/QtWidgets/qstyleoption.h: In copy constructor ‘QStyleOptionGraphicsItem::QStyleOptionGraphicsItem(const QStyleOptionGraphicsItem&)’:
/home/ahmad/anaconda3/include/qt/QtWidgets/qstyleoption.h:670:109: warning: implicitly-declared ‘QStyleOptionGraphicsItem& QStyleOptionGraphicsItem::operator=(const QStyleOptionGraphicsItem&)’ is deprecated [-Wdeprecated-copy]
  670 | tyleOptionGraphicsItem &other) : QStyleOption(Version, Type) { *this = other; }
      |                                                                        ^~~~~

/home/ahmad/anaconda3/include/qt/QtWidgets/qstyleoption.h:670:5: note: because ‘QStyleOptionGraphicsItem’ has user-provided ‘QStyleOptionGraphicsItem::QStyleOptionGraphicsItem(const QStyleOptionGraphicsItem&)’
  670 |     QStyleOptionGraphicsItem(const QStyleOptionGraphicsItem &other) : QStyleOption(Version, Type) { *this = other; }
      |     ^~~~~~~~~~~~~~~~~~~~~~~~
../src/mainwindow.cpp: In lambda function:
../src/mainwindow.cpp:157:39: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘const char [5]’)
  157 |         QString r = o.value("company")["name"].toString();
      |                                       ^
../src/mainwindow.cpp: In lambda function:
../src/mainwindow.cpp:164:39: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘const char [5]’)
  164 |         QString r = o.value("company")["name"].toString();
      |                                       ^
../src/mainwindow.cpp: In lambda function:
../src/mainwindow.cpp:413:52: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘const char [6]’)
  413 |         QString a = QString::number(o.value("info")["satid"].toInt());
      |                                                    ^
../src/mainwindow.cpp:414:36: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘const char [8]’)
  414 |         QString b = o.value("info")["satname"].toString();
      |                                    ^
../src/mainwindow.cpp:416:57: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘int’)
  416 |         QString c = QString::number(o.value("positions")[0]["satlatitude"].toDouble());
      |                                                         ^
../src/mainwindow.cpp:417:57: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘int’)
  417 |         QString d = QString::number(o.value("positions")[0]["satlongitude"].toDouble());
      |                                                         ^
../src/mainwindow.cpp:418:57: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘int’)
  418 |         QString e = QString::number(o.value("positions")[0]["sataltitude"].toDouble());
      |                                                         ^
../src/mainwindow.cpp:419:57: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘int’)
  419 |         QString f = QString::number(o.value("positions")[0]["azimuth"].toDouble());
      |                                                         ^
../src/mainwindow.cpp:420:57: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘int’)
  420 |         QString g = QString::number(o.value("positions")[0]["elevation"].toDouble());
      |                                                         ^
../src/mainwindow.cpp:421:57: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘int’)
  421 |         QString h = QString::number(o.value("positions")[0]["ra"].toDouble());
      |                                                         ^
../src/mainwindow.cpp:422:57: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘int’)
  422 |         QString i = QString::number(o.value("positions")[0]["dec"].toDouble());
      |                                                         ^
../src/mainwindow.cpp:423:57: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘int’)
  423 |         QString j = QString::number(o.value("positions")[0]["timestamp"].toInt());
      |                                                         ^
../src/mainwindow.cpp: In lambda function:
../src/mainwindow.cpp:478:56: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘const char [6]’)
  478 |             QString a = QString::number(o.value("info")["satid"].toInt());
      |                                                        ^
../src/mainwindow.cpp:479:40: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘const char [8]’)
  479 |             QString b = o.value("info")["satname"].toString();
      |                                        ^
../src/mainwindow.cpp:480:56: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘const char [12]’)
  480 |             QString c = QString::number(o.value("info")["passescount"].toInt());
      |                                                        ^
../src/mainwindow.cpp:485:55: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘int’)
  485 |                 myDateTime.setTime_t(o.value("passes")[x]["startUTC"].toInt());
      |                                                       ^
../src/mainwindow.cpp:487:62: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘int’)
  487 |                 QString e = QString::number(o.value("passes")[x]["startAz"].toDouble()) + "°";
      |                                                              ^
../src/mainwindow.cpp:488:62: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘int’)
  488 |                 QString f = QString::number(o.value("passes")[x]["startEl"].toDouble()) + "°";
      |                                                              ^
../src/mainwindow.cpp:489:55: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘int’)
  489 |                 myDateTime.setTime_t(o.value("passes")[x]["maxUTC"].toInt());
      |                                                       ^
../src/mainwindow.cpp:491:62: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘int’)
  491 |                 QString h = QString::number(o.value("passes")[x]["maxAz"].toDouble()) + "°";
      |                                                              ^
../src/mainwindow.cpp:492:62: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘int’)
  492 |                 QString i = QString::number(o.value("passes")[x]["maxEl"].toDouble()) + "°";
      |                                                              ^
../src/mainwindow.cpp:493:55: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘int’)
  493 |                 myDateTime.setTime_t(o.value("passes")[x]["endUTC"].toInt());
      |                                                       ^
../src/mainwindow.cpp:495:62: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘int’)
  495 |                 QString k = QString::number(o.value("passes")[x]["endAz"].toDouble()) + "°";
      |                                                              ^
../src/mainwindow.cpp:496:62: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘int’)
  496 |                 QString l = QString::number(o.value("passes")[x]["endEl"].toDouble()) + "°";
      |                                                              ^
../src/mainwindow.cpp:497:46: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘int’)
  497 |                 QString m = o.value("passes")[x]["startAzCompass"].toString();
      |                                              ^
../src/mainwindow.cpp:498:46: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘int’)
  498 |                 QString n = o.value("passes")[x]["maxAzCompass"].toString();
      |                                              ^
../src/mainwindow.cpp:499:46: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘int’)
  499 |                 QString p = o.value("passes")[x]["endAzCompass"].toString();
      |                                              ^
../src/mainwindow.cpp:501:38: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘int’)
  501 |                 if (o.value("passes")[x]["mag"].toDouble() == 100000)
      |                                      ^
../src/mainwindow.cpp:507:60: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘int’)
  507 |                     mag = QString::number(o.value("passes")[x]["mag"].toDouble());
      |                                                            ^
../src/mainwindow.cpp:510:62: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘int’)
  510 |                 QString r = QString::number(o.value("passes")[x]["duration"].toInt());
      |                                                              ^
../src/mainwindow.cpp: In lambda function:
../src/mainwindow.cpp:577:56: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘const char [6]’)
  577 |             QString a = QString::number(o.value("info")["satid"].toInt());
      |                                                        ^
../src/mainwindow.cpp:578:40: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘const char [8]’)
  578 |             QString b = o.value("info")["satname"].toString();
      |                                        ^
../src/mainwindow.cpp:579:56: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘const char [12]’)
  579 |             QString c = QString::number(o.value("info")["passescount"].toInt());
      |                                                        ^
../src/mainwindow.cpp:584:55: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘int’)
  584 |                 myDateTime.setTime_t(o.value("passes")[x]["startUTC"].toInt());
      |                                                       ^
../src/mainwindow.cpp:586:62: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘int’)
  586 |                 QString e = QString::number(o.value("passes")[x]["startAz"].toDouble()) + "°";
      |                                                              ^
../src/mainwindow.cpp:587:52: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘int’)
  587 |                 myDateTime.setTime_t(o.value("pes")[x]["maxUTC"].toInt());
      |                                                    ^
../src/mainwindow.cpp:589:62: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘int’)
  589 |                 QString g = QString::number(o.value("passes")[x]["maxAz"].toDouble()) + "°";
      |                                                              ^
../src/mainwindow.cpp:590:62: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘int’)
  590 |                 QString h = QString::number(o.value("passes")[x]["maxEl"].toDouble()) + "°";
      |                                                              ^
../src/mainwindow.cpp:591:62: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘int’)
  591 |                 QString i = QString::number(o.value("passes")[x]["endAz"].toDouble()) + "°";
      |                                                              ^
../src/mainwindow.cpp:592:55: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘int’)
  592 |                 myDateTime.setTime_t(o.value("passes")[x]["endUTC"].toInt());
      |                                                       ^
../src/mainwindow.cpp:594:46: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘int’)
  594 |                 QString k = o.value("passes")[x]["startAzCompass"].toString();
      |                                              ^
../src/mainwindow.cpp:595:46: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘int’)
  595 |                 QString l = o.value("passes")[x]["maxAzCompass"].toString();
      |                                              ^
../src/mainwindow.cpp:596:46: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘int’)
  596 |                 QString m = o.value("passes")[x]["endAzCompass"].toString();
      |                                              ^
../src/mainwindow.cpp: In lambda function:
../src/mainwindow.cpp:650:52: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘const char [6]’)
  650 |         QString a = QString::number(o.value("info")["satid"].toInt());
      |                                                    ^
../src/mainwindow.cpp:651:36: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘const char [8]’)
  651 |         QString b = o.value("info")["satname"].toString();
      |                                    ^
../src/mainwindow.cpp: In member function ‘void MainWindow::tableTimer()’:
../src/mainwindow.cpp:919:39: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘int’)
  919 |             if (var.value("positions")[i]["timestamp"].toInt() == UTC.toSecsSinceEpoch())
      |                                       ^
../src/mainwindow.cpp:922:62: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘const char [6]’)
  922 |                 QString a = QString::number(var.value("info")["satid"].toInt());
      |                                                              ^
../src/mainwindow.cpp:923:46: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘const char [8]’)
  923 |                 QString b = var.value("info")["satname"].toString();
      |                                              ^
../src/mainwindow.cpp:925:67: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘int’)
  925 |            QString c = QString::number(var.value("positions")[i]["satlatitude"].toDouble()) + "°";
      |                                                              ^

../src/mainwindow.cpp:926:67: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘int’)
  926 |            QString d = QString::number(var.value("positions")[i]["satlongitude"].toDouble()) + "°";
      |                                                              ^

../src/mainwindow.cpp:927:67: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘int’)
  927 |            QString e = QString::number(var.value("positions")[i]["sataltitude"].toDouble()) + " Km";
      |                                                              ^

../src/mainwindow.cpp:928:67: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘int’)
  928 |            QString f = QString::number(var.value("positions")[i]["azimuth"].toDouble()) + "°";
      |                                                              ^

../src/mainwindow.cpp:929:67: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘int’)
  929 |            QString g = QString::number(var.value("positions")[i]["elevation"].toDouble()) + "°";
      |                                                              ^

../src/mainwindow.cpp:930:67: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘int’)
  930 |            QString h = QString::number(var.value("positions")[i]["ra"].toDouble()) + "°";
      |                                                              ^

../src/mainwindow.cpp:931:67: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘int’)
  931 |            QString j = QString::number(var.value("positions")[i]["dec"].toDouble()) + "°";
      |                                                              ^

../src/mainwindow.cpp:933:60: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘int’)
  933 |                 myDateTime.setTime_t(var.value("positions")[i]["timestamp"].toInt());
      |                                                            ^
../src/mainwindow.cpp:966:70: error: no match for ‘operator[]’ (operand types are ‘QJsonValue’ and ‘int’)
  966 | if (UTC.toSecsSinceEpoch() > (positions[0].value("positions")[lm - 1]["timestamp"].toInt() + 0))
      |                                                              ^


Desktop (please complete the following information):

  • OS: Ubuntu 19.10
  • qmake
  • Version 3.1

Additional context
quick solution will be appreciated

Boost library conflict

The error it spits out during compilation in qmake

libQt5Gui.so /opt/Qt5.14.1/5.14.1/gcc_64/lib/libQt5Core.so -lGL -lpthread
/usr/bin/ld: api.o: in function api::sample()':
/home/ahmad/Documents/UofG/Semester 2/Real Time Embedded Programming/satRot/Software/build-SatRot-GUI-Desktop_Qt_5_14_1_GCC_64bit-Debug/GUI-Main/../../SatRot-GUI/GUI-Main/src/api.cpp:36: undefined reference to boost::log::v2_mt_posix::core::get()' /usr/bin/ld: /home/ahmad/Documents/UofG/Semester 2/Real Time Embedded Programming/satRot/Software/build-SatRot-GUI-Desktop_Qt_5_14_1_GCC_64bit-Debug/GUI-Main/../../SatRot-GUI/GUI-Main/src/api.cpp:37: undefined reference to boost::log::v2_mt_posix::core::set_filter(boost::log::v2_mt_posix::filter const&)'
/usr/bin/ld: /home/ahmad/Documents/UofG/Semester 2/Real Time Embedded Programming/satRot/Software/build-SatRot-GUI-Desktop_Qt_5_14_1_GCC_64bit-Debug/GUI-Main/../../SatRot-GUI/GUI-Main/src/api.cpp:42: undefined reference to restc_cpp::RestClient::Create()' /usr/bin/ld: api.o: in function boost::log::v2_mt_posix::attribute_name::attribute_name(char const*)':
/usr/include/boost/log/attributes/attribute_name.hpp:80: undefined reference to boost::log::v2_mt_posix::attribute_name::get_id_from_string(char const*)' /usr/bin/ld: api.o: in function boost::log::v2_mt_posix::record::reset()':
/usr/include/boost/log/core/record.hpp:157: undefined reference to boost::log::v2_mt_posix::record_view::public_data::destroy(boost::log::v2_mt_posix::record_view::public_data const*)' /usr/bin/ld: api.o: in function boost::system::error_code::error_code()':
/usr/include/boost/system/error_code.hpp:461: undefined reference to boost::system::system_category()' /usr/bin/ld: api.o: in function boost::system::error_category::std_category::equivalent(int, std::error_condition const&) const':
/usr/include/boost/system/error_code.hpp:703: undefined reference to boost::system::generic_category()' /usr/bin/ld: /usr/include/boost/system/error_code.hpp:706: undefined reference to boost::system::generic_category()'
/usr/bin/ld: api.o: in function boost::system::error_category::std_category::equivalent(std::error_code const&, int) const': /usr/include/boost/system/error_code.hpp:733: undefined reference to boost::system::generic_category()'
/usr/bin/ld: /usr/include/boost/system/error_code.hpp:736: undefined reference to boost::system::generic_category()' /usr/bin/ld: /usr/include/boost/system/error_code.hpp:748: undefined reference to boost::system::generic_category()'
/usr/bin/ld: api.o: in function boost::asio::error::get_system_category()': /usr/include/boost/asio/error.hpp:230: undefined reference to boost::system::system_category()'
/usr/bin/ld: api.o: in function boost::coroutines::attributes::attributes()': /usr/include/boost/coroutine/attributes.hpp:30: undefined reference to boost::coroutines::stack_traits::default_size()'
/usr/bin/ld: api.o: in function boost::coroutines::detail::push_coroutine_impl<void>::unwind_stack()': /usr/include/boost/coroutine/detail/push_coroutine_impl.hpp:247: undefined reference to boost::coroutines::detail::coroutine_context::jump(boost::coroutines::detail::coroutine_context&, void*)'
/usr/bin/ld: api.o: in function boost::coroutines::detail::push_coroutine_impl<void>::push()': /usr/include/boost/coroutine/detail/push_coroutine_impl.hpp:265: undefined reference to boost::coroutines::detail::coroutine_context::jump(boost::coroutines::detail::coroutine_context&, void*)'
/usr/bin/ld: api.o: in function boost::asio::ssl::detail::openssl_init_base::do_init::~do_init()': /usr/include/boost/asio/ssl/detail/impl/openssl_init.ipp:90: undefined reference to CONF_modules_unload'
/usr/bin/ld: api.o: in function boost::asio::error::detail::ssl_category::message[abi:cxx11](int) const': /usr/include/boost/asio/ssl/impl/error.ipp:39: undefined reference to ERR_reason_error_string'
/usr/bin/ld: api.o: in function restc_cpp::RequestBuilder::Build()': /usr/local/include/restc-cpp/RequestBuilder.h:371: undefined reference to restc_cpp::Request::Create(std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&, restc_cpp::Request::Type, restc_cpp::RestClient&, std::unique_ptr<restc_cpp::RequestBody, std::default_delete<restc_cpp::RequestBody> >, boost::optional<std::deque<restc_cpp::Request::Arg, std::allocator<restc_cpp::Request::Arg> > > const&, boost::optional<restc_cpp::Headers> const&, boost::optional<restc_cpp::Request::Auth> const&)'
/usr/bin/ld: api.o: in function restc_cpp::RestClient::ProcessWithPromiseT<Post>(std::function<Post (restc_cpp::Context&)> const&)::{lambda(boost::asio::basic_yield_context<boost::asio::executor_binder<void (*)(), boost::asio::executor> >)#1}::operator()(boost::asio::basic_yield_context<boost::asio::executor_binder<void (*)(), boost::asio::executor> >) const': /usr/local/include/restc-cpp/restc-cpp.h:371: undefined reference to restc_cpp::Context::Create(boost::asio::basic_yield_context<boost::asio::executor_binder<void ()(), boost::asio::executor> >&, restc_cpp::RestClient&)'
/usr/bin/ld: api.o: in function restc_cpp::RapidJsonDeserializer<Post>::DoStartObject()': /usr/local/include/restc-cpp/SerializeJson.h:1014: undefined reference to boost::log::v2_mt_posix::trivial::logger::get()'
/usr/bin/ld: /usr/local/include/restc-cpp/SerializeJson.h:1014: undefined reference to boost::log::v2_mt_posix::trivial::logger::get()' /usr/bin/ld: api.o: in function void restc_cpp::RapidJsonDeserializer::RecurseToMember(std::enable_if<boost::fusion::traits::is_sequence::value, void>::type
)':
/usr/local/include/restc-cpp/SerializeJson.h:780: undefined reference to boost::log::v2_mt_posix::trivial::logger::get()' /usr/bin/ld: /usr/local/include/restc-cpp/SerializeJson.h:780: undefined reference to boost::log::v2_mt_posix::trivial::logger::get()'
/usr/bin/ld: api.o: in function boost::log::v2_mt_posix::record boost::log::v2_mt_posix::sources::basic_composite_logger<char, boost::log::v2_mt_posix::sources::severity_logger_mt<boost::log::v2_mt_posix::trivial::severity_level>, boost::log::v2_mt_posix::sources::multi_thread_model<boost::log::v2_mt_posix::aux::light_rw_mutex>, boost::log::v2_mt_posix::sources::features<boost::log::v2_mt_posix::sources::severity<boost::log::v2_mt_posix::trivial::severity_level> > >::open_record<boost::parameter::aux::tagged_argument<boost::log::v2_mt_posix::keywords::tag::severity, boost::log::v2_mt_posix::trivial::severity_level const> >(boost::parameter::aux::tagged_argument<boost::log::v2_mt_posix::keywords::tag::severity, boost::log::v2_mt_posix::trivial::severity_level const> const&)': /usr/include/boost/log/sources/basic_logger.hpp:456: undefined reference to boost::log::v2_mt_posix::core::get_logging_enabled() const'
/usr/bin/ld: api.o: in function boost::log::v2_mt_posix::aux::record_pump<boost::log::v2_mt_posix::sources::severity_logger_mt<boost::log::v2_mt_posix::trivial::severity_level> >::~record_pump()': /usr/include/boost/log/sources/record_ostream.hpp:526: undefined reference to boost::log::v2_mt_posix::aux::unhandled_exception_count()'
/usr/bin/ld: api.o: in function bool restc_cpp::RapidJsonDeserializer<Post>::SetValue<bool>(bool)': /usr/local/include/restc-cpp/SerializeJson.h:941: undefined reference to boost::log::v2_mt_posix::trivial::logger::get()'
/usr/bin/ld: /usr/local/include/restc-cpp/SerializeJson.h:941: undefined reference to boost::log::v2_mt_posix::trivial::logger::get()' /usr/bin/ld: api.o: in function bool restc_cpp::RapidJsonDeserializer::SetValue<std::__cxx11::basic_string<char, std::char_traits, std::allocator > >(std::__cxx11::basic_string<char, std::char_traits, std::allocator >)':
/usr/local/include/restc-cpp/SerializeJson.h:941: undefined reference to boost::log::v2_mt_posix::trivial::logger::get()' /usr/bin/ld: /usr/local/include/restc-cpp/SerializeJson.h:941: undefined reference to boost::log::v2_mt_posix::trivial::logger::get()'
/usr/bin/ld: api.o: in function bool restc_cpp::RapidJsonDeserializer<Post>::SetValue<double>(double)': /usr/local/include/restc-cpp/SerializeJson.h:941: undefined reference to boost::log::v2_mt_posix::trivial::logger::get()'
/usr/bin/ld: api.o:/usr/local/include/restc-cpp/SerializeJson.h:941: more undefined references to boost::log::v2_mt_posix::trivial::logger::get()' follow /usr/bin/ld: api.o: in function boost::log::v2_mt_posix::aux::record_pump<boost::log::v2_mt_posix::sources::severity_logger_mtboost::log::v2_mt_posix::trivial::severity_level >::record_pump(boost::log::v2_mt_posix::sources::severity_logger_mtboost::log::v2_mt_posix::trivial::severity_level&, boost::log::v2_mt_posix::record&)':
/usr/include/boost/log/sources/record_ostream.hpp:506: undefined reference to boost::log::v2_mt_posix::aux::stream_provider<char>::allocate_compound(boost::log::v2_mt_posix::record&)' /usr/bin/ld: /usr/include/boost/log/sources/record_ostream.hpp:507: undefined reference to boost::log::v2_mt_posix::aux::unhandled_exception_count()'
/usr/bin/ld: api.o: in function boost::log::v2_mt_posix::aux::record_pump<boost::log::v2_mt_posix::sources::severity_logger_mt<boost::log::v2_mt_posix::trivial::severity_level> >::auto_release::~auto_release()': /usr/include/boost/log/sources/record_ostream.hpp:491: undefined reference to boost::log::v2_mt_posix::aux::stream_provider::release_compound(boost::log::v2_mt_posix::aux::stream_provider::stream_compound*)'
/usr/bin/ld: api.o: in function bool restc_cpp::RapidJsonDeserializer<Post>::SetValueOnMember<Post, bool>(bool const&, std::enable_if<boost::fusion::traits::is_sequence<Post>::value, void>::type*)': /usr/local/include/restc-cpp/SerializeJson.h:843: undefined reference to boost::log::v2_mt_posix::trivial::logger::get()'
/usr/bin/ld: /usr/local/include/restc-cpp/SerializeJson.h:843: undefined reference to boost::log::v2_mt_posix::trivial::logger::get()' /usr/bin/ld: api.o: in function bool restc_cpp::RapidJsonDeserializer::SetValueOnMember<Post, std::__cxx11::basic_string<char, std::char_traits, std::allocator > >(std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&, std::enable_if<boost::fusion::traits::is_sequence::value, void>::type*)':
/usr/local/include/restc-cpp/SerializeJson.h:843: undefined reference to boost::log::v2_mt_posix::trivial::logger::get()' /usr/bin/ld: /usr/local/include/restc-cpp/SerializeJson.h:843: undefined reference to boost::log::v2_mt_posix::trivial::logger::get()'
/usr/bin/ld: api.o: in function bool restc_cpp::RapidJsonDeserializer<Post>::SetValueOnMember<Post, double>(double const&, std::enable_if<boost::fusion::traits::is_sequence<Post>::value, void>::type*)': /usr/local/include/restc-cpp/SerializeJson.h:843: undefined reference to boost::log::v2_mt_posix::trivial::logger::get()'
/usr/bin/ld: api.o:/usr/local/include/restc-cpp/SerializeJson.h:843: more undefined references to boost::log::v2_mt_posix::trivial::logger::get()' follow /usr/bin/ld: api.o: in function boost::log::v2_mt_posix::sources::aux::severity_levelboost::log::v2_mt_posix::trivial::severity_level::set_value(boost::log::v2_mt_posix::trivial::severity_level)':
/usr/include/boost/log/sources/severity_feature.hpp:135: undefined reference to boost::log::v2_mt_posix::sources::aux::get_severity_level()' /usr/bin/ld: api.o: in function boost::log::v2_mt_posix::record boost::log::v2_mt_posix::sources::basic_logger<char, boost::log::v2_mt_posix::sources::severity_logger_mtboost::log::v2_mt_posix::trivial::severity_level, boost::log::v2_mt_posix::sources::multi_thread_modelboost::log::v2_mt_posix::aux::light_rw_mutex >::open_record_unlocked<boost::parameter::aux::tagged_argument<boost::log::v2_mt_posix::keywords::tag::severity, boost::log::v2_mt_posix::trivial::severity_level const> >(boost::parameter::aux::tagged_argument<boost::log::v2_mt_posix::keywords::tag::severity, boost::log::v2_mt_posix::trivial::severity_level const> const&)':
/usr/include/boost/log/sources/basic_logger.hpp:259: undefined reference to boost::log::v2_mt_posix::core::open_record(boost::log::v2_mt_posix::attribute_set const&)' /usr/bin/ld: api.o: in function boost::log::v2_mt_posix::core::push_record(boost::log::v2_mt_posix::record&&)':
/usr/include/boost/log/core/core.hpp:308: undefined reference to boost::log::v2_mt_posix::core::push_record_move(boost::log::v2_mt_posix::record&)' /usr/bin/ld: api.o: in function boost::log::v2_mt_posix::value_extractor<boost::log::v2_mt_posix::trivial::severity_level, boost::log::v2_mt_posix::fallback_to_none, boost::log::v2_mt_posix::trivial::tag::severity>::operator()(boost::log::v2_mt_posix::attribute_name const&, boost::log::v2_mt_posix::attribute_value_set const&) const':
/usr/include/boost/log/attributes/value_extraction.hpp:232: undefined reference to boost::log::v2_mt_posix::attribute_value_set::find(boost::log::v2_mt_posix::attribute_name) const' /usr/bin/ld: /usr/include/boost/log/attributes/value_extraction.hpp:233: undefined reference to boost::log::v2_mt_posix::attribute_value_set::end() const'
/usr/bin/ld: /usr/include/boost/log/attributes/value_extraction.hpp:241: undefined reference to boost::log::v2_mt_posix::aux::attach_attribute_name_info(boost::exception&, boost::log::v2_mt_posix::attribute_name const&)' /usr/bin/ld: api.o: in function boost::coroutines::basic_standard_stack_allocatorboost::coroutines::stack_traits::allocate(boost::coroutines::stack_context&, unsigned long)':
/usr/include/boost/coroutine/standard_stack_allocator.hpp:39: undefined reference to boost::coroutines::stack_traits::minimum_size()' /usr/bin/ld: /usr/include/boost/coroutine/standard_stack_allocator.hpp:40: undefined reference to boost::coroutines::stack_traits::is_unbounded()'
/usr/bin/ld: /usr/include/boost/coroutine/standard_stack_allocator.hpp:40: undefined reference to boost::coroutines::stack_traits::maximum_size()' /usr/bin/ld: api.o: in function boost::coroutines::detail::push_coroutine_context_void::push_coroutine_context_void<boost::coroutines::detail::push_coroutine_object<boost::coroutines::pull_coroutine, void, boost::asio::detail::coro_entry_point<boost::asio::executor_binder<void ()(), boost::asio::strandboost::asio::io_context::executor_type >, restc_cpp::RestClient::ProcessWithPromiseT(std::function<Post (restc_cpp::Context&)> const&)::{lambda(boost::asio::basic_yield_context<boost::asio::executor_binder<void ()(), boost::asio::executor> >)#1}>&, boost::coroutines::basic_standard_stack_allocatorboost::coroutines::stack_traits > >(boost::coroutines::detail::preallocated const&, boost::coroutines::detail::push_coroutine_object<boost::coroutines::pull_coroutine, void, boost::asio::detail::coro_entry_point<boost::asio::executor_binder<void ()(), boost::asio::strandboost::asio::io_context::executor_type >, restc_cpp::RestClient::ProcessWithPromiseT(std::function<Post (restc_cpp::Context&)> const&)::{lambda(boost::asio::basic_yield_context<boost::asio::executor_binder<void ()(), boost::asio::executor> >)#1}>&, boost::coroutines::basic_standard_stack_allocatorboost::coroutines::stack_traits >)':
/usr/include/boost/coroutine/detail/push_coroutine_object.hpp:59: undefined reference to boost::coroutines::detail::coroutine_context::coroutine_context()' /usr/bin/ld: /usr/include/boost/coroutine/detail/push_coroutine_object.hpp:59: undefined reference to boost::coroutines::detail::coroutine_context::coroutine_context(void (
)(boost::context::detail::transfer_t), boost::coroutines::detail::preallocated const&)'
/usr/bin/ld: api.o: in function boost::coroutines::detail::push_coroutine_object<boost::coroutines::pull_coroutine<void>, void, boost::asio::detail::coro_entry_point<boost::asio::executor_binder<void (*)(), boost::asio::strand<boost::asio::io_context::executor_type> >, restc_cpp::RestClient::ProcessWithPromiseT<Post>(std::function<Post (restc_cpp::Context&)> const&)::{lambda(boost::asio::basic_yield_context<boost::asio::executor_binder<void (*)(), boost::asio::executor> >)#1}>&, boost::coroutines::basic_standard_stack_allocator<boost::coroutines::stack_traits> >::run()': /usr/include/boost/coroutine/detail/push_coroutine_object.hpp:302: undefined reference to boost::coroutines::detail::coroutine_context::jump(boost::coroutines::detail::coroutine_context&, void*)'
/usr/bin/ld: api.o: in function boost::coroutines::basic_standard_stack_allocator<boost::coroutines::stack_traits>::deallocate(boost::coroutines::stack_context&)': /usr/include/boost/coroutine/standard_stack_allocator.hpp:55: undefined reference to boost::coroutines::stack_traits::minimum_size()'
/usr/bin/ld: /usr/include/boost/coroutine/standard_stack_allocator.hpp:56: undefined reference to boost::coroutines::stack_traits::is_unbounded()' /usr/bin/ld: /usr/include/boost/coroutine/standard_stack_allocator.hpp:56: undefined reference to boost::coroutines::stack_traits::maximum_size()'
collect2: error: ld returned 1 exit status
make[1]: *** [Makefile:286: GUI-Main] Error 1
make: *** [Makefile:48: sub-GUI-Main-make_first] Error 2
make[1]: Leaving directory '/home/ahmad/Documents/UofG/Semester 2/Real Time Embedded Programming/satRot/Software/build-SatRot-GUI-Desktop_Qt_5_14_1_GCC_64bit-Debug/GUI-Main'
20:27:17: The process "/usr/bin/make" exited with code 2.
Error while building/deploying project SatRot-GUI (kit: Desktop Qt 5.14.1 GCC 64bit)
When executing step "Make"
20:27:17: Elapsed time: 00:09.`

Fix memory leaks

There are alot of places with memory leaks. This causes the application to slightly slow down the system and increases the latency of the system.

Calling the API

do we need to create JSON file in term that the API will be running probably right??

API Documentation

Could you write a little bit about the API in documentation?
Which IP-Ports are in use?
Something about the json requests and responses?

Components lists issue

The initial list was really costly and some parts are really hard to get for the electronics and telecommunication parts

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.