网上博彩论坛
你的位置:网上博彩论坛 > 博彩问答 >

Autoware源码浅析1——twist相关节点+pure_pursuit

Autoware源码浅析1——twist相关节点+pure_pursuit

文依据autoware1.12版本源码中各节点话题订阅关系两个各节点联系起来,构成的一种理论上可行的较为完整的路径规划方法(全局规划+局部规划),实车测试会在近期着手。先发布出来,与朋友们交流讨论,查漏补缺。
内容根据个人理解而写,内容会根据理解而修正,但不排除内容错误。

Autoware源码浅析系列主要记录由op_global_planner(全局规划)、Astar_avoid(局部规划)、purepursuit(路径跟踪)等节点构成的一种路径规划方法、绘制矢量地图的相关细节以及分析源码过程中遇到的问题。各个节点源码结构及个人见解会列举在系列文章中。本文会先罗列twist节点与pure_pursuit节点的内容。
首先由话题订阅关系得到的总体的结构如下:

autoware节点(部分)话题订阅关系该结构图不包含矢量地图载入、定位、点云过滤、路面去除、仿真器bridge等节点。
Twist两个节点是autoware所有路径规划后的最后一个节点,用于将控制车辆运动的命令做修饰整合,并以一定的格式发布出去,当然依旧是依靠ros消息的方式。该消息名为/Vehicle_cmd,该消息控制车辆运动还需某一节点将ros消息转化为CAN、uart等数据进行车辆的直接控制,autoware并不提供该节点。
先写twist节点是因为它直接对应了车辆的控制消息,了解下这个再去看pure_pursuit这些路径跟踪节点会有更深刻的认识。
Twist_filter节点
订阅由pure_pursuit节点发布的/twist_raw话题,这一话题中包含两个变量,每个参数包含三个参数,对应三轴线速度和三轴角速度,但实际上只用到了控制车辆的x轴线速度和z轴角速度即车速与转角。
/twist消息内容 Vector3 linear Vector3 angular /Vector3内容 float64 x float64 y float64 z twist_filter用于限定x轴线速度和z轴角速度这两个参数的值,大于限定值后更改参数为最大限定值,随后以/twist_cmd话题发出。
Twist_gate节点
这个节点将会订阅所有关于车辆控制的话题,如/twist_cmd,/ctrl_cmd以及xxx_cmd等,随后将多种控制命令整合至/Vehicle_cmd话题输出。
/Vehicle_cmd话题变量内容包括: Header header autoware_msgs/SteerCmd steer_cmd autoware_msgs/AccelCmd accel_cmd autoware_msgs/BrakeCmd brake_cmd autoware_msgs/LampCmd lamp_cmd int32 gear int32 mode geometry_msgs/TwistStamped twist_cmd autoware_msgs/ControlCommand ctrl_cmd int32 emergency源码中存在3套车辆的运动控制指令,应该是为了适用不同系统而设置。
1.这套控制模式没名称 steer_cmd 方向命令 accel_cmd 加速度命令 brake_cmd 刹车命令 lamp_cmd 车灯命令 gear 档位命令(D P N .etc) mode 模式命令(auto,remote) 2.twist_cmd 仅有两个参数 twist.linear.x x轴线速度(车辆前方为x轴正方向) twist.angular.z z轴角速度(车辆正上方为z轴正方向) 3.ctrl_cmd 三个参数 linear_velocity 线速度 linear_acceleration #m/s^2 线加速度 steering_angle 转向角 三套控制命令相互独立,可订阅话题后任选一种使用。

pure_pursuit节点
聊这个节点之前,先说一下autoware是如何进行路径规划的:autoware中存在若干路径规划的节点,但他们统一的模式是使用Waypoint[] waypoints的方式生成一个waypoints数组,每个数组元素包含的是一个waypoint类变量,该变量内容主要包括
# global id int32 gid # local id int32 lid geometry_msgs/PoseStamped pose //位置 geometry_msgs/TwistStamped twist //方向 ......也就是说,autoware中的路径Lane,实际上是一众包含id、位置、方向的点的集合,暂时且不管这些点是如何生成的,pure_pursuit节点的作用就是根据车辆当前位置和规划后的路径点—final_waypoints,依据该路径点集的位置和方向去计算车辆的控制参数。这里说的沿着这些点运动,并不是刻板的依照每个点的位置,让车辆去踩这些点,因为每个车转弯半径有限,这样做不现实。接下来开始这个节点的分析:
首先是消息的订阅:分别是需要跟踪的路径点集、当前车辆位置、?、当前车速 sub1_ = nh_.subscribe("final_waypoints", 10, &PurePursuitNode::callbackFromWayPoints, this);//final_waypoints(type autoware_msgs::Lane). sub2_ = nh_.subscribe("current_pose", 10, &PurePursuitNode::callbackFromCurrentPose, this); sub3_ = nh_.subscribe("config/waypoint_follower", 10, &PurePursuitNode::callbackFromConfig, this); sub4_ = nh_.subscribe("current_velocity", 10, &PurePursuitNode::callbackFromCurrentVelocity, this); 程序执行过程:
获取路径点集final_waypoints 该话题来自全局或局部路径规划器,消息类型为autoware_msgs::Lane,主要参数为waypoint[] waypoints,是一个类似数组的结构,waypoints内按顺序存储有多个路径点,每个路径点主要参数为:
① Geometry::poseStamped //该参数主要表示路径点空间位置信息包括位置和方向,主要参数为: Pose::point(x,y,z) //三维坐标参数 Pose::quateration(x,y,z,w) //四元数,三维方向参数 ② Geometry::TwistStamped //该参数主要表示在该点的速度信息,包括线速度和角速度,组要参数为: Linear(x,y,z) //三轴线速度参数 Angular(x,y,z) //三轴角速度参数 如果使用Waypoints_saver这样的工具录制waypoints,则每个路径点的方向和速度都是录制过程中的真实参数;如果使用矢量地图规划路径,则每个路径点的方向由矢量地图决定,速度为一常量,加速度也为一常量,这两个参数可调。
获取当前位姿话题名为/current_pose,消息类型为Geometry::poseStamped,同样主要信息为空间坐标和空间方向。
获取配置参数获取当前速度话题名为/current_velocity,消息类型为Geometry::TwistStamped,主要信息为三轴线速度与三轴角速度。
由于autoware车辆为阿克曼转向方式,虽然在速度参数定义时包含了三轴速度与角速度,但实际上只使用了x轴的线速度(车辆前进速度)和z轴的角速度(车辆水平转向),随后会加以分析。
设置预瞄距离,并选取next_pointnext_point为下一个要跟踪的点,是以当前位置一定距离外的某一点。

pure_pursult算法原理示意图pp_.setLookaheadDistance(computeLookaheadDistance()); 可选恒定值或根据当前速度乘以某一常量计算。预瞄距离用于判断下一个waypoint值,与current_pose的欧氏距离大于预瞄距离的第一个点被设置为next_waypoint。
算法是按照id顺序,由近到远依次检索waypoint,距离小于预瞄距离则检索下一个点,直至某一点大于预瞄距离,停止向后检索,得到如图中绿色的点,随后的检索将从该点开始。
根据current_pose与next_point计算曲率bool can_get_curvature = pp_.canGetCurvature(&kappa); 这里的曲率指的是上图中橙色圆弧半径的倒数,注意:这一圆弧才是真正的车辆行驶的轨迹。阿克曼转向——前轮转角固定时,车辆行驶轨迹为圆弧。所以计算得到的曲率会应用于车转向的控制中。
计算所用函数为: double PurePursuit::calcCurvature(geometry_msgs::Point target) const { double kappa; double denominator = pow(getPlaneDistance(target, current_pose_.position), 2); double numerator = 2 * calcRelativeCoordinate(target, current_pose_).y; if (denominator != 0) kappa = numerator / denominator; else { if (numerator > 0) kappa = KAPPA_MIN_; else kappa = -KAPPA_MIN_; } ROS_INFO("kappa : %lf", kappa); return kappa; } //calcRelativeCoordinate函数内为一通tf变换,呃,具体计算方法不清楚。根据曲率计算车辆控制参数/twist_raw与/ctrl_cmd /twist_raw包含两个主要参数:twist.linear.x与twist.angular.z,其中twist.linear.x的值为一个常量,即初始化过程中设置的车辆最大行驶速度,(直线段和转弯处这个最大行驶速度值不一样)也是矢量地图中每个路径点所包含的速度值。而z轴角速度通过下面这个算法计算:
twist.angular.z = twist.linear.x * kappa;//(曲率乘x轴线速度)。 /ctrl_cmd包含3个主要参数:liner_velocity,linear_acceration,Steering_angle,前两个参数分别是线速度与线加速度,这两个都是固定值,加速度恒定,速度随加速度变化直至速度上限。这两个常量与/twist_raw内的速度、加速度常量值相同。Steering_angle为方向盘的转角,其中Steering_angle=arctan(wheel_base*kappa),(转向常量*曲率的反正切函数值)。
ps:程序里还有一部分是判断是否需要插值的部分,应该是应对路径陡然变化的特殊处理方式,有兴趣的自己看看吧,这里就不罗列了。
/twist与/ctrl_cmd话题发布

控制是打麻将的重要技巧。俗话说:“象棋举步知深浅博彩问答,麻将控制见高低。”实战中,因为控制不住敌人而遭致失败的战例比比皆是。所以,打麻将时,牌手必须掌握并运用好控制敌人的技巧。

很多时候博彩问答,在决策如何听牌时,有两种打法。如果考虑到长期防炮,就应该选择能舍更多安全牌,可以盯更长远的办法打牌。例如:



 

热点资讯

相关资讯



Powered by 网上博彩论坛 @2013-2022 RSS地图 HTML地图

网站统计——

  • 谷歌搜索留痕推广
  • 谷歌搜索留痕排名技术
  • 谷歌快速排名
  • 留痕方法
  • 谷歌搜索快速方法
  • google搜索留痕程序
  • 谷歌快速排名
  • 澳门太阳城
  • 最大博彩公司
  • 谷歌搜索关键词排名
  • 搜索留痕程序
  • 谷歌排名出售
  • 谷歌蜘蛛池排名
  • 搜索留痕软件
  • 缅甸果敢赌场
  • 电子游艺规则
  • 谷歌留痕推广
  • google引流程序
  • 谷歌快速排名
  • google引流程序
  • 留痕推广
  • 大西洋城赌场
  • 买球地址
  • 搜索留痕
  • 搜索留痕程序出售
  • 谷歌蜘蛛池排名技术
  • 留痕程序
  • 如何提高google搜索排名
  • 数字币博彩
  • 洗钱方法
  • Google留痕收录
  • 最新谷歌搜索留痕排名
  • 搜索留痕
  • Google留痕收录
  • google搜索留痕
  • 数字币博彩网站
  • 足球投注平台
  • 博彩推广话术
  • 推广引流方法
  • 引流方法
  • 博彩推广话术
  • 网上博彩推广引流
  • 数字币赌场
  • 皇冠现金网
  • 蜘蛛池排名
  • 谷歌蜘蛛池
  • 留痕程序出售
  • google搜索留痕程序
  • 比特币网上赌场
  • 洗钱平台
  • 搜索留痕
  • 博彩推广方式
  • 网上博彩推广
  • 快速排名
  • 搜索留痕程序
  • bbin平台大全
  • 体育博彩公司排名
  • 留痕排名技术
  • 最新谷歌关键词排名
  • 推广渠道
  • 谷歌快速排名
  • 博彩推广
  • 世界杯赌球地址
  • 皇冠博彩公司
  • 谷歌排名出售
  • 博彩引流渠道
  • 搜索留痕程序
  • google搜索留痕
  • 引流渠道
  • 果敢网上赌场
  • 世界杯赌球
  • 搜索留痕方法
  • 博彩搜索留痕
  • 博彩引流
  • 博彩引流
  • 搜索留痕
  • 缅甸网上赌场
  • 欧洲杯赌球
  • 谷歌搜索排名
  • 留痕程序
  • 网上博彩推广引流
  • 留痕技术
  • 搜索留痕技术出售
  • 澳门威尼斯人网上赌场
  • 外围博彩
  • 博彩网站推广
  • 推广引流
  • 留痕程序出售
  • 谷歌推广引流技术
  • 推广引流方法
  • 美国在线赌场
  • 沙巴体育投注平台
  • 最新谷歌搜索留痕
  • 谷歌蜘蛛池排名技术
  • 网站推广方法
  • 留痕程序出售
  • 博彩推广方法
  • 菠菜论坛
  • 买球平台
  • 谷歌搜索留痕
  • 蜘蛛池排名
  • 博彩公司推广渠道
  • 谷歌搜索留痕
  • 博彩公司推广渠道
  • 真钱游戏
  • 网上赌球地址
  • 赌球平台推荐
  • 赌球网址
  • 博彩包网
  • 买球app
  • 澳门博彩公司
  • 威尼斯人赌场
  • 博彩平台推荐
  • 美国博彩网站
  • 缅甸实体赌场
  • 柬埔寨网上赌场
  • 柬埔寨在线赌场
  • 韩国博彩
  • 支持人民币的博彩公司
  • 世界五大比特币交易所
  • 欧易是哪个国家的
  • 中币跑路
  • 亚洲博彩公司
  • 合法网上赌场
  • 马尼拉赌场
  • 支持人民币的博彩公司
  • 大陆博彩平台
  • 澳门新葡京娱乐城
  • 老挝赌场
  • 世界赌场排名
  • 网上博彩公司排行
  • 菠菜论坛
  • 东南亚赌博网站
  • 虚拟币博彩
  • 澳门百家乐网址
  • 网上博彩导航
  • 区块链百家乐游戏
  • 马来西亚博彩公司
  • 越南赌场
  • 区块链百家乐
  • 香港娱乐场
  • 澳大利亚赌博网站
  • 足球赔率
  • 菲律宾网上赌场
  • 数字币博彩网站
  • 足球投注网站
  • 百家乐论坛
  • 皇冠体育博彩公司
  • 网上赌博网站
  • 网上博彩推广话术
  • 谷歌搜索快速方法
  • 网上博彩推广话术
  • 数字币赌场
  • 皇冠博彩公司
  • 世界杯博彩公司
  • 英国博彩公司
  • 网上博彩合法化
  • 新加坡赌场
  • 比特币网上赌场
  • 怎么洗钱
  • 加密货币博彩平台
  • 世界杯赌球网址
  • 网上赌球地址
  • 博彩推广方式
  • 印度尼西亚博彩公司
  • 国际包网
  • bbin平台直营
  • 亚洲体育博彩平台
  • 越南博彩公司
  • 百家乐路单
  • 澳门博彩官网
  • 博彩网推荐
  • 澳门太阳城网址
  • 百家乐网址
  • 世界杯赌球网址
  • 皇冠博彩网址
  • 洗钱方法
  • 买球网站
  • 欧洲杯赌球平台
  • 皇冠现金网
  • 外围赌球平台
  • 果敢赌场
  • 买球技巧
  • 全球最大博彩公司
  • 电子游艺
  • 真人电子游戏
  • 骰宝游戏规则
  • 亚洲体育博彩平台
  • 澳门在线赌场
  • 缅甸赌场地址
  • 赌球平台
  • 赌场如何赢钱
  • 世界杯买球网站
  • 真人牌九游戏
  • 世界杯买球官网
  • 时时彩平台
  • 六合彩预测
  • 威尼斯人网上赌场
  • 外围赌球网站
  • 赌博网址
  • 彩票群
  • 微信赌博群
  • 韩国首尔赌场
  • 赌钱游戏
  • 美国网上赌场
  • bbin官网
  • 沙巴体育官网
  • 博彩平台推荐
  • 数字币博彩网站
  • 比特币网上赌场
  • 世界赌场名单
  • 美国赌场攻略
  • 菠菜论坛排名
  • 菠菜论坛排名
  • 缅甸网上赌场
  • 支持人民币的博彩公司