teb_local_planner编译

项目场景:

ROS导航框架下的一个局部路径规划插件源码地址


相关文献:

C. Rösmann, F. Hoffmann and T. Bertram: Integrated online trajectory planning and optimization in distinctive topologies, Robotics and Autonomous Systems, Vol. 88, 2017, pp. 142–153. C. Rösmann, W. Feiten, T. Wösch, F. Hoffmann and T. Bertram: Trajectory modification considering dynamic constraints of autonomous robots. Proc. 7th German Conference on Robotics, Germany, Munich, May 2012, pp 74–79. C. Rösmann, W. Feiten, T. Wösch, F. Hoffmann and T. Bertram: Efficient trajectory optimization using a sparse model. Proc. IEEE European Conference on Mobile Robots, Spain, Barcelona, Sept. 2013, pp. 138–143. C. Rösmann, F. Hoffmann and T. Bertram: Planning of Multiple Robot Trajectories in Distinctive Topologies, Proc. IEEE European Conference on Mobile Robots, UK, Lincoln, Sept. 2015. C. Rösmann, F. Hoffmann and T. Bertram: Kinodynamic Trajectory Optimization and Control for Car-Like Robots, IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS), Vancouver, BC, Canada, Sept. 2017.

导航包安装:

首先用gmapping建立实验室地图 链接在此

创客智造上已经有的我就不重复了,我只写一下需要注意的事项。

全部流程走完,amcl导航应该可以用了,下一步就是加入teb插件。参考这篇博客

下载到工作空间之后

rosdep install teb_local_planner

报错:

ERROR: Rosdep cannot find all required resources to answer your query
Missing resource teb_local_planner
ROS path [0]=/opt/ros/indigo/share/ros
ROS path [1]=/home/turtlebot/turtlebot_ws/src
ROS path [2]=/home/turtlebot/catkin_ws/src
ROS path [3]=/opt/ros/indigo/share
ROS path [4]=/opt/ros/indigo/stacks

这一步我是肯定知道要报错的,source一下之后,再报错:

ERROR: the following packages/stacks could not have their rosdep keys resolved
to system dependencies:
teb_local_planner: Cannot locate rosdep definition for [visualization_msgs]

好怀念没重装系统之前,一下就编译过去了.

rosdep install --from-paths src --ignore-src --rosdistro=indigo -y

报错:

ERROR: the following packages/stacks could not have their rosdep keys resolved
to system dependencies:
teb_local_planner: Cannot locate rosdep definition for [costmap_converter]

再来

rosdep install --from-paths ~/turtlebot_ws/src/teb_local_planner-indigo-devel --ignore-src -r

也不行:

ERROR: the following packages/stacks could not have their rosdep keys resolved
to system dependencies:
teb_local_planner: Cannot locate rosdep definition for [costmap_converter]
Continuing to install resolvable dependencies...
#All required rosdeps installed successfully

上网一查发现有人遇到过这个问题

The problem is that costmap_converter is also not released into Hydro (see wiki/costmap_converter). You'll have to try and see whether you can build that from source on Hydro as well. Just place the package in the same workspace as where you have teb_local_planner. But again: no guarantees that this will work.

大意是说costmap_converter没有发行在Hydro上(当然也没有在indigo上),上wiki一查果然没有

在这里插入图片描述

sudo apt-get install ros-indigo-costmap-converter

rosdep install --from-paths ~/turtlebot_ws/src/teb_local_planner-indigo-devel --ignore-src -r

显示OK

#All required rosdeps installed successfully

单独编译teb:

catkin_make -DCATKIN_WHITELIST_PACKAGES=“~/turtlebot_ws/src/teb_local_planner”

查看是否编译完成:

rospack plugins --attrib=plugin nav_core

成功

move_slow_and_clear /opt/ros/indigo/share/move_slow_and_clear/recovery_plugin.xml
base_local_planner /opt/ros/indigo/share/base_local_planner/blp_plugin.xml
clear_costmap_recovery /opt/ros/indigo/share/clear_costmap_recovery/ccr_plugin.xml
dwa_local_planner /opt/ros/indigo/share/dwa_local_planner/blp_plugin.xml
global_planner /opt/ros/indigo/share/global_planner/bgp_plugin.xml
navfn /opt/ros/indigo/share/navfn/bgp_plugin.xml
rotate_recovery /opt/ros/indigo/share/rotate_recovery/rotate_plugin.xml
teb_local_planner /home/turtlebot/turtlebot_ws/src/teb_local_planner/teb_local_planner_plugin.xml
carrot_planner /opt/ros/indigo/share/carrot_planner/bgp_plugin.xml

之后继续这篇博客


ROS与MATLAB通讯:

参考这篇博客
想把机器人运行时的速度和角速度画出来,科研的每一步都如同在黑暗中摸索前行,所以说难呀。

一、主从机连上同一局域网,直接用笔记本开热点:

在这里插入图片描述

二、修改ubuntu端的/etc/hosts文件,添加:

172.27.77.110 LAPTOP-62K6ND8C

三、matlab端输入:(设置ROS主机的IP地址为Ubuntu端电脑的IP)

setenv('ROS_MASTER_URI','http://192.168.137.125:11311')
启动ROS:rosinit
关闭ROS:rosshutdown
查看话题:rostopic list

成功:
在这里插入图片描述
四、接收信息并画图

laser = rossubscriber('/base_scan');
scandata = receive(laser,10);
plot(scandata)

添加地图转换:

就算科研的每一步都举步维艰,我们也要负重前行。

突然忘记怎么加插件的了,遇事不决上wiki

也可以参考教程里面的写法。

DWA导航实验:

运行DWA是为了和TEB作对比,再跑一遍是因为之前是用激光跑的,这次用相机的伪激光数据跑,不知道效果能不能好点:

roslaunch turtlebot_bringup minimal.launch
roslaunch turtlebot_rviz_launchers view_navigation.launch
roslaunch turtlebot_navigation amcl_demo.launch map_file:=/home/turtlebot/map/hokuyo_gmapping3.yaml

效果非常不好(我确实想让他差点但是这差的有点过头了),

没跑两步开始转圈(转好几次):

[ WARN] [1608269171.842333253]: DWA planner failed to produce path.
[ WARN] [1608269177.040261644]: Clearing costmap to unstuck robot (3.000000m).
[ WARN] [1608269182.240274629]: Rotate recovery behavior started.
[ WARN] [1608269187.640244875]: Clearing costmap to unstuck robot (1.840000m).
[ WARN] [1608269192.840292163]: Rotate recovery behavior started.

狭窄通道处:

[ WARN] [1608269342.893989734]: Clearing costmap to unstuck robot (1.840000m).
[ WARN] [1608269343.450923452]: Costmap2DROS transform timeout. Current time: 1608269343.4508, global_pose stamp: 1608269342.9126, tolerance: 0.5000
[ WARN] [1608269343.450990650]: Could not get robot pose, cancelling pose reconfiguration
[ WARN] [1608269343.496715714]: Unable to get starting pose of robot, unable to create global plan
[ WARN] [1608269343.693770662]: Unable to get starting pose of robot, unable to create global plan
[ WARN] [1608269343.893746296]: Unable to get starting pose of robot, unable to create global plan
[ WARN] [1608269344.093846252]: Unable to get starting pose of robot, unable to create global plan
[ WARN] [1608269344.293736232]: Unable to get starting pose of robot, unable to create global plan

直接过不了,难道说换了相机之后效果变差了?
经过无数次实验失败,怎么调参都不行那种,我终于可以断定用深度相机做导航确实很垃圾,深度数据转换后激光数据的精度和真正的激光数据完全不在一个档次上,机器人走不了两步就开始转圈(我本来指望相机能把初始位姿这个问题搞定),还是老老实实用激光吧。
之前改的程序因为师弟重装系统无了,我对怎么改毫无头绪,翻了好久才把参考的文章找到。https://blog.csdn.net/kuizhao8951/article/details/103889759注意xml文件不能复制粘贴。
想起来可以使用惯导显示速度和加速度,参考链接

前几天想用imu显示速度曲线结果一直没成功,然后一直死磕,最后以系统崩坏收场,我前期那么多东西全部付诸东流,现在就是非常后悔。现在仔细想想也就是gcc版本问题,但是这个东西涉及到系统内核,实在非常危险,那天查了无数资料,又是建软链接(软链接也不是什么好东西,不要轻易碰)又是下东西,后来软链接层数加多了,系统直接找不到文件了,然后又开始疯狂删,一不小心把不该删的东西给删掉了,导致apt-get失效,万事休矣。

今天找到一个不用正则表达式的方式:

file_path="http://1.1.1.1:9001/group1/M00/00/37/wKgfdVoNSTKAKXAzAAD25Sg6ZTE5747.gz";(这里写你自己的路径)
file_path.substr(file_path.rfind("/")+1);  (可惜还是不好用)

gcc版本说到底也就是c++版本的问题,因为c++11增加了一些新特性,所以普通gcc编译不过去肯定报错。版本问题确实麻烦一会这个不好使一会那个编译不过,什么时候能出一个兼容一切的版本就好了。

TEB仿真实验:

内容不够,百般无奈,加点仿真好了。照着Tutorials上面做吧。

roslaunch teb_local_planner test_optim_node.launch

报错:

ERROR: cannot launch node of type [teb_local_planner/test_optim_node]: can't locate node [test_optim_node] in package [teb_local_planner]

检查odom:

在这里插入图片描述
百度了一下,似乎是没有生成可执行文件,可以使用手动make来解决,在对应的项目文件中新建build文件夹,确保build文件夹上一级含有cmakeLists文件,然后使用下面的命令进行构建,注意每次更改程序之后都需要手动重新进行make。

cmake ..
make

看样子在工作空间根目录下直接catkin_make不好使,成功

在这里插入图片描述速度可视化:

rosrun teb_local_planner_tutorials visualize_velocity_profile.py

报错:

Traceback (most recent call last):
  File "/home/cjt/turtlebot_ws/src/teb_local_planner_tutorials/scripts/visualize_velocity_profile.py", line 9, in <module>
    from teb_local_planner.msg import FeedbackMsg, TrajectoryMsg, TrajectoryPointMsg
ImportError: No module named teb_local_planner.msg

因为脚本是用python编写的,涉及到环境变量的问题,经过无数次失败,我终于有点眉目了。

设置python环境参考

cjt@cjt-ubuntu:~$ python
Python 2.7.6 (default, Nov 13 2018, 12:45:42) 
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/home/cjt/turtlebot_ws/devel/lib/python2.7/dist-packages', '/opt/ros/indigo/lib/python2.7/dist-packages', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PILcompat', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.7', '/usr/lib/python2.7/dist-packages/ubuntu-sso-client', '/usr/lib/python2.7/dist-packages/wx-2.8-gtk2-unicode']

sys.path包含了一个Python解释器自动查找所需模块的路径的列表。注意列表中的第一个字符串是空的,这说明当前目录也是sys.path中的一部份,环境变量PYTHONPATH也一样。这说明你可以在程序中引入当前目录中的模块。

可以看到我们确实没有把需要的路径添加进去。

通过建立.pth文件方式,在python2.7的site-packages文件夹下中创建 .pth文件,然后将需要添加的路径写到.pth文件中去

cd /usr/local/lib/python2.7/dist-packages
sudo nano pythonpathdelf.pth(^按ctrl)
写入(我说之前为啥一直写不进去,原来是没找对地方,写入的必须是python文件才行):/home/cjt/turtlebot_ws/src/teb_local_planner/build/devel/lib/python2.7/dist-packages/teb_local_planner/msg

再查OK:

cjt@cjt-ubuntu:~$ python
Python 2.7.6 (default, Nov 13 2018, 12:45:42) 
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/home/cjt/turtlebot_ws/devel/lib/python2.7/dist-packages', '/opt/ros/indigo/lib/python2.7/dist-packages', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/home/cjt/turtlebot_ws/src/teb_local_planner/build/devel/lib/python2.7/dist-packages/teb_local_planner/msg', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PILcompat', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.7', '/usr/lib/python2.7/dist-packages/ubuntu-sso-client', '/usr/lib/python2.7/dist-packages/wx-2.8-gtk2-unicode']

然而再运行还是不行,搞不懂。

百思不得其解,我又make了几次teb_local_planner那个包,然后那个包变得非常乱,我直接删了重装好了,反正再遇到什么问题都有记录的。

sudo apt-get install ros-indigo-teb-local-planner
rosdep install --from-paths src --ignore-src --rosdistro=indigo -y

再运行就可以了,实在是莫名其妙。

rosparam set /test_optim_node/publish_feedback true
roslaunch teb_local_planner test_optim_node.launch
cjt@cjt-ubuntu:~$ rosrun teb_local_planner_tutorials visualize_velocity_profile.py
[INFO] [WallTime: 1608534468.714216] Visualizing velocity profile published on '/test_optim_node/teb_feedback'.
[INFO] [WallTime: 1608534468.714789] Make sure to enable rosparam 'publish_feedback' in the teb_local_planner.

一些有用的链接

添加障碍物:

chmod +x publish_test_obstacles.py
rosrun teb_local_planner_tutorials publish_test_obstacles.py

跟着教程一套走下来收获了不少仿真的内容,勉强让内容充实了一点点,然而不过是垂死挣扎。

地图转换可视化:https://answers.ros.org/question/234139/costmap-converter-visualization-teb_local_planner/

如果仅仅想运行脚本用二进制安装:

sudo apt-get install ros-indigo-teb-local-planner-tutorials

二进制安装就直接编译好了,相当于黑箱安装省事很多,但是如果想进行修改还是得源码安装。

调试参数的链接

vertices:[[-0.08,0.14],[0.08,0.14],[0.16,0],[0.08,-0.14],[-0.08,-0.14],[-0.16,0]]

能显示路径信息的插件:https://github.com/coins-lab/relaxed_astar
https://web.archive.org/web/20160913102243/http://www.iroboapp.org/index.php?title=Adding_Relaxed_Astar_Global_Path_Planner_As_Plugin_in_ROS

  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 您好,很高兴为您服务。我可以为您介绍Teb Local Planner,它是一种强大的路径规划算法,可以帮助机器人在复杂的外部环境中安全地执行任务。它可以帮助机器人执行复杂的任务,如路径跟踪、自主导航、避障等。 ### 回答2: teb_local_planner是一个基于ROS(机器人操作系统)的路径规划器,用于无人机和机器人的自主导航功能。Teb(Timed Elastic Band)是一种时间弹性带路径优化方法,用来解决动态环境下全局路径规划与局部避障的问题。 teb_local_planner着眼于机器人在未知环境中实时规划安全、高效的运动轨迹。它通过结合速度、加速度和时间的概念,将路径规划问题转化为动态控制问题,并考虑机器人的动力学约束。 teb_local_planner的核心思想是使用弹性带(Elastic Band)来表示机器人运动轨迹的一系列离散步骤。根据当前环境和目标,teb_local_planner会在弹性带上进行优化,得到机器人要遵循的最佳路径。这样,机器人可以实时根据传感器数据和全局路径调整运动轨迹,避免障碍物和动态障碍物,实现高效的路径跟踪。 teb_local_planner的优势在于其快速、可扩展的性能。它可以在动态环境中处理高速移动的机器人,并在短时间内对局部路径进行快速重规划,适应性强。此外,teb_local_planner的参数也可以通过ROS的参数服务器进行调整,以满足不同机器人和环境的需求。 总的来说,teb_local_planner是一种基于时间弹性带路径优化方法的路径规划器,能够在动态环境中实现自主导航,并通过实时调整运动轨迹来避开障碍物、跟踪全局路径,提供高效、安全的移动能力。 ### 回答3: teb_local_planner是一种基于时间空间弧线(timing elastic band)的本地路径规划器。它在ROS(Robot Operating System)平台上广泛应用于移动机器人的自主导航系统中。 teb_local_planner具有以下特点和功能: 1. 路径优化:它能够根据机器人的动力学特性和局部环境导航信息,自动生成路径并对其进行优化。通过引入时间作为路径的第三维度,它能够在路径规划中考虑到速度和加速度的限制,从而生成非常平滑的路径。 2. 避障能力:teb_local_planner能够根据传感器提供的信息,如激光雷达或RGB-D摄像头数据,实时感知并避免检测到的障碍物。它通过障碍物的代价函数来评估路径的质量,并根据规划器的设置,能够灵活地调整路径以避免障碍物。 3. 快速规划:这个本地路径规划器的设计目标是快速生成可行的路径,以满足实时运动控制的需求。它使用了高效的数据结构和算法,能够在较短的时间内生成可行的路径。 4. 高度定制化:teb_local_planner具有很高的可配置性,允许用户根据具体应用的需求来调整规划器的参数。例如,用户可以设置机器人的动力学约束、障碍物的感知范围和权重等,以满足不同场景下的导航需求。 总结而言,teb_local_planner是一种基于时间空间弧线的本地路径规划器,具有路径优化、避障能力、快速规划和高度定制化等功能。它在移动机器人的自主导航系统中发挥着重要作用,能够帮助机器人安全、高效地规划和执行路径。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值