2017年7月ROS学习资料小结

网友投稿 564 2022-05-30

《孙子兵法·谋攻篇》:“上兵伐谋,其次伐交,其次伐兵,其下攻城;攻城之法为不得已。”

任何发生在自己国土上的战争,即便胜利,也饱含屈辱。

----~~~~----Gazebo 8

使用ROS / Gazebo版本的组合

介绍

本文档概述了使用不同版本的ROS与不同版本的Gazebo结合使用的选项。建议在安装Gazebo ROS包装机之前阅读它。

重要!简单分析一个快速正确的决定

如果您计划使用特定版本的ROS,并且没有理由使用特定版本的Gazebo,则应继续 安装gazebo_ros_pkgs 教程,该教程说明如何通过ROS安装完全支持的Gazebo版本。

警告:请注意,使用与ROS存储库交付的官方版本不同的Gazebo版本可能会导致ROS程序包的冲突或其他集成问题。

Gazebo版本和ROS集成

Gazebo是一个独立的项目,如boost,ogre或ROS使用的任何其他项目。通常,在每个ROS发行周期开始时(例如gazebo7ROS Kinetic)提供的Gazebo的最新主要版本被选为完全集成和支持的官方Gazebo,并将在ROS发行的整个生命周期中保留。

Gazebo开发与ROS不同步,所以每个新的主要版本的Gazebo必须在ROS发布之前被释放。以下部分介绍如何使用不同版本的Gazebo的ROS。

需要注意的是GazeboABI稳定政策遵循 语义版本理念,其中具有相同的主号码(所有版本,, ,...)使用相同的ROS发行时是二进制兼容的,因此可以互换。gazebo_6.0.0gazebo_6.1.0gazebo_6.0.1

安装Gazebo

GazeboUbuntu包

安装Gazebo的最简单方法是使用包。有两个主要的仓库主持Gazebo包:一个是另一个。在写作时:packages.ros.orgpackages.osrfoundation.org

packages.ros.org

Indigo:主机Gazebo版本2.x包。

Kinetic:主机或使用Gazebo版本7.x包。

Lunar:主机或使用Gazebo版本7.x包。

packages.osrfoundation.org

Gazebo5.x系列(包名gazebo5)

Gazebo6.x系列(包名gazebo6)

Gazebo7.x系列(包名gazebo7)

Gazebo8.x系列(包名gazebo8)

这意味着包含osrfoundation存储库不是严格需要获得GazeboUbuntu包。它可以从ros存储库安装。

Gazebo从源头建成

如果您从源代码编辑了Gazebo版本,请注意,根据使用的存储库分支(gazebo6,,gazebo7...),您的Gazebo将与gazebo_ros_pkgs(和所有其他在Gazebo顶部编译的ROS包)二进制兼容,只有主版本匹配您的本地分支存储库和ROS发行版中使用的Gazebo版本。例如,如果您是从Gazebo分支编译,您可以使用 Indigo(使用Gazebo2系列)的礼物。gazebo_2.0gazebo_ros_pkgs

2017年7月ROS学习资料小结

请注意,如果您使用default分支,您可能不是与任何发布的包二进制兼容,所以您将需要一个catkin工作区才能获得有效的gazebo_ros_pkgs。

使用默认的Gazebo版本进行ROS分发

对于需要运行特定版本的ROS并且想要使用所有GazeboROS相关软件包的用户,这是推荐的部分:

Lunar

ROS Lunar主持或使用7.x版本的Gazebo。对于完全集成的ROS系统,我们建议使用7.x版本的Gazebo。继续进行下去的方法就是使用ROS库(它会自动安装gazebo7),并且还没有使用osrfoundation库。

Kinetic

ROS Kinetic主机或使用7.x版本的Gazebo。对于完全集成的ROS系统,我们建议使用7.x版本的Gazebo。继续进行下去的方法就是使用ROS库(它会自动安装gazebo7),并且还没有使用osrfoundation库。

Indigo

ROS Indigo拥有Gazebo的2.x版本。对于完全集成的ROS系统,我们建议使用2.x版本的Gazebo。继续进行下去的方法就是使用ROS库(它会自动安装gazebo2),并且还没有使用osrfoundation库。

用ROS使用具体的Gazebo版本

警告!使用此选项,您将无法使用ROS deb存储库中与Gazebo相关的任何ROS Ubuntu软件包。相当于gazebo_ros_pkgs 可以从debian包安装,但所有其他软件(如 turtlebot_gazebo)都必须从源代码构建。感谢catkin工作区, 这很容易做到。

如果真的需要,可以使用Gazebo和ROS的任何特定版本:

Gazebo8.x系列

OSRF存储库提供了构建在包上方的ROS / Kinetic或ROS / LunarGazebo包装器()的版本。使用它们的步骤是:-gazebo8-gazebo8_ros_pkgsgazebo8

将osrfoundation存储库添加到源列表中。

安装从osrfoundation库,这将安装包。ros-$ROS_DISTRO-gazebo8-ros-pkgsgazebo8

使用catkin工作区编译源代码中使用的其他软件。

Gazebo7.x系列

OSRF存储库提供了构建在包上方的ROS / IndigoGazebo包装器()的版本。使用它们的步骤是:-gazebo7-gazebo7_ros_pkgsgazebo7

将osrfoundation存储库添加到源列表中。

安装从osrfoundation库,这将安装包。ros-indigo-gazebo7-ros-pkgsgazebo7

使用catkin工作区编译源代码中使用的其他软件。

常问问题

我没有使用ROS,应该使用哪个版本?

如果您不需要ROS支持,推荐的版本是可以使用osrfoundationrepo安装的最新版本 。

我想使用子弹/ simbody / dart物理引擎,我应该使用哪个版本的Gazebo?

从gazebo4Ubuntu软件包中内置了子弹和simbody支持,所以请按照上述说明gazebo4与ROS结合使用。Dart仍然需要从源头开始安装Gazebogazebo3,从而可以使用gazebo3或更高版本,并按照上述说明使其与ROS一起使用。

我需要使用Gazebo8和ROS Kinetic / Lunar,我该怎么办?

警告!使用此选项,您将无法使用ROS deb存储库中与Gazebo相关的任何ROS Kinetic软件包。要从源头构建它们的方式。感谢catkin工作区,这很容易做到。

如果您需要一些仅在Gazebo版本8.x中出现的功能,则有一种安装方式gazebo8和ROS Kinetic / Lunar。请按照有关如何使用ROS与Gazebo8软件包在同一文档的说明。

我需要使用Gazebo7和ROSIndigo,我该怎么办?

警告!使用此选项,您将无法使用ROS deb存储库中与Gazebo相关的ROS Indigo软件包。要从源头构建它们的方式。感谢catkin工作区,这很容易做到。

如果您需要一些仅在Gazebo版本7.x中显示的功能,则有一种安装方式gazebo7和ROS Indigo。请按照有关如何使用在同一文档中使用Raze与Gazebo7的说明。

一些ROS包与GazeboX ROS Wrappers冲突!

请注意,每个ROS分布都被设计为与特定版本的Gazebo一起使用(gazebo7在Kinetic中)。当有人选择使用与ROS发行版中推荐的不同版本的Gazebo时,可能会出现问题,其中一些可能无法解决。

如果在尝试安装本文档中描述的一个版本之后发现依赖冲突(例如使用RVIZ),则需要从源安装ROS或Gazebo。

----~~~~----ROS2

ROS 2

机器人操作系统(ROS)是一组可帮助您构建机器人应用程序的软件库和工具。从驱动程序到最先进的算法,以及强大的开发人员工具,ROS具有您下一个机器人项目所需的功能。这都是开源的。

在这里,您将找到有关如何安装和使用ROS 2软件的文档,ROS 2是一个正在大力开发的新版本的ROS。有关ROS 2的更多信息,请参见下文。

如果您正在寻找有关ROS 1的信息(即ROS,因为它已经存在了好几年,现在您可能正在使用),请查看ROS网站或文档维基。

在继续之前,请阅读功能页面了解当前ROS 2版本中的内容。

安装

请参阅安装页面。

教程

ROS 2正在大力发展,所有版本目前都是“alpha”-prefixed。您不应该期望今天从ROS 1切换到ROS 2,但您可以查看教程页面,以查看系统在当前状态下可以执行的操作的一系列示例。

特约

有关如何为ROS 2开发做出贡献的详细信息,请参阅贡献页面和开发人员指南。

报告问题和提问

请参阅联系页面。

关于ROS 2

自从ROS于2007年启动以来,机器人和ROS社区发生了很大变化。ROS 2项目的目标是适应这些变化,利用ROS 1的优势,改善不了的。有一个关于ROS 2的动机完整的文章在这里。

当前状态

ROS 2的Alpha版本目前正在进行约6周的节奏,让社区成员有机会对系统提供反馈。在高层次上,ROS 2的发展广泛侧重于为支持多个DDS中间件实施,多个操作系统,多种编程语言以及与运行ROS 1的系统共存的基础奠定基础。有关当前功能的详细信息,请参阅功能。

有什么事情

有关ROS 2的即将推出的功能的详细信息,请参阅路线图。

在哪里可以找到更多信息

有关ROS 2设计的各种文章在design.ros2.org,如:为什么选择ROS 2.0?,ROS上DDS,和ROS 1和ROS 2之间变化。

ROS 2的代码是开源的,分为各种存储库。您可以在ros2 github组织上找到大多数存储库的代码。

以下是关于ROS 2的ROSCon会谈,并提供有关ROS 2和各种演示的工作的信息:

----~~~~----ROS暑期学校课程及资料下载

第1天 (2017年7月22日)(科学会堂)

第2天(2017年7月23日)(科学会堂)

第3天(2017年7月24日)

第4天(2017年7月25日)

第5天(2017年7月26日)

第6天(2017年7月27日)

第7天(2017年7月28日)

第8天(2017年7月29日)

----~~~~----使用ROS进行机器人编程学习网址

http://robocademy.com/

如果你喜欢机器人,而你想学习如何编程,那就是你的Meetup!

ROS正在成为机器人编程的标准。所以你必须掌握ROS,如果你想在不久的将来在机器人工作。

来到这个MeetUp,找到一个非常快的方式来学习ROS!

您将需要携带笔记本电脑,因为这将是一个手写教程。但不用担心,您可以携带任何类型的笔记本电脑。本教程无需安装。所有的编程都将在线完成。

请提前10-15分钟连接互联网,抓住一个不错的机会!

----~~~~----

http://bluesat.com.au/a-dummys-guide-to-debugging-ros-systems/

调试ROS系统的虚拟指南

所以你写了最终的ROS程序:经过数千行代码,你的机器人终将达到感觉,带来奇点!

一个接一个地启动你的节点。每一个使启示录越来越近。你输入最后一个命令。和。而且什么也没有。什么地方出了错?你会怎么找到,永远挤压那个妨碍你胜利的时刻的错误?这个博客试图回答这些问题,更多*。

在BLUEsat中,我们已经有了我们分享复杂的ROS调试问题。当您通过竞争任务中途进行时,最好的时间会发生,随着时间的推移。虽然这篇文章还会在较短的时间内看看更常见的调试情况,并且易发生火灾的环境**。

以下是我们成功部署以调试ROS环境的几种工具和技术。

保持冷静和火焰!

你以前可能已经听过这个消息,但是在调试时不重要的结论或者您没有正确测试的修复程序非常重要。例如,Google有一个策略,可以回滚其服务上的更改,而不是尝试推送修复。一个类似的想法适用于竞争或时间压力的情况:确保你已经想到通过这个补丁,从你的机器人删除“不要杀人”的安全!话虽如此,不幸的是,回滚不太可能适用于竞争情况,也不可能将您刚才 在机器人上启动的火灾推迟。所以我们不能只是复制谷歌,但我们应该考虑一下我们在做什么。

基本上,在这种情况下您应用的任何修补程序或配置修复程序都是计算出的风险,您应该确保在做某些事情之前了解这些风险。在去年的欧洲巡回赛挑战赛中,我发现可以调整小型设置,重启某些节点,重新校准系统; 但是由于建立通信所需的时间,在任务期间强制循环流动站太危险了。同样重新启动我们的驱动系统或摄像机对我们的飞行员来说是非常具有破坏性的,所以只能在某些情况下完成,在这种情况下,通过不修复系统造成的损坏可能会更糟。话虽如此,在关键的摄像机失败后,我们试图以编程方式对该设备进行电源循环 - 这个决定是指摄像机足够重要,可以尝试这样一个危险的举动。

在非时间压力的情况下,您可以更灵活。可以测试不同的选项,看看它们是否工作。这是因为它们不会损坏您的机器人。然而,结构化的方法通常对于那些更复杂的错误是有益的。我经常发现,当我调试间歇性或难以检测到的问题,很容易就会失去跟踪我尝试过的结果,或者得到结果。我发现一个非常有用的技术是记录我在做什么,就像我所做的那样,特别是如果问题包括传感器数据。

基本上主要的一点也是保持头脑清晰,并在行动之前考虑后果。了解风险,并准备好您的E-Stop按钮!现在看看可以用来帮助你调试的一些工具。

抓住你的RQT

方便的“ rqt ”工具是ROS调试器的瑞士军刀。在时间压力和非时间压力的调试中,它节省了很多次。在2016年欧洲巡回赛挑战赛中,我是在调试台的不间断的伙伴,提供了许多有用的见解和许多有用的诊断数据。(一个标准的BLUEsat漫游者驾驶人员由驾驶漫游者的飞行员组成,一名副驾驶 - 跟踪任务目标,飞行员位置,并管理飞行员的通讯;以及一个调试器,用于监视流动站的状态软件和管理不同运行的ROS节点)。

RQT使用终端中的“rqt”命令运行,并且包含可通过插件菜单加载的一系列小部件  。下面我将简要介绍一些必须有用的小部件。

RQT的第一个工具是节点图。此小部件将您的ROS图中的所有节点描绘为椭圆形,并将所有主题作为正方形。方向箭头表示哪些节点正在广告或订阅主题。您还可以选择仅显示当前连接到发布者和订户(活动)的主题,或仅显示节点而不显示主题信息。

当我开始调试ROS问题时,节点图是我看到的第一件事情之一。一目了然,我可以看到哪些节点正在运行,如果两个节点正确连接。令人惊讶的是,ROS问题的频率可以像没有运行的节点一样简单(或者当不应该运行时)。该图还允许我们看到节点是否正确连接 - 拼写错误的主题名称当然不会在代码中跳出来,但它在图表中直接显示为缺少的一个链接。

如果我们使用节点图找不到我们的问题,那么 下一个小部件通常会有帮助。该主题监视器  是较年轻,更好地组织同级rostopic回声命令行工具。它显示所有当前广告主题的列表,并允许您监视它们。除了每个主题都是一个复选框,当选中订阅我们的主题,显示其完整的输出以及它使用的带宽和发布的频率。

这对于检查正确的信息是否正在通过您的ROS网络而言非常有用,而无需在所有节点中添加ROS_INFO调试。在BLUEtongue Rover上,我们发布了大量的诊断信息作为ROS主题(这里有一点更多)。其中一些用于通过GUI向我们的飞行员提供信息,但如果我们需要了解细节,那么RQT可以提供大量丰富的信息。

除了诊断信息之外,主题监视器可用于查找网络中的问题。一个常见的情况是没有实际发布任何消息的节点 - 在这种情况下,它可能无法正确连接,您应该查看ROSWTF部分。您还可以看到节点是否发布错误的消息类型,或者是否有任何值不正确。

最后,您还可以使用主题监视器来识别潜在的带宽问题,尽管您应该记住,在这样做时,rqt将会订阅主题本身,这可能会加剧问题。

RQT  Message Publisher是  主题监视器的 邪恶双胞胎。顾名思义,它允许您发布消息,为命令行rostopic pub命令提供非常相似的功能  - 您可以选择主题,消息类型和频率,然后输入要发送的数据。然而,它还提供了一些额外的视觉辅助工具来加快调试过程。

首先,它预先填充主题列表和相应的类型列表,使您可以快速发布到当前在网络中的任何用户。这可以是压力下的救生员,并且阻止您不断提醒自己,如果该cmd_vel消息是geometry_msgs / Twist   或geometry_msgs / TwistStamped。

一旦您选择了消息类型,它还将显示该消息的字段,使其更简单地填写这些更复杂的消息。它还记住以前发送的消息,允许您快速重新发送。如果您需要执行类似发送特定消息集的操作,或者在事件发生后快速启用消息,这可能会很好。

最后,如果您是高级用户或需要发送更复杂的消息,则可以在“表达式”字段中输入有效的python表达式,而不是实际值。这包括时间,数学或随机模块中的任何方法。此外,它还为您提供自动计数器i(请参阅上述图像的示例)。

我将在RQT调试工具中讨论的最后一个工具是TF Tree。如果您使用ROS的变换系统,该工具很有用  ,如果您不想跳过本节。

TF树显示您的变换的连接结构,以及哪个节点发布给定的帧,最后一次更新,以及系统中最旧的变换。

我用过的最好的用法是检测图中的差距。例如,如果您没有向joint_state发布任何关于它的信息,那么ROS的robot_state_publisher将不会发布非固定联合的转换  ,这可能导致无法访问的转换。如果发生这种情况,最好的方法往往是返回并检查以确保要发布的任何节点正在正常运行。通过查看平均速率和  最近的变换值来识别转换超时的原因也很有用。

找到自己与RViz

RQT是一个非常有用的日常调试工具,但是如果您正在处理非常可视化的信息,例如点云或软件认为机器人的不同部分,那么需要更强大的功能。那就是RViz进入的地方,它是一个3D场景,您可以在其中可视化不同类型的ROS数据。除了URDF机器人模型,RViz还支持点云,占用网格等等。基本上如果您想要可视化的主题是ros-desktop的一部分,那么您可以在RViz中看到它。(注意:如果您真的想使用RQT,您可以使用RViz作为RQT插件)。

RViz实际上在ROS Wiki上有一些合理的教程,所以我只是在这里给出悬崖的笔记。RViz的关键特性是能够加载不同的ROS消息,并相对于彼此进行可视化。如果您尝试调试与本地化或自动化相关的任何操作,如果您的机器人认为它在错误的地方或传感器数据有问题,您可以快速解决问题,这很有用。作为RViz多功能性的一个例子,我们在2016年欧洲巡回赛挑战赛的“盲人导航”任务中利用它来显示相对于流动站估计位置的单个LIDAR数据平面(在该任务中禁止摄像机进给或全3D传感器可视化) )。我们还广泛使用它来调试LIDAR传感器输入(见下文)和各种SLAM解决方案。

ROSWTF!

如果你有奇怪的连接问题或节点,否则似乎正常工作,那么roswtf工具就是你的家伙/ gal。基本上,ROSWTF旨在成为您一站式商店,用于识别您的ROS系统中的问题,尽管我的经验是不完整的。然而,它真正的好处是检测您的ROS网络的任何设置或网络问题。

一个这样的问题是您的ROS网络上的机器无法识别对方的主机名。如果您没有像DHCP或DNS在机器之间共享这些东西,或者您的计算机的DNS名称与本地程序认为您的主机名不匹配,则可能会发生这种情况。这是一个难以检测的问题,因为节点通常会连接并正常运行,直到他们尝试与其他机器上的节点通信为止。ROSWTF会发现这很难找到问题。

在大多数情况下,有两种方法来解决这个问题,第一种是将本地机器的ROS_HOST环境变量配置为其IP地址,第二种是修复主机名解析,使机器可以找到对方。后者可以通过在/ etc / hosts文件中添加条目  或更新本地DNS服务器来完成。在BLUEsat中,我们倾向于使用环境变量选项作为我们的网络设置通常意味着我们不使用DHCP,并且拥有主机知道自己的ip意味着我们不必在我们的网络中的每台机器上更新  / etc / hosts 添加一个新的主机。

roswtf 可以检测到的其他问题  是:配置错误的ROS_MASTER节点,实际网络问题和ros启动文件配置问题。如果一切都看起来应该是工作,但不是,  roswtf 是工作的工具!

用GDB和Valgrind深入挖掘

不用说,如果你已经经历了其他步骤,你的机器人还在着火,你可能没有太多的机器人。GDB和Valgrind是最适合初始测试和开发的工具,但是当您的机器人  不起火时,它们非常有用。

这两个工具本身都是主题,我建议您阅读有关各个工具(gdb,valgrind)的完整教程,以便更好地了解它们。在这里,我们将主要介绍如何在ROS环境中使用这两种工具。

为了有效地使用这些工具之一,您必须首先使用调试符号重新编译代码。这允许工具向您提供有关行号的信息,以及可能发生错误的代码片段。要重新编译启用了调试符号的catkin工作区,您可以运行以下命令。

1

2

$ catkin_make -DCMAKE_BUILD_TYPE=Debug

[Catkin Output Goes Here]

第二个难题实际上是找到可执行文件来运行它,使用gdb或valgrind(不幸的是你不能在rosrun上运行gdb)。如果您位于catkin工作区的根目录,那么可执行文件应位于  devel / lib / / 中。这意味着您可以使用以下命令使用gdb运行节点:

1

$ gdb devel /lib/ [ros_package_name]/[node_name]

然后,您可以按照gdb中的正常方式逐步执行程序。同样,您可以使用以下命令运行valgrind:

1

$ valgrind --leak-check= yes devel /lib/ [ros_package_name]/[node_name]

我发现当我试图调试segfaults,奇怪的输出或意想不到的行为时,我倾向于使用gdb; 而我几乎专门使用valgrind来查找内存泄漏和数组溢出。它们是调试C ++代码的关键工具,我强烈建议您阅读更多关于它们!

现在去获得这个奇点!

所有这些工具在我在BLUEsat期间对我来说非常有用,特别是在欧洲漫游挑战赛的任务中。我希望您下次尝试创建奇点时,甚至当您正在调试正常的ROS代码时,您会发现它们有帮助。如果没有,这里只是用很多这些工具刮掉了你可以做的事情,我鼓励读者对所有这些工具进行更深入的实验和深入探讨!

* BLUEsat UNSW及其成员(大多数)不赞同启发启示,并且对由于启示相关调试而可能发生的任何死亡或全球范围的灾难承担全部责任。

**  本文中的调试技巧不能在火灾中保证应用安全。BLUEsat建议自由使用E-Stop系统。

----~~~~----

ROS VSCode扩展

这Visual Studio代码(VSCode)扩展提供支持机器人操作系统(ROS)

的发展。

知识库

问题

入门

当您打开一个catkin工作区或一个catkin工作区内的文件夹时,扩展名将自动启动。

ROS发行版将自动从父环境确认,否则将

无法自动完成ROS 发行版的提示。

要启动ROS主机,请使用“ROS:启动核心”命令。左下角的“ROS主站”指示灯将显示

主站当前是否正在运行,您可以单击此按钮查看参数等。如果您点击F5,您可以创建一个调试

配置来运行rosrun或roslaunch命令。

首次打开工作区时,扩展将自动创建catkin_make构建任务并更新

C ++和Python路径。稍后可以使用相应的命令重新运行此过程。

特征

自动ROS环境配置。

允许启动,停止和查看ROS主站状态。

catkin_make使用标准构建命令运行。

创建catkin包。

运行rosrun或roslaunch

语法高亮显示.msg,.urdf和其他ROS文件。

自动添加ROS C ++包含和Python导入路径。

使用ROS clang-format风格格式化C ++ 。

命令

ROS Summer School 2017 挑战赛

团队介绍

队名: STAR Robot

单位: 上海科技大学自动化与机器人中心

成员: 陈宏宇, 旷皓飞, 龙肖灵

实验环境

硬件平台:

Turtlebot 2(Kinect相机需要面向地面安装)

PC(i7处理器, 8G内存)(PC的性能影响图像处理的效率)

软件环境:

Ubuntu 14.04

ROS Indigo

Python 2.7, OpenCV2.4.8

Python以及OpenCV环境配置

Python环境:Ubuntu 14.04 已预装了Python2.7

安装OpenCV:

软件源安装:

sudo apt-get install python-numpy

sudo apt-get install python-opencv

也可使用pip或anaconda安装。

源码安装:到OpenCV官网下载所需的版本, 按照其教程来安装。

IDE配置:

PyCharm:到PyCharm官网下载,按照其教程来安装

配置PyCharm:详见ROS wiki IDEs

算法简介

Step 1 导入相机数据

读取相机数据: 通过rospy订阅 '/camera/rgb/image_raw' 这一Topic: self.image_sub = rospy.Subscriber('/camera/rgb/image_raw', Image, self.image_callback)

在回调函数里,利用cv_bridge将每一帧图像转换为opencv格式的图片: image = self.bridge.imgmsg_to_cv2(msg, desired_encoding='bgr8')

Step 2 图像预处理

将原始图像转换为hsv图像

提取所需的颜色,将图像转换为二值图像

利用中值滤波和腐蚀来去除噪点

将处理后的图像切片,只保留相机下方某一范围内的区域

Step 3 提取关键点

对Step 2中产生的二值图像进行轮廓提取:

提取图片中的所有轮廓

将轮廓面积小于一定值的轮廓去除(消除了某些滤波没有清除的噪声的影响)

选取剩下的轮廓中面积最大的轮廓作为最终区域

经过上一步处理后,如果存在轮廓,取轮廓的质心作为最终所追踪的关键点

Step 4 控制

通过对 '/cmd_vel_mux/input/teleop' Topic发送Twist类型的消息来控制小车移动

如果存在关键点:利用P控制器控制小车移动(线速度为定值,角速度受error影响,error为质心的x值减去图像中线的值(Kinect是320), error所乘的比例可以调节,其决定角速度的大小)

如果不存在关键点: 在小车运动时,若是线离开了相机的视野(该处指对原图切片后的视野), 小车会立即停止运动,执行以下决策:

向某一方向旋转一定角度(根据最后一次error的正负来决定旋转的方向(error小于0,逆时针;error大于0,顺时针)),若旋转过程中检测到了关键点(即线又回到了视野内),则继续执行之前的决策; 若没有检测到,则执行2。

前进一段距离,停止(即到达终点或失败)。

参考资料

Programming Robots with ROS: A Practical Introduction to the Robot Operating System

我们对本书第12章中所提到的算法进行了改进,用于此次挑战赛

致谢

很感谢华东师范大学机器人运动与视觉实验室以及张新宇老师,还有暑期学校的组委会组织了此次活动。感谢GaiTech赞助了本次暑期学校的挑战赛。很高兴能与很多对机器人感兴趣的同学老师聚在一起交流学习。

由于时间较短,我们的程序还存在很多问题,如果同学老师对我们的程序有任何问题和建议,或是对我们的团队感兴趣,可以联系我们,我们的联系方式可以在我们实验室的主页上找到(上海科技大学自动化与机器人中心)

--------唯有全力以赴,方能不负此生--------

Ubuntu 视频

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:AJAX后端数据
下一篇:Java 编程技巧之数据结构
相关文章