局部路径规划器teb_local_planner详解5:关于 robots models
前言
局部路径规划器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相关推荐
- 局部路径规划器teb_local_planner详解3:跟随全局planner
局部路径规划器teb_local_planner详解3:跟随全局planner 前言 一.相关优化项 二.与topologies相关的参数 前言 在局部路径规划器teb_local_planner详解 ...
- 局部路径规划器teb_local_planner详解6:关于动态障碍物与常见问题
前言 在局部路径规划器teb_local_planner详解5:关于car-like robots中,我们介绍了与car-like机器人模型相关的参数,说明了在对接底盘的时候需要注意底盘接收的控制指令 ...
- ros局部路径规划器dwa
ROS的路径规划器分为全局路径和局部路径规划,其中局部路径规划器使用的最广的为dwa,个人理解为: 首先全局路径规划会生成一条大致的全局路径,局部路径规划器会把全局路径给分段,然后根据分段的全局路径的 ...
- 局部路径规划器的实现:有限状态机+conformal lattice
局部路径规划(Local Motion planning) 1. 路径生成 Path generation 2. 碰撞检测 Path collision checking 3. 行为规划 Behavi ...
- 局部路径规划器DWAplannerros
1 体系结构 (1)主要成员 base_local_planner::LocalPlannerUtil planner_util_; 用来存储运动控制参数以及costmap2d.tf等,会被传入dp_ ...
- Dijkstra 路径规划算法原理详解及 Python 代码实现
荷兰数学家 E.W.Dijkstra 于 1959 年提出了 Dijkstra 算法,它是一种适用于 非负权值 网络的 单源最短路径算法,同时也是目前求解最短路径问题的理论上最完备.应用最广的经典算法 ...
- 激光SLAM导航系列(五)局部路径规划
局部路径规划 局部路径规划简介 机器人在获得目的地信息后,首先经过全局路径规划规划出一条大致可行的路线,然后调用局部路径规划器根据这条路线及costmap的信息规划出机器人在局部时做出具体行动策略,R ...
- 【硬核】 ROS Navigation 局部路径规划常见算法
简介 最近,作者参加了关于RMUS 高校 SimReal挑战赛,首次接触到了机器人导航领域,这里记录一下这段时间的收货.sim2real的全称是simulation to reality,是强化学 ...
- DWA算法在局部路径规划中的应用
ROS的路径规划器分为全局路径和局部路径规划,其中局部路径规划器使用的最广的为dwa,个人理解为: 首先全局路径规划会生成一条大致的全局路径,局部路径规划器会把全局路径给分段,然后根据分段的全局路径的 ...
最新文章
- Android ListView 点击item改变item的背景颜色(ListView实现光标移动)
- Docker 最佳实践
- CUDA,C++,Java,Python,Fortran运行速度比较
- 探索发现:平台云——云的新风向
- publiccms中将推荐页的内容显示在页面片段中
- 网络丢包诊断与分析的现实与理想
- 在线语音识别_腾讯云在线语音识别_在线语音识别成文字 - 云+社区 - 腾讯云
- matlab的GUI实验——实现简单信号发生器
- 设置TOMCAT SESSIONID 字符长度和生成算法
- pythonATM,购物车项目实战2,主函数入口
- npm升级所有可更新包
- 再生核希尔伯特空间:Hilbert Space与RKHS基础
- 微信小程序弹框如何显示右上角的关闭
- IMU(陀螺仪)角速度测量原理-科氏力测旋转角速度
- codeforces 1728E
- Windows10下电脑版微信未读消息自动弹窗工具
- iMeta | 海南大学张家超组-基于肠道菌群SNV基因标记物的炎症性肠病预测模型
- 各国海关单证有哪些要求?
- mysql create index_MySQL使用CREATE INDEX创建索引
- oracle 启动crs进程,由于CRS磁盘dismount造成的CRS进程无法启动问题