ROS客户端提供一些列库文件用于用户开发。它利用许多ROS概念并使它通过代码可以获取。

下面是ROS程序中的接口

ROSCPP客户端(c++客户端)

首先新建一个包

然后catkin_make一下

在新建的包目录下,建立一个消息文件msg

上面定义的消息需要生成消息的头文件foo.h以便以后我们可以调用,我们进入package.xml里面去修改,

第一步:

第二步:

然后再回到CMakeLists.txt中

完成之后,下面编译一下,

下面来写一下代码:

我们以前已经写过了make文件,查看一下

有了这个文件,我们就可以在eclipse中打开这个工程,先执行一下这个文件:

下面打开eclipse

然后file->import,

下面要在src中写一个源文件,叫做move_publisher.cpp

再写一个move_subscriber.cpp

首先要控制turtlesim,他的话题topic是/turtle1/cmd_vel(rostopic list);消息类型为geometry_msgs/Twist(rostopic info /turtle1/cmd_vel)。

下面编写发布程序

/*  * move_publisher.cpp  *

*  Created on: Jan 16, 2017

*      Author: gary  */

#include<ros/ros.h> //消息的头文件

#include<geometry_msgs/Twist.h>

//一定要加命令行参数,argc指参数个数

//argv为具体的参数

int main(int argc,char **argv)

{

//初始化,move_publisher为节点名称

ros::init(argc,argv,"move_publisher");  

//定义一个句柄

ros::NodeHandle n;  

//定义一个发布者类ros::Publisher的对象pub,指定需要的消息类型为geometry_msgs::Twist

//发布的主题为turtle1/cmd_vel,缓冲区大小为1000 ,advertise返回一个publisher类型的对象。

ros::Publisher pub=n.advertise<geometry_msgs::Twist>("turtle1/cmd_vel",1000);

//实例化一个消息对象

geometry_msgs::Twist tw;

//并对它进行赋值,分别是角速度赋值

tw.angular.z=2;

tw.angular.x=0;

tw.angular.y=0;

//线速度赋值

tw.linear.x=2;

tw.linear.y=0;

tw.linear.z=0;

//上面消息结构已经定义了,下面发布这个消息

//指定发布频率,允许循环频率当前是10HZ,

ros::Rate rate(10);

while(ros::ok())  //ros::ok()这个句柄如果按下ctrl+c则它会返回一个false值

{   //指定要发布的消息

pub.publish(tw);

//spin()是指在此处固定等待消息,进入循环

//spin_once()循环一次执行回调函数

ros::spin(); //要改成ros::spinOnce()才能正确运行,然后就一直处于新欢内,消息是没有办法发送出去的。

}

rate.sleep();

}

下面修改一下CMakeLists.txt,

添加一行

add_executable(move_publisher src/move_publisher.cpp)

以及

target_link_libraries(move_publisher
   ${catkin_LIBRARIES}
 )

保存一下,下面来编译,

catkin_make,编译正确后,运行一下

rosrun turtle_move move_publisher

下面再写一个订阅者:

把刚刚的消息加到订阅者里面来(#include<turtle_move/foo.h>),也把发布者和接收者写到一起

回调函数里面要传递一个参数,且用的一个共享指针ConstPtr(他是boost的一个共享指针)在这里如果用eclipse继承开发环境的话还可以跟进具体变量的类型是什么!!!!!!

下面的话题foo_topic是可以随便指定的,只要里面的数据类型turtle_move::foo是已经定义过的就行。

消息文件里面的定义格式如下:

数据类型  变量名,例如:int16  foo

然后修改CMakeLists.txt

加入以下:

add_executable(move_subscriber src/move_subscriber.cpp)

target_link_libraries(move_publisher
   ${catkin_LIBRARIES}
 )

再进行编译

catkin_make,没有问题,之后运行之,正确,发布和接收都在同一个文件;可以在循环里面加上foo.foo++;来体现是在进行消息的正确发布。

下面再写一个计时器,在src下新建一个文件:

类似于创建一个主题订阅

上面使用n.createTimer创建了一个时间对象,Duration(1)就是一个时间区间为1s。ros::spin()是等待消息。

然后在CMakeLists.txt里面再修改,

添加上

add_executable(timer src/timer.cpp)

target_link_libraries(timer
   ${catkin_LIBRARIES}
 )

然后编译正确,然后运行,结果也是正确的。

第四课4、ROS客户端的更多相关文章

  1. 【Web探索之旅】第二部分第四课:数据库

    内容简介 1.第二部分第四课:数据库 2.第二部分第五课预告:响应式网站 第二部分第四课:数据库 说到“数据库”,顾名思义,是“数据的仓库”的意思. 所以数据库的一大作用就是储存数据咯. 为什么Web ...

  2. Asp.Net Web API 2第四课——HttpClient消息处理器

    Asp.Net Web API 导航   Asp.Net Web API第一课:入门http://www.cnblogs.com/aehyok/p/3432158.html Asp.Net Web A ...

  3. Kali Linux Web 渗透测试视频教程—第十四课-arp欺骗、嗅探、dns欺骗、session劫持

    Kali Linux Web 渗透测试视频教程—第十四课-arp欺骗.嗅探.dns欺骗.session劫持 文/玄魂 目录 Kali Linux Web 渗透测试—第十四课-arp欺骗.嗅探.dns欺 ...

  4. Kali Linux Web 渗透测试视频教程— 第四课 google hack 实战

    Kali Linux Web 渗透测试— 第四课 google hack 实战 文/玄魂 目录 shellKali Linux Web 渗透测试— 第四课 google hack 实战 课程目录 Go ...

  5. NeHe OpenGL教程 第四十四课:3D光晕

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  6. NeHe OpenGL教程 第三十四课:地形

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  7. NeHe OpenGL教程 第二十四课:扩展

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  8. NeHe OpenGL教程 第十四课:图形字体

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  9. NeHe OpenGL教程 第四课:旋转

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

随机推荐

  1. OpenStack Neutron 之 Load Balance

    OpenStack Neutron 之 Load Balance 负载均衡(Load Balance)是 OpenStack Neutron 支持的功能之一.负载均衡能够将网络请求分发到多个实际处理请 ...

  2. cmd(或者说DOS窗口)输出内容到文件

    格式是:command >> filefullpath 格式是:DOS命令>>文件名全路径 举例说明: dir *.* >> D:\abc.txt dir *.* ...

  3. HDU 4336 Card Collector:期望dp + 状压

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4336 题意: 一共有n种卡片.每买一袋零食,有可能赠送一张卡片,也可能没有. 每一种卡片赠送的概率为p ...

  4. SpringMVC简单实例(看起来有用)

    SpringMVC简单实例(看起来有用) 参考: SpringMVC 基础教程 简单入门实例 - CSDN博客http://blog.csdn.net/swingpyzf/article/detail ...

  5. Delphi中TList类应用

    在DELPHI中指针最常见的就是和类TLIST结合起来使用.下面是一个很简单的例子,希望对这个例子的分析能让大家对使用TLIST类有一个简单的认识. 代码的功能是使用指针和Tlist来生成一个牌串,并 ...

  6. Twitter的流处理器系统Heron——升级的storm,可以利用mesos来进行资源调度

    2011年,Twitter发布了开源的分布式流计算系统Storm.四年后,随着用户数量的急剧增加,Twitter每天要处理的事件已经增加到十亿以上.Storm系统应对如此庞大而复杂多样的流数据变得十分 ...

  7. Saiku_学习_02_Schema Workbench 开发mdx和模式文件

    一.前言 saiku的查询都是通过cube来进行的.因此每当我们要进行一次多维度查询时,都要先修改xml.上传.重启才能生效,不仅效率低,还不利于学习和理解MDX和模式文件. 通过 workbench ...

  8. 关于python包,模块,.pyc文件和文件导入理解

    参考文献 一.包 包是一个文件夹,用来存放模块和子包. 包里一般会有一个__init__.py的文件(也可以没有). 包里会有一个__pycache__文件夹,存放.py文件经解释器解释后的中间字节码 ...

  9. Python TCP通信网络编程

    最近在看廖雪峰老师的基础教程(http://www.liaoxuefeng.com/),今天实现了一下简单Python的Socket的网络编程. 1. Socket网络编程 Socket是网络编程的一 ...

  10. 机器学习 Generative Learning Algorithm (A)

    引言 前面几讲,我们主要探讨了如何对 p(y|x;θ) (即y 相对于x的条件概率)进行建模的几种学习算法,比如,logistic regression 对 p(y|x;θ) 进行建模的假设函数为 h ...