当前位置: 首页 > news >正文

网站有收录没权重汉阳放心的建站企丿

网站有收录没权重,汉阳放心的建站企丿,视频上到什么地方可以做网站链接,wordpress 404插件目录 零、任务介绍一、环境配置二、算法三、代码实现四、效果展示 零、任务介绍 补全src/ros-bridge/carla_shenlan_projects/carla_shenlan_stanley_pid_controller/src/stanley_controller.cpp中的TODO部分。 一、环境配置 上一次作业中没有配置docker使用gpu#xff0c;… 目录 零、任务介绍一、环境配置二、算法三、代码实现四、效果展示 零、任务介绍 补全src/ros-bridge/carla_shenlan_projects/carla_shenlan_stanley_pid_controller/src/stanley_controller.cpp中的TODO部分。 一、环境配置 上一次作业中没有配置docker使用gpu后续可能有GPU计算的需求因此重新运行一个带有GPU的容器。docker使用GPU的配置教程可以参考在docker容器中使用nvidia显卡渲染rviz2界面。运行容器的命令如下 docker run -d --nethost -it --name foxy_gpu --gpus all -e NVIDIA_DRIVER_CAPABILITIESall\-v /home/star:/home/star \-v /tmp/.X11-unix:/tmp/.X11-unix \-v /dev:/dev \-v /dev/dri:/dev/dri \--env DISPLAYunix:1 \--env ROS_DISTROfoxy \fishros2/ros:foxy-desktop二、算法 Stanley控制使用前轮中心作为参考点根据轨迹上距离参考点最近的点计算偏航误差和横向误差。 首先根据参考点的heading和车的heading计算偏航误差 θ e \theta_e θe​。然后考虑横向误差由几何关系可得 tan ⁡ δ e e d , d v / k \begin{aligned} \tan \delta_e \frac{e}{d}, d v/k \end{aligned} tanδe​de​,dv/k​ 可得 δ e tan ⁡ − 1 k e v \delta_e \tan^{-1} \frac{ke}{v} δe​tan−1vke​ 此处的增益 k k k根据实验调整。结合上述两个误差项可以得到Stanley控制律 δ ( t ) θ e ( t ) tan ⁡ − 1 k e ( t ) v ( t ) \delta(t) \theta_e(t) \tan^{-1}\frac{ke(t)}{v(t)} δ(t)θe​(t)tan−1v(t)ke(t)​ 观察上述控制律可以发现当车速 v v v较低时即便是比较小的横向误差 e e e也会引起反正切函数的剧烈变化因此在分母上增加一项常数控制律变为 δ ( t ) θ e ( t ) tan ⁡ − 1 ( k e ( t ) k s v ( t ) ) \delta(t) \theta_e(t) \tan^{-1}\left(\frac{ke(t)}{k_s v(t)} \right) δ(t)θe​(t)tan−1(ks​v(t)ke(t)​) 当车速较快时如果轨迹的偏航角变化较大直接跟踪会导致车辆横向振荡因此可以在 θ e \theta_e θe​中加入阻尼即增加PD控制器。综上所述最终的Stanley控制器如下 δ P D ( θ ) tan ⁡ − 1 ( k e ( t ) k s v ( t ) ) \delta PD(\theta) \tan^{-1}\left(\frac{ke(t)}{k_s v(t)} \right) δPD(θ)tan−1(ks​v(t)ke(t)​) 三、代码实现 此处使用的PD控制器可以参考上一个project中的实现方法自动驾驶控制与规划——Project 1: 车辆纵向控制。为了避免低速行驶时的横向振荡加入参数 k s k_s ks​ class StanleyController { public:StanleyController(){};~StanleyController(){};void LoadControlConf();void ComputeControlCmd(const VehicleState vehicle_state,const TrajectoryData planning_published_trajectory,ControlCmd cmd);void ComputeLateralErrors(const double x, const double y, const double theta,double e_y, double e_theta);TrajectoryPoint QueryNearestPointByPosition(const double x, const double y);protected:std::vectorTrajectoryPoint trajectory_points_;double k_y_ 0.0;double k_s_ 0.0; // 低速行驶时v小较小的e也会导致atan振荡double u_min_ 0.0;double u_max_ 100.0;double theta_ref_;double theta_0_; }; } // namespace control } // namespace shenlan这里的参数可以根据实验效果进行调整 void StanleyController::LoadControlConf() {k_y_ 0.5;k_s_ 0.5; }控制器整体的流程是1.计算heading error2.计算cross tracking error3.利用Stanley控制器计算控制指令。需要注意对输出进行限幅。 void StanleyController::ComputeControlCmd(const VehicleState vehicle_state, const TrajectoryData planning_published_trajectory, ControlCmd cmd) {trajectory_points_ planning_published_trajectory.trajectory_points;// find the closest point on the reference trajectoryTrajectoryPoint nearest_pt QueryNearestPointByPosition(vehicle_state.x, vehicle_state.y);// theta_ref_在QueryNearestPointByPosition中已经更新了// get lateral error and heading errordouble e_y 0.0;double e_theta 0.0;ComputeLateralErrors(vehicle_state.x - nearest_pt.x, vehicle_state.y - nearest_pt.y, vehicle_state.heading, e_y, e_theta);double e_theta_pd e_theta_pid_controller.Control(e_theta, 0.01);cmd.steer_target e_theta_pd atan2(k_y_ * e_y, vehicle_state.velocity k_s_);// 输出限幅if (cmd.steer_target 1.0) {cmd.steer_target 1.0;} else if (cmd.steer_target -1.0) {cmd.steer_target -1.0;} }在计算误差时需要注意横向误差是带有方向的以车辆朝向为参考左正右负。偏航误差在计算时超过 [ − π , π ) [-\pi, \pi) [−π,π)的需要重新标准化到 [ − π , π ) [-\pi, \pi) [−π,π)中。 void StanleyController::ComputeLateralErrors(const double x, const double y, const double theta, double e_y, double e_theta) {// 车头方向的单位矢量 (cos(theta), sin(theta))// 横向误差以车辆朝向为参考左正右负e_y cos(theta) * y - sin(theta) * x;e_theta theta - theta_ref_;if (e_theta -M_PI) {e_theta 2 * M_PI;} else if (e_theta M_PI) {e_theta - 2 * M_PI;}std::cout theta: theta theta_ref_: theta_ref_ std::endl;std::cout e_theta: e_theta std::endl; }四、效果展示 在宿主机启动carla仿真器 ./CarlaUE4.sh -carla-rpc-port2000 -prefernvidia在docker容器中启动carla-ros-bridge ros2 launch carla_shenlan_bridge_ego_vis carla_bridge_ego_vehicle.launch.py启动控制节点 ros2 run carla_shenlan_stanley_pid_controller carla_shenlan_stanley_pid_controller_node运行效果如下 自动驾驶控制与规划——Project 2: 车辆横向控制
http://www.dnsts.com.cn/news/42409.html

相关文章:

  • 长宁建设机械网站域名名称是什么
  • 网站怎么做付款平台蓟州网站建设
  • 大人和小孩做系列网站珠海建站服务
  • seo优化方案pptwindows优化大师卸载不掉
  • 网站每年的维护费广州建网站定制
  • 如何用免费个人网站制作响应网站先做电脑端
  • 问卷调查网站建设河北建设官方网站
  • 政务网站的建设原则网站推广效果如何
  • 搭建什么网站好玩合肥seo网站管理
  • 夏天做哪些网站致富wordpress免费虚拟主机
  • 龙岩网站建设设计服务人力资源公司名称
  • 南城网站建设提供o2o网站建设
  • 外国人做那个视频网站开发公司工程部经理述职报告
  • 公司网站建设哪里实惠网站代发外链
  • 乐清做网站建设公司哪家好谷歌浏览器对做网站有什么好处
  • 网站建设以及推广提案书怎么学做电商然后自己创业
  • 温江区建设局网站西安建设市场信息平台
  • dedecms修改网站教程上海有限公司有哪些
  • 网站建设负责传资料不建工网和环球网哪个好
  • 网站二维码收费怎么做wordpress 订阅
  • 如何分析一个网站开发语言音乐网站开发思路
  • 黄冈网站建设的方案app下载量排名
  • 2010网站建设管理友情链接
  • 瑜伽网站模版cms+wordpress+国内
  • 网站不用备案电脑做网站用什么软件
  • 如何创建一个简单的网站wordpress插件 二级域名
  • 软件上传网站平面设计公司培训
  • 网站做开票中国3.15诚信建设联盟网站
  • 网站开发 成都asp.net 旅游网站开发
  • 国外哪些网站可以兼职做任务中卫网站设计公司