前言

局部路径规划器teb_local_planner详解4:关于代价地图中,我们介绍了如何使用costmap_converter

本章,我们来详细看下,对于不同的robot model ,teb是如何进行规划的。

car-like robots

一、轨迹优化项

添加non-holomomic约束:限制最大转向角

重要参数:

  • ~<name>/min_turning_radius : 最小转弯半径,最好稍微大点,因为最后会转换为软约束
    相关说明:

  • <name>/weight_kinematics_forward_drive: 前向运动学权重,在car-like robot中失效

二、控制命令接口

1. geometry_msgs/Twist message

数据格式是机器人的线速度和角速度。

在前轮驱动的情况下,速度通常定义在后桥的中心。

这种情况,twist直接用。

2. ackemann

数据格式是线速度v和方向盘转角phi 如下图所示:

重要参数

  • ~<name>/cmd_angle_instead_rotvel 设置为true的话,我们使用的是方向盘转角而非旋转角速度。
  • ~<name>/wheelbase轮间距同样要设定好,配合angle使用。单位为m

如果机器人底盘接收的是ackermann_msgs而非twist, 我们需要写个简单脚本来实现转换:

#!/usr/bin/env pythonimport rospy, math
from geometry_msgs.msg import Twist
from ackermann_msgs.msg import AckermannDriveStampeddef convert_trans_rot_vel_to_steering_angle(v, omega, wheelbase):if omega == 0 or v == 0:return 0radius = v / omegareturn math.atan(wheelbase / radius)def cmd_callback(data):global wheelbaseglobal ackermann_cmd_topicglobal frame_idglobal pubv = data.linear.xsteering = convert_trans_rot_vel_to_steering_angle(v, data.angular.z, wheelbase)msg = AckermannDriveStamped()msg.header.stamp = rospy.Time.now()msg.header.frame_id = frame_idmsg.drive.steering_angle = steeringmsg.drive.speed = vpub.publish(msg)if __name__ == '__main__': try:rospy.init_node('cmd_vel_to_ackermann_drive')twist_cmd_topic = rospy.get_param('~twist_cmd_topic', '/cmd_vel') ackermann_cmd_topic = rospy.get_param('~ackermann_cmd_topic', '/ackermann_cmd')wheelbase = rospy.get_param('~wheelbase', 1.0)frame_id = rospy.get_param('~frame_id', 'odom')rospy.Subscriber(twist_cmd_topic, Twist, cmd_callback, queue_size=1)pub = rospy.Publisher(ackermann_cmd_topic, AckermannDriveStamped, queue_size=1)rospy.loginfo("Node 'cmd_vel_to_ackermann_drive' started.\nListening to %s, publishing to %s. Frame id: %s, wheelbase: %f", "/cmd_vel", ackermann_cmd_topic, frame_id, wheelbase)rospy.spin()except rospy.ROSInterruptException:pass

holonomic robot

重要参数:

  • max_vel_y: 对于non-holonomic robots而言,这个数值必须设置为0. 现在可以设个正数
  • acc_lim_y: 同上,y轴加速度
  • weight_kinematics_nh: 面向non-holonomic robots的运动学约束的权重。现在可以降低该权重,1就可以

局部路径规划器teb_local_planner详解5:关于 robots models相关推荐

  1. 局部路径规划器teb_local_planner详解3:跟随全局planner

    局部路径规划器teb_local_planner详解3:跟随全局planner 前言 一.相关优化项 二.与topologies相关的参数 前言 在局部路径规划器teb_local_planner详解 ...

  2. 局部路径规划器teb_local_planner详解6:关于动态障碍物与常见问题

    前言 在局部路径规划器teb_local_planner详解5:关于car-like robots中,我们介绍了与car-like机器人模型相关的参数,说明了在对接底盘的时候需要注意底盘接收的控制指令 ...

  3. ros局部路径规划器dwa

    ROS的路径规划器分为全局路径和局部路径规划,其中局部路径规划器使用的最广的为dwa,个人理解为: 首先全局路径规划会生成一条大致的全局路径,局部路径规划器会把全局路径给分段,然后根据分段的全局路径的 ...

  4. 局部路径规划器的实现:有限状态机+conformal lattice

    局部路径规划(Local Motion planning) 1. 路径生成 Path generation 2. 碰撞检测 Path collision checking 3. 行为规划 Behavi ...

  5. 局部路径规划器DWAplannerros

    1 体系结构 (1)主要成员 base_local_planner::LocalPlannerUtil planner_util_; 用来存储运动控制参数以及costmap2d.tf等,会被传入dp_ ...

  6. Dijkstra 路径规划算法原理详解及 Python 代码实现

    荷兰数学家 E.W.Dijkstra 于 1959 年提出了 Dijkstra 算法,它是一种适用于 非负权值 网络的 单源最短路径算法,同时也是目前求解最短路径问题的理论上最完备.应用最广的经典算法 ...

  7. 激光SLAM导航系列(五)局部路径规划

    局部路径规划 局部路径规划简介 机器人在获得目的地信息后,首先经过全局路径规划规划出一条大致可行的路线,然后调用局部路径规划器根据这条路线及costmap的信息规划出机器人在局部时做出具体行动策略,R ...

  8. 【硬核】 ROS Navigation 局部路径规划常见算法

    简介 ​ 最近,作者参加了关于RMUS 高校 SimReal挑战赛,首次接触到了机器人导航领域,这里记录一下这段时间的收货.sim2real的全称是simulation to reality,是强化学 ...

  9. DWA算法在局部路径规划中的应用

    ROS的路径规划器分为全局路径和局部路径规划,其中局部路径规划器使用的最广的为dwa,个人理解为: 首先全局路径规划会生成一条大致的全局路径,局部路径规划器会把全局路径给分段,然后根据分段的全局路径的 ...

最新文章

  1. Android ListView 点击item改变item的背景颜色(ListView实现光标移动)
  2. Docker 最佳实践
  3. CUDA,C++,Java,Python,Fortran运行速度比较
  4. 探索发现:平台云——云的新风向
  5. publiccms中将推荐页的内容显示在页面片段中
  6. 网络丢包诊断与分析的现实与理想
  7. 在线语音识别_腾讯云在线语音识别_在线语音识别成文字 - 云+社区 - 腾讯云
  8. matlab的GUI实验——实现简单信号发生器
  9. 设置TOMCAT SESSIONID 字符长度和生成算法
  10. pythonATM,购物车项目实战2,主函数入口
  11. npm升级所有可更新包
  12. 再生核希尔伯特空间:Hilbert Space与RKHS基础
  13. 微信小程序弹框如何显示右上角的关闭
  14. IMU(陀螺仪)角速度测量原理-科氏力测旋转角速度
  15. codeforces 1728E
  16. Windows10下电脑版微信未读消息自动弹窗工具
  17. iMeta | 海南大学张家超组-基于肠道菌群SNV基因标记物的炎症性肠病预测模型
  18. 各国海关单证有哪些要求?
  19. mysql create index_MySQL使用CREATE INDEX创建索引
  20. oracle 启动crs进程,由于CRS磁盘dismount造成的CRS进程无法启动问题

热门文章

  1. Navicat运行sql文件导入数据库失败出错
  2. 将12345转换为一万两千三百四十五
  3. matlab批量保存图像
  4. 做网站需要艰苦奋斗而不是坐享其成
  5. 有一位做护士的女朋友,是怎样的一种体验?
  6. 输入一个数组,求出这个数组中的逆序对的总数
  7. 安卓 应用程序userID标志位
  8. 2020.12.03丨全长转录组之基因和转录本鉴定
  9. 【竞赛分享】2022天池江苏气象AI算法挑战赛 思路分享 (初赛暂排第3)
  10. linux命令-cat、zcat