Перейти к содержимому

eu_tomat

Модераторы
  • Публикации

    2 666
  • Зарегистрирован

  • Посещение

  • Победитель дней

    331

Сообщения, опубликованные пользователем eu_tomat


  1. 1 час назад, Syabro сказал:

    Отсканировать нормально комнату не выйдет по причине возможных замкнутых пространств в двумерном измерении. Внутрь он просто не попадет.

    18 минут назад, Syabro сказал:

    Все таки это невозможно сделать в 2д, если есть внутренние замкнутые пустоты

    Исследовать несвязанные замкнутые полости ощупыванием границ не удастся также и в 3D. На то они и замкнутые и несвязанные. Но автору вопроса это вряд ли требуется, учитывая, что он планировал исследовать комнату непосредственно контактируя с её границами.

     


  2. 49 минут назад, Syabro сказал:

    Тем не менее простым способом добиться хоть какого-то результата является правило левой руки (или правой).

    1. Робот двигается до упора.

    ...

    Автор вопроса не конкретизировал, что за комнаты требуется сканировать. Поэтому такой алгоритм не всегда применим:

    В 13.12.2021 в 11:46, eu_tomat сказал:

    Например, можно сначала двигаться до ближайшего препятствия, а потом двигаться так, чтобы препятствие всегда оказывалось справа от робота. Такой способ позволит быстро обойти периметр стены, но он плохо применим для комнат в внутренними препятствиями, например, с колоннами.

     

     


  3. 1 час назад, Zer0Galaxy сказал:

    Создаем массив 100х160

    Кстати, в исходных условиях не сказано, как ориентирован робот. Поэтому нужно иметь в виду, что полученный массив на каком-то этапе, возможно, потребуется повернуть, чтобы итоговая карта вписалась в экран.

    1 час назад, Zer0Galaxy сказал:

    Считаем что робот находится в позиции X=80, Y=50

    И, возможно, массив потребуется сдвинуть, если робот находится в другой стартовой позиции.


  4. 4 часа назад, Belzebub сказал:

    не пойму как написать прогу для обхода всей комнаты (неизвестный размер и форма комнаты, неизвестная стартовая позиция и угол робота и тд. робот должен пройтись по всем доступным блокам по 2d координатам и вернуться на стартовую позицию. комната 2d, замкнутая стенами.)

    Если говорить коротко, то любая сложная задача решается её дроблением на задачи меньшего размера. Дробить задачи следует до тех пор, пока их решение не станет очевидным. Дело осложняется тем, что каждую из подзадач можно решить разными способами, имеющими свои преимущества и недостатки.

     

    На какие основные блоки можно разделить нашу задачу?

    • Обязательно потребуется способ определения текущего положения робота. Эту задачу можно с помощью расширения навигации, либо программным трекингом. В первом случае имеется уже готовый трекинг из коробки, но он ограничен квадратом какого-то размера в зависимости от выбранной карты. Второй способ практически не имеет ограничений, но требует аккуратного программирования.
    • Потребуется выбрать способ определения блока. Геосканер поможет определить плотность блока на расстоянии, и более подробную информацию о блоке при непосредственном контакте. Функция robot.detect() позволит определить наличие блока непосредственно перед роботом, а robot.compare() кроме этого позволяет сравнить блок перед роботом с предметом в его инвентаре.
    • Потребуется алгоритм обхода комнаты. Универсального оптимального алгоритма не существует. В зависимости от возможных конфигураций комнаты будет эффективен тот или иной алгоритм. Например, можно сначала двигаться до ближайшего препятствия, а потом двигаться так, чтобы препятствие всегда оказывалось справа от робота. Такой способ позволит быстро обойти периметр стены, но он плохо применим для комнат в внутренними препятствиями, например, с колоннами. Поэтому может потребоваться сплошной обход комнаты с полным построением карты пространства. Такой обход будет медленнее, и потребует большого количества памяти. Кстати, не факт, что вся карта одновременно поместится в оперативной памяти робота. Тогда потребуется ещё и придумать способ разделения карты на сегменты.

     

    4 часа назад, Belzebub сказал:

    Абстрактны только условия в которые помещён робот (ширина и размер комнаты и позиция/угол робота при запуске), а компонетны можно и конкретизировать.

    Абстрактные задачи решают математики, и найденные ими решения должны работать хотя бы в теории.

    Программисты же решают практические задачи, которые должны работать в ограниченных условиях.

    Имея ограниченный объём памяти, робот даже теоретически не сможет построить карту любой абстрактной комнаты.


  5. Я плохо понял смысл задачи и вопроса.

     

    1 час назад, Belzebub сказал:

    Хочу написать робота который будет сканировать местность по двум координатам ширина/длинна. При первом запуске робот будет бегать по всем блокам и сохранять инфу для дальнейшей навигации.

    Местность можно сканировать с помощью геосканера с минимальными движениями робота.

    Или цель заключается именно в сканировании местности без геосканера?

     

    1 час назад, Belzebub сказал:

    Есть комната абстрактной формы и размеров

    А робот тоже абстрактный? Потому что конкретные роботы, например, имеют ограниченный объём памяти.

     

    1 час назад, Belzebub сказал:

    детоурнутые функции поворота/передвижения робота

    Какие функции?

     

    1 час назад, Belzebub сказал:

    Как заставить робота обойти все доступные блоки?

    Легко: достаточно лишь написать соответствующую программу. Или надо конкретизировать вопрос.


  6. 6 часов назад, Belzebub сказал:

    А какая версия sha используется на гитхабе?
    Как бы не получилось так что я сравниваю sha1 с sha256

    Это можно узнать по количеству символов. Для записи SHA-1 используется 40 шестнадцатеричных цифр, а для SHA-256 — 64 цифры.

    • Нравится 1

  7. 12 часа назад, Belzebub сказал:

    Как мне превратить шестнадцатеричное представление в строку для сравнения?

    Предлагаю поступить наоборот:

    sha256bin = component.data.sha256(text)
    
    sha256hex = ""
    for i=1,#sha256 do
      sha256hex=sha256hex..("%x"):format(sha256bin:byte(i))
    end
    • Нравится 1

  8. 1 час назад, Disc2 сказал:

    это как-то странно - т.е. черепаха должна двигаться,проверять есть ли перед ней сундук,если есть сундук - выкладывать вещи,если перед ней не сундук,а другой блок - ломать его и двигаться дальше,проверять наличие сундука и т.д.

    Кстати, да. При копке руды довольно часто встречаются заброшенные шахты с сундуками. Не вываливать же в них всю добытую руду. Наоборот, имеет смысл всё содержимое сундука забрать и унести.


  9. Всё оказалось гораздо лучше. В каких-то версиях ComputerCraft черепашки обзавелись новыми возможностями:

     

    turtle.inspect()

    Returns the ID string and metadata of the block in front of the Turtle

     

    Да и вообще, рекомендую ознакомиться с актуальным API черепашек:

    http://www.computercraft.info/wiki/Turtle_(API)

    Здесь перечислено всё, на что черепашки способны.

     


  10. Насколько мне известно, однозначно идентифицировать любой блок способен только геосканер, но он доступен только для роботов OpenComputers.

     

    Черепашкам же доступны лишь функции turtle.compare/Up/Down/To, позволяющие сравнить блок с имеющимися образцами в инвентаре черепашки.

    http://www.computercraft.info/wiki/Turtle.compare


  11. Поступила заявка на плоскую, не выпирающую из пола схему размещения блоков. Предлагаю такой вариант:

    3Zrb91s.png

    Точка варпа обозначена красным. Если сместить её ближе к телепорту, датчик движения может не сработать.


  12. 13 минуты назад, Anryyyy сказал:

    Но есть индекс который запрашивает id или названия блока или предмета?

    turtle.getItemDetail(slot) возвращает информацию о предмете: количество, название, степень износа.

    https://www.computercraft.info/wiki/Turtle.getItemDetail

     

    Но это не сильно поможет. Если инвентарь полностью забит, то черепашка сможет сломать нужный блок, но забрать его не сможет. Поэтому заполненность инвентаря всё равно потребуется контролировать.


  13. 2 минуты назад, Anryyyy сказал:

    можете пожалуйста скинуть код  lua чанклоудера

    У меня есть демонстрационный код. Он показал свою работоспособность в плоском мире. В других мирах может забиться инвентарь, и тогда черепашка не сможет забрать мировой якорь.

     

    -- В первом слоте надо расположить топливо
    -- В 15 и 16 слотах два мировых якоря, заряженных жемчугом.
    
    -- заправиться топливом
    turtle.select(1)
    turtle.refuel()
    
    -- установить первый чанклодер
    turtle.select(15)
    turtle.digDown()
    turtle.placeDown()
    turtle.select(16)
    
    for i=1,100 do
      print( "chunk ", i )
      -- Установить чанклодер в следующий чанк
      for i=1,16 do
        while not turtle.forward() do
          turtle.dig()
        end
      end
      turtle.turnLeft()
      turtle.turnLeft()
      turtle.digDown()
      turtle.placeDown()
      -- Забрать предыдущий чанклодер
      for i=1,16 do
        while not turtle.forward() do
          turtle.dig()
        end
      end
      turtle.turnLeft()
      turtle.turnLeft()
      turtle.digDown()
      -- Вернуться к текущему чанклодеру
      forward_chunk()
    end
    
    -- По завершении программы забрать чанклодер
    turtle.select(15)
    turtle.digDown()

     


  14. 1 минуту назад, Anryyyy сказал:

    Можно ли загружать санки через для черепашки через lua

    Именно через Lua я и заставляю черепашку установить чанкдодер и загрузить его топливом.

     

    3 минуты назад, Anryyyy сказал:

    Можно ли двигать мировые якоря?

    Можно. Забираем мировой якорь с помощью turtle.dig(), перемещаемся в нужную позицию, устанавливаем с помощью turtle.place(), и закидываем жемчуг с помощью turtle.drop(). Всё работает как часы.

     

    Но есть нюанс. Любой чанклодер не мешает выгрузке чанков при перезагрузке сервера. Поэтому, чтобы черепашки не заблудились, они должны закончить добычу до рестарта сервера. Роботы OpenComputers лишены этого недостатка, они более устойчивы к выгрузкам чанков.

    • Спасибо 1

  15. 2 минуты назад, Anryyyy сказал:

    А можно обойтись без opencomputer?

     

    Можно, если есть другие моды, предоставляющие загрузчики чанков:

    11 час назад, eu_tomat сказал:

    Стационарные чанклодеры тоже можно в некоторой степени мобилизовать. Для этого потребуются два чанклодера. Пока один чанклодер грузит область 3x3 чанка, черепашка переходит в один из загруженных чанков и устанавливает в него второй чанклодер. Потом черепашка возвращается за первым чанклодером, и переносит его в следующий чанк и т.д. Такая схема позволяет черепашке всегда находиться в загруженных чанках и не останавливать свою работу.

     


  16. 1 минуту назад, Anryyyy сказал:

    Я новичок, и не много не понимаю. Вроде в моде нет апргрейдов?

    Апгреды есть для роботов мода OpenComputers.

    А черепашки из мода ComputerCraft могут лишь передвигать стационарные загрузчики чанков.


  17. Выгрузке чанков может препятствовать чанклодер. В зависимости от установленных модов возможны разные варианты чанклодеров.

     

    Мод OpenComputers, например, предоставляет чанклодеры, устанавливаемые в роботов. Такой робот держит загруженной область 3x3 чанка независимо от своего положения. Загруженная область движется вместе с роботом. Очень удобно.

     

    Стационарные чанклодеры тоже можно в некоторой степени мобилизовать. Для этого потребуются два чанклодера. Пока один чанклодер грузит область 3x3 чанка, черепашка переходит в один из загруженных чанков и устанавливает в него второй чанклодер. Потом черепашка возвращается за первым чанклодером, и переносит его в следующий чанк и т.д. Такая схема позволяет черепашке всегда находиться в загруженных чанках и не останавливать свою работу.


  18. 9 часов назад, smirnov__ сказал:

    помогите сделать полное описание действий

    А насколько полное описание требуется?

     

    Сделать абсолютно полное описание возможно, но очень трудно. Человеку, умеющему ходить, достаточно иметь простую инструкцию: сделай три шага вперёд. А если раскладывать каждый шаг до уровня работы отдельных мышц и нервных окончаний, то можно несколько томов написать. И не все захотят читать такое слишком подробное описание. А если ещё рассмотреть, какие на всех этапах химические преобразования происходят, то

     

    Поэтому нужны конкретные вопросы. Что именно не понятно? Схема сборки? Назначение блоков? Код программы? Что-то ещё?


  19. 7 часов назад, Disc2 сказал:

    А можно в дополнение к этой теме\программе,попросить сделать функцию...

    Лучше оформить эту просьбу отдельной темой. Это упростит поиск нужной информациии на форуме.

×
×
  • Создать...