: Public Class
Created: 2015-07-31 오후 4:10:08
Modified: 2015-07-31 오후 4:10:08
Project:
Advanced:
Attribute
Public CPosture
  _c
Details:
Notes: 로봇의 회전 중심.#lt;p/#gt;
Public int
  _curIndex
Details:
Notes: 차량이 현재 참조하고 있는 _wp의 경유점에 대한 인덱스#lt;p/#gt;
Private CMobilityProfile*
  _mp
Details:
 
Public int
  _noObstacles
Details:
Notes: 로봇이 장애물로 판단한 점들의 개수 기록#lt;p/#gt;
Public CPosture
  _obstacles
Details:
Notes: 로봇이 장애물로 판단한 점들을 기록#lt;p/#gt;
Public double
  _rin
Details:
Notes: 회전 중심으로부터 로봇에 닿는 내, 외 접원 반지름#lt;p/#gt;
Public double
  _rout
Details:
Notes: 회전 중심으로부터 로봇에 닿는 내, 외 접원 반지름#lt;p/#gt;
Private double
  _safetyMarginFront
Details:
Notes: 차량의 전방 안전거리. 이 영역에 센서 측정이 감지되면 차량은 장애물로 판단하고 정지한다.#lt;p/#gt;
Private double
  _safetyMarginSide
Details:
Notes: 차량의 측면 안전거리. 이 영역에 센서 측정이 감지되면 차량은 장애물로 판단한다.#lt;p/#gt;
Public sWayPoint
  _wp
Details:
Notes: 보간된 경로 혹은 보간되지 않은 경로#lt;p/#gt;
Public int
  _wpSize
Details:
Notes: _wp를 구성하는 경유점(waypoint)의 개수#lt;p/#gt;
Operation
Private
cartesian_regulation( v: double&,
w: double&,
robot: CPosture&,
follow: CPosture&,
):void
Details:
Sequential
Notes: void CPathFollowing::cartesian_regulation (double &v, double &w, const CPosture &robotPos, const CPosture &follow) { Cartesian regulation Prof. Giuseppe Oriolo의 Autonomous and Mobile Robotics 발표자료 참조  제어기의 gain 설정 double k1 = _mp-#gt;_maxLinearVel; double k2 = 0.7;  double dx = follow.x - robotPos.x; double dy = follow.y - robotPos.y;  v = k1*(dx*cos(robotPos.th) + dy*sin(robotPos.th));  / CPosture steerPos (_mp-#gt;_foreWheelXpos, 0); steerPos.Transform (robotPos);  dx = follow.x - steerPos.x; dy = follow.y - steerPos.y;  w = k2*DeltaRad(atan2(dy, dx), steerPos.th); }#lt;p/#gt;
Private
cartesian_regulation2( v: double&,
w: double&,
robot: CPosture&,
follow: CPosture&,
):void
Details:
Sequential
Public
CPathFollowing( mp: CMobilityProfile*,
):
Details:
Sequential
Tags: initializer=_mp(mp)
Public
~CPathFollowing():
Details:
Sequential
Private
DetectCurveObstacle( robotPos: CPosture&,
curve: double,
):double
Details:
Sequential
Private
DetectFrontObstacle( robotPos: CPosture&,
):double
Details:
Sequential
Private
DetectObstacle( robotPos: CPosture&,
linearVel: double,
steerAngle: double,
):double
Details:
Sequential
Private
feedback_controller( v: double&,
w: double&,
robot: CPosture&,
follow: CPosture&,
):void
Details:
Sequential
Public
FollowPath( robotPos: CPosture&,
linearVel: double*,
steerAngle: double*,
obstacleDist: double*,
):double
Details:
Sequential
Notes: void linear_controller (double &v, double &w, double vd, double wd, double xd, double yd, double thd, double x, double y, double th, double lambda, double a) { double e1 =  cos(th)*(xd - x) + sin(th)*(yd - y); double e2 = -sin(th)*(xd - x) + cos(th)*(yd - y); double e3 = DeltaRad(thd, th);  double k1 = 0.1*2*lambda*sqrt(wd*wd + vd*vd); double k2 = 0.1*fabs(vd); double k3 = k1;  double u1 = k1*e1; double u2 = k2*e2 - k3*e3;  v = vd*cos(e3) + u1; w = wd + u2; }#lt;p/#gt;
Private
MaxVelocityByCurvature( robotPos: CPosture&,
):double
Details:
Sequential
Private
MaxVelocityBySteeringAngle( angle: double,
):double
Details:
Sequential
Private
PassNearWaypoint( robotPos: CPosture&,
foreDist: double,
):void
Details:
Sequential
Private
posture_regulation( v: double&,
w: double&,
robot: CPosture&,
follow: CPosture&,
):void
Details:
Sequential
Public
Reset():void
Details:
Sequential
Public
SetPath( path: vector<vaWayPoint>&,
robotPos: CPosture&,
):void
Details:
Sequential
Element Source Role Target Role
CPosture
Class  
Name:  
 
Name: _c
 
Details:
 
CMobilityProfile
Class  
Name:  
 
Name: _mp
 
Details:
 
CPosture
Class  
Name:  
 
Name: _obstacles
 
Details:
 
«struct» sWayPoint
Class  
Name:  
 
Name: _wp
 
Details:
 
Element Source Role Target Role
CNavigation
Class  
Name:  
 
Name: _pathFollow
 
Details: