Как использовать GraphHopper для построения пешеходных маршрутов по собственным правилам

Сегодня в твиттере NASA появилось сообщение о начале движения марсохода «Настойчивость» по Красной Планете. Ровер проехал несколько метров для проверки ходовой части. Все закончилось хорошо, системы работают как им и положено. Кроме того, марсоход сфотографировал собственные следы. Общее время заезда — 33 минуты, за это время марсоход преодолел 6,5 метра.

Насколько можно понять, с ровером все хорошо. Но, если помните, марсоход опустился на поверхность при помощи «Небесного крана». Система, которая обеспечила мягкую посадку при помощи тросов, в определенный момент отделилась от ровера, и улетела, использовав оставшиеся запасы топлива. Но куда именно она отправилась и насколько далеко смогла удалиться? Давайте подсчитаем сами.

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

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

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

Вычисление углового размера производится очень просто, вот формула.

Зачем нам угловой размер? Ну, если мы его знаем, плюс нам известен реальный размер, то мы можем с легкостью определить расстояние до объекта — это будет r. Идеальный вариант вычислений — использовать просто ровный колышек, с ним проводить вычисления легче всего. Но поскольку у нас не колышек, а платформа, то будет чуть сложнее. Но все же проблем в ходе вычислений не должно возникнуть.

Первое, что мне сделать — определить поле зрения камеры марсохода, направленной вверх.Точных характеристик нет, поэтому прикинем приблизительно. Вот платформа с марсоходом, подвешенным на тросе перед приземлением.

Согласно НАСА, длина троса составляет 6,4 метра — так что мы знаем показатель ® на этой фотографии. Кроме того, мы можем определить и длину посадочной ступени. Если взять ее ширину, это 2,69 метра, то реальный угловой размер, видимый с ровера, составляет 0,42 радиана. Давайте воспользуемся этой цифрой чтобы установить ширину всего кадра видео с угловым полем зрения (FOV) 0,627 радиана (это будет 35,9 градуса).

Все это крайне важно для дальнейших расчетов. С этими данными можно измерить угловой размер посадочной платформы и рассчитать расстояние до марсохода. Для того, чтобы сделать это, можно воспользоваться специальным инструментов, Tracker Video Analysis. Он дает возможность анализировать размеры объектов на видео. Строим вот такой график.

Можно было бы подумать, что график будет параболическим, что показывало бы постоянное ускорение платформы. Но, похоже, ничего такого не было — если платформа и ускорялась, то минимально. Вычисляем скорость — и получаем около 8,2 м/с.

Стоп! Ведь у нас есть еще кое-что. Дело в том, что посадочная платформа уходит под углом, о чем уже не раз говорилось. И в этом есть смысл — если бы платформа просто взлетела наверх, то после использования всего горючего вся эта конструкция рухнула бы потом вниз — прямо на марсоход. Видео дает возможность определить угол наклона. Здесь помогает вот такой график и формула.

Используя известно расстояние до двигателей, а также видимое расстояние, получаем угол наклона в 52 градуса от вертикали. Будем надеяться, что все верно, поскольку этот показатель нужен для дальнейших расчетов.

Движение платформы


Теперь мы готовы к решению важной физической задачи. Звучит она следующим образом.

Посадочный модуль на Марсе выполняет маневр отлета, чтобы уйти на безопасное расстояние от марсохода Perseverance. Модуль запускает движки для достижения скорости в 8,2 м / с при угле пуска 52 градуса от вертикали. Если у Марса гравитационное поле 3,7 Н / кг, как далеко от марсохода он упадет? Вы можете предположить, что сопротивление воздуха незначительно.

Формулировка задачи есть. Теперь нужен ответ. Ключевой момент здесь в том, что движение в горизонтальном направлении (назовем его х-направление) выполняется с постоянной скоростью. Что касается скорости спуска (у-направление), то здесь у нас есть ускорение — g (где g = 3.7 Н/кг), вызванное силой тяжести. Поскольку она постоянна и действует лишь по вертикали, мы можем разделить задачу на две — собственно, движение в горизонтальной плоскости и движение в вертикальной. Эти два элемента одной задачи независимы, их связывает лишь время.

Давайте начнем с движения по вертикали.

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

Начальное и конечное положение равны нулю (это поверхность). Вот выражение, помогающее определить время.

Если мы используем y0 с расстоянием в 6,4 м (что реалистично), придется использовать квадратное уравнение. Это не так уж и сложно. Но мы можем использовать время и при горизонтальном движении спускаемого аппарата. Вот уравнение движения по горизонтали.

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

Подставляя наши значения, получаем, что расстояние, на которое удалилась платформа — 17,6 метров. Но нет, это вовсе не так. Мы знаем это благодаря фотографиям, опубликованным НАСА. Согласно снимкам, платформа опустилась где-то на расстоянии около километра от ровера. Меняем условие задачи.

Для того, чтобы не представлять опасность для ровера, платформа должна улететь на расстояние около 1 км. Скорость спуска — 8,2 м/с с углом наклона около 52 градусов. На какую высоту поднимется платформа, прежде, чем отключатся двигатели? Используем вот эту формулу.

Теперь используем время для решения очередного уравнения.

Если провести расчеты, получается, что показатель для старта по вертикали — 43 км. Почему так? Дело в том, что платформа ускорилась при запуске движков.

Давайте попробуем провести вычисления на Python. Расчет состоит из двух частей. Во-первых, в течение определенного времени ракета будет лететь с постоянным ускорением в 52 градуса. Нужно подорать лишь время и ускорение, после чего вычислить падение тела на поверхность Марса. Вот код программы, которая производит все вычисления.

GlowScript 3.0 VPython  v0=8.2 g=3.7 theta=52*pi/180 x=1000 y0=.5*g*(x/(v0*sin(theta)))**2-x*cos(theta)/sin(theta)   tgraph=graph(width=550, height=350, xtitle="x-position [m]", ytitle="yx-Position [m]", title="Trajectory of Descent Stage Fly Away") f1=gcurve(color=color.blue)  #starting position x=0 y=6.4  #rocket firing time tf=7  #rocket acceleration a=6  #initial velocity vy=v0*cos(theta) vx=v0*sin(theta)  #time t=0 dt=0.01  #rockets firing while t<tf:   vy=vy+a*cos(theta)*dt   vx=vx+a*sin(theta)*dt   y=y+vy*dt   x=x+vx*dt   t=t+dt   f1.plot(x,y)  #to record max height ymax=0 #projectile motion while y>=0:   vy=vy-g*dt   y=y+vy*dt   x=x+vx*dt   if vy<0.1:     ymax=y   t=t+dt   f1.plot(x,y)  print("Descent Range = ",x," m") print("Maximum Altitude = ",ymax," m") print("Fly Away Time = ",t, " seconds")

Для вычислений берем ускорение платформы в 6 м/с2 и время работы движков в 7 секунд. И получаем уже нормальное значение в 964 метра, что уже очень похоже на правду. Наконец-то.

FavoriteLoadingДобавить в избранное
Posted in Без рубрики

Добавить комментарий