diff --git a/cfg/ModelCarControl.cfg b/cfg/ModelCarControl.cfg
index 834c1905aac93fb59d43cd2eb28ed579d1ec971c..fe5dbb95fed0c35baf34a6f8c736d27c5bfce5dd 100755
--- a/cfg/ModelCarControl.cfg
+++ b/cfg/ModelCarControl.cfg
@@ -38,19 +38,20 @@ from dynamic_reconfigure.parameter_generator_catkin import *
 gen = ParameterGenerator()
 
 #       Name                Type       Reconf.level Description                                   Default Min   Max
-gen.add("rate",             double_t,  0,           "Main loop rate (Hz)",                        10.0,   0.1,  1000.0)
-gen.add("speed_Kp",         double_t,  0,           "Proportional constant of the speed PID",     1.0,    0.0, 1000.0)
-gen.add("speed_Ki",         double_t,  0,           "Integral constant of the speed PID",         0.0,    0.0, 1000.0)
-gen.add("speed_Kd",         double_t,  0,           "Differential constant of the speed PID",     0.0,    0.0, 1000.0)
-gen.add("speed_i_max",      double_t,  0,           "Maximum integral value pf the speed PID",    10.0,   0.0, 1000.0)
-gen.add("speed_deadband",   double_t,  0,           "Minimum valid speed command",                0.1,    0.1, 1.0)
-gen.add("watchdog_time",    double_t,  0,           "Maximum time between two control commands",  0.5,    0.0, 1000.0)
-gen.add("axel_distance",    double_t,  0,           "Distance between the two axels in meters",   0.36,   0.0, 10.0)
-gen.add("max_steer_angle",  double_t,  0,           "Maximum steering angle",                     0.4,    -1.0,1.0)
-gen.add("min_steer_angle",  double_t,  0,           "Minimum steering angle",                     -0.4,   -1.0,1.0)
-gen.add("max_speed_control",double_t,  0,           "Maximum output speed command value",         10.0,   -100.0,  100.0)
-gen.add("min_speed_control",double_t,  0,           "Minimum output speed command value",         -10.0,  -100.0,  100.0)
-gen.add("max_steer_control",double_t,  0,           "Maximum output steer command value",         10.0,   -100.0,  100.0)
-gen.add("min_steer_control",double_t,  0,           "Minimum output steer command value",         -10.0,  -100.0,  100.0)
+gen.add("rate",               double_t,  0,           "Main loop rate (Hz)",                        10.0,   0.1,  1000.0)
+gen.add("speed_Kp",           double_t,  0,           "Proportional constant of the speed PID",     1.0,    0.0, 1000.0)
+gen.add("speed_Ki",           double_t,  0,           "Integral constant of the speed PID",         0.0,    0.0, 1000.0)
+gen.add("speed_Kd",           double_t,  0,           "Differential constant of the speed PID",     0.0,    0.0, 1000.0)
+gen.add("speed_i_max",        double_t,  0,           "Maximum integral value pf the speed PID",    10.0,   0.0, 1000.0)
+gen.add("speed_deadband",     double_t,  0,           "Minimum valid speed command",                0.1,    0.1, 1.0)
+gen.add("watchdog_time",      double_t,  0,           "Maximum time between two control commands",  0.5,    0.0, 1000.0)
+gen.add("axel_distance",      double_t,  0,           "Distance between the two axels in meters",   0.36,   0.0, 10.0)
+gen.add("max_steer_angle",    double_t,  0,           "Maximum steering angle",                     0.4,    -1.0,1.0)
+gen.add("min_steer_angle",    double_t,  0,           "Minimum steering angle",                     -0.4,   -1.0,1.0)
+gen.add("max_speed_control",  double_t,  0,           "Maximum output speed command value",         10.0,   -100.0,  100.0)
+gen.add("min_speed_control",  double_t,  0,           "Minimum output speed command value",         -10.0,  -100.0,  100.0)
+gen.add("max_steer_control",  double_t,  0,           "Maximum output steer command value",         10.0,   -100.0,  100.0)
+gen.add("min_steer_control",  double_t,  0,           "Minimum output steer command value",         -10.0,  -100.0,  100.0)
+gen.add("use_steer_angle_cmd",bool_t,  0,           "Whether to use steer angle or angular speed as input",False)
 
 exit(gen.generate(PACKAGE, "ModelCarControlAlgorithm", "ModelCarControl"))
diff --git a/config/car1_params.yaml b/config/car1_params.yaml
index dfab18d5dd2b4275d13323590b803e2b50ae4ca6..f2ce0cfd3183dd3eb152673ab189ba1a84c5e2b8 100644
--- a/config/car1_params.yaml
+++ b/config/car1_params.yaml
@@ -12,4 +12,4 @@ max_speed_control: 20.0
 min_speed_control: -20.0
 max_steer_control: 100.0
 min_steer_control: -100.0
-
+use_steer_angle_cmd: False
diff --git a/config/car2_params.yaml b/config/car2_params.yaml
index dfab18d5dd2b4275d13323590b803e2b50ae4ca6..f2ce0cfd3183dd3eb152673ab189ba1a84c5e2b8 100644
--- a/config/car2_params.yaml
+++ b/config/car2_params.yaml
@@ -12,4 +12,4 @@ max_speed_control: 20.0
 min_speed_control: -20.0
 max_steer_control: 100.0
 min_steer_control: -100.0
-
+use_steer_angle_cmd: False
diff --git a/config/params.yaml b/config/params.yaml
index cb2a7bdb92e204b66febbb3319f51f7a16ebb6ae..3c4cf20c2464831c50308b2d54af9de4cadc775e 100644
--- a/config/params.yaml
+++ b/config/params.yaml
@@ -12,4 +12,5 @@ max_speed_control: 20.0
 min_speed_control: -20.0
 max_steer_control: 62.0
 min_steer_control: -77.0
+use_steer_angle_cmd: True
 
diff --git a/src/model_car_control_alg_node.cpp b/src/model_car_control_alg_node.cpp
index a697e0aa939ba00b9c99a56ed19a541b130da1b9..b4187d384122c278c1248e01d9229ed9d972a8a2 100644
--- a/src/model_car_control_alg_node.cpp
+++ b/src/model_car_control_alg_node.cpp
@@ -92,6 +92,16 @@ void ModelCarControlAlgNode::mainNodeThread(void)
           else if(this->control_AckermannDriveStamped_msg_.drive.speed<this->config_.min_speed_control)
             this->control_AckermannDriveStamped_msg_.drive.speed=this->config_.min_speed_control;
           //angular speed
+          if(!this->config_.use_steer_angle_cmd)
+          {
+            if(this->steer_angle_control>=0)
+              this->control_AckermannDriveStamped_msg_.drive.steering_angle=(this->steer_angle_control/this->config_.max_steer_angle)*this->config_.max_steer_control;
+            else 
+              this->control_AckermannDriveStamped_msg_.drive.steering_angle=(this->steer_angle_control/this->config_.min_steer_angle)*this->config_.min_steer_control;
+          }
+        }
+        if(this->config_.use_steer_angle_cmd)
+        {
           if(this->steer_angle_control>=0)
             this->control_AckermannDriveStamped_msg_.drive.steering_angle=(this->steer_angle_control/this->config_.max_steer_angle)*this->config_.max_steer_control;
           else 
@@ -125,11 +135,16 @@ void ModelCarControlAlgNode::cmd_vel_callback(const geometry_msgs::Twist::ConstP
   //this->cmd_vel_mutex_enter();
 
   this->linear_speed_control=msg->linear.x;
-  if(msg->angular.z==0.0)
-    radius=std::numeric_limits<double>::max();
+  if(this->config_.use_steer_angle_cmd)
+    this->steer_angle_control=msg->angular.z;
   else
-    radius=msg->linear.x/msg->angular.z;
-  this->steer_angle_control=atan2(this->config_.axel_distance,radius);
+  {
+    if(msg->angular.z==0.0)
+      radius=std::numeric_limits<double>::max();
+    else
+      radius=msg->linear.x/msg->angular.z;
+    this->steer_angle_control=atan2(this->config_.axel_distance,radius);
+  }
   if(this->steer_angle_control>1.5707)
     this->steer_angle_control-=3.14159;
   if(this->steer_angle_control>this->config_.max_steer_angle)