Chebuya 415 Опубликовано: 11 июня, 2019 (изменено) Всем привет. Представляю вам программу для почти полного управления дроном. Но сначала короткая предыстория: Скрытый текст Изучение этого мода я начал с дронов, а вернее - гриф дронами, ещё на версии 1.5. Тогда я использовал программу товарища @Litvinov, и она казалась мне очень удобная. Вот она, если что: На самом деле и моя программа нагло скопирована вдохновлена ей(Было ещё пару тем, которые помогли с идеями), поэтому в ней можно найти много чего общего(Программа больше похожа на обновлённую версию программы @Litvinov'а) Из возможностей отмечу следующее: Перемещение по сторонам света без улучшения "Навигация"(Спасибо версии OC 1.7.3) Возвращение дрона к управляющему планшету(Компьютеру) Удалённый интерпретатор Привязка дрона к управляющему планшету(Почти полная невозможность угона) Красивый Динамичный интерфейс(Отображение заряда планшета, время, заряд дрона, уровень сигнала) Остальные функции можно найти в программе или в скриншотах. Системные требования: Планшет с OpenOS и видеокартой 2 уровня, беспроводной картой любого уровня и интернет-платой Дрон с беспроводной картой любого уровня (остальное не так важно, это опционально) Установка: На планшет (Для обладателей интернет-карт): wget https://raw.githubusercontent.com/BrightYC/DRC/master/tablet.lua drc.lua Для дрона (Для обладателей интернет карт): wget https://raw.githubusercontent.com/BrightYC/DRC/master/drone.lua drc-flash.lua && flash -q drc-flash.lua drc.lua (Код без минификации: https://raw.githubusercontent.com/BrightYC/DRC/master/non-minify-drone.lua) После вынимаем биос и вставляем в дрона. Первый запуск: Первый запуск сопровождается привязкой дрона к порту(Порт можно увидеть открыв дрона) и адресу беспроводной карты. Из-за этого возможность угнать дрона стремится к нулю, так как для первичной настройки нужно стоять не дальше 5 блоков от дрона. Пишем: drc <порт дрона> После этого дрона невозможно угнать, если рядом никого не было и он не мог подслушать сообщение(Перезагрузка привязку не ломает) Пара скриншотов: Скрытый текст Видео: Скрытый текст P.S Процент справа от шкалы сигнала обозначает не силу сигнала, а мощность передатчиков на планшете с дроном(поэтому для корректной работы нужны одинаковые карты беспроводной сети) На этом всё, дань уважения дронам выполнена, теперь могу спать спокойно. Изменено 8 февраля, 2021 пользователем BrightYC 12 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Doob 2 749 Опубликовано: 11 июня, 2019 Какая точность при наведении на игрока? Будет ли тупить, если игрок стоит строго на оси Z? Помню, надо было делать двойную проверку при триангуляции, либо добавлять еще точки для замера, чтобы дрон не пролетал мимо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 154 Опубликовано: 11 июня, 2019 @BrightYC Интерфейс выглядит приятно. Но для полного счастья не хватает односимвольного режима экрана для максимально открытого обзора летающего дрона. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 154 Опубликовано: 11 июня, 2019 @BrightYC А что делает знак подчёркивания в этой строке function ds()sn("PING")_,dtu=lm(3)return dtu or 0 end кода дрона? Рекурсию в функции gtu предлагаю заменить на цикл repeat-until Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
serafim 272 Опубликовано: 11 июня, 2019 1 час назад, eu_tomat сказал: не хватает односимвольного режима экрана для максимально открытого обзора летающего дрона. @BrightYC простенький код в довесок к твоему local full = false local x_max, y_max = gpu.maxResolution() [44] = function() full = not full if full then gpu.setResolution(1, 1) else gpu.setResolution(x_max,y_max) info() end end, -- 44 = кнопка Z Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Chebuya Автор темы 415 Опубликовано: 11 июня, 2019 (изменено) 7 часов назад, Doob сказал: Какая точность при наведении на игрока? Будет ли тупить, если игрок стоит строго на оси Z? Помню, надо было делать двойную проверку при триангуляции, либо добавлять еще точки для замера, чтобы дрон не пролетал мимо. Всё нормально, если расстояние до игрока изменилось с момента старта - всё начинается заново, так что дрон не промахивается, даже на огромных расстояниях погрешность пару блоков. 6 часов назад, eu_tomat сказал: @BrightYC А что делает знак подчёркивания в этой строке function ds()sn("PING")_,dtu=lm(3)return dtu or 0 end кода дрона? Рекурсию в функции gtu предлагаю заменить на цикл repeat-until _, dtu пропускает первый аргумент со строкой модема, в lm() видно код. А что не так с рекурсией? Экономит место, по крайней мере я проблемы не вижу. return dt[3],dt[5],dt[6],dt[7],dt[8],dt[9] 6 часов назад, eu_tomat сказал: @BrightYC Интерфейс выглядит приятно. Но для полного счастья не хватает односимвольного режима экрана для максимально открытого обзора летающего дрона. Так он есть же, я не обновил программу? Возможно я немного поторопился с заливанием программы. 4 часа назад, serafim сказал: @BrightYC простенький код в довесок к твоему local full = false local x_max, y_max = gpu.maxResolution() [44] = function() full = not full if full then gpu.setResolution(1, 1) else gpu.setResolution(x_max,y_max) info() end end, -- 44 = кнопка Z Ну, кнопка 'z' уже занята, да и односимвольный режим включается по кнопке 'm', но спасибо. Вот кстати код, если кто не заметил: [50] = function() if not stuff.hide then stuff.hide = true event.cancel(battery_timer) event.cancel(clock_timer) event.cancel(data_timer) gpu.setBackground(color.black) gpu.set(1, 1, " ") gpu.setResolution(1, 1) else stuff.hide = false battery_timer = event.timer(5, battery, math.huge) clock_timer = event.timer(60, clock, math.huge) data_timer = event.timer(20, update_data, math.huge) gpu.setResolution(80, 25) draw_gui() first_launch() end end Длинновато, да. Изменено 11 июня, 2019 пользователем BrightYC Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Chebuya Автор темы 415 Опубликовано: 11 июня, 2019 Вот односимвольный режим, если спутало 'Увеличить/Уменьшить размер экрана' Скрытый текст 2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Chebuya Автор темы 415 Опубликовано: 11 июня, 2019 (изменено) Может мне кто-то объяснить, почему иногда tablet.getYaw() выдаёт отрицательный значения, а иногда - положительные. Что за ерунда? P.S Уже не важно, связано было с определением стороны взгляда Изменено 11 июня, 2019 пользователем BrightYC Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Chebuya Автор темы 415 Опубликовано: 11 июня, 2019 @Doob Специально для тебя записал видео с тестом: Скрытый текст P.S Даже на расстоянии в 400 блоков точность отменная. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
whiskas 144 Опубликовано: 11 июня, 2019 вот бы дронам чанклодер) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Chebuya Автор темы 415 Опубликовано: 11 июня, 2019 1 час назад, whiskas сказал: вот бы дронам чанклодер) Ты про возвращение то? Даа, без чанклодера тоскливо. 100-150 блоков и всё, дрон не работает. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Doob 2 749 Опубликовано: 12 июня, 2019 16 часов назад, BrightYC сказал: Даже на расстоянии в 400 блоков точность отменная. Нет, если дрон и передатчик находятся на оси Z, то при команде на возвращение, дрон входит в бесконечный цикл пингования. Еще в подсказке некоторые пункты перепутаны. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Chebuya Автор темы 415 Опубликовано: 12 июня, 2019 (изменено) 15 часов назад, Doob сказал: Нет, если дрон и передатчик находятся на оси Z, то при команде на возвращение, дрон входит в бесконечный цикл пингования. Еще в подсказке некоторые пункты перепутаны. Проверил, всё работает штатно. А в подсказке что напутано? Если ты про видео - там действительно напутано. P.S Я вставал прямо по оси Z, дрон спокойно прилетал домой, почему он должен входить в бесконечный цикл? UPD: Не забывай про то, что по стандарту у модема 20% мощности. Возможно ты слишком далеко отлетел, дрон просто не может принять сообщение, увеличь мощность модема. Если не сложно, можешь поподробнее объяснить как и где это происходит? Изменено 12 июня, 2019 пользователем BrightYC Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Doob 2 749 Опубликовано: 13 июня, 2019 Значит, срабатывает в исключительных случаях, когда дрон не сдвигается на достаточное расстояние для ошибки при округлении. У меня получилось воспроизвести только два раза, оба раза лечилось перезагрузкой мира. 11 час назад, BrightYC сказал: А в подсказке что напутано? Например, E не возвращает дрона домой. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Chebuya Автор темы 415 Опубликовано: 13 июня, 2019 (изменено) 1 час назад, Doob сказал: Например, E не возвращает дрона домой. упс, у меня клавиши на клавиатуре перепутаны=d 1 час назад, Doob сказал: Значит, срабатывает в исключительных случаях, когда дрон не сдвигается на достаточное расстояние для ошибки при округлении. У меня получилось воспроизвести только два раза, оба раза лечилось перезагрузкой мира. Я не смог отловить за всё время использования на 2 разных версиях игры на разных картах такие странные баги. P.S Подсказку починил, возвращение домой на 'T', а 'E' - обновить данные Изменено 13 июня, 2019 пользователем BrightYC Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Alex 4 683 Опубликовано: 13 июня, 2019 3 часа назад, BrightYC сказал: P.S Подсказку починил, возвращение домой на 'T', а 'E' - обновить данные клавиши лучше назначить так (по смыслу рядом или от первой буквы того, что они делают ): h (home) домой c (колор) цвет u (update)- обновить данные какие-то(а лучше все сразу) t / y - взять/положить q - вых i - инвентарь wasd - движение ... и тп. Так проще будет запомнить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Chebuya Автор темы 415 Опубликовано: 13 июня, 2019 9 часов назад, Alex сказал: клавиши лучше назначить так (по смыслу рядом или от первой буквы того, что они делают ): h (home) домой c (колор) цвет u (update)- обновить данные какие-то(а лучше все сразу) t / y - взять/положить q - вых i - инвентарь wasd - движение ... и тп. Так проще будет запомнить. Запомнить может и проще, но тянуть руки на другую часть клавиатуры-перебор. Основные функции постарался уместить рядом с WASD, чтобы было проще. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Chebuya Автор темы 415 Опубликовано: 14 июня, 2019 (изменено) Небольшое обновление: Доделал интерпретатор, теперь почти неотличим от оригинала. Теперь не нужно писать return чтобы вернуть значение, так же добавил возможность прекратить код через CTRL+D при исполнении Скрытый текст Так же добавил утилиту загрузки по сети. Чтобы загрузить программу на дрона. То есть, можно запустить любую программу командой net <program_name> И она сию минуту загрузится на дрон: Скрытый текст Установка: wget https://raw.githubusercontent.com/BrightYC/DRC/master/network-load.lua net.lua Так же, в интерпретаторе есть функции: update() - обновляет данные на планшете print(...) - помогает отправить данные на планшет в работающем коде sleep([timeout: number]) - сон он и в африке сон pull([timeout: number]): name, ... - ожидает какой-либо сигнал не ломая связь move(dx: number, dy: number, dz: number, wait: number) - блокирующий drone.move distance(): number - возвращает расстояние до планшета, если ответ не пришёл в течении 3 секунд - возвращает 0 moveToUser() - перемещает дрон к планшету slot([slot:number]) - безопасно выбирает слот(К примеру - в дроне всего 4 слота, но slot(5) выделит самый последний и не выкинет ошибку) clear - очищает терминал Изменено 15 ноября, 2019 пользователем BrightYC 7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Chebuya Автор темы 415 Опубликовано: 16 июня, 2019 (изменено) Еще одно обновление: Добавлена возможность загрузки модулей с планшета, то есть теперь можно расширять код хоть до полу мегабайта. Для начала была добавлена сериализация, чтобы таблицы нормально отображались при отправке на планшет: Скрытый текст Теперь можно не ограничиваться фантазией и писать сколько угодно(в пределах, разумеется, ограничивается лишь размером оперативной памяти у дрона и планшета) Изменено 16 июня, 2019 пользователем BrightYC 2 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Chebuya Автор темы 415 Опубликовано: 13 августа, 2019 (изменено) Наткнулся на плеер NBS музыки через computronic's. Тема на англоязычном форуме: https://oc.cil.li/topic/1758-noteblock-studio-player-for-computronics-sound-cards/ Что получилось у меня: Скрытый текст Получилось довольно забавно, учитывая что дроном можно управлять во время проигрывания музыки, то есть теперь на свинолёте можно лететь не в тишину, а с музычкой =) Порядок действий, как проигрывать музыку: Обновить программу Скачать какой-нибудь .nbs файл Теперь, через net можно сделать так: net <имя-файла>.nbs <имя> nbs файл сохранился как переменная, теперь создаём какой-нибудь файл, например play.lua, редактируем - пишем туда nbsPlay(nbs: string, repeat: boolean). В моём случае - nbsPlay(despacito, true) (Будет постоянный повтор музыки, остановить можно написав error() в интерпретаторе) Пишем net play.lua Слушаем и радуемся! !ВНИМАНИЕ! Требовательно к оперативной памяти. Минимальная конфигурация с т 1.5 плашкой первого уровня, иначе дрон будет кричать о недостаточной памяти. Так же, с 1 платой при требовательных операциях и работающей музыке - возможен вылет дрона. Изменено 14 августа, 2019 пользователем BrightYC спасибо за внимание 5 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах