首页
Web开发
Windows程序
编程语言
数据库
移动开发
系统相关
微信
其他好文
会员
首页
>
其他好文
> 详细
ROS学习需要看的网络教程_整理
时间:
2016-07-17 00:15:39
阅读:
1036
评论:
0
收藏:
0
[点我收藏+]
标签:
官方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程序包的一部
ROS学习需要看的网络教程_整理
标签:
原文地址:http://blog.csdn.net/shiyue0010/article/details/51925295
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年07月29日 (22)
2021年07月28日 (40)
2021年07月27日 (32)
2021年07月26日 (79)
2021年07月23日 (29)
2021年07月22日 (30)
2021年07月21日 (42)
2021年07月20日 (16)
2021年07月19日 (90)
2021年07月16日 (35)
周排行
更多
分布式事务
2021-07-29
OpenStack云平台命令行登录账户
2021-07-29
getLastRowNum()与getLastCellNum()/getPhysicalNumberOfRows()与getPhysicalNumberOfCells()
2021-07-29
【K8s概念】CSI 卷克隆
2021-07-29
vue3.0使用ant-design-vue进行按需加载原来这么简单
2021-07-29
stack栈
2021-07-29
抽奖动画 - 大转盘抽奖
2021-07-29
PPT写作技巧
2021-07-29
003-核心技术-IO模型-NIO-基于NIO群聊示例
2021-07-29
Bootstrap组件2
2021-07-29
友情链接
兰亭集智
国之画
百度统计
站长统计
阿里云
chrome插件
新版天听网
关于我们
-
联系我们
-
留言反馈
© 2014
mamicode.com
版权所有 联系我们:gaon5@hotmail.com
迷上了代码!