Avevad 15 Опубликовано: 27 сентября, 2018 (изменено) В общем, сделал две проги: одна для робота, который будет изучать лабиринт; вторая для компуктера, на который будет передаваться красивая картинка лабиринта. Работает предельно просто: запускаешь прогу №2 на компе, ставишь робота в лабиринт и запускаешь на нем прогу №1. Прога №1: https://pastebin.com/dpTQbgtK pastebin run dpTQbgtK Прога №2: https://pastebin.com/qPsZctqh pastebin run qPsZctqh Требования: Связанная карта в роботе и в компе Принцип работы: Рекурсивный dfs-подобный алгоритм. Робот в каждое обследованной клетке крутится по сторонам и смотрит есть ли блок перед ним. Если нет то переходит вперед и рекурсивно обследует дальше. Изменено 30 января, 2020 пользователем Avevad перенос описания 2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
NEO 542 Опубликовано: 27 сентября, 2018 local _, _, _, _, _, cmd = ev.pull("modem_message") local _, _, _, _, _, cmdX = ev.pull("modem_message") local _, _, _, _, _, cmdY = ev.pull("modem_message") Медленно! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Avevad Автор темы 15 Опубликовано: 27 сентября, 2018 7 минут назад, NEO сказал: local _, _, _, _, _, cmd = ev.pull("modem_message") local _, _, _, _, _, cmdX = ev.pull("modem_message") local _, _, _, _, _, cmdY = ev.pull("modem_message") Медленно! А робот типа быстрый?? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
NEO 542 Опубликовано: 27 сентября, 2018 10 минут назад, Avevad сказал: А робот типа быстрый?? Конечно, тратится 3 тика на передачу данных. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Avevad Автор темы 15 Опубликовано: 27 сентября, 2018 (изменено) В 27.09.2018 в 18:02, NEO сказал: Конечно, тратится 3 тика на передачу данных. Я имею ввиду что нету смысла ускорять прогу если робот все равно медленно двигается Изменено 30 января, 2020 пользователем Avevad Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Avevad Автор темы 15 Опубликовано: 27 сентября, 2018 На самом деле я не знаю как распарсить строку по пробелам)) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ECS 1 903 Опубликовано: 27 сентября, 2018 14 минут назад, Avevad сказал: На самом деле я не знаю как распарсить строку по пробелам)) А можно и не парсить вовсе, модемы позволяют отсылать/принимать сетевые пакеты с множеством аргументов: -- Отправка modem.broadcast(port, cmd, cmdX, cmdY) -- Прием local localAddress, remoteAddress, port, distance, cmd, cmdX, cmdY = event.pull("modem_message") Если надо "парсить по пробелам", то уот так уот: local message = "meow 12 -249" for part in message:gmatch("[^%s]+") do print("Кусочек: ", part) end >> Кусочек: meow >> Кусочек: 12 >> Кусочек: -249 3 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Avevad Автор темы 15 Опубликовано: 27 сентября, 2018 (изменено) В 27.09.2018 в 18:26, ECS сказал: А можно и не парсить вовсе, модемы позволяют отсылать/принимать сетевые пакеты с множеством аргументов: -- Отправка modem.broadcast(port, cmd, cmdX, cmdY) -- Прием local localAddress, remoteAddress, port, distance, cmd, cmdX, cmdY = event.pull("modem_message") Если надо "парсить по пробелам", то уот так уот: local message = "meow 12 -249" for part in message:gmatch("[^%s]+") do print("Кусочек: ", part) end >> Кусочек: meow >> Кусочек: 12 >> Кусочек: -249 Спасибо, понял Изменено 30 января, 2020 пользователем Avevad Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Avevad Автор темы 15 Опубликовано: 27 сентября, 2018 Мне бы хеловорлды писать на опенось а я уже в роботов суюсь) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
davial 1 972 Опубликовано: 27 сентября, 2018 1 час назад, Avevad сказал: Мне бы хеловорлды писать на опенось а я уже в роботов суюсь) Это и есть твой "хелоуворлд". 😃 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
cyber01 1 704 Опубликовано: 27 сентября, 2018 Скриншоты бы не помешали.. А то 2 часа назад, Avevad сказал: передаваться красивая картинка лабиринта. Не совсем наглядно 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
NEO 542 Опубликовано: 27 сентября, 2018 2 часа назад, Avevad сказал: Я имею ввиду что нету смысла ускорять прогу если робот все равно медленно двигается Нет, как бы робот не двигался медленно математика везде работает и время на передачу сегмента за 3 тика никуда не исчезает, на 100 разведанных блоков программа будет тратить 15 секунд на передачу данных с 3 сообщениями за сегмент данных и 5 секунд при 1 сообщении за сегмент из cmd cmdX cmdY 3 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Fingercomp 4 409 Опубликовано: 27 сентября, 2018 Да, именно. Любители кучу текста осиливать могут и "Войну и мир" перечитать. А на форуме если хочется обсуждения и лайков побольше, то надо к осмысленному, логически корректному и интересному тексту добавить изображений — также осмысленных, корректных в контексте и интересных. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
NEO 542 Опубликовано: 27 сентября, 2018 Я посчитал по такой формуле, - 3 * 100 / 20 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Avevad Автор темы 15 Опубликовано: 27 сентября, 2018 1 час назад, NEO сказал: Нет, как бы робот не двигался медленно математика везде работает и время на передачу сегмента за 3 тика никуда не исчезает, на 100 разведанных блоков программа будет тратить 15 секунд на передачу данных с 3 сообщениями за сегмент данных и 5 секунд при 1 сообщении за сегмент из cmd cmdX cmdY Не очень вас понял, но ускорю способом от ECS Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Asior 586 Опубликовано: 27 сентября, 2018 Нормальная программа, ради такого даже майн запущу и построю лабиринт. Не хватает скриншотов, хотя-бы одного, чтобы было видно как все это добро выглядит. Добавьте развернутое описание чтобы заинтересовать. Опишите принцип работы, а то надо лезть в код чтобы понять, робот тыкается во все стены или же пробирается в центр лабиринта и геосканером получает сразу всю карту. Дальше, а где собственно рекомендации по конфигурации робота и компьютера, ладно я разбираюсь немного в этом вопросе и пойму, что за портянку с ошибками мне робот выдал, а другой посмотрит, забъет на это дело и отправит программу в утиль. Укажи что нужна связанная карта. Об кривом приеме/передаче уже сказали, но повторюсь, можно передавать сразу все данные в 1 пакете. Это и энергоэффективнее, и выглядит не так страшно. Еще совет, используйте локальные функции, так данные которые вы считаете не вырвутся за пределы функции и не нанесут никакого вреда дальнейшим расчетам. Ну и локальные функции работают в разы быстрее чем глобальные. Для обработки событий рекомендую использовать массив, так удобнее находить данные, а не сидеть высчитывать сколько надо поставить заглушек "_, _, _ ...". Ну и вот тебе в помощь небольшой скриптик, запускается через lua. Он отслеживает все входящие сигналы отрисовывая их данные сразу на экран. Удобно использовать если работаешь с приемом сообщений. os.sleep(2) while true do a={event.pull()} for i=1,#a do print(a[i]) end print('----------') end --и подробный разбор программы с отступами os.sleep(2) --пауза на 2 секунды чтобы не ловил нажатия клавиши enter while true do --основной цикл программы. вечный a={event.pull()} --слушатель сигналов for i=1,#a do --прогон всех сигналов, что поймал слушатель print(a[i]) --вывод на экран этих сигналов end print('----------') --разделитель end Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Zer0Galaxy 2 187 Опубликовано: 28 сентября, 2018 12 часов назад, Asior сказал: Ну и вот тебе в помощь небольшой скриптик, Так вроде ж стандартная прога есть, dmesg называется, кажется. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Fingercomp 4 409 Опубликовано: 28 сентября, 2018 1 час назад, Zer0Galaxy сказал: Так вроде ж стандартная прога есть, dmesg называется, кажется. Именно! Почему-то куча народа вместо того, чтобы воспользоваться одной из десятков утилит, включённых в OpenOS, изобретают эти проги снова и снова. Если себя узнали по описанию, то, как только дойдёте до опенкомпа, пропишите, ради кода, ls /bin. И поизучайте содержимое. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Avevad Автор темы 15 Опубликовано: 28 сентября, 2018 (изменено) 27.09.2018 в 15:44, NEO сказал: local _, _, _, _, _, cmd = ev.pull("modem_message") local _, _, _, _, _, cmdX = ev.pull("modem_message") local _, _, _, _, _, cmdY = ev.pull("modem_message") Медленно! Перезалил с поправками от ECS Скрытый текст Изменено 29 сентября, 2018 пользователем eu_tomat перенос описания 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Asior 586 Опубликовано: 28 сентября, 2018 5 часов назад, Avevad сказал: Рекурсивны dfs-подобный алгоритм. Робот в каждое обследованной клетке крутится по сторонам и смотрит есть ли блок перед ним. Если нет то переходит вперед и рекурсивно обследует дальше. Ну я даже незнаю, не слишком ли все сложно? Не проще было прогнать через геосканер, обработать и отрисовать? Можно было бы и не столь агрессивный интерфейс сделать, ну там выводить на экран информацию по проверке на наличие у оборудования связанной карты, информацию типа "Ожидайте, идет построение карты", можно добавить возможность сохранения карты в файлик. Короче есть куда еще улучшать свою программу. 8 часов назад, Fingercomp сказал: Если себя узнали по описанию, то, как только дойдёте до опенкомпа, пропишите, ради кода, ls /bin. И поизучайте содержимое. Лень. И да, я уже очень давно не заходил туда. Жду гайда с обзором всех программ в той директории. И еще, когда постоянно через lua идет тестирование того или иного компонента, постоянно выходить и заходить обратно в lua - как то не очень удобно, поэтому пусть люди пользуются проверенными костылями (или не пользуются и собирают свой велосипед). P.S. Модераторы, поредактируйте данную тему, а то пока чую у автора нет возможности произвести изменение однажды написанного текста. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах