Как работает поршень space engineers

Обновлено: 05.07.2024

The Piston is a mechanical block that can extend in one direction, thereby adding a push/pull mechanism. It was introduced in Update 01.040.

Blocks connected by pistons will appear in different colors in the control panel. The attached grid is referred to as subgrid and is treated differently as far as steering is concerned. The piston will convey power to the subgrids.

Pistons have inventory doors on their head and base, allowing items to be transferred through them using the conveyor system. The small ship pistons interface with Small Conveyors only, due to their hatch size, and are bound by the same restrictions.

Pistons can bend and generate a lot of vibration and shake apart, especially when connected one to another to form subgrids. Properly placed Gyroscopes and stabilising Landing Gear can help to reduce this.

Piston Size
Size Position No. of blocks Length (Meters)
Large Grid Fully Retracted 2 5.0
Large Grid Fully Extended 6 15.0
Small Grid Fully Retracted 2 1.0
Small Grid Fully Extended 6 3.0

Recipe

Как работает поршень space engineers


27 июл. 2014 в 12:09

А всё от того, что разрабам так никто и не рассказал про силу трения.
В этом мире колебания не затухают.

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


28 июл. 2014 в 8:31

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

Tool Bar Assignment

Known Bugs

    the base of an extended piston causes a massive explosion that will kill the player, destroy any nearby thrusters and reactors on the parent ship, and send the gutted wreck hurtling through space and crashing through multiple layers of large light armor blocks.
    • (Doesn't appear to be in the latest version, evidence?)

    Cockpits & Control
    Cockpit, Fighter Cockpit, Control Station, Flight Seat, Passenger Seat, Control Panel, Button Panel, Remote Control

    Automation & Communication
    Antenna, Beacon, Camera, Laser Antenna, Ore Detector, Programmable Block, Sensor, Timer Block

    Mining & Manufacturing
    Basic Refinery, Assembler, Basic Assembler, Drill, Grinder Block, Refinery, Welder Block

    Inventory Management
    Collector, Connector, Conveyor, Conveyor Frame, Conveyor Tube, Curved Conveyor Tube, Ejector, Small Conveyor, Small Conveyor Tube, Small Curved Tube

    Mechanisms & Gravity Control
    Advanced Rotor, Rotor, Piston, Landing Gear, Artificial Mass, Gravity Generator, Spherical Gravity Generator

    Media

    Управления

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

    Камера

    Для смены положения камеры зажмите Alt. Вы можете переключить камеру на вид от третьего или первого лица нажав "V". Вид из кабины пилота доступен только для малых кораблей. При пилотировании больших кораблей доступен только вид от третьего лица, т.к. большие корабли управляются с пульта управления и все данные выводятся непосредственно на экран.

    Материалы сообщества доступны в соответствии с условиями лицензии CC-BY-SA, если не указано иное.

    Settings

    Their minimum and maximum extend distance can be set in the control panel, ranging from 0m to 10m for large or 2m for small. Additionally, the extending and retraction speed can be adjusted with the "Velocity" slider, maxing out at 5m/s in either direction. Like rotors, pistons can be easily toggled from extending to retracting by clicking the "Reverse" button.

    Как я строил гексапод в Space Engineers. Часть 1

    Здравствуйте. Я хочу рассказать про проектирование и программирование системы управления конечностями в гексаподе, построенном в Space Engineers.

    Забегая вперед скажу, что всё, что касается программирования в Space Engineer, будет в следующей статье. В этой я расскажу про обратную кинематику и покажу прототип на HTML Canvas в котором я занимался отладкой алгоритмов.


    Предыстория и постановка задачи.

    Изначально было построено сочлененное шасси, а затем на нем копательный агрегат. Такая конфигурация обеспечивала контакт всх колес с поверхностью на больших неровностях, в том числе и при скручивании.

    image

    Вроде такого

    Но я столкнулся с невозожностью его точно разместить на месторождении, так-как колеса часто соскальзывали вниз (проблема физики — большинство блоков (в том числе и колеса) имеют слишком малый коэффициент трения). Колесная платформа с цельноповоротными колесными модулями оказалась слишком громоздкой и страдала от периодических physics explosion. В результате было решено строить шагающего робота — а именно — гексапод, как самую стабильную шагаюшую платфрому.

    С чего начнет строить гексапод нормальный человек? Наверное зайдет в игру и начнет строить тело робота с конечностями, а потом думать как это всё оживлять. Но это не наш метод (ц)

    Я начал с теории

    Для строения ноги была выбрана следующая схема:

    Inner joint — внутренний сустав, качающийся по оси рысканья (yaw)
    Mid joint и outer joint — внешние суставы, качающиеся по оси тангажа (pitch). Направление отсчета — от основания ноги к концу ноги.


    Угол 0 для всех суставов означает, что нога полностью выпрямлена (прямую ногу будет проще строить в игре).

    Задача — при заданной целевой точке найти такие углы поворота сустовов, что-бы конец ноги оказался в заданной точке. Значит время вспоминать тригонометрию.

    Угол внутреннего сустава можно найти через арктангенс горизонтальных координат цели.


    С двумя другими суставами посложнее. У нас есть длина всех суставов. Можно найти угол к горизонту и расстояние между средним суставом и землей, а так-же расстояние до целевой точки.

    Дальше через теорему косинусов нужно найти углы треугольника по известным сторонам.

    image

    Так это выглядит в коде:

    Движение

    Далее. Робот должен ходить, верно? То-есть мы должны передавать N раз в секунду каждой ноге координаты заданной позиции. С учетом того, что ног 6 и 3 из них двигаются в противофазе получается как-то сложно. Нужно ввести новый уровень абстракции.

    А что если мы представим что нога движется по окружности и ей нужно передавать угол обозначающий позицию на этой окружности? Удаление в сторону становится постоянным и нужно передавать только один параметр, меняющийся циклично. Тогда целевые координыты находятся через синус и косинус.

    Пока достаточно

    Обдумывая как всё будет работать я понял, что задача слишком сложная для того, что-бы всё заработало с первого раза (с дебагом в Space Engineers всё плохо, но об этом в следующей части).

    Поэтому я решил написать визуализатор. Мне хотелось его сделать без дополнительных библиотек и иметь возможность запускать его в один клик и без привязки к окружению.
    Поэтому был выбран JS + HTML Canvas.

    А сейчас нарисуем сову.


    Шаг — структура данных для управления ногой:


    Но для отрисовки понадобятся еще несколько классов:

    Обертка над Canvas:


    В классе Leg есть метод для получения текущих координат суставов. Вот эти координаты мы и будем отрисовывать.

    Так-же я добавил отрисовку точек, в которых находилась нога в N последних тиков.

    И наконец Worker, который будет запускать симуляцию:

    Правда миленько?

    Здесь видно, что траектория движения ног отличается от окружности. Движение по вертикали напоминает урезанную синусоиду, а движение по горизонтали линейно. Это должно уменьшить нагрузку на ноги.

    Теперь несколько пояснений, что происходит в коде.

    Как научить робота поворачивать?

    Для поворота я рассмотрел 2 ситуации:

    Если робот стоит — ноги двигаются по окружности.

    Единственное но — движение именно по окружности сильно усложнило-бы код с текущей реализацией. Поэтому ноги двигаются по касательной к окружности.

    Когда робот двигается нужно реализовать что-то вроде Ackermann steering geometry с дифференциалом.

    image

    То-есть длина шага ног, двигающихся по меньшему радиусу, — меньше. А угол поворота — больше.

    Что-бы реализовать изменение угла поворота для каждой ноги я придумал следующий алгоритм:

    1. Считаем угол от изначального положения ноги к центру робота:


    2. Считаем угол от изначального положения ноги к (центру робота + смещение, которое отвечает за поворот — это изменяемый параметр):


    3. Поворачиваем шаг на разницу этих углов:


    Но это не всё. Еще нужно изменять длину шага. Реализация в лоб — домножать длину шага на изменение расстояния до центра — имело фатальный недостаток — внешние ноги слишком широко шагали и начинали задевать друг друга.

    Поэтому пришлось усложнить реализацию:

    1. Считаем изменение расстояния до центра для каждой ноги:


    0.3 — магическое число

    2. Находим отношение между минимальным и максимальным изменением


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


    Вот как это работает (gif 2 мегабайта):

    → Поиграться с результатом можно тут

    Для более пристального изучения рекомендую сохранить содержимое в html файл и продолжить в любимом текстовом редакторе.

    Contents

    Читайте также: