融合自定义的障碍物

简介:本部分讲解怎样考虑其他节点发布的多边形的障碍物。

1.在一些应用当中,可能不想依赖于代价地图或者想添加其他的除了点状的障碍物。你可以发送你自己的障碍物列表到teb_local_planner包里面,通过指定话题/obstacles.

下面的消息类型costmap_converter/ObstacleArrayMsgcostmap_converter包的一部分。说明了以下障碍物的类型:

点状障碍物:提供了单个顶点的几何形状;

圆圈障碍物:提供了单个顶点且非零半径的几何形状;

线障碍物:提供了两个顶点的几何形状;

多边形障碍物:提供了不只2个顶点的多边形;

2.写一个简单的障碍物发不器

创建一个简单的python节点类发不一些障碍物;对于规划部分,会运行test_optim_node节点。如下publish_obstacles.py

    #!/usr/bin/env python
import rospy, math
from costmap_converter.msg import ObstacleArrayMsg, ObstacleMsg
from geometry_msgs.msg import PolygonStamped, Point32 def publish_obstacle_msg():
rospy.init_node("test_obstacle_msg") pub = rospy.Publisher('/test_optim_node/obstacles', ObstacleArrayMsg, queue_size=) obstacle_msg = ObstacleArrayMsg()
obstacle_msg.header.stamp = rospy.Time.now()
obstacle_msg.header.frame_id = "odom" # CHANGE HERE: odom/map # Add point obstacle
obstacle_msg.obstacles.append(ObstacleMsg())
obstacle_msg.obstacles[].id =
obstacle_msg.obstacles[].polygon.points = [Point32()]
obstacle_msg.obstacles[].polygon.points[].x = 1.5
obstacle_msg.obstacles[].polygon.points[].y =
obstacle_msg.obstacles[].polygon.points[].z = # Add line obstacle
obstacle_msg.obstacles.append(ObstacleMsg())
obstacle_msg.obstacles[].id =
line_start = Point32()
line_start.x = -2.5
line_start.y = 0.5
line_end = Point32()
line_end.x = -2.5
line_end.y =
obstacle_msg.obstacles[].polygon.points = [line_start, line_end] # Add polygon obstacle
obstacle_msg.obstacles.append(ObstacleMsg())
obstacle_msg.obstacles[].id =
v1 = Point32()
v1.x = -
v1.y = -
v2 = Point32()
v2.x = -0.5
v2.y = -1.5
v3 = Point32()
v3.x =
v3.y = -
obstacle_msg.obstacles[].polygon.points = [v1, v2, v3] r = rospy.Rate() # 10hz
t = 0.0
while not rospy.is_shutdown(): # Vary y component of the point obstacle
obstacle_msg.obstacles[].polygon.points[].y = *math.sin(t)
t = t + 0.1 pub.publish(obstacle_msg) r.sleep() if __name__ == '__main__':
try:
publish_obstacle_msg()
except rospy.ROSInterruptException:
pass

如何运行:

roslaunch teb_local_planner test_optim_node.launch
roslaunch mypublisher publish_obstacles.py

相关参数:

在规划中,与自定义障碍物相关的参数

~<name>/min_obstacle_dist: Desired minimal distance from obstacles

~<name>/include_costmap_obstacles: Deactivate costmap obstacles completely

~<name>/costmap_obstacles_behind_robot_dist: Maximum distance behind the robot searched for occupied costmap cells.

~<name>/obstacle_poses_affected: Specify how many trajectory configurations/poses should be taken into account next to the closest one.

~<name>/weight_obstacle: Optimization weight for keeping a distance to obstacles.

~<name>/footprint_model: The robot footprint model 

最新文章

  1. zookeeper原理解析-客户端与服务器端交互
  2. 借助fastjson 实体对象转map
  3. sed文本处理知识点整理
  4. HDU 4278 Faulty Odometer 8进制转10进制
  5. 【转载】为什么不建议&lt;=3G的情况下使用CMS GC
  6. iOS开发 masonry 设置tableHeadView
  7. 充分发挥 JavaScript 语言的优势
  8. [Errno 11004] getaddrinfo failed
  9. JFinal 的源代码超具体的分析DB+ActiveRecord
  10. js返回格式化的日期(年-月-日)
  11. call, apply,bind 方法解析
  12. 用VSCode开发一个基于asp.net core 2.0/sql server linux(docker)/ng5/bs4的项目(3)
  13. 四边形不等式优化DP
  14. H5与APP混合开发相关知识点总结
  15. PHP json_decode为什么将json字符串转成数组是对象格式?
  16. python的pymysql使用方法【转】
  17. ndarray对象的使用方法
  18. windows远程桌面连接时,显示发生身份验证错误,给函数提供的身份无效
  19. RHEL7 DNS 服务 unbound 测试
  20. poj3073

热门文章

  1. Vue-基础(二)
  2. LeetCode Array Easy 219. Contains Duplicate II
  3. 【知识强化】第六章 查找 6.4 散列(Hash)表
  4. go语言从例子开始之Example18.struct结构体
  5. Python3.5-20190519-廖老师-自我笔记-获取对象信息
  6. firefox下jquery ajax 返回 [object XMLDocument]处理
  7. springboot 依赖
  8. python--MySql(外键约束、多表查询(*****))
  9. font-size-adjust属性定义及用法
  10. dependency与dependencyManagement区别