35

Браузерный симулятор ручной стыковки с МКС от SpaceX

Браузерный симулятор ручной стыковки с МКС от SpaceX

Ссылка на симулятор: https://iss-sim.spacex.com/


Видео скоростного прохождения (спидрана):

У меня получилось состыковаться со 2-й попытки, а у вас с какой?


Как играть:

1) Значение каждого угла и координаты в момент касания со шлюзом должно быть не больше 0.2, а скорость -- меньше 0.080 м/с (поначалу можно разогнаться, но в конце скорость должна быть не больше данного значения)

2) На правом джойстике вы корректируете 3 угла корабля: поворот по крену (вращение по часовой-против часовой стрелки), тангажу (поворот вверх-вниз), рысканью (поворот влево-вправо)

3) На левом джойстике вы корректируете поступательное движение модуля: движение вперед-назад (кнопки "+" и "-"), влево-вправо, вверх-вниз

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

5) Нужно попасть в зелёную точку

6) Синие цифры -- угловая скорость. "Rate" в правом нижнем углу -- скорость приближения к МКС.

7) Нужно учитывать, что движение происходит в космосе, сопротивления воздуха или трения нет, поэтому из-за инерции любая скорость движения или вращения будет сохраняться, пока вы её не погасите


БОНУС: Если нажать на значок шестерёнки, то можно задать в настройках плоскую Землю (Flat). Плоскоземельщики оценят.


БОНУС 2: Сзади корабля летает автомобиль Тесла (её действительно в реальности запустили на орбиту)

БОНУС 3:

Есть программа для автоматической стыковки (для Хрома). Как ей пользоваться:

1) Открыть сайт и запустить симулятор.

2) Нажать F12

3) Открыть вкладку Console

4) Вставить код, написанный ниже. Нажать Enter.

5) Наслаждаться.

Код:

function simulateKey(keyCode, type, modifiers) {

var evtName = (typeof (type) === "string") ? "key" + type : "keydown";

var modifier = (typeof (modifiers) === "object") ? modifier : {};

var event = document.createEvent("HTMLEvents");

event.initEvent(evtName, true, false);

event.keyCode = keyCode;

for (var i in modifiers) {

event[i] = modifiers[i];

}

document.dispatchEvent(event);

}

function keyPress(keyCode) {

simulateKey(keyCode)

setTimeout(() => simulateKey(keyCode, "up"), 15);

}

let _accelerator = 69;

let _brake = 81;

let _translateLeft = 65;

let _translateRigth = 68;

let _translateUp = 87;

let _translateDown = 83;

let _left = 37;

let _rigth = 39;

let _up = 38;

let _down = 40;

let _rollRigth = 105;

let _rollLeft = 103;

let index = 0;

roll = {

path: [0, 0, 0, 0, 0],

prev: 0,

speed: 0,

}

pitch = {

path: [0, 0, 0, 0, 0],

prev: 0,

speed: 0,

}

yaw = {

path: [0, 0, 0, 0, 0],

prev: 0,

speed: 0,

}

z = {

path: [0, 0, 0, 0, 0],

prev: 0,

speed: 0,

}

y = {

path: [0, 0, 0, 0, 0],

prev: 0,

speed: 0,

}

function calculatePath(data, value) {

data.path = [];

if (data.prev === value) {

data.speed = 0;

}

for (let i = 0; i < 5; i++) {

if (0 < value + data.speed * (i + 1)) {

data.speed -= 0.1;

data.path.push(-1);

} else if (value + data.speed * (i + 1) < -0) {

data.speed += 0.1;

data.path.push(1);

} else if (i > 0) {

if (0 < data.speed) {

data.speed -= 0.1;

data.path.push(-1);

} else if (data.speed < 0) {

data.speed += 0.1;

data.path.push(1);

} else {

data.path.push(0);

}

} else {

data.path.push(0);

}

}

data.prev = value;

}

function A() {

let range = parseFloat($("#range .rate").textContent.split(' '));

let yDistance = parseFloat($("#y-range .distance").textContent.split(' ')[0]);

let zDistance = parseFloat($("#z-range .distance").textContent.split(' ')[0]);

let rollError = parseFloat($("#roll .error").textContent);

let pitchError = parseFloat($("#pitch .error").textContent);

let yawError = parseFloat($("#yaw .error").textContent);

let rate = parseFloat($("#rate .rate").textContent.split(' ')[0]);

if (index % 5 === 0) {

calculatePath(roll, rollError);

calculatePath(pitch, pitchError);

calculatePath(yaw, yawError);

calculatePath(y, yDistance);

calculatePath(z, zDistance);

}

let rollStep = roll.path[index % 5];

if (0 < rollStep) {

keyPress(_rollLeft);

} else if (rollStep < 0) {

keyPress(_rollRigth);

}

let pitchStep = pitch.path[index % 5];

if (0 < pitchStep) {

keyPress(_up);

} else if (pitchStep < 0) {

keyPress(_down);

}

let yawStep = yaw.path[index % 5];

if (0 < yawStep) {

keyPress(_left);

} else if (yawStep < 0) {

keyPress(_rigth);

}

let yStep = y.path[index % 5];

if (0 < yStep) {

keyPress(_translateRigth);

} else if (yStep < 0) {

keyPress(_translateLeft);

}

let zStep = z.path[index % 5];

if (0 < zStep) {

keyPress(_translateUp);

} else if (zStep < 0) {

keyPress(_translateDown);

}

const rangeLimit = Math.min(Math.max((Math.abs(range) / 100), 0.05), 2);

if (-rate < rangeLimit) {

keyPress(_accelerator);

} else if (-rangeLimit < -rate) {

keyPress(_brake);

}

index++;

setTimeout(A, 200);

}

A();

Правила сообщества

Какие тут могут быть правила, кроме правил установленных самим пикабу :)

1
Автор поста оценил этот комментарий
В настройках можно тип земли на плоский поменять
раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Да, я написал об этом в посте.

Автор поста оценил этот комментарий

Что там сложного? У меня с 1 раза получилось, выровнял по углам и погнал вперед. После выравнивания стрелками и креном, начинаешь приближение корректируя курс wsad'ом после выставления всех углов на 0, другие клавиши не нужны.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

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

Щма
Автор поста оценил этот комментарий

при открытии сайта (загрузке?) вентилятор на ноутбуке загудел словно я нехилую игру запустил=)

раскрыть ветку (1)
Автор поста оценил этот комментарий

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

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества