ROS学习需要看的网络教程_整理

官方wiki,主要资料

tips:在官方链接地址栏加入cn,有些页面会进入中文翻译之后的界面,部分如此;尽量看原版英文的。

如http://wiki.ros.org/cn/ROS/Installation

ROS安装教程:http://wiki.ros.org/ROS/Installation   介绍ROS的安装

ROS核心知识系列:http://wiki.ros.org/ROS/Tutorials  主要介绍ros相关的很多概念,理解ROS的架构

ROS cpp包的讲解:http://wiki.ros.org/roscpp_tutorials  主要介绍ros c++编程的一些知识,如何编写节点,如何编译..

http://wiki.ros.org/roscpp/Overview   主要介绍ros c++下的一些主题,比如节点,消息,服务...这部分要好好看

ROS python包的讲解: http://wiki.ros.org/rospy_tutorials 主要介绍ros python的一些知识

API Doc链接

节点句柄类(NodeHandle)成员函数相关使用API : http://docs.ros.org/api/roscpp/html/classros_1_1NodeHandle.html

博客资料

古月居的一篇博客(2013-04-16 21:56): http://blog.csdn.net/hcx25909/article/details/8811313#t1

古月居的CSDN博客系列(2012.7-2013.9): http://blog.csdn.net/hcx25909/article/category/1191901/1

小菜鸟上校的CSDN博客(2013.10-11)(20篇): http://blog.csdn.net/xiaocainiaoshangxiao/article/category/1710543/2

永顿007的新浪博客(2011.01-09): http://blog.sina.com.cn/s/articlelist_1712413141_7_1.html

小庄的博客(2014.10-2015.11): http://blog.csdn.net/junshen1314/article/category/2614195

主题链接

与消息有关的教程: http://wiki.ros.org/msg  关于节点所发布的消息相关的知识,消息的定义描述文件为 程序包目录下的msg/*.msg

消息文件*.msg 包含两部分,类型(fields)和常值(constants)

消息的类型引用使用‘包名/消息名’的方式,例如geometry_msgs/msg/Twist.msg是

程序包geometry_msgs的Twist.msg文件定义的,引用时为 geometry_msgs/Twist

图级名称相关: http://wiki.ros.org/Names  主要关于图级名称定义方面的相关知识,其实我的理解就是各种概念的命名索引规则

1)图级命名对ROS的计算图级(如节点、参数、主题、服务等)提供了一个分层的命名结构。

这些命名对ROS来说很强大,对ROS的扩大和复杂系统化很至关重要。

理解这些命名如何工作以及你如何操作它们很重要

一些常见的命名方式: /(the global namespace)   /foo  /stanford/robot/name

图级资源命名在ROS中提供了一种封装的机制,每种资源被定义在一个命名空间下(namespace)。

这个概念有点类似java的包名,和类名的关系,不同的包下的相同的类名不会产生冲突

合法的命名:1、首字符:英文字母、波浪(~)、斜杠(/)

2、后续字符:字母字母、下划线、斜杠

例外:基本名称中不能出现斜杠和波浪线

解决方案:ROS中有四种类型的图级资源:base、relative、global、private

base

reletive/name

/global/name

~private/name

默认情况下,对节点命名使用相对命名方式,例如,节点/wg/node1 有一个名字空间/wg 所以

节点node2自动归为/wg/node2

没有任何名字空间类型的名字就是基本名字base,它实际上是相对命名的一个子类,

基本名字是节点名字初始化是使用最频繁的。

以/开头的名字属于global类型,尽量避免全局命名方式,因为这不利于代码的可移植性

以~开头的名字属于private类型。它将一个节点名字转化为名字空间,例如,node1在名字空间/wg/中的

private名字是/wg/node1 private名字在通过参数服务器像特定的节点进行传递参数的时候特别有用

当一个节点被命令行launch时,可以使用remap(重映射)

2)包级资源命名:这个概念用于ROS文件系统级.这简化了磁盘文件和数据的引用过程.

包级资源命名很简单,主要就是包资源和其内部的资源名.例如名字"std_msgs/String"指String消息类型

在"std_msgs"包中.

可能使用包级资源命名的ROS相关的文件有:消息类型(Message) 服务类型(Service) 节点类型(Node)

包级资源命名与文件路径很相似,只是它们更短.这归功于ROS从磁盘定位包以及对包中的内容进行估计的能力

例如消息描述文件始终存放在msg子目录下并以*.msg文件存储,所以std_msgs/String 比路径/std_msgs/msg/String.msg短

同样,节点类型 foo/bar 等同于从一个以foo为包名 下的一个可执行文件bar

boost库下的共享指针相关: http://www.boost.org/doc/libs/1_37_0/libs/smart_ptr/shared_ptr.htm

boost是c++的一个开源库,这里使用到了它的共享指针来传递数据,优点是不需要将数据复制一份就可以实现参数的传递

这就意味着你可以存储它而又不需要复制数据

关于CMakeLists.txt:     http://wiki.ros.org/catkin/CMakeLists.txt 主要介绍该文件的内容和如何编写..很重要!

关于创建消息和服务文件: http://wiki.ros.org/ROS/Tutorials/CreatingMsgAndSrv  介绍了如何在一个程序包下创建需要的消息文件和服务文件

使用rosed工具(语法类似vim)可以编辑ros文件系统中的文件,语法是: rosed pkg_name file_name   例如:rosed m_pkg String.msg

pkg_name指已经被系统识别的ros程序包名,file_name指该程序包下的各种文件,包括 *.msg、*.cpp 、CMakeLists.txt、package.xml文件等等

消息(msg):msg消息文件是简单文本文件,其定义了ROS消息的成员类型和成员名称,用于产生不同的程序语言下的消息源代码

消息文件存放于程序包msg目录下

msg文件实际上就是每行声明一个数据类型和变量名,

使用的数据名包括:int8/int16/int32/int64/uint*...float32/float64/string/time/duration/Header

特殊的Header消息类型,其他消息

创建消息文件:在工作空间的某个程序包下,创建msg目录,在里面创建该程序包所使用到的msg消息文件

接下来,要确保msg文件被转换成C++,Python或者其他语言的源代码,查看package.xml文件,

确保有以下两条语句:

<build_depend>message_generation</build_depend>  添加编译构建依赖项

<run_depend>message_runtime</run_depend>         添加运行依赖项

打开CMakeLists.txt文件,在find_paackage(……message_generation)  添加对该项的依赖

在catkin_package(…… CATKIN_DEPENDS message_runtime……)   设置运行依赖项

在add_message_files()中添加消息文件

最后添加generate_messages()函数

编译程序包文件之后,可以使用rosmsg show [pkg_name/msg]来查看消息类型如:rosmsg show m_pkg/String 将会看到string data

服务(srv):srv文件描述一个服务(service),它包含两部分,一个是请求(request),一个是响应(response)

srv文件存放于程序包srv目录下

srv文件的请求和响应两部分只见使用---分割

创建一个服务文件:在工作空间的某个包下,创建srv目录。在该目录下编写*.srv文件

接下来,要确保srv文件被转换成C++,Python或者其他语言的源代码,查看package.xml文件,

确保有以下两条语句:

<build_depend>message_generation</build_depend>  添加编译构建依赖项

<run_depend>message_runtime</run_depend>         添加运行依赖项

打开CMakeLists.txt文件,在find_paackage(……message_generation)  添加对该项的依赖 message_generation对msg和srv都起作用

取消注释add_service_files(),添加进相应的srv文件

在工作空间中catkin_make,会显示如下

...

[  5%] [ 11%] Generating EusLisp code from m_pkg/AddTwoInts.srv

[ 17%] Generating C++ code from m_pkg/AddTwoInts.srv

Generating Python code from SRV m_pkg/AddTwoInts

[ 23%] Generating Lisp code from m_pkg/AddTwoInts.srv

[ 41%] Built target m_pkg_generate_messages_eus

[ 52%] [ 52%] [ 64%] Built target m_pkg_generate_messages_lisp

Generating Python srv __init__.py for m_pkg

Generating Python msg __init__.py for m_pkg

...

使用rossrv show m_pkg/AddTwoInts显示相应的信息

编译之后,生成的msg和srv对应于相关语言的源代码都在devel目录下

c++版的头文件在devel/include/m_pkg下

python版的在devel/lib/python2.7/dist-packages/m_pkg下

关于参数服务器(Parameter Server):http://wiki.ros.org/Parameter%20Server

参数服务器是一个共享的、多变量的词典。它以网络API相连接。在运行时阶段,节点通过服务器存储和提取参数。

由于不是为高性能设计,它最好被用于存储静态的非二进制的数据,像是配置数据。

它是全局可见的,因而其它工具可以容易地查看配置状态,也能够修改它们。

参数服务器通过XMLRPC(使用http协议做为传输协议的rpc机制,使用xml文本的方式传输命令和数据。远程过程调用

http://baike.baidu.com/link?url=ZVlh7vBK9AXil5ZhGEaXes69XcaMd9KfAKcfHtFrRdUj0fhzx7fY4gOTS7SgfJuIOTOplkv03YRrhQvn4g3HOa)

实现。在master节点内部运行,意味着通过普通的XMLRPC库可以获得调用它的API。

参数:使用ROS传统的命名机制命名。这意味着ROS参数有其与话题和节点命名空间相关联的分层机制。这种层次机制保障了参数名称不会相互冲突。

层次机制也使得参数可以像树一样单独地被引用。

例如:/camera/left/name:leftcamera

/camera/left/exposure:1

/camera/right/name:rightcamera

/camera/right/exposure:1.1

参数/camera/left/name有一个leftcamera值,也可以使用/camera/left得到一个词典 name:leftcamera  exposure:1

参数类型:参数服务器的参数值使用XMLRPC数据类型,

包括:32bitintegers,booleans,strings,doubles,iso8601dates,lists,B64-encoded binary data

私有参数(private parameters):ROS的命名规则将~name视为private name.

这些私有名字最初是为点以节点的具体参数准备的

参数工具: rosparam 命令工具可以取得或设置参数服务器中的参数,使用YAML语法

关于主节点Master: http://wiki.ros.org/Master

1.    主节点提供了ros系统中其它节点的命名和注册服务.

它会跟踪消息发布节点和注册节点的话题topic,还有服务service

主节点的作用是使其它节点可以定位另外的节点,一旦定位到了别的节点,就可以实现peer2peer的通信

主节点也提供参数服务器.

主节点主要是用roscore命令启动,该命令会加载ros主节点和其它一些必要的组件.

2.    XMLRPC API

ros主节点提供了基于XMLRPC的API,这些调用会为ROS的客户端库,比如roscpp和rospy所调用,以实现信息的存取

大部分的ROS用户并不需要直接和这些API打交道

3.    一个小例子

有两个节点,camera节点和image_viewer节点。

首先camera节点向主节点master通知说它想要发布images消息在images话题上。

那就发布了这个消息,但无节点订阅,所以并没有数据发送。

现在,image_viewer节点想要订阅images话题,看看有没有images数据。

这样,images话题就有了消息发布者和消息订阅者,主节点就会通知camera节点和image_viewer节点对方的存在

所以,它们之间就通过主节点识别到了对方,这样就开始传递images数据了。

4.    Master的实现

在ROS 1.1中,主节点是由rosmaster程序包实现的;

之后的ros版本(jade是1.11),主节点master是rospy程序包的一部

时间: 2024-08-09 11:45:52

ROS学习需要看的网络教程_整理的相关文章

python基础教程_学习笔记10:异常

异常 什么是异常 Python用异常对象来表示异常情况.遇到错误后,会引发异常.如果异常对象并未被处理或捕捉,程序就会用所谓的回溯(Traceback,一种错误信息)终止执行: >>> 1/0 Traceback (most recent call last): File "<pyshell#0>", line 1, in <module> 1/0 ZeroDivisionError: integer division or modulo by

python基础教程_学习笔记14:标准库:一些最爱——re

标准库:一些最爱 re re模块包含对正则表达式的支持,因为曾经系统学习过正则表达式,所以基础内容略过,直接看python对于正则表达式的支持. 正则表达式的学习,见<Mastering Regular Expressions>(精通正则表达式) re模块的内容 最重要的一些函数 函数 描述 compile(pattern[,flags]) 根据包含正则表达式的字符串创建模式对象 search(pattern,string[,flags]) 在字符串中寻找模式 match(pattern,st

python基础教程_学习笔记12:充电时刻——模块

充电时刻--模块 python的标准安装包括一组模块,称为标准库. 模块 >>> import math >>> math.sin(0) 0.0 模块是程序 任何python程序都可以作为模块导入. $ cat hello.py #!/usr/bin/python print "Hello,signjing!" $ ./hello.py Hello,signjing! 假设将python程序保存在/home/ggz2/magiccube/mysh/p

python基础教程_学习笔记11:魔法方法、属性和迭代器

魔法方法.属性和迭代器 在python中,有的名称会在前面和后面各加上两个下划线,这种写法很特别.它表示名字有特殊含义,所以绝不要在自己的程序中使用这种名字.在python中,由这些名字组成的集合所包含的方法叫做魔法(或称特殊)方法.如果对象实现了这些方法中的某一个,那么这个方法会在特殊的情况下被python调用,而几乎没有直接调用它们的必要. 准备工作 为了确保类是新型的,应该把赋值语句__metaclass__=type放在你的模块的最开始,或者(直接或间接)子类化内建类(实际上是类型)ob

python基础教程_学习笔记19:标准库:一些最爱——集合、堆和双端队列

标准库:一些最爱 集合.堆和双端队列 集合 集合Set类位于sets模块中. >>> range(10) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> set(range(10)) set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) 集合是由序列(或其他可迭代的对象)构建的.主要用于检查成员资格,因此,副本是被忽略的: >>> range(10)*2 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9

python基础教程_学习笔记7:条件、循环、其它语句

条件.循环.其它语句 print和import 随着更加深入地学习python,可能会出现这种感觉:有些自以为已经掌握的知识点,还隐藏着一些让人惊讶的特性. 使用逗号输出 打印多个表达式,只要将这些表达式用逗号隔开即可: >>> print "age:",28 age: 28 参数之间都插入了一个空格符. 如果在结尾加上逗号,那么接下来的语句会与前一条语句在同一行打印: print "Hello,", print "World!"

python基础教程_学习笔记23:图形用户界面

图形用户界面 丰富的平台 在编写Python GUI程序前,需要决定使用哪个GUI平台. 简单来说,平台是图形组件的一个特定集合,可以通过叫做GUI工具包的给定Python模块进行访问. 工具包 描述 Tkinter 使用Tk平台.很容易得到.半标准. wxpython 基于wxWindows.跨平台越来越流行. PythonWin 只能在Windows上使用.使用了本机的Windows GUI功能. JavaSwing 只能用于Jython.使用本机的Java GUI. PyGTK 使用GTK

python基础教程_学习笔记3:元组

元组 元组不能修改:(可能你已经注意到了:字符串也不能修改.) 创建元组的语法很简单:如果用逗号分隔了一些值,那么你就自动创建了元组. >>> 1,3,'ab' (1, 3, 'ab') 元组也是(大部分时候是)通过圆括号括起来的. >>> (1,3,'13') (1, 3, '13') 空元组可以用没有内容的两个圆括号来表示. 如何实现包括一个值的元组呢? >>> (5) 5 >>> ('ab') 'ab' >>>

ArcGIS for Desktop入门教程_第八章_Desktop学习资源 - ArcGIS知乎-新一代ArcGIS问答社区

原文:ArcGIS for Desktop入门教程_第八章_Desktop学习资源 - ArcGIS知乎-新一代ArcGIS问答社区 1 学习资源 用户在学习和应用过程中,可以参考的资源如下: 1. ArcGIS资源中心 http://resources.arcgis.com/en/home/ 2. Esri中国在线支持中心http://support.esrichina.com.cn/ 3. ArcGIS知乎社区 http://zhihu.esrichina.com.cn/ 4. 优酷视频ht