ADORe
ADORe is a modular open source software library and toolkit for decision making, planning, control and simulation of automated vehicles
adoremath.h
Go to the documentation of this file.
1 /********************************************************************************
2  * Copyright (C) 2017-2020 German Aerospace Center (DLR).
3  * Eclipse ADORe, Automated Driving Open Research https://eclipse.org/adore
4  *
5  * This program and the accompanying materials are made available under the
6  * terms of the Eclipse Public License 2.0 which is available at
7  * http://www.eclipse.org/legal/epl-2.0.
8  *
9  * SPDX-License-Identifier: EPL-2.0
10  *
11  * Contributors:
12  * Daniel Heß - initial API and implementation
13  ********************************************************************************/
14 
15 #pragma once
16 
17 #include <dlib/matrix.h>
18 #define _USE_MATH_DEFINES //
19 #include <math.h>
20 #include <algorithm>
21 
22 namespace adore
23 {
24  namespace mad
25  {
26  //template<typename T,int R=0,int C=0>
27  //class Matrix:public dlib::matrix<T,R,C>{}; --> doesnt work because of friend functions
28  //typedef dlib::matrix Matrix; --> typedef is not compatible with templates
29  //template<typename T,int R, int C>
30  //using Matrix=dlib::matrix<T,R,C>; //only C++11
31  #define adoreMatrix dlib::matrix//replace this with C++11 solution
32 
33  using namespace dlib;
34 
38  template<typename T>
39  void set(T* data,T value,int size)
40  {
41  for(int i=0;i<size;i++)
42  {
43  data[i]=value;
44  }
45  }
46 
50  template<typename T>
51  adoreMatrix<T, 1, 0> sequence(T x0, T dx, T xend)
52  {
53  int n = ceil((xend - x0) / dx) + 1;
54  adoreMatrix<T, 1, 0> result(1, n);
55  for (int i = 0; i < n; i++)
56  {
57  result(0, i) = x0 + dx*(T)i;
58  }
59  result(0, n - 1) = xend;
60  return result;
61  }
65  template<typename T>
66  int sequence(T x0, T dx, T xend, T* target, int max_size)
67  {
68  int n = (std::min)(ceil((xend - x0) / dx) + 1, max_size);
69  for (int i = 0; i < n; i++)
70  {
71  target[i] = x0 + dx*(T)i;
72  }
73  target[n - 1] = xend;
74  return n;
75  }
79  template<typename T>
80  void sequence(T x0, T dx, T* target, int size)
81  {
82  for (int i = 0; i < size; i++)
83  {
84  target[i] = x0 + dx*(T)i;
85  }
86  }
90  template<typename T, int n>
91  adoreMatrix<T, 1, n> linspace(T x0, T x1)
92  {
93  T eps = 1e-10;//there seems to be a problem with floating point precision in debug mode
94  adoreMatrix<T, 1, n> result;
95  for (int i = 0; i < n; i++)
96  {
97  result(0, i) = x0 + (x1 - x0) / (T)(n - 1)*(T)i;
98  }
99  result(0, n - 1) = (std::min)(x1 - eps, result(0, n - 1));
100  return result;
101  }
105  template<typename T>
106  adoreMatrix<T, 1, 0> linspace(T x0, T x1, int n)
107  {
108  T eps = 1e-10;//there seems to be a problem with floating point precision in debug mode
109  adoreMatrix<T, 1, 0> result;
110  result = dlib::zeros_matrix<T>(1, n);
111  for (int i = 0; i < n-1; i++)
112  {
113  result(0, i) = x0 + (x1 - x0) / (T)(n - 1)*(T)i;
114  }
115  result(0, n - 1) = x1;
116 
117  result(0, n - 1) = (std::min)(x1 - eps, result(0, n - 1));
118  return result;
119  }
123  template<typename T,typename Tarray>
124  void linspace(T x0, T x1, Tarray& target, int n)
125  {
126  T eps = 1e-10;//there seems to be a problem with floating point precision in debug mode
127  for (int i = 0; i < n; i++)
128  {
129  target[i] = x0 + (x1 - x0) / (T)(n - 1)*(T)i;
130  }
131  T tmp = target[n - 1];
132  target[n - 1] = (std::min)(x1 - eps,tmp) ;
133  }
137  template<typename T>
138  void copyToArray(const adoreMatrix<T> &m, T* target)
139  {
140  for (int i = 0; i < m.nc()*m.nr(); i++)target[i] = m(i);
141  }
145  template<typename T,long nr,long nc>
146  void copyToArray(const adoreMatrix<T,nr,nc> &m, T* target)
147  {
148  for (int i = 0; i < m.nc()*m.nr(); i++)target[i] = m(i);
149  }
153  template<typename T,long nr,long nc>
154  void copyRowToArray(const adoreMatrix<T,nr,nc> &m, T* target,int col)
155  {
156  for (int i = 0; i < m.nc(); i++)target[i] = m(col,i);
157  }
161  inline int binomial(int n, int k)
162  {
163  if (k == 0)
164  {
165  return 1;
166  }
167  else
168  {
169  return (n*binomial(n - 1, k - 1)) / k;
170  }
171  }
172 
176  template<typename T>
177  T remainder(T x, T d)
178  {
179  return x - ((x >= 0) ? (T)1 : (T)-1) * (std::floor)((std::abs)(x) / d) * d;
180  }
181 
185  template<typename T, long N>
186  T norm2(const adoreMatrix<T, N, 1>& x)
187  {
188  T qvalue = 0;
189  for (int i = 0; i < x.nr(); i++)qvalue += x(i)*x(i);
190  return (std::sqrt)(qvalue);
191  }
192 
199  template<typename T,long N>
200  void createAngularContinuity(adoreMatrix<T,N,0>& data,int row)
201  {
202  T twopi = M_PI*2.0;
203  T offset = 0.0;
204  for(int j=1;j<data.nc();j++)
205  {
206  T di = data(row,j-1);
207  T dj = data(row,j) + offset;
208  T delta = (std::abs)(dj-di);
209  if((std::abs)(dj+twopi-di)<delta)
210  {
211  dj += twopi;
212  offset += twopi;
213  }else if((std::abs)(dj-twopi-di)<delta)
214  {
215  dj -= twopi;
216  offset -= twopi;
217  }
218  data(row,j) = dj;
219  }
220  }
221 
228  template<typename T>
229  inline void comparePointWithLine(T a, T b, T c, T d, T e, T f, T& d_tangential, T& d_normal)
230  {
231  //t=(c-a,d-b)
232  //n=(-(d-b),c-a)
233  //x=(e,f)
234  T x = c - a;
235  T y = d - b;
236  T p = e - a;
237  T q = f - b;
238  T dd = x*x + y*y;
239  d_tangential = (x*p + y*q) / dd;
240  d_normal = (-y*p + x*q) / sqrt(dd);
241  }
246  template<typename T>
247  inline void getRelativeCoordinatesPointVSLine(T a, T b, T c, T d, T e, T f, T& d_tangential, T& d_normal)
248  {
249  //t=(c-a,d-b)
250  //n=(-(d-b),c-a)
251  //x=(e,f)
252  T x = c - a;
253  T y = d - b;
254  T p = e - a;
255  T q = f - b;
256  T l = sqrt(x*x + y*y);
257  d_tangential = (x*p + y*q) / l;
258  d_normal = (-y*p + x*q) / l;
259  }
264  template<typename T>
265  inline double getDistancePointToLine(T a, T b, T c, T d, T e, T f, T& rel,T& n)
266  {
267  //t=(c-a,d-b)
268  //n=(-(d-b),c-a)
269  //x=(e,f)
270  T x = c - a;
271  T y = d - b;
272  T p = e - a;
273  T q = f - b;
274  T l = sqrt(x*x + y*y);
275  T t = (x*p + y*q) / l;
276  n = (-y*p + x*q) / l;
277  if(t<(T)0)//in front of line: return distance to a,b
278  {
279  rel = 0;
280  return sqrt(p*p+q*q);
281  }
282  else
283  {
284  if(t>l)//in rear of line: return distance to c,d
285  {
286  p = e-c;
287  q = f-d;
288  rel = 1;
289  return sqrt(p*p+q*q);
290  }
291  else //besides line: return normal distance
292  {
293  rel = t/l;
294  return std::abs(n);
295  }
296  }
297  }
298  template<typename T>
299  inline double getDistancePointToLine(T a, T b, T c, T d, T e, T f, T& rel)
300  {
301  T n;
302  return getDistancePointToLine(a,b,c,d,e,f,rel,n);
303  }
304 
305 
320  template<typename T1, typename T2>
321  bool toRelativeWithNormalExtrapolation(double qX,double qY,const T1 pi,const T1 pj, const T2 ni, const T2 nj, double& s, double & t)
322  {
323  const double d = std::sqrt( (pi(1)-pj(1))*(pi(1)-pj(1)) + (pi(2)-pj(2))*(pi(2)-pj(2)) );
324  if(d<1e-6)return false;//distance between points is too short
325 
326  const double qY_ni = -ni(1)*(qX-pi(1)) + ni(0)*(qY-pi(2));//hight of q above ni
327  if(qY_ni>0.0)
328  {
329  //std::cout<<"q above ni, out of domain"<<std::endl;
330  return false;//above ni->out of domain
331  }
332  const double qY_nj = -nj(1)*(qX-pj(1)) + nj(0)*(qY-pj(2));//hight of q above nj
333  if(qY_nj<=0.0)
334  {
335  //std::cout<<"q below nj, out of domain"<<std::endl;
336  return false;//below nj->out of domain
337  }
338  const double cross_n = ni(0)*nj(1)-ni(1)*nj(0);//angle between normals
339  if(std::abs(cross_n)>1e-10)//if normals are not parallel
340  {
341  const double s_ni = (pj(1)*nj(1)-pj(2)*nj(0)+pi(2)*nj(0)-pi(1)*nj(1)) / cross_n;//distance of normal crossing along ni
342  const double qX_ni = ni(0)*(qX-pi(1)) + ni(1)*(qY-pi(2));//distance of q along ni
343  if(s_ni<0.0)
344  {
345  if(qX_ni<s_ni)
346  {
347  //std::cout<<"q not in arc a)"<<std::endl;
348  return false;//query point is not in arc/domain
349  }
350  }
351  else
352  {
353  if(qX_ni>s_ni)
354  {
355  //std::cout<<"q not in arc b)"<<std::endl;
356  return false;//query point is not in arc/domain
357  }
358  }
359  }
360  const double L = pj(0)-pi(0);
361  const double cosv = (pj(1)-pi(1))/d;
362  const double sinv = (pj(2)-pi(2))/d;
363  const double qXr = cosv*(qX-pi(1)) + sinv*(qY-pi(2));
364  const double qYr =-sinv*(qX-pi(1)) + cosv*(qY-pi(2));
365  const double nixr = cosv*ni(0) + sinv*ni(1);
366  const double niyr =-sinv*ni(0) + cosv*ni(1);
367  const double njxr = cosv*nj(0) + sinv*nj(1);
368  const double njyr =-sinv*nj(0) + cosv*nj(1);
369  const double a = -d*niyr + d*njyr;
370  const double b = niyr*qXr - njyr*qXr + d*niyr - nixr*qYr + njxr*qYr;
371  const double c = -niyr*qXr + nixr*qYr;
372 
373  double sr=0;
374  if(std::abs(a)>1e-10)
375  {
376  const double s1 = (-b+std::sqrt(b*b-4.0*a*c))*0.5/a;
377  const double s2 = (-b-std::sqrt(b*b-4.0*a*c))*0.5/a;
378  sr = (0.0<=s1 && s1<=1.0)?s1:s2;
379  //std::cout<<"s1="<<s1<<std::endl;
380  //std::cout<<"s2="<<s2<<std::endl;
381  }
382  else if(std::abs(b)>1e-10)
383  {
384  sr = -c/b;
385  }
386  else
387  {
388  return false;
389  }
390  if(!(0.0<=sr && sr<=1.0))
391  {
392  //std::cout<<"sr not in [0,1]"<<std::endl;
393  return false;
394  }
395 
396 
397  s = pi(0) + sr * L;
398  const double q0X = (1.0-sr) * pi(1) + sr * pj(1);
399  const double q0Y = (1.0-sr) * pi(2) + sr * pj(2);
400  const double dX = qX-q0X;
401  const double dY = qY-q0Y;
402  const double nx = (1.0-sr) * ni(0) + sr * nj(0);
403  const double ny = (1.0-sr) * ni(1) + sr * nj(1);
404  const double nL = std::sqrt(nx*nx+ny*ny);
405  t = (nx * dX + ny * dY) / nL;
406  const double e = (-ny * dX + nx * dY) / nL;
407  if(std::abs(e)>1.0e-10)
408  {
409  //std::cout<<"result not on normal vector, e="<<e<<std::endl;
410  return false;
411  }
412 
413  //std::cout<<"niyr"<<niyr<<std::endl;
414  //std::cout<<"njyr"<<njyr<<std::endl;
415  //std::cout<<"a="<<a<<std::endl;
416  //std::cout<<"b="<<b<<std::endl;
417  //std::cout<<"c="<<c<<std::endl;
418  //std::cout<<"sr="<<sr<<std::endl;
419  //std::cout<<"t="<<t<<std::endl;
420  return true;
421  }
422 
423 
424  template<typename T1, typename T2>
425  bool toRelativeWithNormalExtrapolation(double qX,double qY,T1 centerline,T2 normals,double& s, double& t)
426  {
427  adoreMatrix<double,3,1> pi,pj;
428  adoreMatrix<double,2,1> ni,nj;
429  for(int i=0;i<centerline->getData().nc()-1;i++)
430  {
431  const int j = i+1;
432  for(int d=0;d<3;d++)pi(d)=centerline->getData()(d,i);
433  for(int d=0;d<3;d++)pj(d)=centerline->getData()(d,j);
434  for(int d=1;d<3;d++)ni(d-1)=normals->getData()(d,i);
435  for(int d=1;d<3;d++)nj(d-1)=normals->getData()(d,j);
436  if(toRelativeWithNormalExtrapolation(qX,qY,pi,pj,ni,nj,s,t))return true;
437  }
438  return false;
439  // double stest,ttest;
440  // bool value_found = false;
441  // for(int i=0;i<centerline->getData().nc()-1;i++)
442  // {
443  // const int j = i+1;
444  // for(int d=0;d<3;d++)pi(d)=centerline->getData()(d,i);
445  // for(int d=0;d<3;d++)pj(d)=centerline->getData()(d,j);
446  // for(int d=1;d<3;d++)ni(d-1)=normals->getData()(d,i);
447  // for(int d=1;d<3;d++)nj(d-1)=normals->getData()(d,j);
448  // if(toRelativeWithNormalExtrapolation(qX,qY,pi,pj,ni,nj,stest,ttest))
449  // {
450  // if(!value_found||std::abs(ttest)<std::abs(t))
451  // {
452  // value_found = true;
453  // s = stest;
454  // t = ttest;
455  // }
456  // }
457  // }
458  // return value_found;
459  }
460 
461 
474  template<typename T1, typename T2>
475  bool fromRelative(double s,double t,const T1 pi,const T1 pj, const T2 ni, const T2 nj, double& X, double & Y, double& Z)
476  {
477  // if(s<pi(0)||pj(0)<s)return false;
478  const double L = pj(0)-pi(0);
479  const double sr = (s-pi(0))/L;
480  const double q0X = (1.0-sr) * pi(1) + sr * pj(1);
481  const double q0Y = (1.0-sr) * pi(2) + sr * pj(2);
482  const double q0Z = (1.0-sr) * pi(3) + sr * pj(3);
483  const double nx = (1.0-sr) * ni(0) + sr * nj(0);
484  const double ny = (1.0-sr) * ni(1) + sr * nj(1);
485  const double nL = std::sqrt(nx*nx+ny*ny);
486  X = q0X + nx * t / nL;
487  Y = q0Y + ny * t / nL;
488  Z = q0Z;
489  return true;
490  }
491 
499  template<typename T1,typename T2>
500  void fromRelative(double s,double t,T1 centerline,T2 normals,double& X,double& Y,double& Z)
501  {
502  adoreMatrix<double,3,1> pi,pj;
503  adoreMatrix<double,2,1> ni,nj;
504  int i = centerline->findIndex(s);
505  int j = i+1;
506  for(int d=0;d<3;d++)pi(d)=centerline->getData()(d,i);
507  for(int d=0;d<3;d++)pj(d)=centerline->getData()(d,j);
508  for(int d=1;d<3;d++)ni(d-1)=normals->getData()(d,i);
509  for(int d=1;d<3;d++)nj(d-1)=normals->getData()(d,j);
510  fromRelative(s,t,pi,pj,ni,nj,X,Y,Z);
511  }
512 
513 
521  template<typename T>
522  inline bool intersectLines(T a, T b, T c, T d, T e, T f, T g, T h, T& x0, T& x1, bool& x0_inside, bool& x1_inside)
523  {
524  T p = c - a;
525  T q = d - b;
526  T r = g - e;
527  T s = h - f;
528  T w = (r*q - s*p);
529  x0_inside = false;
530  x1_inside = false;
531  if (w == (T)0)return false;
532  x1 = (a*q - b*p - e*q + f*p) / w;
533  x0 = (e*s - f*r - a*s + b*r) / (-w);
534  x0_inside = (T)0 <= x0 && x0 <= (T)1;
535  x1_inside = (T)0 <= x1 && x1 <= (T)1;
536  return true;
537  }
545  template<typename T>
546  inline bool intersectLines2(T a, T b, T c, T d, T e, T f, T g, T h, T& x0, T& x1, T eps)
547  {
548  bool x0_inside;
549  bool x1_inside;
550  T p = c - a;
551  T q = d - b;
552  T r = g - e;
553  T s = h - f;
554  T w = (r*q - s*p);
555  x0_inside = false;
556  x1_inside = false;
557  if (w == (T)0)return false;
558  x1 = (a*q - b*p - e*q + f*p) / w;
559  x0 = (e*s - f*r - a*s + b*r) / (-w);
560  x0_inside = (T)0+eps < x0 && x0 <-eps+(T)1;
561  x1_inside = (T)0+eps < x1 && x1 <-eps+(T)1;
562  return x0_inside && x1_inside;
563  }
564 
568  template<typename T>
569  inline T bound(T lb,T value,T ub)
570  {
571  return (std::max)(lb,(std::min)(value,ub));
572  }
573 
577  template<typename T>
578  inline void bound(T lb,T value[], size_t count, T ub)
579  {
580  for (size_t a=0; a< count;++a)
581  {
582  value[a] = bound(lb, value[a], ub);
583  }
584  }
585 
586 
590  template<typename T>
591  bool annotatedDataOrdering_fct (std::pair<double,T> i,std::pair<double,T> j) { return (i.first<j.first); }
592 
593 
594 
598  template<typename T>
599  T* cross(T* u,T* v,T* s)
600  {
601  s[0]=u[1]*v[2]-u[2]*v[1];
602  s[1]=u[2]*v[0]-u[0]*v[2];
603  s[2]=u[0]*v[1]-u[1]*v[0];
604  return s;
605  }
606 
610  template<int d,typename T>
611  T dot(T* u,T* v)
612  {
613  T val=(T)0;
614  for(int i=0;i<d;i++)
615  {
616  val+=u[i]*v[i];
617  }
618  return val;
619  }
620 
621 
622 
626  template<int k,typename T>
627  T* normalize(T* v)
628  {
629  T l = (T)0;
630  for(int i=0;i<k;i++)
631  {
632  l += v[i]*v[i];
633  }
634  l=((T)1)/std::sqrt(l);
635  for(int i=0;i<k;i++)
636  {
637  v[i] *= l;
638  }
639  return v;
640  }
641 
645  template<typename T>
646  void extendBounds(T& min, T value, T& max)
647  {
648  min=std::min(min,value);
649  max=std::max(max,value);
650  }
654  template<typename T>
655  bool overlaps(const T& a0, const T&a1,const T& b0, const T& b1)
656  {
657  return (b0<=a0 && a0<=b1) || (b0<=a1 && a1<=b1) || (a0<=b0 && b0<=a1) || (a0<=b1 && b1<=a1);
658  }
662  template<typename T>
663  T min(T a,T b,T c,T d)
664  {
665  return std::min(std::min(a,b),std::min(c,d));
666  }
670  template<typename T, long N, long M>
671  adoreMatrix<T, N, M> min(adoreMatrix<T, N, M> a, const adoreMatrix<T, N, M>& b)
672  {
673  for (int i = 0; i < N; i++)
674  {
675  for (int j = 0; j < M; j++)
676  {
677  a(i, j) = (std::min)(a(i, j), b(i, j));
678  }
679  }
680  return a;
681  }
685  template<typename T, long N, long M>
686  adoreMatrix<T, N, M> max(adoreMatrix<T, N, M> a, const adoreMatrix<T, N, M>& b)
687  {
688  for (int i = 0; i < N; i++)
689  {
690  for (int j = 0; j < M; j++)
691  {
692  a(i, j) = (std::max)(a(i, j), b(i, j));
693  }
694  }
695  return a;
696  }
697 
698  inline double min( double a,const double & b)
699  {
700  return (std::min)(a, b);
701  }
702  inline double max( double a,const double & b)
703  {
704  return (std::max)(a, b);
705  }
706  inline float min( float a,const float & b)
707  {
708  return (std::min)(a, b);
709  }
710  inline float max( float a,const float & b)
711  {
712  return (std::max)(a, b);
713  }
714  inline int min( int a,const int & b)
715  {
716  return (std::min)(a, b);
717  }
718  inline int max( int a,const int & b)
719  {
720  return (std::max)(a, b);
721  }
722  template <typename T>
723  inline int signum(T val)
724  {
725  return (T(0) < val) - (val < T(0));
726  }
727  }
728 }
#define M_PI
Definition: arraymatrixtools.h:24
const double eps
Definition: cubic_piecewise_function.cpp:16
bool intersectLines(T a, T b, T c, T d, T e, T f, T g, T h, T &x0, T &x1, bool &x0_inside, bool &x1_inside)
Definition: adoremath.h:522
adoreMatrix< T, 1, 0 > sequence(T x0, T dx, T xend)
Definition: adoremath.h:51
void getRelativeCoordinatesPointVSLine(T a, T b, T c, T d, T e, T f, T &d_tangential, T &d_normal)
Definition: adoremath.h:247
T * normalize(T *v)
Definition: adoremath.h:627
bool annotatedDataOrdering_fct(std::pair< double, T > i, std::pair< double, T > j)
Definition: adoremath.h:591
T dot(T *u, T *v)
Definition: adoremath.h:611
T norm2(const adoreMatrix< T, N, 1 > &x)
Definition: adoremath.h:186
void createAngularContinuity(adoreMatrix< T, N, 0 > &data, int row)
Definition: adoremath.h:200
int max(int a, const int &b)
Definition: adoremath.h:718
void extendBounds(T &min, T value, T &max)
Definition: adoremath.h:646
adoreMatrix< T, 1, n > linspace(T x0, T x1)
Definition: adoremath.h:91
T remainder(T x, T d)
Definition: adoremath.h:177
int signum(T val)
Definition: adoremath.h:723
T bound(T lb, T value, T ub)
Definition: adoremath.h:569
bool toRelativeWithNormalExtrapolation(double qX, double qY, const T1 pi, const T1 pj, const T2 ni, const T2 nj, double &s, double &t)
Transformation from Euclidean coordinate system to a relative coordinate system represented by linear...
Definition: adoremath.h:321
void copyRowToArray(const adoreMatrix< T, nr, nc > &m, T *target, int col)
Definition: adoremath.h:154
int binomial(int n, int k)
Definition: adoremath.h:161
T min(T a, T b, T c, T d)
Definition: adoremath.h:663
void set(T *data, T value, int size)
Definition: adoremath.h:39
int min(int a, const int &b)
Definition: adoremath.h:714
T * cross(T *u, T *v, T *s)
Definition: adoremath.h:599
bool overlaps(const T &a0, const T &a1, const T &b0, const T &b1)
Definition: adoremath.h:655
double getDistancePointToLine(T a, T b, T c, T d, T e, T f, T &rel, T &n)
Definition: adoremath.h:265
adoreMatrix< T, N, M > max(adoreMatrix< T, N, M > a, const adoreMatrix< T, N, M > &b)
Definition: adoremath.h:686
bool intersectLines2(T a, T b, T c, T d, T e, T f, T g, T h, T &x0, T &x1, T eps)
Definition: adoremath.h:546
void comparePointWithLine(T a, T b, T c, T d, T e, T f, T &d_tangential, T &d_normal)
Definition: adoremath.h:229
bool fromRelative(double s, double t, const T1 pi, const T1 pj, const T2 ni, const T2 nj, double &X, double &Y, double &Z)
Transform from relative coordinates to Euclidean coordinates.
Definition: adoremath.h:475
void copyToArray(const adoreMatrix< T > &m, T *target)
Definition: adoremath.h:138
x0
Definition: adore_set_goal.py:25
x
Definition: adore_set_goal.py:30
g
Definition: adore_set_goal.py:29
y
Definition: adore_set_goal.py:31
x1
Definition: adore_set_pose.py:28
w
Definition: adore_set_pose.py:40
r
Definition: adore_suppress_lanechanges.py:209
Definition: areaofeffectconverter.h:20