Радар

Vlad_os

✩✩✩✩✩✩✩
28 Ноя 2019
27
0
Здравствуйте, идея такая: есть несколько передатчиков сообщающих свои координаты GPS. Есть приёмник который обрабатывает эти координаты и выводит их местоположение на радар(дисплей) (радар как в играх, положение игрока в центре и цели раскиданы по радару). Вопрос такой: как выводить местоположение передатчиков на радар зная их координаты и свои координаты? Масштаб неизменен. Наверняка нужен будет ещё компас.
 

Wan-Derer

★★★★★✩✩
Команда форума
31 Июл 2018
2,003
406
Москва
wan-derer.ru
В разделе "Помощь" отвечают на конкретные вопросы. Ответ на твой: "Как сделаешь - так и будет".
 

kalobyte

★★★✩✩✩✩
1 Янв 2020
726
146
вводиш реальные координаты руками и это будет нулевая точка (это если локация меняется)
из координаты цели вычитаеш координаты нулевой точки - это будет смещение в попугаях относительно центра
приравниваеш к координатной сетке радара в попугаях и рисуеш на нем точку

можно за нулевую точку взять координаты какой-то цели и относительно нее отрисовываеш остальных
 
  • Лойс +1
Реакции: Vlad_os

Старик Похабыч

★★★★★★★
14 Авг 2019
4,159
1,267
Москва
понятно... тогда плат такой.
1) научится подключать GPS к ардуино. получить координаты места. Кстати, точность более 3 метров так просто не получить. а обычно будет метров 30
2) придумать как передавать данные на головную станцию. Научится подключать эти модули.
этого пока хватит. все данные выводи в монитор порта.
 

Kir

★✩✩✩✩✩✩
28 Мар 2020
69
16
Если принимать, что GPS выдает координаты в декартовой (прямоугольной) системе координат. Радар, как правило, и судя по описанию, таковым и должен быть, отображает объекты в полярной системе координат. Т.о. задача сводится к преобразованию координат из декартовой (прямоугольной) в полярную систему координат, относительно своих собственных.
 

Vlad_os

✩✩✩✩✩✩✩
28 Ноя 2019
27
0
Ну я не особо в этом шарю. На начальном этапе всё это казалось легче чем сейчас. Пока продумывал как это всё будет выглядеть, накидал некоторые детали, которые по моему мнению подойдут для этого проекта: для передачи данных взял пока nRF24L01+ с антенной, для картинки OLED 1,3 дюйма 128X64, gps GY-NEO6MV2 или другой. Радар я думаю будет удобнее выводить на весь экран прямоугольником, а не кругом как я сначала хотел. Нужен ещё компас на приёмнике чтобы поворачивать радар.
 
Изменено:

Vlad_os

✩✩✩✩✩✩✩
28 Ноя 2019
27
0
Если принимать, что GPS выдает координаты в декартовой (прямоугольной) системе координат. Радар, как правило, и судя по описанию, таковым и должен быть, отображает объекты в полярной системе координат. Т.о. задача сводится к преобразованию координат из декартовой (прямоугольной) в полярную систему координат, относительно своих собственных.
Что-то я не особо понимаю про это преобразование. А разве GPS не в полярной системе координаты шлёт? Там же вроде бы градусы если я ничего не путаю.
 
Изменено:

Старик Похабыч

★★★★★★★
14 Авг 2019
4,159
1,267
Москва
Вроде что то.. Вот приличнее Но опять же не совсем.
Ты мой пост прочитал ? По странному стечению обстоятельств мне интересна работа с GPS и я кое что понимаю в координатах. Но у меня задачи совсем отличные от твоих. есть небольшое пересечение. И для того что бы я тебе в чем то помог что -то сделать должен ты сам.
Что ты смог сделать ?
 

Vlad_os

✩✩✩✩✩✩✩
28 Ноя 2019
27
0
я же сказал, пока только идея, деталей нет. Когда приедут, начну собирать.
 

Vlad_os

✩✩✩✩✩✩✩
28 Ноя 2019
27
0
У меня ещё есть вопрос: а как поворачивать эту мини-карту на дисплее? Я не понимаю. НО я думаю сделать проще: поворачивать не карту, а "игрока" в центре экрана. https://ru.wikipedia.org/wiki/Мини-карта
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,159
1,267
Москва
Ссылка для изучения. Нужны формулы раздела поворот в двумерном пространстве
Поворот координат

к примеру, у тебя есть две пары координат Х1 , У1 и Х2, У2, первая это радар, вторая еще какой то объект в виде точки
Эти координаты имеются в глобальной системе координат (ГСК).
Для радара есть локальная система координат (ЛСК), с нулем в антенне радара.
Для того что бы перейти от глобальной к локальной надо будет получить координаты х1, у1 и х2 , у2. И получить таким образом
х1=Х1+dX
y1=Y1+dY

x2=X2+dX
y2=Y2+dY

для 1-го случая Х1,У1 это радар
тогда
0=Х1+dX
0=Y1+dY
или
dx=-X1
dy=-Y1
если радар двигается, то значения dx и dy надо вычислять постоянно при каждом обновлении координат X1 Y1

Теперь всегда можно получить координаты любого другого объекта в ЛСК.
Если просто отобразить на экране x2,y2 , то это будет положение без учета поворота.

Теперь угол поворота. Не важно как ты его получил. Если брать реальную картографию . без учета магнитных отклонений и т.д., упрощая задачу, то нулевое направление это направление на север. Угол поворота будет называться азимут. Если твой азимут 20, то это значит, что направление на север будет на 20 градусов левее твоего взгляда. Теперь надо просто преобразовать локальные координаты объекта х2 , у2 по формулам из ссылки. Получишь локальные координаты объекта с учетом твоего поворота.
 

Vlad_os

✩✩✩✩✩✩✩
28 Ноя 2019
27
0
а можешь просто пару строк кода накидать? Я вообще не вдупляю
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,159
1,267
Москва
тогда не берись за это. Именно твоя задумка мне не интересна, что бы тратить на нее много времени. Помочь одно, сделать за тебя - другое
 

Vlad_os

✩✩✩✩✩✩✩
28 Ноя 2019
27
0
ну да. А сколько будет стоить такая прошивка? если заказывать? хотя я вроде начал понимать
 
Изменено:

Старик Похабыч

★★★★★★★
14 Авг 2019
4,159
1,267
Москва
Стоит будет дорого. менее чем за 5к я бы не брался, т.к. нужно много компонентов и четкого задания нет.
Самому дешевле конечно в разы
 

Vlad_os

✩✩✩✩✩✩✩
28 Ноя 2019
27
0
вот есть код, библиотека http://techoblog.ucoz.net/GPS_Device.rar
C++:
#include <SoftwareSerial.h>

#include <TinyGPS.h>

/* This sample code demonstrates the normal use of a TinyGPS object.
   It requires the use of SoftwareSerial, and assumes that you have a
   4800-baud serial GPS device hooked up on pins 4(rx) and 3(tx).
*/

TinyGPS gps;
SoftwareSerial ss(4, 3);

void setup()
{
  Serial.begin(115200);
  ss.begin(4800);

  Serial.print("Simple TinyGPS library v. "); Serial.println(TinyGPS::library_version());
  Serial.println("by Mikal Hart");
  Serial.println();
}

void loop()
{
  bool newData = false;
  unsigned long chars;
  unsigned short sentences, failed;

  // For one second we parse GPS data and report some key values
  for (unsigned long start = millis(); millis() - start < 1000;)
  {
    while (ss.available())
    {
      char c = ss.read();
      // Serial.write(c); // uncomment this line if you want to see the GPS data flowing
      if (gps.encode(c)) // Did a new valid sentence come in?
        newData = true;
    }
  }

  if (newData)
  {
    float flat, flon;
    unsigned long age;
    gps.f_get_position(&flat, &flon, &age);
    Serial.print("LAT=");
    Serial.print(flat == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flat, 6);
    Serial.print(" LON=");
    Serial.print(flon == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flon, 6);
    Serial.print(" SAT=");
    Serial.print(gps.satellites() == TinyGPS::GPS_INVALID_SATELLITES ? 0 : gps.satellites());
    Serial.print(" PREC=");
    Serial.print(gps.hdop() == TinyGPS::GPS_INVALID_HDOP ? 0 : gps.hdop());
  }

  gps.stats(&chars, &sentences, &failed);
  Serial.print(" CHARS=");
  Serial.print(chars);
  Serial.print(" SENTENCES=");
  Serial.print(sentences);
  Serial.print(" CSUM ERR=");
  Serial.println(failed);
  if (chars == 0)
    Serial.println("** No characters received from GPS: check wiring **");
}
вопрос: можно ли заменить строку Serial.print(flat == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flat, 6); строкой Serial.print(flat == TinyGPS::GPS_INVALID_F_ANGLE ? 0 : flat);
И что произойдёт? Компилятор вроде не ругается