Commit 86e2e6de authored by Arne Graf's avatar Arne Graf

added master thesis

parent 8382c2c8
%% LyX 2.0.6 created this file. For more info, see http://www.lyx.org/.
%% Do not edit unless you really know what you are doing.
\RequirePackage{fix-cm}
\documentclass[english]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{luainputenc}
\setlength{\parskip}{\medskipamount}
\setlength{\parindent}{0pt}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{fixltx2e}
\makeatletter
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Textclass specific LaTeX commands.
\numberwithin{equation}{section}
\numberwithin{figure}{section}
\numberwithin{table}{section}
\makeatother
\usepackage{babel}
\begin{document}
\title{Automated Routing in Pedestrian Dynamics}
\author{Arne Graf}
\date{2015-09-01}
\maketitle
\section{Introduction}
\section{ODE based Model (dep.? -> opt.?)}
\section{Modelling}
\subsection{Eikonal Equation}
The ``Eikonal Equation'' in a domain $\Omega$, subset of $\mathbb{R}^{n}$,
\begin{align*}
\vert\nabla u(x)\vert\quad= & \quad F(x),x\in\Omega,\\
\mathrm{s.t.\qquad u|_{\partial\Omega}\quad=} & \quad0\\
\end{align*}
yields ``first-arrival-times'' in a spacial domain provided a target
region within the domain.
\subsection{Safe Navigation using the Floorfield}
\subsection{Distances-Field}
\subsubsection{Cost of a ``full'' preprocessing step }
\subsubsection{Distances-Field and repulsive Wall-Forces}
\subsection{Variant Model}
In the latter, a new approach in modeling is described, aiming for
the avoidance of faulty interaction of pedestrians and walls while
maintaining the positive characteristics of row-formation, stop-and-go
waves and such, like seen in experimental data. In many of the existing
models using mathematical formulations in continouus domain, agents
breach wall-surfaces and get stuck inside of walls or obstacles.
There are two mechanics used to avoid ``clipping'':
\begin{enumerate}
\item The routing of pedestirans makes use of the eikonal-equation, computed
with an inhomogenious speed-function, $s(x)$, which favours keeping
a distance to obstacles, walls and corners.
\item The distance to the closest wall of each pedestrian affects the moving
speed if and only if the agent's moving vector includes a component
geared towards the wall.
\end{enumerate}
In order to keep the model simple, repulsive wall forces as seen in
Social Force Models are omitted. An analogy to repulsive pedestrian
forces though is used to keep agents from colliding with each other.
The model differs from SFMs, as other agents effect the desired moving
direction in full, the magnitude on the other hand is effected by
other agents only to a certain degree (as described in ).
\begin{alignat*}{1}
\Delta\vec{x}\quad=\quad & \Delta t\cdot\vec{v}_{res}\\
\vec{v}_{res}\quad=\quad & \left(1-\frac{1}{2}\left[(\vec{v}_{n}\cdot(-\nabla distances)_{n})+\vert(\vec{v}_{n}\cdot(-\nabla distances)_{n})\vert\right]\right)\cdot\vec{v}_{n}\\
\vec{v}_{n}\quad=\quad & g(g(\vec{v}_{ff})+g(\sum\vec{v}_{repP,i}))\\
\vec{v}_{ff}\quad=\quad & v_{ff}(\vec{x})\\
\end{alignat*}
\begin{align*}
\Delta\vec{x}\quad= & \quad\Delta t\cdot\vec{v}_{res}\\
\vec{v}_{res}\quad= & \quad\bigg(1-\frac{1}{2}\bigg[\langle\vec{v}_{n},(-\nabla distances)_{n}\rangle+\big\vert\langle\vec{v}_{n},(-\nabla distances)_{n}\rangle\big\vert\bigg]\bigg)\cdot\vec{v}_{n}\\
\vec{v}_{n}\quad= & \quad g\big(\quad g(\vec{v}_{ff})+g(\underset{\small i}{\sum}\vec{v}_{repP,i})\quad\big)\\
\vec{v}_{ff}\quad= & \quad v_{ff}(\vec{x})
\end{align*}
\subsection{Idea of Separation of a Moving-Vector into Direction and Magnitute}
\subsubsection{no clipping}
\subsubsection{Recycling the Distances Field (neg. Gradient must be saved)}
$\vec{v}_{res}\quad=\quad\bigg(1-\frac{1}{2}\bigg[\langle\vec{v}_{n},(-\nabla distances)_{n}\rangle+\big\vert\langle\vec{v}_{n},(-\nabla distances)_{n}\rangle\big\vert\bigg]\bigg)\cdot\vec{v}_{n}$
\section{Testing}
\section{Shortcomings}
\subsection{Floorfield}
\subsubsection{Multiple Goals }
The floorfield is a usefull tool in routing of pedestirans through
any geometry.
\subsubsection{Multiple Floors}
\paragraph{Neighboring Relations}
\subsection{Avoid Clipping}
\section{Outlook}
\subsection{Usage in JuPedSim}
\subsection{Floorfields in Triangulated Domains}
\subsection{Parallelization}
\section{Appendices}
\subsection{Classes and their Relations}
\subsection{Code Snippets}
\section{Bibliography}
\end{document}
\relax
\select@language{english}
\@writefile{toc}{\select@language{english}}
\@writefile{lof}{\select@language{english}}
\@writefile{lot}{\select@language{english}}
\@writefile{toc}{\contentsline {section}{\numberline {1}Introduction}{1}}
\@writefile{toc}{\contentsline {section}{\numberline {2}ODE based Model}{1}}
\@writefile{toc}{\contentsline {section}{\numberline {3}Modelling}{1}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.1}Variant Model}{3}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.2}Eikonal Equation}{4}}
\@writefile{lof}{\contentsline {figure}{\numberline {3.1}{\ignorespaces Isolines of a floor-field.}}{4}}
\newlabel{fig:BottleneckObstaclePure}{{3.1}{4}}
\newlabel{replace with bibtex: http://roboticslab.uc3m.es/roboticslab/researchtopic/fast-marching}{{3.2}{4}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.3}Safe Navigation using the Floorfield}{5}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.4}Distances-Field}{6}}
\newlabel{fig:DistanceField2}{{3.4}{6}}
\newlabel{fig:BottleneckObstaclePure2}{{3.4}{6}}
\newlabel{fig:BottleneckObstacleEnhanced}{{3.4}{6}}
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.4.1}Cost of a ``full'' preprocessing step }{6}}
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.4.2}Distances-Field and repulsive Wall-Forces}{6}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.5}Idea of Separation of a Moving-Vector into Direction and Magnitute}{7}}
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.5.1}no clipping}{7}}
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.5.2}Recycling the Distances Field (neg. Gradient must be saved)}{7}}
\@writefile{toc}{\contentsline {section}{\numberline {4}Testing}{7}}
\@writefile{toc}{\contentsline {section}{\numberline {5}Outlook}{7}}
\@writefile{toc}{\contentsline {subsection}{\numberline {5.1}Floor-field}{7}}
\@writefile{toc}{\contentsline {subsubsection}{\numberline {5.1.1}Multiple Goals }{7}}
\@writefile{toc}{\contentsline {subsubsection}{\numberline {5.1.2}Multiple Floors}{7}}
\@writefile{toc}{\contentsline {paragraph}{Neighboring Relations}{7}}
\@writefile{toc}{\contentsline {subsection}{\numberline {5.2}Usage in JuPedSim}{8}}
\@writefile{toc}{\contentsline {subsection}{\numberline {5.3}Floor-fields in Triangulated Domains}{8}}
\@writefile{toc}{\contentsline {subsection}{\numberline {5.4}Parallelization}{8}}
\@writefile{toc}{\contentsline {section}{\numberline {6}Appendices}{8}}
\@writefile{toc}{\contentsline {subsection}{\numberline {6.1}Fast-Marching Algorithm}{8}}
\@writefile{toc}{\contentsline {subsection}{\numberline {6.2}Classes and their Relations}{8}}
\@writefile{toc}{\contentsline {subsection}{\numberline {6.3}Code Snippets}{8}}
\@writefile{toc}{\contentsline {section}{\numberline {7}Bibliography}{8}}
@online{Universidad Carlos III de Madrid, RoboticsLab,
author = {L.Moreno et al.},
title = {Fast Marching},
date = {2014-12-19},
url = {roboticslab.uc3m.es/roboticslab/research/fast-marching},
}
\ No newline at end of file
This is BibTeX, Version 0.99d (TeX Live 2013/Debian)
Capacity: max_strings=35307, hash_size=35307, hash_prime=30011
The top-level auxiliary file: masterthesisArGr.aux
I found no \citation commands---while reading file masterthesisArGr.aux
I found no \bibstyle command---while reading file masterthesisArGr.aux
You've used 0 entries,
0 wiz_defined-function locations,
83 strings with 506 characters,
and the built_in function-call counts, 0 in all, are:
= -- 0
> -- 0
< -- 0
+ -- 0
- -- 0
* -- 0
:= -- 0
add.period$ -- 0
call.type$ -- 0
change.case$ -- 0
chr.to.int$ -- 0
cite$ -- 0
duplicate$ -- 0
empty$ -- 0
format.name$ -- 0
if$ -- 0
int.to.chr$ -- 0
int.to.str$ -- 0
missing$ -- 0
newline$ -- 0
num.names$ -- 0
pop$ -- 0
preamble$ -- 0
purify$ -- 0
quote$ -- 0
skip$ -- 0
stack$ -- 0
substring$ -- 0
swap$ -- 0
text.length$ -- 0
text.prefix$ -- 0
top$ -- 0
type$ -- 0
warning$ -- 0
while$ -- 0
width$ -- 0
write$ -- 0
(There were 2 error messages)
This diff is collapsed.
This diff is collapsed.
......@@ -200,29 +200,13 @@ void GradientModel::ComputeNextTimeStep(double current, double deltaT, Building*
}
}
}
//Point fd = ForceDriv(ped, room);
//Point acc = (fd + repPed) / ped->GetMass();
//Point acc = repPed / ped->GetMass(); //maybe multiply with deltaT again
//printf("repulsive Force %f %f\n", acc.GetX(), acc.GetY());
//result_acc.push_back(acc);
result_acc.push_back(repPed); //only orientation is of interest
//if (ped->GetID() == 48) {
// printf("%f \n", repPed.Norm());
//}
}
// update
for (int p = start; p <= end; ++p) {
Pedestrian* ped = allPeds[p];
//debugoutput:
//if (ped->GetV().NormSquare() == 0.) {
// printf("V = 0!! at %f %f %f\n", ped->GetPos().GetX(), ped->GetPos().GetY(), current);
// printf("Distance to Target: %f\n", ped->GetDistanceToNextTarget());
//}
//Point vToAdd = result_acc[p - start] * deltaT;
Point movDirection = (result_acc[p-start].Norm() > 1) ? result_acc[p - start].Normalized() : result_acc[p-start];
Point toTarget = (_direction->GetTarget(nullptr, ped)).Normalized();
if (toTarget.NormSquare() == 0.) { // @todo:ar.graf: this if overcomes shortcomming of floorfield (neggrad[targetpoints] == Point(0., 0.))
......@@ -232,15 +216,11 @@ void GradientModel::ComputeNextTimeStep(double current, double deltaT, Building*
movDirection = (movDirection + toTarget);
movDirection = (movDirection.Norm() > 1.) ? movDirection.Normalized() : movDirection;
// if (movDirection.Norm() < .6) {
// std::cerr << ".6 unterschritten" << std::endl;
// }
double desired_speed = ped->GetV0Norm();
Point oldMov = Point(0., 0.);
if (desired_speed > 0.) {
oldMov = ped->GetV() / desired_speed; //@todo: ar.graf
}
oldMov = ped->GetV() / desired_speed; //@todo: ar.graf (GetV() returns a vector: distance travelled in one time-unit (s)
} // so oldMov is now: vector distance travelled in one time-unit with unit speed = sth around unit-vector or smaller
//anti jitter //_V0 = _V0 + (new_v0 - _V0)*( 1 - exp(-t/_tau) );
oldMov = (oldMov.Norm() > 1.)? oldMov.Normalized() : oldMov; //on the safe side ... should not be necessary as it must be [0, 1]
......@@ -261,52 +241,13 @@ void GradientModel::ComputeNextTimeStep(double current, double deltaT, Building*
antiClippingFactor = ( 1 - .5*(dotProduct + fabs(dotProduct)) );
}
movDirection = movDirection * (antiClippingFactor * ped->GetV0Norm() * deltaT);
// if ((dotProduct != 0) && (movDirection.Norm() < 0.6 * antiClippingFactor * ped->GetV0Norm() * deltaT)) {
// std::cerr << "@@@@@ " << dotProduct << std::endl;
// }
//if(ped->GetID() == 48) { // Mohcine
// fprintf(stderr, "%f %f %f %f %f %f %f \n", movDirection.GetX(), movDirection.GetY(), ped->GetV().GetX(), ped->GetV().GetY(), ped->GetPos().GetX(), ped->GetPos().GetY(), current);
//}
//----------------- update new pos and new vel -----------------
//Point v_neu = ped->GetV() + vToAdd;
//Point pos_neu = ped->GetPos() + v_neu * deltaT;
Point pos_neu = ped->GetPos() + movDirection;
//---------------------------------------------------------------
//if(v_neu.Norm() > ped->GetV0Norm()+0.2 ) { // Stop pedestrians
// if(vToAdd.Norm() > ped->GetV0Norm()*deltaT+0.2 ) { // Stop pedestrians
// //Log->Write("WARNING: \tped %d is stopped because v=%f (v0=%f)", ped->GetID(), v_neu.Norm(), ped->GetV0Norm());
// //v_neu = v_neu*0.01;
// vToAdd = vToAdd*0.01;
// pos_neu = ped->GetPos();
// }
// //--------------------------------------------------------------------------------------------------
// //Jam is based on the current velocity
//if ( v_neu.Norm() >= ped->GetV0Norm()*0.5) {
// if ( vToAdd.Norm() >= ped->GetV0Norm()*deltaT*0.5) {
// ped->ResetTimeInJam();
// } else {
// ped->UpdateTimeInJam();
// }
//--------------------------------------------------------------------------------------------------
//fprintf(stderr, "\n----\n%f %f %f %f %f %f\n----\n",ped->GetV().GetX(), ped->GetV().GetY(), ped->GetV0().GetX(),ped->GetV0().GetY(), ped->GetPos().GetX(), ped->GetPos().GetY());
ped->SetPos(pos_neu);
//ped->SetV(v_neu);
ped->SetV(movDirection/deltaT);
ped->SetPhiPed();
//if(p == 5 ) {
//printf("toadd [%f, %f] m=%f\n", vToAdd.GetX(), vToAdd.GetY(), ped->GetMass());
//printf("pos_neu= %f %f vToAdd %f %f anticlippingfac %f\n", pos_neu.GetX(), pos_neu.GetY(), vToAdd.GetX(), vToAdd.GetY(), antiClippingFactor);
//}
}
}//end parallel
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment