61阅读

计算机操作系统的功能-TPC:TPC-一、什么是TPC和tpmC?,TPC-二、如何衡量计算机系统的性能和价

发布时间:2018-04-18 所属栏目:操作系统论文

一 : TPC:TPC-一、什么是TPC和tpmC?,TPC-二、如何衡量计算机系统的性能和价

TPC(Transaction Processing Performance Council,事务处理性能委员会的简称)是由数10家会员公司创建的非盈利组织,总部设在美国。

天的用户在选用平台时面对的是1个缤纷繁杂的世界。用户希望有1种度量标准,能够量化计算机系统的性能,以此作为选型的依据。作者曾在美国从事过数年计算机性能评价工作,深深体会到,计算机的性能很难用一2种度量来 评价,而且,任何度量都有其优缺点,尤其是当使用者对性能度量了解不深时,很容易被引入一些误区,甚至推演出错误的结论。本文以TPC基准程序为例,给出一 些实际建议,以帮助用户避免进入这些误区。

tpc_TPC -一、什么是TPC和tpmC?


tpmC值在国内外被广 泛用于衡量计算机系统的事务处理能力。但究竟什么是tpmC值呢?作者曾向一些 用户、推销人员乃至某些国外大公司的技术人员问过这个问题,但回答的精确度 与tpmC值的流行程度远非相称。tpmC这一度量也常被误写为TPM或TPMC。
1、TPC
TPC(Transaction Processing Performance Council,事务处理性能委员会)是由数10家会员公司创建的非盈利组织,总部设在美国。该组织对全世界开放,但迄今为止,绝大多数会员都是美、 日、西欧的大公司。TPC的成员主要是计算机软硬件厂家,而非计算机用户,它的功 能是制定商务应用基准程序(Benchmark)的标准规范、性能和价格度量,并管理测 试结果的发布。
TPC的出版物是开放 的,可以通过网络获取(http://www.tpc.org)。TPC不给出基准程序的代码,而只 给出基准程序的标准规范(Standard Specification)。任何厂家或其它测试者都可以根据规范,最优地构造出自己的系统(测试平台和测试程序)。为保证测试结果的客观性,被测试者(通常是厂家)必须提交给TPC一套完整的报告(Full Disclosure Report),包括被测系统的详细配置、分类价格和包含五年维护费用在内的总价 格。该报告必须由TPC授权的审核员核实(TPC本身并不做审计)。现在全球只有几个审核员,全部在美国。
2、tpmC
TPC已经推出了四套基准程序,被称为TPC-A、TPC-B、TPC-C和TPC-D。其中A和B已经过时,不再使用了。TPC-C是在线事务处理(OLTP)的基准程序,TPC-D是决策支持(Decision Support) 的基准程序。TPC即将推TPC-E,作为大型企业(Enterprise)信息服务的基准程序。
TPC-C模拟1个批发 商的货物管理环境。该批发公司有N个仓库,每个仓库供应十个地区,其中每个地 区为3000名顾客服务。在每个仓库中有十个终端,每1个终端用于1个地区。在运 行时,10×N个终端操作员向公司的数据库发出五类请求。由于1个仓库中不可能 存储公司所有的货物,有一些请求必须发往其它仓库,因此,数据库在逻辑上是 分布的。N是1个可变参数,测试者可以随意改变N,以获得最佳测试效果。
TPC-C使用3种性能 和价格度量,其中性能由TPC-C吞吐率衡量,单位是tpmC。tpm是transactions per minute的简称;C指TPC中的C基准程序。它的定义是每分钟内系统处理的新订单个数。要注意的是,在处理新订单的同时,系统还要按表1的要求处理其它四类事务 请求。从表1可以看出,新订单请求不可能超出全部事务请求的45%,因此,当1个 系统的性能为1000tpmC时,它每分钟实际处理的请求数是2000多个。价格是指系 统的总价格,单位是美元,而价格性能比则定义为总价格÷性能,单位是$/tpmC。

tpc_TPC -二、如何衡量计算机系统的性能和价格


在系统选型时,我们一定不要忘记我们是为特定用户环境中的特定应用选择系统。切忌为了“与国际接 轨”而盲目套用“国际通用”的东西。在性能评价领域,越是通用的度量常常越是不准确的。据我所知,美国的一些大用户从不相信任何“国际通用”的度量,而是花相当精力,比如预算的5%,使用自己的应用来测试系统,决定选型。在使用任何1种性能和价格度量时,一定要弄明白该度量的定义,以及它是在什么系统配置和运行环境下得到的,如何解释它的意义等。下面我们由好到差讨论3种方式。
1、在真实环境中运行 实际应用
最理想的方式是搞1个试点,要求制造商或系统集成商配合将系统(含平台、软件和操作流程)在1个 实际用户点真正试运行一段时间。这样,用户不仅能看到实际性能,也能观察到系统是否稳定可靠、使用是否方便、服务是否周到、配置是否足够、全部价格是否合理。如果1个部门需要购买一批同类的系统,这种方式应列为首选,因为它不仅最精确、稳妥,也常常最有效率,用户还可先租一套系统作为试点。用这种方式得到的度量值常常具有很明确和实际的含义。
2、使用用户定义的基准程序
如果由于某种原因第1种方式不可行,用户可以定义一组含有自己实际应用环境特征的应用基准程序。 我举2个例子:近年来,由于R/3软件是应用层软件,SAP公司的基准程序获得了越来越多国外企业的认可;中国税务总局最近也开发了自己的基准程序,以帮助税务系统进行计算机选型。这种方式在中国尤其重要,因为中国的信息系统有其特殊性。
3、使用通用基准程序
如果第一种和第两种方式都不行,则使用如TPC-C之类的通用基准程序,这是不得已的1种近似方法。因 此,tpmC值只能用作参考。我们应当注意以下几点:
(1)实际应用是否与基准程序相符
绝大多数基准程序都是在美国制订的,而中国的企事业单位与美国的运作方式常常不一样(恐怕也不应该或不可能一样)。在使用TPC-C时,我们应该清楚地知道:我的应用是否符合批发商模式?事务请求是否与表1近似?对响应时间的要求是否满足表1?如果都不是,则tpmC值的参考价值就不太大了。
(2)TPC度量的解释
TPC基准程序是用来测系统而不是测主机的,厂家肯定要充分优化他们的被测系统。此处的“系统”包括主机、外设(如硬盘或RAID)、主机端操作系统、数据库软件、客户端计算机及其 操作系统、数据库软件和网络连接等。在很多厂家的TPC测试系统中,主机的价格只是系统总价格的1/4或更小,而硬盘的价格有可能占到总价格的1/3以上,因为TPC-C要求被测系统必须保存180天的事务记录。如果同样的主机被用到用户的环境中,厂家报的tpmC值就意义不大,因为用户的实际系统与厂家原来用于TPC测试的系统大不一样。当同样的主机用在不同的系统中时,tpmC值可能有相当大的变化,现在很多用户还没有意识到这一点。
我举1个例子。假设用 户希望购买一批同类系统,每一系统至少需要1GB的内存和50GB的硬盘。厂家A、B、C 各报了3个价格相当的系统,tpmC值分别为3000、2800、2600。用户是否应该选厂 家A的产品呢?答案是:不一定。厂家用于测试tpmC值的系统与实际提供给用户的系统配置大不一样。tpmC最低的厂家C提供给用户的系统反而有可能性能最好,不 论是以实际系统的tpmC值还是以用户的实际应用性能来衡量。
(3)TPC测试的成本
TPC-C和TPC-D都是很复杂的基准程序,做1个严格的测试是很消耗资源的,厂家当然不会说出他们花费了多少钱和时间。但据国外知情人士透露,1个厂家做第1个TPC-C测试需 要几十万到上百万美元的资金和半年左右的时间投入。因此,很多TPC的度量值都 是估计的。由于计算机系统换代频繁,如果用户一定要用通过审核的度量值,就必 须多等待半年时间,因此而不能用最先进的系统。中国的厂家通过审核的时间则 更长。
综上所述,我们对中国 用户(尤其是大用户)在计算机系统的选型方面有如下建议:
最好建立1个真实的试点,因为实际应用环境是检验计算机系统的最好标准。
中国的行业应该建立符合自己实际应用的基准程序和测试标准。中国税务总局的做法值得提倡。国家有关部门应该建立独立的测试中心,制定跨行业、符合中国企事业运作模式的性能测试标准。
“国际通用”的度量可以作为参考值,而不应作为必要条件。尤其是一定要弄清这些流行度量有什么含义,是在什么样的系统环境中测得的,以及基准程序是否符合企业真实的业务流程和运作模式。
--------------------------------------------------------------------------------------------------------------------------------------------------
作为一家非盈利性机构,事务处理性能委员会(TPC)负责定义诸如TPC-C、TPC-H和TPC-W基准测试之类的事务处理与数据库性能基准测试,并依据这些基准测试项目发布客观性能数据。TPC基准测试采用极为严格的运行环境,并且必须在独立审计机构监督下进行。委员会成员包括大多数主要数据库产品厂商以及服务器硬件系统供应商。
相关企业参与TPC基准测试以期在规定运行环境中获得客观性能验证,并通过应用测试过程中所使用的技术开发出更加强健且更具伸缩性的软件产品及硬件设备。
TPC-C是1种旨在衡量联机事务处理(OLTP)系统性能与可伸缩性的行业标准基准测试项目。这种基准测试项目将对包括查询、更新及队列式小批量事务在内的广泛数据库功能进行测试。许多IT专业人员将TPC-C视为衡量“真实”OLTP系统性能的有效指示器。
TPC-C基准测试针对1种模拟订单录入与销售环境测量每分钟商业事务(tpmC)吞吐量。特别值得一提的是,它将专门测量系统在同时执行其它4种事务类型(如支付、订单状态更新、交付及证券级变更)时每分钟所生成的新增订单事务数量。独立审计机构将负责对基准测试结果进行公证,同时,TPC将出据一份全面彻底的测试报告。这份测试报告可以从TPC Web站点(http://www.tpc.org)上获得。
tpmC定义: TPC-C的吞吐量,按有效TPC-C配置期间每分钟处理的平均交易次数测量,至少要运行12分钟。
1.TPC-C规范概要
TPC-C是专门针对联机交易处理系统(OLTP系统)的,一般情况下我们也把这类系统称为业务处理系统。
TPC-C测试规范中模拟了1个比较复杂并具有代表意义的OLTP应用环境:假设有1个大型商品批发商,它拥有若干个分布在不同区域的商品库;每个仓库负责为十个销售点供货;每个销售点为3000个客户提供服务;每个客户平均1个订单有10项产品;所有订单中约1%的产品在其直接所属的仓库中没有存货,需要由其他区域的仓库来供货。
该系统需要处理的交易为以下几种:
New-Order:客户输入一笔新的订货交易;
Payment:更新客户账户余额以反映其支付状况;
Delivery:发货(模拟批处理交易);
Order-Status:查询客户最近交易的状态;
Stock-Level:查询仓库库存状况,以便能够及时补货。
对于前4种类型的交易,要求响应时间在5秒以内;对于库存状况查询交易,要求响应时间在20秒以内。
2.评测指标
TPC-C测试规范经过两年的研制,于1992年7月发布。几乎所有在OLTP市场提供软硬件平台的厂商都发布了相应的TPC-C测试结果,随着计算机技术的不断发展,这些测试结果也在不断刷新。
TPC-C的测试结果主要有2个指标:
● 流量指标(Throughput,简称tpmC)
按照TPC的定义,流量指标描述了系统在执行Payment、Order-status、Delivery、Stock-Level这4种交易的同时,每分钟可以处理多少个New-Order交易。所有交易的响应时间必须满足TPC-C测试规范的要求。
流量指标值越大越好!
● 性价比(Price/Performance,简称Price/tpmC)
即测试系统价格(指在美国的报价)与流量指标的比值。
性价比越小越好!
3.结果发布
各厂商的TPC-C测试结果都按TPC组织规定的2种形式发布:测试结果概要(Executive Summary)和详细测试报告(Full Disclosure Report)。测试结果概要中描述了主要的测试指标、测试环境示意图以及完整的系统配置与报价,而详细测试报告中除了包含上述内容外,还详细说明了整个测试环境的设置与测试过程。
P690 tpmC测试值:76,389,839.00
$/tpmC:831.00
美国美金报价:6,349,223.0
CPU数:32
数据库:IBM DB2udb8.1
操作系统:AIX 5L V5.2
中间件:TUXEDO 8.0
测试日期:2003.6.30
P690 TPC-C测试的配置:
1.后台:1 x eServer pSeries 690 with 32 x 1.7GHz POWER4+ processors with 128MBL3 Cacheper MCM (total of four MCMs), 512GB memory
2.前端:30 x eServer pSeries 630 Model 6E4 each with 4 x 1.0GHz POWER4 CPUs with 32MB L3 cache, 16GB memory
SPECweb:
SPECweb96: 在SPECweb96基准测试程序上实现的每秒钟超文本传输协议(HTTP)操作最多次数,响应时间无明显退化。
SPECweb99: 接入数,网络服务器可用预先确定的工作量支持的同时接入数。SPECweb99检测设备模拟客户通过慢Internet联接,向网络服务器发送HTTP工作量请求。
SPECweb99 测试Web服务器运行状况
SPECweb99 是由标准性能评估组织(SPEC)开发的Web服务器基准测试。它测量满足特定吞吐量和客户请求响应速率要求的WEB服务器的最大并发连接数量。并发连接的合计波特率在320 Kbps到400Kbps范围内,则满足相应规范。
SPECweb99 在一台称为主客户端的机器上运行,这台机器上包含有允许用户加载特定负载请求的配置文件。主客户端也要处理在客户端和服务器或测试中的系统(SUT)之间的传输协调问题。客户端通过许多子进程/线程生成独立HTTP请求流,仿真足够的负载发送给SUT。
在这个测试中,客户端向测试中的服务器发送请求数据。测试规范要求客户端和服务器之间的连接不能使用片段大小大于1460比特的TCP协议。因此,每1个客户端读取1460比特或更少数据块的响应。
测试中使用2种类型的负载量:
静态负载. 静态负载具有4种类型的文件。最小的文件的增幅为0.1KB,第二种文件类型的增幅为1KB,最后2种类型的文件的增幅为10KB和100KB。每1个目录包含每种类型九个文件共3六个文件。
目标请求的文件类型在各类型中分散使用。在每1类中的九个文件中又进行二次分布。最终目标文件混合为:
35%的请求文件小于1 KB
50%的请求文件小于10 KB
14%的请求文件小于100 KB,但是大于或等于10 KB
1%的请求文件小于1000 KB,但是大于或等于100 KB
动态负载.动态负载是基于广告和用户注册。共有4种在SPECweb99中使用的请求内容类型,分别是标准动态取操作、动态随机取操作、动态发送操作和客户图形接口动态取操作。标准动态取操作和客户图形接口动态取操作表现web服务器的简单广告轮转特性。带有广告轮转的动态取操作追踪用户和用户选择,所以广告可以由不同的方式来定制。最终,动态发布实施1个用户注册在相应的网站上。
P690 SPECweb99测试值:21,000
Web服务器:Zeus 4.0
操作系统:AIX 5L V5.1 (64-bit)
CPU数:16
测试日期:2001-10-1
测试配置:16 x 1.3GHz POWER-4 Processors w/1440KB unified on chip L2 cache, 192GB memory, 32 x 32 IBM Gigabit Ethernet-SX PCI controllers, 32 x Gigabit Ethernet network (1 Gigabit/sec), 96 x Clients (4 x 375MHz POWER3-II, RS/6000 44P-270), Requested Connections = 21000, Max Fileset Size = 67319.6MB
P650 SPECweb99测试值:12,400
Web服务器:Zeus 4.1r3
操作系统:AIX 5L V5.2 (64-bit)
CPU数:8
测试日期:2002-10-1
测试配置:8 x 1.45GHz POWER4+ processors w/1.5MB(I+D) unified on chip L2 cache, 32MB unified off chip/SCM L3 cache, 64GB memory, 8 x Gigabit Ethernet-SX PCI-X controllers, 8 x Gigabit Ethernet network (1 Gigabit/sec ), 48 x Clients (6 x 668MHz RS64-IV, pSeries 620 Model 6F1), Requested Connections = 12400, Max Fileset Size = 39801.28MB
p630 SPECweb99测试值:6,895
Web服务器:Zeus 4.2r1
操作系统:AIX 5L V5.2(64-bit)
CPU数:4
测试日期:2003-2-1
测试配置:4 x 1450MHz POWER4+ Processors w/1536KB(I+D) unified on chip L2 cache, 8MB unified (off chip)/SCM L3 cache, 32GB memory, 4 x Gigabit Ethernet-SX PCI-X controllers, 4 x Gigabit Ethernet networks (1 Gigabit/sec ), 24 x Clients (4 x 375MHz POWER3-II, pSeries 640 Model B80), Requested Connections = 6900, Max Fileset Size = 22199.12MB
NotesBench:
NotesBench是测试各种不同Lotus Notes方面的驱动程序。目的是执行自定义工作量教本中的命令,模拟客户机的操作。NotesBench测试“仅测试邮件”和“测试邮件和数据库”。所有已经公布的IBM结果均为“仅测试邮件工作量”。
p680 NotesBench测试值:150,197
用户数:108,000
平均反应时间:0.584秒
Domino服务器版本:5.06a
操作系统:AIX 4.3.3
CPU数:4
测试日期:2001.11.20
测试配置:IBM eServer pSeries 680 (24*RS64 IV/600MHz; 96GB RAM, 30 Partitions)

二 : 机器人操作系统ROS_典型功能实现方法详解

机器人操作系统ROS: 典型功能实现方法详解

李宝全

ROS体系 ....................................................................................................................... 2

ROS安装 ....................................................................................................................... 3

TurtleBot 配置与运行 ................................................................................................... 3

ROS基础的学习 ........................................................................................................... 4

P3-AT/DX ...................................................................................................................... 8

ROSARIA配置与运行 ............................................................................................................. 8

ROSARIA键盘控制: .............................................................................................................. 10

ROSARIA程序控制方式: .................................................................................................... 11

Android遥控 ............................................................................................................................. 11

TurtleBot的键盘控制: ................................................................................................ 12

配置USB转串口 ........................................................................................................ 12

CmakeList.txt的制作 .................................................................................................. 13

图像的发布与接收...................................................................................................... 13

图像的接收,处理与显示 ...................................................................................................... 13

Kinect端获取图像 .................................................................................................................. 14

内置USB 摄像头图像获取 .................................................................................................... 15

外接USB摄像头图像获取 .................................................................................................... 17

KinectSkeleton ............................................................................................................. 17

TF Listener(综合实现人体跟踪) ................................................................................ 19

Voice ............................................................................................................................ 22

语言识别pocketsphinx ........................................................................................................... 22

识别结果的接收与显示 .......................................................................................................... 23

语言发布 .................................................................................................................................. 23

综合: 捕获String并发声 ........................................................................................................ 25

两主机通讯ROS_Network ......................................................................................... 25

ROS_OpenTLD ........................................................................................................... 27

ROS学习材料 ............................................................................................................. 27

1

catkin 机器人操作系统ROS_典型功能实现方法详解

ROS体系

版本:

Hydro 2013-09-04

Groovy 2012-12-31

Fuerte 2012-04-23

Electric

Diamondback

ROS是一种分布式的处理框架。[www.61k.com]

文件系统: 在硬盘上查看的ROS源代码的组织形式

包 Package:

含有manifest.xml 或package.xml?

比如下文中的turtlebot_teleop,turtlebot_bringup。

堆:Stack

包的集合

含有stack.xml

编译方法:

catkin:Groovy及以后版本

rosbuild:用于Fuerte及以前版本

常用命令: rostopic list;列出系统中的所有Topic

rosdep: 安装依赖包, 例如 rosdep install rosaria

安装时, 需要先建一个工作空间,然后把gitgub网站上相应的包下载到src文件夹下,再执行该语句。具体见 “ROSARIA配置与运行”一节。

环境变量设置:export

例如:

export ROS_HOSTNAME=marvin

export ROS_MASTER_URI=

Bulks给的一些有用的命令

rosnode info /rosaria_teleop_key_1

rosrun rqt_robot_steering rqt_robot_steering

rosrun rqt_gui rqt_gui

rostopic help

rosnode help

rosnode info /RosAria

rosnode info /rosaria_teleop_key_1

rosnode list

echo $ROS_HOSTNAME

2

catkin 机器人操作系统ROS_典型功能实现方法详解

ROS安装

安装教程:http://wiki.ros.org/hydro/Installation/Ubuntu

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu precise main" > /etc/apt/sources.list.d/ros-latest.list'

1.3 安装keys

wget http://packages.ros.org/ros.key -O - | sudo apt-key add -

1.4 安装

使Debian包为最新:sudo apt-get update

Full安装:sudo apt-get install ros-hydro-desktop-full

会出现一个界面,利用Tab选择Yes即可

成功则提示:ldconfig deferred processing now taking place

找到可以使用的包:

apt-cache search ros-hydro

1.5初始化rosdep

sudo rosdep init

rosdep update

1.6环境设置

echo "source /opt/ros/hydro/setup.bash" >> ~/.bashrc

source ~/.bashrc

1.7得到rosintall

sudo apt-get install python-rosinstall

TurtleBot 配置与运行

介绍TurtleBot的主页面(安装&运行): http://wiki.ros.org/Robots/TurtleBot

TurtleBot包(Package)的安装过程

安装(turtlebot/Tutorials/hydro/Installation ):按照Debs Installation按照方法来安装:

1. 首先安装:> sudo apt-get install ros-hydro-turtlebot ros-hydro-turtlebot-apps ros-hydro-turtlebot-viz ros-hydro-turtlebot-simulator ros-hydro-kobuki-ftdi

2. 之后加入sourse的bash中:> . /opt/ros/hydro/setup.bash. 说明: a) 在终端中输入这一行后很快就结束.

b) 效果是在.bashrc(Home中的隐藏文件)的最后一行加入了"source /opt/ros/hydro/setup.bash",

c) 效果等效于命令> echo "source /opt/ros/hydro/setup.bash" >> ~/.bashrc. 这样的话就不用每次启动都输入命令“source /opt/ros/hydro/setup.bash”了.

d) 这个好像在安装ROS时已经执行过了,不需要再执行一次吧?

3. 之后加入kobuki的udev规则:> rosrun kobuki_ftdi create_udev_rules

安装完之后还需要加入网络时间控制(turtlebot/Tutorials/hydro/Post-Installation ), 否则与kokuki无法通讯.

1.首先安装chrony:sudo apt-get install chrony

2.再进行syncNTP:sudo ntpdate ntp.ubuntu.com

问题: 我重装系统后再安装turtlebot后,连接不上kokuki,但能正常连接Kinect。[www.61k.com)在命令

3

catkin 机器人操作系统ROS_典型功能实现方法详解

行中,提示到bad callback, 因此说明有很多件没有安装成功。(www.61k.com]需要将其卸载重装,可以网上搜索Uninstall turtlebot来卸载并重装。

运行:

1. 首先打开机器人核心服务程序:打开一个终端:键入: roscore //

2. 系统的检测:New Terminal:输入命令 roslaunch turtlebot_dashboard

turtlebot_dashboard.launch 之后就会弹出kobukiDashboard-rqt

3. kobuki的运动控制:

a. New Terminal: > roslaunch turtlebot_bringup minimal.launch 用于

初始化机器人?

b. New Terminal:Teleoperation/ : roslaunch turtlebot_teleop

keyboard_teleop.launch 开启键盘控制这一节点, 用于键盘控制机器人的运动.

4. 应用视觉传感器kinect并启动rviz界面:

a. New Terminal: > roslaunch turtlebot_bringup 3dsensor.launch; //将3Dsensor加入到系

统中, 初始化kinect传感器//kinect最好插到USB2.0上

b. 启动rviz的view_robot :New Terminal: roslaunch turtlebot_rviz_launchers

view_robot.launch // rviz中也整合了上一步的kobuki的运动控制

c. 这个也可以在p3at上的kinect上运行.

5. SLAM: 与之前的两项无关. 需要重新开始, 否则就报错了.

a. New Terminal: 开启ROS服务: roscore

b. New Terminal: 启动kobuki:roslaunch turtlebot_bringup minimal.launch

c. New Terminal: 运行gmapping Demo:roslaunch turtlebot_navigation

gmapping_demo.launch

d. 启动RVIZ的navigation:New Terminal: roslaunch turtlebot_rviz_launchers

view_navigation.launch

e. 保存建图的结果:rosrun map_server map_saver -f /tmp/my_map

f. 说明: 该例程只用到kobuki, 没有用到Kinect.

6. 退出:ctrl+c

ROS基础的学习

ROS Tutorials:

1.1.1 Installing and Configuring Your ROS Environment

创建catkin workspace:

1. $ mkdir -p ~/catkin_ws/src //产生工作空间Workspace文件夹, 并产生源空间src文件夹

2. $ cd ~/catkin_ws/src

3. $ catkin_init_workspace //

a. 初始化工作空间//

b. 在src中仅生成一指向/opt/ros/hydro/share/catkin/cmake/toplevel.cmake的

CMakeLists.txt的链接,即CMakeLists.txt的内容与toplevel.cmake的内容一样

4. $ cd ~/catkin_ws/ //回到工作空间中

5. $ catkin_make //build工程??

a. 要在工作空间目录下输入该命令

b. //会产生build,devel文件夹

6. $ source devel/setup.bash //在当前bash环境下读取并执行devel/setup.bash 中的命令

工作空间的结构(包含包的):

workspace_folder/ -- WORKSPACE

src/ -- SOURCE SPACE

CMakeLists.txt //怎么没有这个呢 -- 'Toplevel' CMake file, provided by catkin

package_1/

4

catkin 机器人操作系统ROS_典型功能实现方法详解

CMakeLists.txt -- CMakeLists.txt file for package_1

package.xml -- Package manifest for package_1

...

package_n/

CMakeLists.txt -- CMakeLists.txt file for package_n

package.xml -- Package manifest for package_n

1.1.2 Navigating the ROS Filesystem

1. 查找某一包(package): 使用命令(例如)$ rospack find roscpp. 则会返回路径:

/opt/ros/hydro/share/roscpp

2. 利用命令$ roscd roscpp, 则直接进入/opt/ros/hydro/share/roscpp文件夹.

3. $ pwd //报告当前位置

1.1.3 Creating a ROS Package

上接1.1.1

1. $ cd ~/catkin_ws/src: 首先进入src文件夹.

2. $ catkin_create_pkg beginner_tutorials std_msgs rospy roscpp:创建包

a. beginner_tutorials为产生的包的名称,

b. std_msgs, roscpp, rospy为依赖项(dependencies)

1.1.4 Building a ROS Package

上接1.1.3

1. $ cd ~/catkin_ws/ : 首先返回工作空间文件夹.

2. $ ls src: 查看src文件夹中的内容,

a) 结果为beginner_tutorials CMakeLists.txt.

b) 链接CMakeLists.txt一直存在

c) 命令ls为列出当前文件夹下的东西

3. $ catkin_make. //build

a) 需要在工作空间目录下运行该命令

b) 若在src文件夹下运行该命令,会有错误提示The specified base path

"/home/listname/catkin_ws_wmr/src" contains a CMakeLists.txt but "catkin_make" must be invoked in the root of workspace.

1.1.10 Creating a ROS msg and srv

2.1产生一个消息:

1. 创建一个消息

a) cd ~/catkin_ws/src/beginner_tutorials首先进入文件夹.

b) 再创建一个文件夹$ mkdir msg.

c) $ echo "int64 num" > msg/Num.msg: 创建一文件Num.msg, 并写入一行话int64 num,

当然还可以多加入几行.

2. 对(beginner_tutorials中的)package.xml添加下面两行:

a) <build_depend>message_generation</build_depend>

b) <run_depend>message_runtime</run_depend>

3. 对(beginner_tutorials中的)CMakeList.txt做如下修改 :

a) 在原有的find_package(xxx)中加入“message_generation”

b) 在catkin_package()中添加CATKIN_DEPENDS message_runtime

c) 取消add_message_files()的注释, 并修改为add_message_files(FILES Num.msg) d) 取消generate_messages(DEPENDENCIES std_msgs)的注释

2.2使用rosmsg

5

catkin 机器人操作系统ROS_典型功能实现方法详解

$ rosmsg show beginner_tutorials/Num. 应该输出int64 num

但但提示找不到该消息??????

使用查找命令$ rosmsg show Num, 应该输出[beginner_tutorials/Num]:int64 num. 但还是找不到???????????????????

3.1创建一个srv

1. 创建一个srv

a) $ roscd beginner_tutorials//输入这行命令后, 提升找不到 beginner_tutorials文件夹呢.

//只能手动进入该文件夹了

b) $ mkdir srv //创建一个srv文件夹

c) $ roscp rospy_tutorials AddTwoInts.srv srv/AddTwoInts.srv把ROS系统文件中的包复制文件到srv文件夹下

2. 对beginner_tutorials中的CMakeList.txt做如下修改:

a) 在原有的find_package(xxx)中加入“message_generation”(在创建msg过程中已

添加)

b) 取消add_serivce_files( )的注释, 并修改为add_serivce_files(FILES AddtwoInts.srv)

3.2使用rossrv:

使用命令:$ rossrv show beginner_tutorials/AddTwoInts. 应该输出int64 a int64 b --- int64 sum. 但提示找不到该消息??????

使用查找命令 $ rossrv show AddTwoInts, 也只能查找到[rospy_tutorials/AddTwoInts]中的, 找不到[beginner_tutorials/AddTwoInts]中的. ???????????

4.msg与srv共同的下一步

在CMakeList.txt中, 取消generate_messages(DEPENDENCIES std_msgs)的注释(创建msg阶段已经完成)

在catkin_ws工作空间下输入命令: $ catkin_make

结果是生成了针对不同语言的头文件: msg的C++头文件在 ~/catkin_ws/devel/include/beginner_tutorials/. Python脚本在 ~/catkin_ws/devel/lib/python2.7/dist-packages/beginner_tutorials/msg. 列表处理语言文件在 ~/catkin_ws/devel/share/common-lisp/ros/beginner_tutorials/msg/. 对于.srv, 生成的结果也类似. 生成成功!

1.1.11 cc Writing a Simple Publisher and Subscriber (C++)

上接1.1.4,不需要经过生成msg与srv的过程

1.0 进入包cd ~/catkin_ws/src/beginner_tutorials

1.1 创建Publisher Node:src/listener.cpp 文件(在该包的src文件夹下)

2.1 创建Subscriber Node:src/talker.cpp 文件(在该包的src文件夹下)

3.1 Building your nodes 生成可执行文件

a) 在文件中(包的目录下面的)最后面加入(已经在之前msg&srv中生成并处理了, 若没经过上面的msg&srv阶段的处理, 也能正常编译生成)

add_executable(talker src/talker.cpp)//生成可执行文件

target_link_libraries(talker ${catkin_LIBRARIES})

add_dependencies(talker beginner_tutorials_generate_messages_cpp)//包的名错了也没关系

//若是在catkin_ws_wmr的工作空间下, 该行命令可以改为add_dependencies(talker wmrcontrol_generate_messages_cpp)

add_executable(listener src/listener.cpp)//对于listener文件

target_link_libraries(listener ${catkin_LIBRARIES})

add_dependencies(listener beginner_tutorials_generate_messages_cpp)

6

catkin 机器人操作系统ROS_典型功能实现方法详解

//若是在catkin_ws_wmr的工作空间下, 该行命令可以改为add_dependencies(listener wmrcontrol_generate_messages_cpp)

b) 在工作空间目录下, 输入命令$ catkin_make. 该过程使用了CMakeList.txt. 生成的结果为在:devel/lib/beginner_tutorials下有talker与listener节点(可执行文件).

并有提示:[100%] Built target talker;[100%] Built target listener

1.1.13 cc Examining the Simple Publisher and Subscriber

1. 打开ros服务:roscore

2. 运行talker

a. 另开一个terminal,进入$ cd ~/catkin_ws,

b. 再执行命令$ source ./devel/setup.bash . 该命令等效于 source ~/catkin_ws(工作空间

名)/devel/setup.bash?。(www.61k.com]该命令很快即执行完毕

c. $ rosrun beginner_tutorials(包的名称) talker : 运行Publisher. (不需要在工作空间目

录下) 之后会看到如下类似消息: [INFO] [WallTime: 1314931831.774057] hello world 1314931831.77.

3. 运行listener

a. 进入$ cd ~/catkin_ws,

b. 再执行命令$ source ./devel/setup.bash

c. $ rosrun beginner_tutorials(包的名称) listener : 运行Subscriber. (不需要在工作空间

目录下) 之后会看到如下类似消息:[INFO] [WallTime: 1314931969.258941] /listener_17657_1314931968795I heard hello world 1314931969.26

1.1.14 cc Writing a Simple Service and Client (C++)

需要在1.1.10 Creating a ROS msg and srv的基础上来编写, 因为需要加入头文件#include "beginner_tutorials/AddTwoInts.h"

1. 写一个服务器节点: 进入文件夹cd ~/catkin_ws/src/beginner_tutorials, 编写

src/add_two_ints_server.cpp

2. 写一个客户端节点: 进入文件夹cd ~/catkin_ws/src/beginner_tutorials编写

src/add_two_ints_client.cpp

3. Build节点

a) 在~/catkin_ws/src/beginner_tutorials/CMakeLists.txt中加入如下几行: //把之前生成talker与listener的相关部分注释掉

add_executable(add_two_ints_server src/add_two_ints_server.cpp)//编译成可执行文件 target_link_libraries(add_two_ints_server ${catkin_LIBRARIES})//添加动态链接库

add_dependencies(add_two_ints_server beginner_tutorials_gencpp)//包的名+gencpp? add_executable(add_two_ints_client src/add_two_ints_client.cpp)//client

target_link_libraries(add_two_ints_client ${catkin_LIBRARIES})

add_dependencies(add_two_ints_client beginner_tutorials_gencpp)

b) 再进行: cd ~/catkin_ws -> catkin_make : 结果是在devel/lib/beginner_tutorials下生成了两个可执行文件

1.1.16 cc Examining the Simple Service and Client

1. 打开ros服务:roscore

2. 运行服务器端:

a) 还需要再进入$ cd ~/catkin_ws, 再执行命令$ source ./devel/setup.bash

b) 运行add_two_ints_server :输入$ rosrun beginner_tutorials add_two_ints_server. 之后

会看到如下类似消息:[ INFO] [1394710514.388776396]: Ready to add two ints

3. 运行客户端

a) 还需要再进入$ cd ~/catkin_ws, 再执行命令$ source ./devel/setup.bash

b) 运行add_two_ints_server :输入$ rosrun beginner_tutorials add_two_ints_client 1 3. 之

后会看到如下类似消息:[ INFO] [1394710671.682839350]: Sum: 4. 在客户端terminal中可以看到信息[ INFO] [1394710671.682255841]: request: x=1, y=3;[ INFO]

7

catkin 机器人操作系统ROS_典型功能实现方法详解

[1394710671.682339580]: sending back response: [4]

进一步的服务器客户端例程:https://github.com/fairlight1337/ros_service_examples/

1.1.17 Recording and playing back data

??????????

P3-AT/DX

ROSARIA配置与运行

网站主页 http://wiki.ros.org/ROSARIA

How to use ROSARIA:

1.2创建ROS工作空间

之前若没有加入启动命令. /opt/ros/hydro/setup.bash的话, 则加入.

为了创建一个关于ROSARIA的工作空间, 将学习ROS基础阶段的catkin_ws文件夹重命名为catkin_ws_Base, 再新建一个工作空间catkin_ws:

mkdir -p ~/catkin_ws/src

cd ~/catkin_ws/src

catkin_init_workspace//

cd ~/catkin_ws

catkin_make//build //这后几步是需要做的,因为在1。(www.61k.com)4中要运行devel/setup。dash

1.3下载ROSARIA到该工作空间中. 首先进入src文件夹, 之后运行命令git clone //这次使用github网站就没有问题, 结果是在src文件夹下得到了rosaria包.

包中包含RosAria.cpp文件

在安装ARIA后再下载该包应该也可以??

1.4 安装ARIA以及Build ROSARIA

1. source ~/catkin_ws/devel/setup.bash

a) //在当前bash环境下执行文件~/catkin_ws/devel/setup.bash中的命令.

b) 或者把这项添加到.bashrc文件中再执行.bashrc文件:{echo "source

~/catkin_ws/devel/setup.bash" >> ~/.bashrc -> source ~/.bashrc}

2. 得到包之后, 编译它们:

a) rosdep update//更新

b) rosdep install rosaria//运行完提示ARIA has been installed in /usr/local/Aria,

installation successful, 再等会,就有 All required rosdeps installed successfully

i. 这个应该与1.3中的rosaria包没有关系, 应该是从ROS网站上安装rosaria

ii. 看看是不是安装在了/usr/local/Aria中??

iii. 重装系统后再次安装时,出现问题:apt: command [sudo apt-get install

checkinstall] failed。 运行sudo apt-get update时出现问题Some index files

failed to download. They have been ignored, or old ones used instead. 解决方法:

sudo rm /var/lib/apt/lists/* -vf 删除相应文件

c) catkin_make//与上次的catkin_make显示出不同的结果;//该命令要在该工作空间中//

8

catkin 机器人操作系统ROS_典型功能实现方法详解

i. 对于包来讲, 名称不区分大小写, 比如当有两个包rosaria与ROSARIA时, 会有

如下提示:Multiple packages found with the same name "rosaria":- rosaria-

ROSARIA”

ii. 当在catkin_ws文件夹下使用命令catkin_make时, 会用到文件

src/rosaria/CMakeList.txt

iii. 是这一步在devel/lib下生成了rosaria可执行文件??

关于CMakeList.txt文件(不用改):

add_executable(RosAria RosAria.cpp)

add_dependencies(RosAria rosaria_gencfg)

add_dependencies(RosAria rosaria_gencpp)

target_link_libraries(RosAria ${catkin_LIBRARIES} ${Boost_LIBRARIES} Aria pthread dl rt) set_target_properties(RosAria PROPERTIES COMPILE_FLAGS "-fPIC")

generate_messages( DEPENDENCIES geometry_msgs std_msgs)//要包括geometry_msgs

1.5 运行roscore: 运行roscore

1.6 运行RosAria节点

1. source ~/RosAria/devel/setup.bash. 若不在第一步运行该命令,则会报错[rospack] Error:

stack/package rosaria not found

2. 运行启动该节点的命令: rosrun rosaria RosAria

a) 不需要到catkin_ws文件夹下.

b) 命令rosrun 允许直接运行一个包里面的节点(可执行程序): rosrun [package_name]

[node_name].

c) 节点的位置为\catkin_ws\devel\lib\rosaria\RosAria

3. (从运行下面4可知不需要这一步)设置网络地址export ROS_IP=172.22.243.177. 4. 配置好USB转串口后就可以连接了, 连接成功时输出的提示信息为(退出连接的话, 直

接Ctrl+C就可以了.):

[ INFO] [1394765069.684460124]: RosAria: using port: [/dev/ttyUSB0]

Could not connect to simulator, connecting to robot through serial port /dev/ttyUSB0.

Syncing 0

Syncing 1

Syncing 2

Connected to robot.

Name: RoboticsWorld_4129

Type: Pioneer

Subtype: p3at-sh

ArConfig: Config version: 2.0

Loaded robot parameters from p3at-sh.p

ArRobotConnector: Connecting to MTX batteries (if neccesary)...

ArRobotConnector: Connecting to MTX sonar (if neccesary)...

[ INFO] [1394765070.477106453]: Setting TicksMM from robot EEPROM: 138

[ INFO] [1394765070.480042783]: Setting DriftFactor from robot EEPROM: 0

[ INFO] [1394765070.483254729]: Setting RevCount from robot EEPROM: 32550

[ INFO] [1394765070.526489547]: RosAria: publishing new recharge state 0.

[ INFO] [1394765070.526596408]: RosAria: publishing new motors state 0.

[ INFO] [1394765072.184292718]: RosAria: publishing new motors state 1.

说明:

1. 一问题的解决:在运行后面连接Android时, 再回头运行此命令, 则就去src/rosaria找该

可执行文件了, 因此从路径上就错了, 不知是那一步影响了该命令的执行. 不过用1.4中的catkin_make命令重新编译一下就又能正常连接了.

2. 若USB转串口没有配置好, 则会出现下方的错误提示, 配置方法请见下方的USB转串口

配置.

[ INFO] [1394760211.482514856]: RosAria: using port: [/dev/ttyUSB0]

//这说明使用的COM编号为ttyUSB0

Could not connect to simulator, connecting to robot through serial port /dev/ttyUSB0.

ArSerialConnection::open: Could not open serial port '/dev/ttyUSB0' | ErrorFromOSNum: 2 ErrorFromOSString:

9

catkin 机器人操作系统ROS_典型功能实现方法详解

No such file or directory

Could not connect, because open on the device connection failed.

Failed to connect to robot.

[ERROR] [1394760211.511075792]: RosAria: ARIA could not connect to robot! (Check ~port parameter is correct, and permissions on port device.)

[FATAL] [1394760211.511173101]: RosAria: ROS node setup failed...

1.9 Topics and Commands

1. 获得姿态: rostopic echo /RosAria/pose // 可以在另一terminal的根命令

a) /RosAria/pose为Topic名称

b) .echo 应该是请求输出的命令

c) 运行结果:

2. 线速度控制量的设置(0.1m/s):

rostopic pub -1 /RosAria/cmd_vel geometry_msgs/Twist '{linear: {x: 0.1, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.0}}'

a) /RosAria/cmd_vel 指话题名字 Topic, 不能是/cmd_vel 或者cmd_vel

b) geometry_msgs/Twist 为数据类型 Message

c) '{linear: {x: 0.1, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.0}}' 合成一个消息

d) 运行结果:机器人做相应运动并提升publishing and latching message for 3.0 seconds 。(www.61k.com)以及[ INFO] [1395025704.461141760]: new speed: [100.00,-0.30](1395025704.461)

3. 角速度控制量的设置(0.1rad/s?):

rostopic pub -1 /RosAria/cmd_vel geometry_msgs/Twist '{linear: {x: 0.1, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.1}}'

4. 也可以把2,3合成起来.

5. 其他的? sonar, bumpers, acceleration parameters?如何用?更多ROS API请见:

ROSARIA键盘控制:

1. mkdir -p ~/RosAriaKeyboard/src

2. 创建包catkin_create_pkg RosAriaKeyboard std_msgs rospy roscpp

编写程序:

3. 编写rosaria_teleop_key.cpp文件

在CMakeList.txt文件夹下加入如下几行命令(Bluks给我的程序是用rosbuild编译方法。需要做相应借鉴并修改)

1.

find_package(PkgConfig REQUIRED)//若无此 ncurses相关编译命令, 会报错 initscr未定义 pkg_check_modules ( ncurses++ REQUIRED ncurses++)//ncurses相关

add_executable(rosaria_teleop_key src/rosaria_teleop_key.cpp)

target_link_libraries(rosaria_teleop_key ${catkin_LIBRARIES})

target_link_libraries(rosaria_teleop_key ${ncurses++_LIBRARIES})//ncurses相关

add_dependencies(rosaria_teleop_key wmrcontrol_generate_messages_cpp)

3. 运行命令catkin_make: 结果是在devel/lib/wmrcontrol下生成了一个rosaria_teleop_key的

可执行文件

10

catkin 机器人操作系统ROS_典型功能实现方法详解

4. 执行该节点

a). 进入工作空间文件夹 cd ~/catkin_ws_wmr

b). 执行命令 $ source devel/setup.bash

c). 运行节点:$rosrun RosAriaKeyboard rosaria_teleop_key

。[www.61k.com]需要进入工作空间文件夹, 因为在前一步要执行 $ source devel/setup.bash

ROSARIA程序控制方式:

与键盘控制大致相同, 执行节点时注意运行下面的命令

$

为避免混乱,

1. 新建工程mkdir -p ~/RosAriaCode/src

2. 创建包: catkin_create_pkg RosAriaCode std_msgs rospy roscpp

3. 处理CMakeList

add_executable(rosaria_teleop_code src/rosaria_teleop_code.cpp)

target_link_libraries(rosaria_teleop_code ${catkin_LIBRARIES})

add_dependencies(rosaria_teleop_code RosAriaCode_generate_messages_cpp)

4. catkin_make一下。

5. 执行:

source devel/setup.bash

rosrun wmrcontrol rosaria_teleop_code

Android遥控

Android Teleoperate Pioneer 3at Robot. 见网站:

/ /Connecting to a ROS Master

进入之前下载的ROSARIA包的文件夹中cd ~/catkin_ws/src/rosaria

网页上是不是写错了?没有ROSARIA. 只能自己写命令git clone , 结果还可以, 结果是在src文件夹中得到了ROSARIA文件夹. rosaria与ROSARIA文件夹一样大小, 是不是就是一样的?

3.2 Step2

使用命令:Path_from_Home/ROSARIA$ rosmake

但是在rosaria中使用rosmake 就可以, 结果为Built 52 packages with 0 failures., 但在ROSARIA下就报错. 网站上是不是写错了?

3.3 Step3

进入文件夹, 网站上写的命令$ roscd ROSARIA, 但进入不了, 只能手动进入rosaria了, 好像roscd也不能使用.

创建一个文件:命令:gedit android_teleop.cpp & 把网站上的代码粘贴进去再保存.

3.4 Step4

编辑rosaria文件夹下的CMakeList. txt文件. 在最后一行添加

rosbuild_add_executable(android_teleop android_teleop.cpp)

在rosaria下输入命令:rosmake. 不起作用呢???????????提示错误信息:

11

catkin 机器人操作系统ROS_典型功能实现方法详解

[ rosmake ] rosmake starting...

[ rosmake ] No package or stack specified. And current directory 'catkin_ws' is not a package name or stack name.

[ rosmake ] Packages requested are: []

[ rosmake ] Logging to directory /home/listname/.ros/rosmake/rosmake_output-20140314-164512

[ rosmake ] Expanded args [] to:

[ rosmake ] ERROR: No arguments could be parsed into valid package or stack names.

从pubulisher节点中学习如何编译并运行Node??????

TurtleBot的键盘控制:

控制命令以Terminal端键入方式:

TurtleBot与p3dx应该很像,那么能不能在p3dx的terminal命令的基础上修改得到呢?,大胆尝试后,竟然对了!TurtleBot端的命令为:(当然需要先启动机器人)

rostopic pub -1 cmd_vel_mux/input/teleop geometry_msgs/Twist '{linear: {x: 0.1, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: -0.6}}'

原因是,观察到keyboard_teleop.launch中含有如下一句话:

<remap from="turtlebot_teleop_keyboard/cmd_vel" to="cmd_vel_mux/input/teleop"/>

那么很有可能Topic的名称改为 cmd_vel_mux/input/teleop。[www.61k.com]输入上述命令之后发现机器人没有动,但我听到机器人里有动静,因此我就把速度量调大,结果机器人就动了。这才意识到,这种TurtleBot机器人不像RosAria那样输入命令后就一直动,而是执行完命令立刻停止,因此速度量小的话机器人基本上不动,会让人误认为命令是错的。

当然也有些偶然因素,若是多个/少个/,去哪知道呢, 是吧。

keyboard_teleop.launch中以及把 turtlebot_teleop_keyboard/cmd_vel映射到cmd_vel_mux/input/teleop上了,因此下方的指令不起作用.

rostopic pub -1 turtlebot_teleop_keyboard/cmd_vel geometry_msgs/Twist '{linear: {x: 0.1, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: -0.6}}'

以程序方式控制

与RosAria相似

配置USB转串口

说明: 用于连接先锋机器人

1. 串口编号方式: 串口COM1对应于ttyS0, COM2对应于ttyS1. 若是使用USB转串口, 则

COM1对于ttyUSB0. Aria即默认使用ttyUSB0

2. 默认情况下Ubuntu中已经安装了PL2303的驱动. 插入USB接口后,在dev/下会生成

名为ttyUSB0的文件. 若使用命令lsmod | grep usbserial, 则显示usbserial 42594 1 pl2303. 不过等配置完minicom后又提示 “lsmod | grep usbserial无此命令”了呢?

串口的调试:

1. 串口调试工具minicom的安装:sudo apt-get install minicom一个命令就可以自动下载

安装

2. 串口配置:

a) 输入sudo minicom -s (要有root权限,否则提示Cannot write to

/usr/etc/minirc.dfl)命令, 进入将串口配置项, 将下面两项配置为

12

catkin 机器人操作系统ROS_典型功能实现方法详解

i. A. Serial Device: dev/ttyUSB0

ii. F. Hardware Flow Control:No

iii. 之后选择保存为默认配置: Save setup as dfl .

3. 若出现Cannot open /dev/ttyUSB0: Permission denied提示字样, 则需要将用户名加入到

dialout组别中:sudo gpasswd --add listname dialout, 重启电脑就可以与COM1通信了. 查看组别:groups listname。(www.61k.com)这步需要做。

4. 参考: :

CmakeList.txt的制作

RosAria中有如下一行:

#include <math.h>//既然有math头文件,可以去CmakeList.txt中看看是怎么添加链接库的 ???

Usb_cam_node节点编译时, 有个usb_cam.h与usb_cam.cpp, 学习一下是怎么编译的,

编译方法:

若工作空间是复制过来的, 是不是直接加入ROS_PACKAGE_PATH就可以使用了??????????????????

图像的发布与接收

图像的接收,处理与显示

网址: 图像传递cv_bridage

概念:

ROS的图像数据使用sensor_msgs/Image的消息格式

CvBridge 属于ROS的库, 在vision_opencv(堆stack) /cv_bridge(包package) /image_geometry中. 用以转换sensor_msgs/Image至cv::Mat

该部分的功能是: 从相应Topic中获得sensor_msgs::Image图像信息,并将其转化为cv::Mat的形式, 并显示出来。 当然, 该部分首先需要图像源来发布一个图像Topic,例如下面的①Kinect, ②内置USB摄像头, ③外接USB摄像头

1. 首先创建工作空间 mkdir -p ~/catkin_ws_cvbridge/src (无需初始化等操作)

2. 进入src文件夹,并创建一个包cvbridge, 及其依赖项(注意):

catkin_create_pkg cvbridge sensor_msgs cv_bridge roscpp std_msgs image_transport

该命令也生成了CmakeList.txt与package.xml文件; 也生成了src下的CmakeList.txt的快捷方式??

3. 编写节点image_converter.cpp:

13

catkin 机器人操作系统ROS_典型功能实现方法详解

关于Topic, 有:

/camera/rgb/image_color : 这个是采集kinect的图像, 并且图像已经自动左右翻转过来了。[www.61k.com) /camera/image_raw : 这是原有例程中的, 但是找不到图像

写"/camera/rgb/image_color"时, 里面加了个空格. 生成时通过, 但运行时会报错:

[terminate called after throwing an instance of 'ros::InvalidNameException'

what(): Character [ ] is not valid as the first character in Graph Resource Name [ /camera/rgb/image_color]. Valid characters are a-z, A-Z, / and in some cases ~.

4. 处理CMakeList.txt

在该文件中加入:

add_executable(image_converter src/image_converter.cpp)

target_link_libraries(image_converter ${catkin_LIBRARIES})

add_dependencies(image_converter cvbridge_generate_messages_cpp)

5. 处理package.xml:

需要加入(include) image_transport,cv_bridge与opencv2三项. 由于在创建包时包含了相关依赖项, 因此 image_transport与cv_bridge已经提前自动加入了. 在package.xml 中虽然没有加入opencv2, 可能在加入cv_bridge时, 其已经加入了opencv2, 因此不加入opencv2也能正常在图像上做操作(比如画个圆圈).

总之, 不对package.xml作任何改动即可直接catkin_make.

若需加入(include), 则加入的格式为:

<build_depend>opencv2</build_depend>

<run_depend>opencv2</run_depend>

6. catkin_make:

生成image_converter节点;

也生成了src下的CMakeListtxt的链接??

7. 运行该节点:

a) source ~/catkin_ws_cvbridge/devel/setup.bash

b) rosrun cvbridge image_converter

Kinect端获取图像

图像Topic的发布:

首先要初始化Kinect:

1首先启动roscore; 若忘记启动roscore,则会报错:[ERROR] [1395107082.920068462]:

[registerPublisher] Failed to contact master at [localhost:11311]. Retrying... 启动roscore后, 显示[ INFO]

[1395107093.398605143]: Connected to master at [localhost:11311]

2初始化kinect: roslaunch turtlebot_bringup 3dsensor.launch. 也可以启动rviz: roslaunch turtlebot_rviz_launchers view_robot.launch, 在运行此节点过程中, rviz不用关。

a)初始化kinect的过程就等于是发布图像Topic的过程。对于内置USB摄像头而言, 需要运行下载的包usb_cam来产生图像(具体见下一节内置USB摄像头图像获取)

初始化后,后就会产生"/camera/rgb/image_color"等图像Topic。接下来就要从该Topic中接受图像数据并显示出来了, 请见下方。

图像的接收与显示:

运行cv_bridge包:注意将 image_converter.cpp中的Topic名称改为"/camera/rgb/image_color" 然后按照”图像传递cv_bridge”一节操作即可。

为了避免混乱, 新建一工作空间 mkdir -p ~/ImageDisplayKinect/src

14

catkin 机器人操作系统ROS_典型功能实现方法详解

然后把CvBridge中的包cvbridge复制到src下, 对CMakeList做相应修改。(www.61k.com)

再catkin_make一下

运行该节点:

source ~/catkin_ws_cvbridge/devel/setup.bash

rosrun cvbridge image_converter

内置USB 摄像头图像获取

需要用到usb_cam包: http://wiki.ros.org/usb_cam

对于笔记本内置USB摄像头的图像获取, 要比Kinect的复杂, 原因是在图像Topic的发布阶段需要做操作。在图像接收并显示的阶段就相似了。

图像Topic的发布:

作用: 将USB摄像头(内置/外置)的图像发布到一个Topic上, 消息类型为sensor_msgs::Image.

1. 创建usb_cam工作空间

之前若没有加入启动命令. /opt/ros/hydro/setup.bash的话, 则加入.

mkdir -p ~/catkin_ws_usbcam/src

cd ~/catkin_ws_usbcam/src

catkin_init_workspace//这一步也不用做

2. 下载usb_cam包到该工作空间中. 首先进入src文件夹, 之后运行命令git clone

//这次使用github网站就没有问题, 结果是在src文件夹下得到了包usb_cam.

成功则提示

remote: Reusing existing pack: 683, done.

remote: Counting objects: 5, done.

remote: Compressing objects: 100% (5/5), done

remote: Total 688 (delta 0), reused 5 (delta 0)

Receiving objects: 100% (688/688), 364.15 KiB | 143 KiB/s, done.

Resolving deltas: 100% (244/244), done.

包usb_cam含有文件:

1 ../include/usb_cam/usb_cam.h,

2 ../src/usb_cam.cpp,

3 ../nodes/usb_cam_node.cpp,

4 CMakeList.txt与package.xml文件。

3. 关于usb_cam包中的usb_cam_node.cpp, 有如下说明

a) 内置USB摄像头的设备名称为video0. 关于设备名称的语句为

node_.param("video_device", video_device_name_, std::string("/dev/video0")); 该节点默认采集内置USB摄像头的图像, 因此不用改了.

b) 查看设备名称用 /dev ??

c) 关于压缩格式的语句: node_.param("pixel_format", pixel_format_name_,

std::string("mjpeg")); ROS usb_cam网站上提示: 许多网络摄像头连接进笔记本时, 不支持mjpeg压缩, 此处要改成yuyv或uyvy。 但我的电脑都可以(下面的使用USB外接摄像头也都可以)

d) 唯一需要修改的地方是: 在发布话题名称前加'/'. 否则

cv_birdge/image_converter_usbcam.cpp中的语句image_sub_ = it_.subscribe("/image_raw", 1, &ImageConverter::imageCb, this);无法运行回调函

15

catkin 机器人操作系统ROS_典型功能实现方法详解

数。[www.61k.com)????????应该不是. Talker与listener也没有加???? 后来又测试,发现不加'/'就不显示图像。

4. 不需要对CMakeList.txt & package.xml做什么, 直接catkin_make一下. 从该包中也可

以学习到如何在有多个.h与.cpp的情况下编译节点.

成功则提示:

Scanning dependencies of target usb_cam

[ 50%] Building CXX object usb_cam/CMakeFiles/usb_cam.dir/src/usb_cam.cpp.o

Linking CXX shared library /home/listname/catkin_ws_usbcam/devel/lib/libusb_cam.so

[ 50%] Built target usb_camScanning dependencies of target usb_cam_node

[100%] Building CXX object usb_cam/CMakeFiles/usb_cam_node.dir/nodes/usb_cam_node.cpp.o

Linking CXX executable /home/listname/catkin_ws_usbcam/devel/lib/usb_cam/usb_cam_node

[100%] Built target usb_cam_node

结果是产生了节点 devel/lib/usb_cam/usb_cam_node

在该生成过程中, usb_cam.cpp文件只是作为源文件,不需要生成节点.

5. 执行该节点:

$ source ~/catkin_ws_usbcam/devel/setup.bash

$ rosrun usb_cam usb_cam_node

执行结果为

[ INFO] [1395144361.890765227]: Camera name: head_camera

[ INFO] [1395144361.890932369]: Camera info url:

[ INFO] [1395144361.891021666]: usb_cam video_device set to [/dev/video0]

[ INFO] [1395144361.891108635]: usb_cam io_method set to [mmap]

[ INFO] [1395144361.891196215]: usb_cam image_width set to [640]

[ INFO] [1395144361.891275158]: usb_cam image_height set to [480]

[ INFO] [1395144361.891358759]: usb_cam pixel_format set to [mjpeg]

[ INFO] [1395144361.891524348]: usb_cam auto_focus set to [0]

[ INFO] [1395144362.218432362]: using default calibration URL

[ INFO] [1395144362.218573782]: camera calibration URL: file:///home/listname/.ros/camera_info/head_camera.yaml

[ INFO] [1395144362.218806683]: Unable to open camera calibration file

[/home/listname/.ros/camera_info/head_camera.yaml]//不用管这行

[ WARN] [1395144362.218924552]: Camera calibration file /home/listname/.ros/camera_info/head_camera.yaml not found.//这一行应该没关系, 连接kinect时也会提示

内置摄像头的指示灯确实亮了, ctrl+c后就灭了, 说明应该已经获得图像了. 若要将发布的图像显示出来,请见下方.

图像的接收与显示: 在原有catkin_ws_cvbridge工作空间上进行改动:

1. 编写接收图像节点的源代码image_converter_usbcam.cpp:

a) 复制image_converter.cpp为image_converter_usbcam.cpp。

b) 注意将subscribe中的话题名称"/camera/rgb/image_color"改为usb_cam_node发布的"

/image_raw". 可以参照openTLD中的launch文件,编写launch文件????? c) 其它的不需要改动

2. 生成节点image_converter_usbcam:

a) 对CMakeList.txt加入如下几句命令, package.xml不需要改动

add_executable(image_converter_usbcam src/image_converter_usbcam.cpp)

target_link_libraries(image_converter_usbcam ${catkin_LIBRARIES})

add_dependencies(image_converter_usbcam cvbridge_generate_messages_cpp)

b) $ catkin_make

3. 执行该节点:

source ~/catkin_ws_cvbridge/devel/setup.bash

rosrun cvbridge image_converter_usbcam

以后若想随时运行, 操作方法:

16

catkin 机器人操作系统ROS_典型功能实现方法详解

1.

2.

进入工作空间UsbCam, 运行rosrun usb_cam usb_cam_node 进入工作空间CvBridge, 运行rosrun cvbridge image_converter_usbcam

外接USB摄像头图像获取

图像Topic的发布: 与内置USB摄像头的图像发布相似:利用包usb_cam及其节点

usb_cam_node.

1. 源文件: 对于usb_cam包中usb_cam_node.cpp的唯一一处作修改: 由于外接USB摄像头的

设备名为video1,因此将设备名的语句修改为 node_.param("video_device",

video_device_name_, std::string("/dev/video1"));

2. 生成与执行该节点

~/catkin_ws_usbcam$ catkin_make

source ~/catkin_ws_usbcam/devel/setup.bash

~/catkin_ws_usbcam$ rosrun usb_cam usb_cam_node

3.

图像Topic的发布: 单独建一个工作空间(上方步骤的重复),为了避免混乱:

作用: 将外置USB摄像头的图像发布到一个Topic上, 消息类型为sensor_msgs::Image.

1. 创建UsbCamExternal工作空间

2. 下载usb_cam包:进入src文件夹,运行git clone t

3. ../nodes/usb_cam_node.cpp:

a。[www.61k.com)外置USB摄像头的设备名称为video1. 关于设备名称的语句该为

node_.param("video_device", video_device_name_, std::string("/dev/video1"));

b。发布话题名称改为image_sub_ = it_.subscribe("/image_usbcam", 1,

&ImageConverter::imageCb, this);

4. catkin_make

5. 执行该节点:

$ source ~/UsbCamExternal/devel/setup.bash

$ rosrun usb_cam usb_cam_node

出现如下error, 但运行cvbridge后也能正常显示图像

[mjpeg @ 0xe43b60] error count: 64

[mjpeg @ 0xe43b60] error y=31 x=3

图像的接收与显示: 与内置USB摄像头的图像显示严格一致.

在CvBridge工作空间下,执行该节点: (不用再catkin_make了,因为与获得内置USB摄像头图像的节点一样)

1. source ~/catkin_ws_cvbridge/devel/setup.bash

2. rosrun cvbridge image_converter_usbcam

KinectSkeleton

Openni_tracker

openni_tracker是一个单列的包, 之前在openni_kinect中, 现在openni_kinect已经被ROS抛弃了.

17

catkin 机器人操作系统ROS_典型功能实现方法详解

1. 创建工作空间: mkdir -p ~/OpenniTracker/src

2. 进入src文件夹, 下载包:git clone

成功则提示

Cloning into 'openni_tracker'...

remote: Reusing existing pack: 67, done.

remote: Total 67 (delta 0), reused 0 (delta 0)

Unpacking objects: 100% (67/67), done.

3. 生成: 使用命令: catkin_make, 也生成了CMakeList.txt链接文件

a) 但提示失败:提示缺少Nite_INCLUDEDIR和Nite_LIBRARY. 因此需要安装NiTE

了. 安装过程见下方.

b) 安装v1.5的以后, 不对CMakeList文件做任何修改,再运行catkin_make能生成。[www.61k.com)

4. 执行该节点

a) 初始化kinect: roslaunch turtlebot_bringup 3dsensor.launch //不用初始化的话

openni_tracker节点也能正常运行,是用了Nite的缘故? 但若用RViz时, 就得需要初始化kinect了,否则软件中就没有信息只有个Grid

b) source devel/setup.bash

c) rosrun openni_tracker openni_tracker //总是不识别, 得手动敲入了

5. 运行结果: 本以为执行无反应, 其实是该包根本就没有网页上的图像示例(误导使用

者了),有人走过时, 在terminal中才显示, 这个让我长时间误认为程序无法运行: New User 1//用户走入

Pose Psi detected for user 1 //没有这句话啊

Calibration started for user 1

Calibration complete, start tracking user 1

Lost User 1 //用户走出

安装NiTE:不知怎么回事,v2.2,v2.1,运行./install.sh都没有反应, 只能用v1.5了(Bluts给的),运行sudo ./install.sh就立马安装完毕了(就是将.h,.cpp,lib文件复制到相应程序文件夹中了),就对应上了opencv_tracker -> CMakeList.txt中的

find_path(Nite_INCLUDEDIR NAMES XnVNite.h HINTS/usr/include/nite /usr/local/include/nite) find_library(Nite_LIBRARY NAMES XnVNite_1_3_1, HINTS /usr/lib /usr/local/lib

PATH_SUFFIXES lib)

不过注意文件NAMES -> XnVNite_1_3_1等效于libXnVNite_1_3_1.so???

在RViz中显示坐标系与点云:

需要做修改(Bluts):

1. openni_tracker.cpp中string frame_id("openni_depth_frame")改为string

frame_id("camera_depth_frame"); //在RViz中,Grid的frame之一就是 camera_depth_frame

2. 3dsensor.launch文件中, publish_tf对应的false改为了true, 意义是什么???

a) 进入文件夹所在路径:/opt/ros/hydro/share/turtlebot_bringup/launch

b) 修改命令为:sudo gedit 3dsensor.launch

RViz中:

1. 命令是rosrun rviz rviz. 结果显示:

[ INFO] [1395309973.626822675]: rviz version 1.10.11

[ INFO] [1395309973.626925690]: compiled against OGRE version 1.7.4 (Cthugha)

[ INFO] [1395309974.034415316]: OpenGl version: 3 (GLSL 1.3).

2. 在RViz的界面中做如下设置:

a) Fixed Frame选择 camera_link , 这个是摄像机的基坐标系.

b) TF:无

c) PointCloud2: Topic选择/camera/depth_registerd/points

3. 笔记: 有次运行,点云发暗, 再运行一次就正常了。

18

catkin 机器人操作系统ROS_典型功能实现方法详解

查看坐标系关系: frames.pdf

1. 若命令是: rosrun tf

显示如下结果:

tf tf2_geometry_msgs tf2_py tf_conversions

tf2 tf2_kdl tf2_ros

tf2_bullet tf2_msgs tf2_tools

2. 输出坐标系关系的命令: rosrun tf view_frames

结果是在Home文件夹下产生了frame.pdf:

Listening to /tf for 5.000000 seconds

Done Listening

dot - graphviz version 2.26.3 (20100126.1600)

Detected dot version 2.26.3

frames.pdf generated

TF Listener(综合实现人体跟踪)

待实现的一环是: 以程序形式获取TF数据. 因此就可利用人体的空间位置来给P3AT发控制量.

tf2_ros/transform_broadcaster.cpp:

从cpp代码中, 可知消息类型为

publisher_ = node_.advertise<tf2_msgs::TFMessage>("/tf", 100);

那么就可以根据该Topic接收了. 重点参考了hal中的程序aria_tf_listener.cpp.

tfTutorialsWriting a tf listener (C++)

创建包: catkin_create_pkg TfListener std_msgs rospy roscpp tf。[www.61k.com)比”ROSARIA程序控制”一节多了tf.

1. 复制RosAriaCode中的rosaria_teleop_code.cpp(改名为TfListenerAria)到TfListener中来运行,catkin_make后没有问题。可以运行。 rosrun TfListener TfListenerAria

2. CMakeList.txt中加入:

add_executable(TfListenerAria src/TfListenerAria.cpp)

target_link_libraries(TfListenerAria ${catkin_LIBRARIES})

add_dependencies(TfListenerAria TfListener_generate_messages_cpp)

2. 加入头文件#include <tf/transform_listener.h>,也能运行

[ERROR] [1395888613.400748574]: "camera_depth_frame" passed to lookupTransform argument target_frame does not exist.

嗯,这也间接说明lookupTransform在运行,

bringup Kinect后,提示

[ERROR] [1395888750.517122967]: "torso" passed to lookupTransform argument source_frame does not exist.

看来需要把“head”改为“head_1(2,3…)”, 不知程序从哪里加入了后缀”_1”.

需要运行openni_tracker:rosrun openni_tracker openni_tracker, 运行后则有:

1. depth camera的扫描红线出现了。

2. rviz中,出现了人体TF的信息,否则TF下无任何信息

19

catkin 机器人操作系统ROS_典型功能实现方法详解

在哪里吧openni_tracker.cpp中的"camera_depth_frame","head"等, 改成了"head_1"的坐标系名称

将openni_tracker.cpp中的"camera_depth_frame"改成"openni_depth_frame"后,还得要把"head"改成"head_1"等,否则也提示没有找到"head"坐标系, 而且rviz里也不会出现"openni_depth_frame"

对于TfListenerAria节点, 当Lost User X时,仍能收到Tf的信息,为什么???

读出”head_1”坐标系信息, 有:

[ INFO] [1395909978.699846534]: x: 2.339041, y: -1.016116, z: -0.421484 说明

x: 越近kinect越小(即深度信息),

y:在kinect前,往右为正,往左为负

z:越下蹲,越负

总体步骤:

1. marvin上启动机器人:

rosrun rosaria RosAria

(通过原先的ROSARIA程序控制方式来测试: rosrun RosAriaCode rosaria_teleop_code)

2. KinectSkeleton识别人体:

bringup Kinect: roslaunch turtlebot_bringup 3dsensor.launch(要打开电源啊,要插上USB线啊)

cd OpenniTracker/

rosrun openni_tracker openni_tracker

3. TfListener:根据人体的空间坐标给机器人发送命令

cd TfListener/

rosrun TfListener TfListenerAria

4. 若是通过网络传信息的话,需要在hal上启动RosAria:

roscd ROSARIA

串口线插到下面的串口,上面的口应该是/dev/ttyS1

rosrun ROSARIA RosAria (再运行步骤2与3)

(通过原先的ROSARIA程序控制方式来测试: rosrun RosAriaCode rosaria_teleop_code. 但要把发布的消息由"/RosAria/cmd_vel"改为"cmd_vel")

说明: 通过网络控制时的Debug: 在hal上的RosAria, 虽然Topic是”cmd_vel”, 但其定义ROS::NodeHandle时带了”~”, 因此真正的Topic为”/RosAria/cmd_vel”. 因此TfListenerAria.cpp中的Topic也要为”/RosAria/cmd_vel”, 那为什么rosaria_teleop_code.cpp中的”cmd_vel”可以正常连接呢???

该过程::

rosnode info /RosAria

------------------------------------------------------------------------------ Node [/RosAria]

Publications:

* /rosout [rosgraph_msgs/Log]

* /tf [tf/tfMessage]

20

catkin 机器人操作系统ROS_典型功能实现方法详解

* /RosAria/bumper_state [ROSARIA/BumperState]

* /RosAria/sonar [sensor_msgs/PointCloud]

* /RosAria/odom [nav_msgs/Odometry]

Subscriptions:

* /RosAria/cmd_vel [unknown type] //最好还是需要注明Message

Services:

* /RosAria/get_loggers

* /RosAria/set_logger_level

contacting node http://hal:35119/ ...

Pid: 3695

Connections:

* topic: /rosout

* to: /rosout

* direction: outbound

* transport: TCPROS

rosnode info /rosaria_teleop_key_1

------------------------------------------------------------------------------- Node [/rosaria_teleop_key_1]

Publications:

* /rosout [rosgraph_msgs/Log]

* /RosAria/cmd_vel [geometry_msgs/Twist]

Subscriptions: None

Services:

* /rosaria_teleop_key_1/get_loggers

* /rosaria_teleop_key_1/set_logger_level

contacting node http://marvin:37524/ ...

Pid: 10811

Connections:

* topic: /rosout

* to: /rosout

* direction: outbound

* transport: TCPROS

* topic: /RosAria/cmd_vel

//写的是cmd_vel,但自动变为了这个

* to: /RosAria

* direction: outbound

* transport: TCPROS

~$ rosnode info /rosaria_teleop_TfListener

------------------------------------------------------------------------------ Node [/rosaria_teleop_TfListener]

Publications:

21

catkin 机器人操作系统ROS_典型功能实现方法详解

* /rosout [rosgraph_msgs/Log]

* /cmd_vel [geometry_msgs/Twist]

///问题就出在这里!!!!!,应该是/RosAria/cmd_vel

Subscriptions:

* /tf_static [unknown type]

* /tf [tf/tfMessage]

Services:

* /rosaria_teleop_TfListener/set_logger_level

* /rosaria_teleop_TfListener/get_loggers

contacting node http://marvin:55079/ ...

Pid: 11076

Connections:

* topic: /rosout

* to: /rosout

* direction: outbound

* transport: TCPROS

* topic: /tf

* to: /RosAria (http://hal:37473/)

* direction: inbound

* transport: TCPROS

框架

Player

catkin 机器人操作系统ROS_典型功能实现方法详解

catkin 机器人操作系统ROS_典型功能实现方法详解

catkin 机器人操作系统ROS_典型功能实现方法详解

catkin 机器人操作系统ROS_典型功能实现方法详解

catkin 机器人操作系统ROS_典型功能实现方法详解

Voice

语言识别pocketsphinx

语言识别教程:http://wiki.ros.org/pocketsphinx . 该包更新之后, 可以用catkin了

1. 运行安装命令:sudo apt-get install ros-hydro-pocketsphinx

有错误提示

Err http://packages.ros.org/ros/ubuntu/ precise/main ros-hydro-pocketsphinx amd64 0.3.0-0precise-20140130-2150-+0000 404 Not Found

Failed to fetch http://packages.ros.org/ros/ubuntu/pool/main/r/ros-hydro-pocketsphinx/ros-hydro-

pocketsphinx_0.3.0-0precise-20140130-2150-+0000_amd64.deb 404 Not Found

E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?

22

catkin 机器人操作系统ROS_典型功能实现方法详解

去该网页上找了, 发现只有20140304这一新的版本, 看来得需要先更新源,但运行sudo apt-get update 时报错:

W: GPG error: http://security.ubuntu.com precise-security Release: The following signatures were invalid: BADSIG 40976EAF437D05B5 Ubuntu Archive Automatic Signing Key 。(www.61k.com]。。Hash Sum mismatch 解决办法是:

sudo apt-get clean

cd /var/lib/apt

sudo mv lists lists.old //把lists文件夹改名为list.old

sudo mkdir -p lists/partial //新建文件夹

sudo apt-get clean

sudo apt-get update

再运行安装命令,sudo apt-get install ros-hydro-pocketsphinx. 成功则提示:ldconfig deferred processing now taking place

2. 运行命令$ roslaunch pocketsphinx robocup.launch //不识别 还得手动敲进去

3. 需要在系统设置中设置麦克风的音量,要设置得大一些,

4. 查看发布的结果消息$ rostopic echo /recognizer/output

查看语音库

roscd pocketsphinx/demo

进入了文件夹; /opt/ros/hydro/share/pocketsphinx/demo$

识别结果的接收与显示

该程序的目的是: 对于在语言识别阶段发出的识别结果String, 将其获取

(Subscribe)后从屏幕上显示

1. 首先需要获取pocketsphinx的String输出Topic:

该Topic “/recognizer” 的Node信息为

~$ rosnode info /recognizer

-----------------------------------------------------------------

Node [/recognizer]

Publications:

* /recognizer/output [std_msgs/String]

* /rosout [rosgraph_msgs/Log]

Subscriptions: None

Services: ??

因此可知Topic为”/recognizer/output”,Message为 [std_msgs/String],因此就可以设计程序了:

1. 创建包:catkin_create_pkg VoiceBridgePKG std_msgs rospy roscpp

2. CMakeList.txt中加入

add_executable(VoiceBridgeNode src/VoiceBridgeNode.cpp)

target_link_libraries(VoiceBridgeNode ${catkin_LIBRARIES})

add_dependencies(VoiceBridgeNode VoiceBridgePKG_generate_messages_cpp)

3. 运行

rosrun VoiceBridgePKG VoiceBridgeNode

语言发布

sound_play包的说明:

How to Configure and Use Speakers with sound_play:

安装与测试:

23

catkin 机器人操作系统ROS_典型功能实现方法详解

1. 先建立一个工作空间, 并编译:

mkdir -p ~/SoundPlay/src

cd ~/ SoundPlay /src

catkin_init_workspace

cd ~/ SoundPlay

catkin_make

a) 否则直接运行$ rosdep install sound_play会有错误提示找不到资源 sound_play: ERROR: Rosdep cannot find all required resources to answer your query

Missing resource sound_play

ROS path [0]=/opt/ros/hydro/share/ros

ROS path [1]=/opt/ros/hydro/share

ROS path [2]=/opt/ros/hydro/stacks

2. 进入src文件夹, 下载源包命令: git clone 。(www.61k.com) 成功则提示 100% done

a) 在该网站上提供了源Source: git (branch:

hydro-devel), 那么说明应该像安装ROSARIA一样进行安装.

3. 安装该包:

a) source ~/catkin_ws_soundplay/devel/setup.bash

b) $ rosdep install sound_play

有错误提示

Err http://packages.ros.org/ros/ubuntu/ precise/main ros-hydro-audio-common-msgs amd64 0.2.5-0precise-20140130-1931-+0000 404 Not Found

试一下更新源, 但提示错误:

Failed to fetch http://packages.ros.org/ros/ubuntu/pool/main/r/ros-hydro-audio-common-msgs/ros-hydro-audio-common-msgs_0.2.5-0precise-20140130-1931-+0000_amd64.deb 404 Not Found

E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?

ERROR: the following rosdeps failed to install

apt: command [sudo apt-get install ros-hydro-audio-common-msgs] failed

测试运行rosdep update更新:(在src文件夹下),结果是updated cache in

/home/listname/.ros/rosdep/sources.cache. 再运行rosdep install sound_play 还是不行 错误提示The following packages have unmet dependencies:

libgstreamer-plugins-base0.10-dev : Depends: libgstreamer-plugins-base0.10-0 (= 0.10.36-1) but 0.10.36-1ubuntu0.1 is to be installed

Depends: gir1.2-gst-plugins-base-0.10 (= 0.10.36-1) but 0.10.36-1ubuntu0.1 is to be installed

E: Unable to correct problems, you have held broken packages.

ERROR: the following rosdeps failed to install

apt: command [sudo apt-get install libgstreamer-plugins-base0.10-dev] failed

重装系统后,再运行上面步骤, 就可以了(需要上面建包的步骤)

成功则提示: All required rosdeps installed successfully

c) $ rosmake sound_play ; 刚开始不行, 之后某段时间,再运行该句话,就可以了。成

功则提示:Built 27 packages with 0 failures.

4. (不需进行如下的步骤, 因为默认声卡就1个) 列出声卡设备: cat /proc/asound/cards

结果是: 0 [PCH ]: HDA-Intel - HDA Intel PCH; HDA Intel PCH at 0xd3610000 irq 46

asoundconf set-default-card [device #]//设置默认声卡, 总提示asoundconf找不到该命令 sudo apt-get install alsa-utils//执行改命令来安装,也不行

再输入asoundconf is-active, 总提示asoundconf找不到该命令

echo 'include ".asoundrc.asoundconf"' >> ~/.asoundrc //跟setup bash一样?

5. 运行

a) 得需要先catkin_make一下

b) $ rosrun sound_play soundplay_node.py成功则提示[INFO] [WallTime:

1395715034.562594] sound_play node is ready to play sound

c) 在另一Terminal中运行:$ rosrun sound_play say.py "hello world" . 成功则发声并提

示:Saying: hello world; Voice: voice_kal_diphone

利用程序来控制发声:

24

catkin 机器人操作系统ROS_典型功能实现方法详解

1. 文件名修改: 在~/SoundPlay/src/audio_common/sound_play/test下,有文件test.cpp,之

前利用命令catkin_make生成时,由于它与python下的一文件test.py重名了(在外面的CMakeList。(www.61k.com]txt文件中加入add_executable等后,报错,发现的?),因此无法生成节点。解决方法是: 将test.cpp改名为testcpp.cpp后, 再进行catkin_make就生成了testcpp节点了。

a) 也可以改为SoundDemo.cpp.

2. 运行:rosrun sound_play soundplay_node.py(需要先source devel/setup.bash一下)

3. 再运行rosrun sound_play testcpp, 之后就发出了test.cpp中的语言了

综合: 捕获String并发声

1. 在SoundPlay的testcpp.cpp的基础上进行修改。并参照“识别结果的接收与显示”一节的VoiceBridgeNode.cpp。所得文件为RespondVoice.cpp。

2. 修改RespondVoice.cpp”旁边的“CMakeList.txt:

add_executable(RespondVoice RespondVoice.cpp)

target_link_libraries(RespondVoice ${catkin_LIBRARIES})

add_dependencies(RespondVoice sound_play_gencpp)

3.运行:

a)运行声音捕捉/识别(包含发送String)$ roslaunch pocketsphinx robocup.launch b) source devel/setup.bash

rosrun sound_play soundplay_node.py

c)再运行source devel/setup.bash

rosrun sound_play RespondVoice.cpp

Debug:

在main中加入下面语句就可以:,

sound_play::SoundClient sc2;//sc2.say("Hello!");

否则提示:

[ WARN] [1395992984.300656028]: Sound command issued, but no node is subscribed to the topic. Perhaps you forgot to run soundplay_node.py

原因???

两主机通讯ROS_Network

参考网址 ;

ROS的分布式特点: 对两主机进行简单配置后, 若有相同的Topic, 则节点之间即可跨主机利用网络进行通讯. 因此网络通讯/控制变为十分简单.

安装sshd(需要这步吗??, 直接下一步应该也行?)

首先运行ssh marvin, 有提示错误:ssh: Could not resolve hostname hal: Name or service not known

解决方法:先修改/etc/hosts文件:进入该文件夹: cd /etc ; sudo gedit hosts;加入语句192.168.0.12(Tab键)marvin ? (例如216.239.37.99 www.google.com google; 每行也可以是两部份,即主机IP地址和主机名;比如 192.168.1.100 linmu100,无需重启网络)

再运行ssh marvin, 又有错误提示ssh: connect to host marvin port 22: Connection refused

检查是否有ssh:service ssh status, 若没有, 则安装ssh server:sudo apt-get install

25

catkin 机器人操作系统ROS_典型功能实现方法详解

openssh-server. 成功则提示:ssh start/running, process 5058

安装后,运行 ps -e | grep ssh,查看是否有sshd进程,成功则提示

1524 ? 00:00:00 ssh-agent

5058 ? 00:00:00 sshd

再运行ssh marvin 就有:

The authenticity of host 'marvin (192.168.0.12)' can't be established.

ECDSA key fingerprint is 4b:19:3d:92:03:12:ad:53:79:88:07:96:9e:e1:27:99.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added 'marvin,192.168.0.12' (ECDSA) to the list of known hosts.

listname@marvin's password:

Permission denied, please try again.

listname@marvin's password:

Welcome to Ubuntu 12.04.2 LTS (GNU/Linux 3.5.0-23-generic x86_64)

* Documentation: https://help.ubuntu.com/

The programs included with the Ubuntu system are free software;

the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law.

再ping marvin一下:成功,则显示:

ping marvin: PING marvin (192.168.0.12) 56(84) bytes of data.

64 bytes from marvin (192.168.0.12): icmp_req=1 ttl=64 time=0.033 ms

64 bytes from marvin (192.168.0.12): icmp_req=2 ttl=64 time=0.034 ms

关闭防火墙:sudo ufw disable 不需要关?

两台主机的设置

1. hal机器(P3AT上):主

a) 编辑.bashrc : gedit .bashrc, 在.bashrc文件中,添加/修改:

export ROS_HOSTNAME=hal

export ROS_MASTER_URI=

b) 编辑/etc/hosts: gedit /etc/hosts, 在hosts文件中添加:

192.168.0.12 marvin

192.168.0.13 hal

12.13视具体情况而定

2. marvin机器(我的电脑):从

a) 在.bashrc文件中,添加/修改:sudo gedit .bashrc

export ROS_HOSTNAME=marvin

export ROS_MASTER_URI=http://hal:11311

b) 编辑/etc/hosts: sudo gedit /etc/hosts, 在hosts文件中添加:

192.168.0.12 marvin

192.168.0.13 hal

3. 然后ping hal或者ping marvin命令就能运行了。[www.61k.com]

在hal上运行roscore就可以, marvin上无需再运行roscore;由于设置了master为hal:11311, 因此若在marvin上运行roscore,则在hal上提示Unable to connunicate with master!

测试talker-listener例程:

在hal上运行rosrun rospy_tutorials listener.py

在marvin上运行rosrun rospy_tutorials talker.py

反过来也可以:

在marvin上运行rosrun rospy_tutorials listener.py

在hal上运行rosrun rospy_tutorials talker.py

测试P3AT的控制: (相当于网络通讯控制了)

目标: 让”marvin”将先锋机器人的控制命令通过Wifi发送给”hal”, 然后”hal”再把此命令发送给先锋机器人

对于hal已有的RosAria,其运动控制的Topic是“cmd_vel”, 因此要把marvin上的

26

catkin 机器人操作系统ROS_典型功能实现方法详解

Topic也设置为”cmd_vel”,见包NetworkRosAria。(www.61k.com](再一次证明了,没有'/'也可以发布消息)

1. 在hal上运行RosAria:

roscd ROSARIA

串口线插到下面的串口,上面的口应该是/dev/ttyS1

rosrun ROSARIA RosAria

2. 在marvin上运行NetworkRosAria即可。

总结: 只要两机器上的Topic相同,就可以通讯了,不是很复杂。

说明: 当marvin进行单机运行时, 需要把之前的设置改回去: gedit .bashrc; sudo gedit /etc/hosts 。再重启roscore所在的Terminal。

ROS_OpenTLD

程序的编译:

源程序: https://github.com/Ronan0912/ros_opentld

先建个文件夹 /ros_ws/src, 再直接catkin_make一下。 source devel/setup.bash (rosmake做准备??),复制rosopentld文件夹到src下, 还需要再catkin_make一下吗?

需要修改之处:

两个launch文件中把”image_topic”默认的值”im_acq“改为图像发布的话题:”/image_usbcam” 见 https://github.com/Ronan0912/ros_opentld/issues/3

再依次把三个文件夹rosmake(在工作空间路径下?):rosmake opentld;rosmake tld_msgs; rosmake tld_tracker;

操作方法:source devel/setup.bash 后,先运行~gui.launch: roslaunch tld_tracker ros_tld_gui.launch,

再运行~tld.launch: roslaunch tld_tracker ros_tld_tracker.launch。 F5是刷新图像。再在图像上的待跟踪目标上画矩形框,再按回车键就OK了。

ROS学习材料

cc ROS开发环境之Qt Creator 5.2.0配置 并运行编译helloworld(包括qt安装)

ROS使用笔记本自带USB摄像头运行pi_face_tracker,进行人脸识别

ROS Tutorials

古月居博客

27

三 : 计算机操作系统的重装与维护

【摘 要】针对电脑用户遇到系统文件损坏或遭遇电脑病毒攻击造成的系统瘫痪而无法进入电脑系统进行正常操作现象,本文简单易懂的介绍了系统重装原则、系统安装前的准备、如何进行Windows XP系统的安装和系统安装后的一些必要的维护工作。(www.61k.com]
【关键词】操作系统;系统重装;备份;Windows XP系统;系统还原

0.前言
当电脑中了病毒,杀毒软件不能查杀,表现为经常重启、死机,文件响应速度慢,或者电脑系统文件缺失,导致不能正常开机时,就需要重装操作系统。本文以Windows XP系统的重装为例,详尽系统安装的方法与步骤。
1.系统重装的原则
如果系统出现以下三种情况之一,则要考虑重装系统:
(1)系统运行效率变得低下,不好的文件充斥硬盘且散乱分布又不便于集中清理和自动清理。
(2)系统频繁出错,而故障又不便于准确定位和轻易解决。
(3)系统不能启动。
2.系统重装前的准备工作
计算机重装系统后,系统盘的数据、收藏夹等会丢失,所以在重装前要做好数据的备份工作。
2.1文件备份
确定要将系统装在哪个盘,然后将该盘的文件拷贝到其他盘。若硬盘不能启动,则用其他启动盘启动系统后,拷贝数据。为了避免出现硬盘数据不能恢复的情况发生,在平时就要养成每天备份重要数据的习惯。
2.2收藏夹备份
经常上网浏览的用户,会收藏许多网址列表。重装系统后,以前收藏的网址就都不翼而飞了。所以,重装系统前要备份好“收藏夹”。收藏夹的路径因系统不同而不同,一般在C:\Documents and Settings 下有一个以电脑登录名命名的文件夹,打开后就能看到收藏夹,把它复制到其他盘即可。
2.3驱动程序备份
装机后需要重新安装显卡、声卡、主板和其他外设的驱动程序,如果没有这些驱动程序的安装盘,那么就要在安装系统前把驱动程序备份好。
3.Windows XP系统的安装
启动计算机,按DELETE键进入BIOS,选择Advanced BIOS Features选项,按Enter键进入设置程序。选择First Boot Device选项,按键盘上的Page Up或Page Down键将该项设置为CD-ROM,这样系统就变为光盘启动了。退回主菜单,按F10再按Y键,保存BIOS设置,并重新启动计算机。
将安装光盘放入光驱,计算机启动,当出现Press any key to boot from CD…时,按下回车键。此时计算机启动安装盘,进入安装界面。出现提示“要现在安装Windows XP,请按Enter”,按下回车键。进入安装界面。
安装步骤:
(1)安装程序弹出协议对话框,选择接受协议,点击下一步。
(2)安装程序进行检测系统,并把必要的安装文件复制到 C 盘和其它临时目录,15秒后电脑重新启动。
(3)电脑重启后,进入Windows XP 安装界面。选择第一个选项,开始安装Windows XP,按回车键。
(4)程序进入安装目录选择窗口,确定需要安装的盘符。如果希望用硬盘尚未划分的磁盘分区来安装 Windows XP,请按键盘上的C字母,如果想删除高亮显示的磁盘分区请按键盘上的D键。按回车,选择C盘。
(5)程序进入下一个窗口,提示选择文件系统的格式,把它们都列出来,共有三种: a) 用FAT文件系统格式化磁盘分区 ,b) 将磁盘分区转换为NTFS ,c) 保持现有文件系统(无变化),选择第一个选项。
(6)将文件复制到Windows XP安装文件夹中等待一段时间后,安装所需要的文件都复制完毕,这时,就可以进行下一个步骤了。
(7)安装程序初始化Windows XP配置后,重新启动电脑,可以看到Windows XP安装程序进行各项检测。默认系统区域和用户区域设置均为中国。键盘布局也默认为中文(简体)--美式键盘键盘布局。若要进行修改,可自定义进行设置。安装程序进入一个要求输入个人信息,包括姓名及公司或单位的名称的窗口。填写计算机名:安装程序提供了文字输入确定用户的计算机名和其它的设置。
(8)安装程序创建一个称为Administrator(系统管理员的)用户帐户,它拥有完全控制计算机的权限。确定这个帐户时,安装程序要求用户输入“系统管理员密码”和“确认密码”。单击“下一步”后,安装程序弹出了日期和时间的设置对话框,确定之后按回车。
(9)系统出现网络设置对话框,有“典型设置”和“自定义设置”两个选项,建议选择“典型设置”,让安装程序实现自动式的操作,避免安装过程中设置出错。
(10)Windows XP是基于NT内核的,网络对它来说最为重要,所以系统弹出了域成员设置对话框。执行最后任务,安装程序花几分钟进行安装与配置WinXP组件。此时不再需要用户进行操作,由Windows XP自动完成。
至此,Windows XP的安装工作就完成了。重装后相当于全新的机器,垃圾文件、恶意插件等都会被清除,机器运行又变得流畅了。
4.重装系统后的工作
操作系统进行重装后,安全设置以及补丁未及时安装,容易导致病毒的大肆入侵,因此一些必备的补充措施是非常关键的。
4.1不要急着接入网络
在安装完成Windows后,不要立即把服务器接入网络,因为这时的服务器还没有打上各种补丁,存在漏洞,很容易感染病毒。要打上补丁后重新启动再接入网络。
4.2安装杀毒软件/为系统打补丁
安装完系统后,一定要安装杀毒软件,同时将其更新到最新版本,同时安装Windows各种补丁。
4.3关闭系统还原
系统还原是Windows中具有的功能,它允许将系统恢复到某一时间状态,从而避免重新安装操作系统。但是,在执行系统还原后,除C盘外,其它的盘都会恢复到先前的状态,结果里面保存的文件都没有了,造成了严重的损失。
因为系统还原默认是针对硬盘上所有分区而言的,因此,要关闭系统还原。按下Win+Break键,然后单击“系统还原”标签,取消“在所有驱动器上关闭系统还原”选项,选中D盘,单击“设置”按钮,在打开的窗口中选中“关闭这个驱动器上的系统还原 ”选项。依次将其他盘上的系统还原关闭。这样,一旦系统不稳定,可以利用系统还原工具还原C盘上的系统,而同时其他盘上的文件不会消失。
4.4给Administrator设置密码
装完系统后,右击“我的电脑”,选择“管理”,再选择左侧的“计算机管理(本地)→系统工具→本地用户和组→用户”,选中右侧窗口中的Administrator,右击,选择“设置密码”。在打开窗口中单击“继续”按钮,即可在打开窗口中为 Administrator设置密码。
另外,选择“新用户”,设置好用户名和密码,再双击新建用户,单击“隶属于”标签,将其中所有组都选中,单击下方的“删除”按钮。再单击“添加”按钮,然后再在打开窗口中单击“高级”按钮,接着单击“立即查找”按钮,找到PowerUser或User组,单击“确定”两次,将此用户添加 PowerUser或User组。注销当前用户,再以新用户登录可以发现系统运行快很多。
5.结束语
通过以上几个方面的叙述,详尽而简单易懂的介绍了电脑windows系统如何进行重新安装,安装过程中需要注意的事项以及系统安装后如何进行病毒的预防工作。对非计算机专业人员如何进行系统维护和安装起到一定的指导作用。

【参考文献】
[1]冉振.轻松安装与重装系统[M].清华大学出版社,2007.
[2]马国亮.系统安装与重装入门与进阶[M]. 清华大学出版社,2010.

四 : 神舟飞船上的计算机使用什么操作系统,为什么是自研发不是

[threadx系统]神舟飞船上的计算机使用什么操作系统,为什么是自研发不是 Linux?
报道来源
下面就看看www.61k.com小编为您搜集整理的参考答案吧。

网友时国怀[threadx系统]神舟飞船上的计算机使用什么操作系统,为什么是自研发不是 Linux?给出的答复:
看到前面的回答,貌似很多人不是很清楚嵌入式操作系统和通用的桌面操作系统(windows和linux)的区别。首先自主写一个嵌入式操作系统是完全可行的,12.9k并不算很小。大家可以搜索一下一个嵌入式领域很流行的操作系统uc/osII,总共就两三千行代码,但是已经通过美国的行业认证,可以用在商业飞行器上,证明了其高效稳定性。国内的也有人写了一个djyos(都江堰os)嵌入式系统。嵌入式系统最重要的一个指标就是稳定运行,它不需要桌面操作系统那样要花大量的代码实现界面交互,嵌入式操作系统只需完成简单的任务切换、通信等功能。
还有为什么不使用linux呢?简单的说是因为linux不是实时操作系统。“实时”简单的说就是你运行一个程序功能(比如进程切换)的时间是精确可估的。在嵌入式领域“实时”十分重要,操作系统必须能及时处理外界中断、通信等任务(想想如果不能及时响应导致数据丢失,飞船会出现什么状况),而linux的进程切换需要在内核态进行,用户态和内核态的切换耗费很多时间,这在一些嵌入式应用(像飞船、飞机等系统中)是不能容忍的。
-----------------------------------------------
说点题外话,中国人能不能写出自己的桌面通用操作系统呢?我觉得是可以的,也有团队在做。但是大家都知道你可以写出一个操作系统,但在这个操作系统之上的应用软件不多,也就根本没人会去用。因此目前国内团队做的操作系统一般的目的都不是跟微软、linux(国人开发的系统很多也是基于linux,但也有完全自主的)竞争,而是满足一些特殊需要(最多的应该是国防了)。对于基础领域,很多项目大家没看到不是因为做不了,而是因为现在没法做,没必要做(还有一些是涉及专利,基础理论专利在人家手里,没法躲避所有的专利)。
套用胡伟武老师(龙芯研发负责人)讲座上的一句话(大意):技术?很好解决嘛,如果我有很多钱(好吧,应该是政府有很多钱),大可去挖intel和AMD的墙角,但是相应的配套服务(比如开发软件支持等)如果跟不上,那也是没用的。
中国错过了计算机基础理论发展的黄金阶段,因此我们现在看到的实际是几十年前埋下的苦果。


网友蒙面大侠[threadx系统]神舟飞船上的计算机使用什么操作系统,为什么是自研发不是 Linux?给出的答复:
是不是好多人眼里,操作系统只有Windows,Mac OS和Linux三种啊。


网友蒙面大侠[threadx系统]神舟飞船上的计算机使用什么操作系统,为什么是自研发不是 Linux?给出的答复:

本文标题:计算机操作系统的功能-TPC:TPC-一、什么是TPC和tpmC?,TPC-二、如何衡量计算机系统的性能和价
本文地址: http://www.61k.com/1155673.html

61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1