b2c信息网

您现在的位置是:首页 > 最近新闻 > 正文

最近新闻

ros导航包源码详细讲解(ros navigation包)

hacker2022-07-06 04:07:29最近新闻97
本文目录一览:1、ros全局规划完成为什么路线会动2、如何安装ros系统

本文目录一览:

ros全局规划完成为什么路线会动

ROS中,机器人全局路径规划默认使用的是navfn包 ,move_base的默认参数中可以找到

base_global_planner (`string`, default: "navfn/NavfnROS")

navigation的源代码中还有一个global_planner的包里面已经有了A*,Dijkstra等算法的实现,但是navfn的源程序中也有这两个算法的实现,默认根本就没用到global_planner这个文件夹下的源程序。那么为什么有两个用于全局导航的包在ROS里面?它们又是什么关系呢?是因为早期的开发中是用navfn包做导航的并且默认使用Dijkstra做全局路径规划,并且有A * 的代码,那为什么没有使用A * 呢? 因为这里的A*算法存在bug,没人有时间去弄!直到13年David Lu 才完成了这部分工作,重新发布了global_planner包,修改好的代码封装性更强,更清晰明了。因此,也可以认为global_planner是navfn的升级版替代者。那么问题来了David Lu为什么没用global_planner替代掉navfn?为了兼容呗。因此两个包都在,并且默认的是navfn,也就是没用global_planner。

如何使用global_planner包

只要将move_base的参数base_global_planner用global_planner/GlobalPlanner代替就行

将param name="base_global_planner"value="navfn/NavfnROS"/改为

param name="base_global_planner"value="global_planner/GlobalPlanner"/

move_base是如何调用各种global或者local planner包

ROS官方wiki教程里就提到过可以扩展自己的路径规划算法,思路是使用ROS的插件机制

1. 在自己写的global或者local planner算法里开头加上一句特定的程序(PLUGINLIB_EXPORT_CLASS(…..))就能注册插件机制

2. 在xx_plugin.xml等文件里描述下这个插件

3. 在package.xml显式的表明这个插件用来通知ROS我们将使用它

详细具体过程见官方wiki(ROS的插件机制)。 做完以上工作,我们就可以像上面一样将其用参数的形式直接传过去了

插件是如何工作的?(参见下文的补充说明)

以上插件的工作方式就告诉我们必须按照ROS提供的模板去实现,这正是nav_core这个包存在的意义。 在navigation的源代码中你会看到这个nav_core包中仅仅只有几个头文件,正是这些头文件提供了多个模板:

nav_core::BaseGlobalPlanner,

nav_core::BaseLocalPlanner,

nav_core::RecoveryBehavior

在官方的wiki文档里可以看到他们的相关介绍。所以按照这些模板的标准形式去写自己的planner算法就行了。了解了这些我们去看别人写的各种planner的插件就很简单,除了global_planner包和dwa_local_planner包,还有很多其他算法如sbql global planner,eband local planner,carrot_planner等等。关于具体的路径规划算法有很多可以从现有的两个入手先看看A*、Dijkstra算法的具体实现

global_planner/GlobalPlanner的实现

[global_planner/GlobalPlanner源码分析]()

补充:插件是如何工作的?

原理 :

- 要了解pluginlib的工作原理,让我们考虑一个小例子

- 首先,假设存在包含多边形基类(“polygon_interface_package”)的ROS 包。

- 也可以说有两种不同类型的多边形的:rectangle_plugin包(矩形)和triangle_plugin包(三角形)

- rectangle_plugin和triangle_plugin使用都是在package.xml文件中包含指定的export项

- 这告诉rosbuild构建系统,想在polygon_interface_package包里提供polygon类的插件。

- 增加的export项,事实上是在build/packaging系统里注册这些类

- 就是说可以通过rospack查询到所有可用的polygon类,它能返回所有可用的类列表,这里主要是rectangle和triangle。

1)注册/导出插件

为了允许类被动态加载,它必须被标记为导出类。

这是通过特殊宏PLUGINLIB_EXPORT_CLASS来完成的。

这个宏可以放在构成插件库的任何源(.cpp)文件中,但通常放在导出类的.cpp文件的末尾。

对于上面的示例,我们可能在包’example_pkg’中创建一个class_list.cpp文件

如下所示,并将其编译到librectangle库中:

#include pluginlib/class_list_macros.h

#include polygon_interface_package/polygon.h

#include rectangle_package/rectangle.h

//Declare the Rectangle as a Polygon class

PLUGINLIB_EXPORT_CLASS(rectangle_namespace::Rectangle, polygon_namespace::Polygon)

2)插件描述文件

该插件描述文件是用于存储所有关于插件的重要信息的XML文件

它包含有关插件所在的库的信息,插件的名称,插件的类型等

如果我们考虑上面讨论的rectangle_plugin包,插件描述文件(例如rectangle_plugin.xml)将看起来像这样:

我们需要这个文件除了代码宏,允许ROS系统自动发现,加载和解释插件。

library path="lib/librectangle"

class type="rectangle_namespace::Rectangle" base_class_type="polygon_namespace::Polygon"

description

This is a rectangle plugin

/description

/class

/library

(3)注册插件

为了让pluginlib查询跨所有ROS包的系统上的所有可用插件,每个包必须显式指定它导出的插件,以及哪些包库包含这些插件。

一个插件提供者必须在其package.xml中的export块指向它的插件描述文件。

rectangle_plugin为例:

export

polygon_interface_package plugin="${prefix}/rectangle_plugin.xml" /

/export

重要说明:为了使上述export命令正常工作,提供包必须直接依赖于包含插件接口的包。

例如,rectangle_plugin必须在其catkin/package.xml中具有以下行:

build_dependpolygon_interface_package/build_depend

run_dependpolygon_interface_package/run_depend

4)查询插件

可以通过rospack查询ROS包系统,以查看任何给定包可用的插件。

rospack plugins --attrib=plugin nav_core

5)使用插件

pluginlib在class_loader.h头文件中提供了一个ClassLoader类,使得它能够快速和容易地使用提供的类。

有关此工具的代码级API的详细文档,请参阅pluginlib::ClassLoader文档。

例如一个使用ClassLoader在一些使用多边形的代码中创建矩形实例的简单示例:

#include pluginlib/class_loader.h

#include polygon_interface_package/polygon.h

//... some code ...

pluginlib::ClassLoaderpolygon_namespace::Polygon poly_loader("polygon_interface_package", "polygon_namespace::Polygon");

try

{

boost::shared_ptrpolygon_namespace::Polygon poly = poly_loader.createInstance("rectangle_namespace::Rectangle");

//... use the polygon, boost::shared_ptr will automatically delete memory when it goes out of scope

}

catch(pluginlib::PluginlibException ex)

{

//handle the class failing to load

ROS_ERROR("The plugin failed to load for some reason. Error: %s", ex.what());

}

如何安装ros系统

在机器人智慧化的过程当中,ROS(机器人操作系统)成为最关键的一环,当机器人要投入生活甚至是医疗等更多元的场景时,皆需要面对相较普通的生产线以及更复杂的空间环境,而ROS也相较于我们大脑的中枢,不仅能汇集环境变动的数据,亦能分析服务对象的空间位置,进而提供对应的服务操作。

回到设计的需求,用ROS跑项目的确可以加速进行。基本上ROS的核心精神就是在巴别塔里面讲着相同的语言。

总而言之,就是不要再重复造部件!而ROS是架构在Linux内的一套软件,所以只要有Ubuntu就行啦!这次我们用仿真器,可以是VMWARE或是Virtual Box,使用Ubuntu 16.04安装ROS Kinetic,但在2018五月时,ROS推出了Melodic,也有网友在Ubuntu 18.04安装,基本上也没什么问题!

ROS安装过程

这篇文章在VMWARE使用ubuntu-16.04.5-desktop-amd64.iso。

在安装过程中,会需要输入Ubuntu的账号及密码。

下图有一点小小提示,本来作者是用预设的20GB,但在尝试ROS的仿真器与程序代码后,东灌西灌的结果就是20GB搞到要爆炸了,所以建议60GB会比较好一点点。

简单提一下,作者的MAC Air 128G一开始是用双系统切了一半过去,用了1个月后系统容量爆炸,完完全全不够用啊!!!之后再来提一下MAC系统如果不是只想模拟该怎么办。

由于这篇文章目的在模拟,所以在Windows与MAC OS都能用VMWARE或是Virtual Box,但问题来了,如果您是研究所以上的学生,教授要您做出硬件来,VMWARE或是Virtual Box都无法控制到远程的硬件啊!这也是作者试了好几次才发现,一定要用原生的Linux系统加上ROS才行啊!!!所以建议在Windows上的解决方式是直接做双系统,反正硬盘够大,但UEFI的BIOS也搞了许久。

而在MAC Air就不能切双系统了,128G切一半就不能拿来工作了,所以在MAC Air是用外接128G USB随身碟安装Ubuntu,这也搞了许久,总之Windows与MAC OS安装ROS都可以写一篇文章了。好,回到开始用VMWARE安装Ubuntu的时候,会看到下图,这时可以去喝杯饮料悠闲的等待~

安装完毕后,可以去更新一下在Software Updates,但不更新也可以准备安装就是了。

然后在Terminal输入以下指令:

sudo sh -c ‘echo “deb $(lsb_release -sc) main” /etc/apt/sources.list.d/ros-latest.list’

这个时候会请您输入密码,之后再贴上KEY的指令(如下方指令):

sudo apt-key adv –keyserverhkp://ha.pool.sks-keyservers.net:80 –recv-key421C365BD9FF1F717815A3895523BAEEB01FA116

然后再sudo apt-get update:

接着sudo apt-get upgrade升所有需要的安装包:

所以建议前面不要Software Update也可以,接着就是安装Desktop-Full版本的ROS系统在Ubuntu内:sudo apt-get install ros-kinetic-desktop-full

安装完毕,再来呢?接下就就是要初始化!

sudo rosdep init

rosdep update

配置环变量:

echo “source /opt/ros/kinetic/setup.bash” ~/.bashrc

source ~/.bashrc

上面2句还挺重要的,不然每次ROSRUN xxx什么安装包都出现Error,例如:

But!人生就是有这个But!

印象中有一次在Windows的VMWARE中也输入上面2句然后再ROSRUN还是出现Error,所以就开了MAC Air内的Ubuntu看了一下.bashrc档照抄:

红框是有修正过的,如果您下了ROSRUN的指令也出现Error,就照抄Source的那行吧!

许眼尖的读者会发现上面的.bashrc档最后一行是TURTLEBOT3!

作者当初就是在Windows的VMWARE安装UBUNTU及MAC Air安装Virtual Box,不论是在哪台机器都控制不了Turtlebot3的硬件啊!至于如何控制硬件!?接下来安装所有以后可能用的到的套件:

sudo apt-get install python-rosinstallpython-rosinstall-generator python-wstool build-essential

安装结束啰 ~ 而本篇的最后,就是来个roscore测试一下!

然后看到如下图的描述没出现Error就正确啦~

恭喜各位进入ROS的世界!!!

ros是机器人操作系统(Robot Operating System)的英文缩写。ROS是用于编写机器人软件程序的一种具有高度灵活性的软件架构。ROS的原型源自斯坦福大学的STanford Artificial Intelligence Robot (STAIR) 和 Personal Robotics (PR)项目。[1]

中文名

机器人操作系统

外文名

Robot Operating System

简称

ROS

性质

机器人软件平台

快速

导航

ROS的历史 许可协议 主要发行版本 主要功能

ROS是什么

ROS是用于编写机器人软件程序的一种具有高度灵活性的软件架构。它包含了大量工具软件、库代码和约定协议,旨在简化跨机器人平台创建复杂、鲁棒的机器人行为这一过程的难度与复杂度。

ROS图标

ROS设计者将ROS表述为“ROS = Plumbing + Tools + Capabilities + Ecosystem”,即ROS是通讯机制、工具软件包、机器人高层技能以及机器人生态系统的集合体[2] 。

ROS简介

关于ROS是什么,一些不同解释如下:

ROS wiki的解释

ROS(Robot Operating System,下文简称“ROS”)是一个适用于机器人的开源的元操作系统。它提供了操作系统应有的服务,包括硬件抽象,底层设备控制,常用函数的实现,进程间消息传递,以及包管理。它也提供用于获取、编译、编写、和跨计算机运行代码所需的工具和库函数。

ROS 的主要目标是为机器人研究和开发提供代码复用的支持。ROS是一个分布式的进程(也就是“节点”)框架,这些进程被封装在易于被分享和发布的程序包和功能包中。ROS也支持一种类似于代码储存库的联合系统,这个系统也可以实现工程的协作及发布。这个设计可以使一个工程的开发和实现从文件系统到用户接口完全独立决策(不受ROS限制)。同时,所有的工程都可以被ROS的基础工具整合在一起。

Brian Gerkey的网上留言

我通常这样解释ROS:

1. 通道:ROS提供了一种发布-订阅式的通信框架用以简单、快速地构建分布式计算系。

2. 工具:ROS提供了大量的工具组合用以配置、启动、自检、调试、可视化、登录、测试、终止分布式计算系统。

3. 强大的库:ROS提供了广泛的库文件实现以机动性、操作控制、感知为主的机器人功能。

4. 生态系统:ROS的支持与发展依托着一个强大的社区。ros.org尤其关注兼容性和支持文档,提供了一套“一站式”的方案使得用户得以搜索并学习来自全球开发者数以千计的ROS程序包。

摘自《ROS by Example》的解释

ROS的首要目标是提供一套统一的开源程序框架,用以在多样化的现实世界与仿真环境中实现对机器人的控制。

ROS的历史

ROS是一个由来已久、贡献者众多的大型软件项目。在ROS诞生之前,很多学者认为,机器人研究需要一个开放式的协作框架,并且已经有不少类似的项目致力于实现这样的框架。在这些工作中,斯坦福大学在2000年年中开展了一系列相关研究项目,如斯坦福人工智能机器人(STandford AI Robot, STAIR)项目、个人机器人(Personal Robots, PR)项目等,在上述项目中,在研究具有代表性、集成式人工智能系统的过程中,创立了用于室内场景的高灵活性、动态软件系统,其可以用于机器人学研究。

ROS有没有利用三维数据导航的package

ROS的stack库分作两部分,一部分为核心部分,即main部分,简而言之就是使用下面命令,安装ROS系统时就已经安装到我们用户电脑上的那部分。$ sudo apt-get install ros-diamondback-desktop-full 另一部分为选用部分,即universe部分,它不仅包括...

什么是ROS?有什么用?

ROS也可称为是Route Operation System.意为"软件路由器".

一、什么是软件路由器?

一般认为用普通PC安装一套专用的路由器程序组成的系统称为软件路由器,486电脑+免费的软件=专业的软件路由器。

二 、软件路由器技术复杂吗?

不复杂,非常简单,会用普通操作PC就可以安装软件路由器。

三、常见的软件路由器有那些?

根据使用的操作不同可以分为基于windows平台和基于Linux/bsd平台开发的软件路由器,基于Windows平台的软件防火墙比较常见的有ISA Server、Winroute Firewall等,这些软件都是商业化的,通常根据授权用户数不同收费而不同,购买正版的软件防火墙的费用对许多中小型企业来说无疑是一笔不小的开支。有而基于Unix/Linux平台的软件防火墙大家一般接触较少,受益于开放源码运行,目前基于Unix/Linux平台的软件防火墙如雨后春笋般不断推出,这些软件防火墙大多是免费的,常见的有RouterOS、m0n0Wall、SmoothWall、Ipcop、CoyoteLinux等,这些系统共有的特点是一般对硬件要求较低,甚至只需要一台486电脑,一张软盘,两块网卡就可以安装出一台非常专业的软件防火墙,这对很多有淘汰下来的低档电脑的朋友来说,意味着拿一台淘汰的电脑,安装一套免费的防火墙软件,不花一分钱就DIY出一台专业的防火墙,而且这些系统自身也包含了NAT功能,同时可以实现宽带共享,这意味着这台免费的防火墙其实也是一台出色的宽带路由器,这是多么令人激动的事情。

四、软件路由器功能如何?

不同的软件路由器功能不一样,绝大部分基于Linux/bsd的免费软件路由器功能并不比商业的差,而且比商业的功能还要强大。

五、软件路由器的性能和稳定性如何?

目前常见的硬件宽带路由器,绝大部分都是用软件来实现的,跟软件路由器是一样的,而且软件路由器一般硬件配置要比硬件的宽带路由器配置高,所以某些情况下速度比几千上万元的硬件路由器稳定还要快。至于软件路由器的稳定性,受益于稳定的Linux和BSD内核,软件路由器的稳定性非常好,我见过最长时间不用重启的软件路由器,已经有一年多了。

六、制作软件路由器需要什么配件?

一台486以上,8M内存以上的普通PC,再加两块网卡就可以了,有些软件路由器如CoyoteLinux只需一张软盘就可以了,对于网卡没有特殊的要求,常见的Rtl8139 和530tx,3COM905B-TX,Intel82559 服务器网卡等都可以,不过根据我们的经验,一台工作良好的软件路由器,网卡一定要好,所以我们会推荐你使用iNTEL或3COM品牌的网卡,特别是Intel82559效果非常不错。如果经验条件许可,购买一个电子硬盘或CF-IDE转接卡再配上CF存储卡,是不错的选择,这样做出来的软件路由器,可以跟硬件的路由器相比了。

七、软件路由器会淘汰硬件路由器吗?

不会,但会软件路由器会逐渐占领更多的硬件路市场,软件路由器还不能淘汰硬件路由器,它们的市场定位不同,而且在高端只有硬件路由器才能胜任,但对于一般的应用象网吧、学校、机关等用软件路由器可以获得更高的经济效益。

八、到那里可以学会软件路由器技术?

目前比较流行的软件路由器都是国外的,国外软件路由器开发商的官方网站不错的学习地方。.

九、使用软件路由器违法吗?

大部分软件路由器都是开放源码或是软件的,所以学会软件路由器后我们可以给别人安装收取一定的费用,只要心不要太黑就行,另外要心中常挂念教你会的网友,当然象RouteOS/SMOOthwall商业版是收费软件,D版的建议大家不要用,当然要用也可以,最好是自己用就行了,否则出问题后果自负了。

请问大家有没用过ros里的dude.npk包,不知怎么用

输入ROS的IP就可以用DUDE监控啊 在任何地方都可以啊。老大你要是明白就详细说说那包是什么作用 怎么用好奇的很zmtvia 发表于 2009-4-12 15:31 你这个是管理ros不是dude

如何编写ros的python程序

ROS Indigo beginner_Tutorials-10 编写 ROS 话题版的 Hello World 程序(Python版)

我使用的虚拟机软件:VMware Workstation 11 

使用的Ubuntu系统:Ubuntu 14.04.4 LTS 

ROS 版本:ROS Indigo

1. 前言 :

Hello world 程序,在我们编程界,代表学习某种语言编写的第一个程序。对于 ROS 机器人操作系统来说,这个 Hello World 程序就是 : 写一个简单的消息发布器(发送) 和 订阅器(接收)。

2. 准备工作 :

C++ 的程序都会存放在每个程序包的 src 文件夹里。 Python 不同,Python 程序都存放在 scripts 文件夹中, 反正意思都是 源文件 包。 

Step 1 . 所以,先在 beginner_tutorials 软件包中创建一个 scripts 文件夹:

$ roscd beginner_tutorials$ mkdir scripts$ cd scripts123

3. 编写消息发布器节点程序:

如果你懒得去写的话,你可以使用 wget 命令, 在 github 上获取一个 talker.py 源代码。如何获取呢 ? 

Step 2 . 开一个终端,输入下面的命令就可以获取 talker.py :

$ wget

-devel/rospy_tutorials/001_talker_listener/talker.py$ ls

talker.py123

但是我建议你亲自动手,写一写:手动创建一个 talker.py 文件在 /scripys 文件夹里:

$ roscd beginner_tutorials/scripts$ gedit talker.py12

将这上面链接里的代码手动输入到 talker.py 文件中。(我就不将代码贴上来了)

下面我来讲解一下代码:

Step 3 . 最后一步,给这个 talker.py 文件加上可执行权限:

$ chmod +x talker.py1

这样,一个发布器就编写完了。我们不要急着去运行它,现在我们编写一个订阅器,来接收这个发布器发布的话题:

4. 编写消息订阅器节点程序:

Step 4 . 和发布器一样,我们使用wget命令获取订阅器的源代码 listener.py:

$ roscd beginner_tutorials/scripts/$ wget

ials/indigo-devel/rospy_tutorials/001_talker_listener/listener.py$ ls

listener.py  talker.py1234

但是,我还是建议你自己动手写一下。

好吧,下面我们开始讲解 listener.py 里面的代码,这个listener.py程序的代码简单:

Step 5 . 最后不要忘了给这个listener.py 加可执行权限:

$ chmod +x listener.py1

5. 运行 :

对于python 来说,我们不需要使用 catkin_make 命令对 ~/catkin_ws 工作空间进行编译。因为python文件本身就是可执行文件(前提是我们给它添加可执行权限)。

OK,发布器 和 订阅器 都创建完了。下面我们运行它们,看看效果:

Step 6 . 新打开一个终端,先执行 roscore 命令:

$ roscore1

Step 7 . 新打开一个终端,启动 发布器 :

$ rosrun beginner_tutorials talker.py  1

Step 8 . 新打开一个终端,启动 订阅器 :

$ rosrun beginner_tutorials listener.py 1

运行效果:

Step 9 . 我们来使用 rostopic list ,看看当前的话题有哪些:

$ rostopic list

/chatter

/rosout

/rosout_agg1234

其中 /chatter 就是我们在发布器里面发布的 ROS话题。

6. 扩展,编写一个启动脚本文件 :

还记得上一节,我们讲的ROS的启动脚本文件吧,下面我们来编写一个launch文件,来将 talker.py 和listener.py 文件的启动工作交个这个launch文件来做:

Step 10 . 来到 beginner_tutorials程序包的 /launch 路径下,新建一个 hello_world_topic.launch 文件:

$ roscd  beginner_tutorials/launch$ gedit hello_world_topic.launch   #使用你自己喜欢的文本编辑器12

Step 11 . 输入下面的代码:

launch

node pkg="beginner_tutorials" name="talker" type="talker.py" /

node pkg="beginner_tutorials" name="listener" type="listener.py" //launch1234

Step 12 . 现在,将之前打开的终端都关闭,我们启动这个脚本: (开一个终端 : Ctrl+Alt+T)

$ roslaunch beginner_tutorials hello_world_topic.launch1

运行结果:

上面截图的输出显示: talker.py 和 listener.py 脚本运行成功。但是并没有出现刷屏的现象。这是为什么? 为了证明这个脚本程序真的成功的运行了,我们来试一试:

Step 13 . 重新开一个终端,输入下面的命令:

$ rosrun list$ rostopic list$ rostopic echo /chatter123

Step 14 . 现在 Ctrl+C 结束监听 /chatter 话题。使用 rqt_graph 对当前启动的节点可视化:

$ rqt_graph1

这些足以说明,hello_world_topic.launch 启动脚本文件,启动成功。

总结: 发布器 和 订阅器 是很简单的, 就是简单的发布一个 自定义的话题。

我之前使用说过:节点之间通讯的方式有两种 : 话题(rostopic) 和 服务(rosservice)

所以,接下来,我们会讲:使用ROS服务来完成ROS版 Hello World 程序的例子。但是在这之前,我们需要学一学:如何创建自定义的ROS消息和ROS服务,以便 ROS 服务版的 Hello World 程序的编写。 

所以下一讲,我们来学习:如何创建自定义的ROS消息和ROS服务。

发表评论

评论列表

  • 柔侣酒废(2022-07-06 11:30:39)回复取消回复

    ring`, default: "navfn/NavfnROS")navigation的源代码中还有一个global_planner的包里面已经有了A*,Dijkstra等算法的实现,但是navfn的源程序中也有这两个算法的实现,默认根

  • 瑰颈傻梦(2022-07-06 07:05:54)回复取消回复

    器? 一般认为用普通PC安装一套专用的路由器程序组成的系统称为软件路由器,486电脑+免费的软件=专业的软件路由器。 二 、软件路由器技术复杂吗? 不复杂,非常简

  • 离鸢莣萳(2022-07-06 13:24:01)回复取消回复

    非常不错。如果经验条件许可,购买一个电子硬盘或CF-IDE转接卡再配上CF存储卡,是不错的选择,这样做出来的软件路由器,可以跟硬件的路由器相比了。 七、软件路由器会淘汰硬件路由器吗? 不会,但会软件路由器会逐渐占领更多的硬件路市场,软件路由器还不

  • 夙世云棉(2022-07-06 06:56:44)回复取消回复

    catch(pluginlib::PluginlibException ex){ //handle the class failing to load ROS_ERROR("The plugin failed to load for some