Doob 2 749 Опубликовано: 14 сентября, 2015 (изменено) Иногда надо получить относительные или абсолютные координаты робота или узнать путь, по которому он прошел, чтобы вернуть робота назад.Я немного модифицировал стандартную библиотеку робота, теперь можно задавать/удалять/просматривать координаты робота. Нет функции сохранения координат в файл, поэтому после перезагрузки координаты сбросятся, поэтому это делать надо самостоятельно. Так же, нафигация не работает, если управлять роботом, как компонентом (т.е. в обход robot API) скачать: pastebin get -f Hb32aQeR /lib/robot.lua Список новых функций:robot.getPos() - возвращает текущие координаты, если не заданы, то при первой загрузке библиотеки устанавливаются x, y, z = 0, 0, 0, а направление - север.robot.setPos(x, y, z, side) - устанавливает заданные координаты, side задается в формате N/E/S/W (стороны света)robot.getPath() - возвращает пройденный путь в виде строки, каждому движению соответсвует одна буква - [F]orward, [В]ack, p, [D]own, [L]eft, [R]ight. (например 'FFFULFFD' - три вперед, один вверх, один влево, два вперед, один вниз)robot.setPath(boolean) - активация/деактивация записи маршрута, соответственно true/false Можно было бы сделать в стиле navigation API с использованием sides API, но это не особо удобно. Триггер записи маршрута по-умолчаию отключен, для экономии памяти, ибо каждое движение съедает один байт, по-уму надо прикрутить автоматическое сжатие. Чтобы пройти по пройденному маршруту обратно, надо в начале активировать robot.setPath(true), а в конце запустить примерно такую программку: local robot = require('robot') local path = robot.getPath() local invert = { ['F'] = 'back', ['B'] = 'forward', ['L'] = 'right', ['R'] = 'left', ['U'] = 'down', ['D'] = 'up' } for i = #path, 1, -1 do os.execute('go '..invert[string.sub(path, i, i)]) end Полезно для полностью автономных программ.Очень удобно вытаскивать робота-грифера из чужих приватов.Утилита, через которую можно проверить и задать координаты: pastebin get nJ5i4qiL /bin/pos.lua Программа движения сквозь блоки:pastebin get X5G4PHnS /bin/goto.luaРоботу необходим инструмент для разрушения блоков, для запуска надо указать координаты. Изменено 24 сентября, 2015 пользователем Doob 2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
SergOmarov 34 Опубликовано: 15 сентября, 2015 Хороший подход ,если нету навигационных точек, надеюсь, с открытием лайта администрация поможет расставить пару таких для моей навигации) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
HeroBrine1st 88 Опубликовано: 16 июня, 2017 (изменено) Предложу более усовершенствованный способ возвращения назад. Очень полезен для автономных роботов-шахтеров, ибо робот возвращается передом и ломает блоки перед собой. local robot = require('robot') robot.setPath(true) --ваш код local path = robot.getPath() local invert = { ['F'] = 'forward', ['B'] = 'back', ['L'] = 'right', ['R'] = 'left', ['U'] = 'down', ['D'] = 'up' } robot.turnAround() for i = #path, 1, -1 do robot.swing(3) os.execute('go '..invert[string.sub(path, i, i)]) end robot.turnAround() Изменено 16 июня, 2017 пользователем HeroBrine1st Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах