diff --git a/src/ackermann_spline_generator.cpp b/src/ackermann_spline_generator.cpp index c29da3bd870ddb5094c1a566238216d06c205110..674467d8a4d4e40a53f9c62cd08c8efa6c8849bc 100644 --- a/src/ackermann_spline_generator.cpp +++ b/src/ackermann_spline_generator.cpp @@ -129,7 +129,7 @@ bool AckermannSplineGenerator::nextTrajectory(base_local_planner::Trajectory &co resolution=current_config_.sim_granularity; spline_.generate(resolution,samples_[next_sample_index_](0),samples_[next_sample_index_](1),samples_[next_sample_index_](2),samples_[next_sample_index_](3)); spline_.evaluate_all(x,y,curvature,heading); - std::cout << "generate: " << samples_[next_sample_index_](0) << "," << samples_[next_sample_index_](1) << "," << samples_[next_sample_index_](2) << "," << samples_[next_sample_index_](3) << std::endl; +// std::cout << "generate: " << samples_[next_sample_index_](0) << "," << samples_[next_sample_index_](1) << "," << samples_[next_sample_index_](2) << "," << samples_[next_sample_index_](3) << std::endl; // discard trajectories with two much curvature k_max=-std::numeric_limits<double>::max(); for(unsigned int i=0;i<curvature.size();i++) @@ -155,22 +155,34 @@ bool AckermannSplineGenerator::nextTrajectory(base_local_planner::Trajectory &co else k_max_speed=sqrt(current_config_.comfort_lat_acc/fabs(k_max)); min_max_speed=std::min(current_config_.max_trans_vel,k_max_speed); -// std::cout << ackermann_(0) << "," << min_max_speed << "," << current_config_.max_trans_vel << "," << k_max_speed << std::endl; try{ if(vel_profile.generate(fabs(ackermann_(0)),0.0,min_max_speed,current_config_.max_trans_acc,spline_.get_length(),new_start_vel,new_max_vel)) { vel_profile.evaluate_at_time(sim_period_,comp_traj.xv_,acceleration,length); if(!this->forward) comp_traj.xv_*=-1.0; - std::cout << "speed at " << sim_period_ << ": " << comp_traj.xv_ << std::endl; comp_traj.yv_=0.0; point=spline_.evaluate(length); - std::cout << "curvature at " << sim_period_ << ": " << point.curvature << std::endl; + comp_traj.thetav_=-(point.heading-start.heading); + if(comp_traj.thetav_>3.14159) + comp_traj.thetav_-=2*3.14159; + else if(comp_traj.thetav_<-3.14159) + comp_traj.thetav_+=2*3.14159; + if(forward) + comp_traj.thetav_*=-1.0; + if(comp_traj.thetav_>current_config_.max_steer_angle) + comp_traj.thetav_=current_config_.max_steer_angle; + else if(comp_traj.thetav_<current_config_.min_steer_angle) + comp_traj.thetav_=current_config_.min_steer_angle; + + //double y_offset=(-(transformed_plan.back().pose.position.x-current_pose_.pose.position.x)*sin(yaw)+(transformed_plan.back().pose.position.y-current_pose_.pose.position.y)*cos(yaw)); + //comp_traj.thetav_-=atan2(0.01*y_offset,comp_traj.xv_); + /* + point=spline_.evaluate(length); if(fabs(point.curvature)<0.001) steer_angle=0.0; else steer_angle=atan2(current_config_.axis_distance,1.0/point.curvature); - std::cout << "steer angle: " << steer_angle << std::endl; if(steer_angle>1.5707) steer_angle-=3.14159; if(current_config_.use_steer_angle_cmd) @@ -186,12 +198,10 @@ bool AckermannSplineGenerator::nextTrajectory(base_local_planner::Trajectory &co } else comp_traj.thetav_ = comp_traj.xv_*point.curvature; + */ comp_traj.resetPoints(); for(unsigned int i=0;i<x.size();i++) - { comp_traj.addPoint(x[i],y[i],heading[i]); -// std::cout << x[i] << "," << y[i] << "," << heading[i] << "," << curvature[i] << std::endl; - } return true; } else