第四课4、ROS客户端
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客户端的更多相关文章
- 【Web探索之旅】第二部分第四课:数据库
内容简介 1.第二部分第四课:数据库 2.第二部分第五课预告:响应式网站 第二部分第四课:数据库 说到“数据库”,顾名思义,是“数据的仓库”的意思. 所以数据库的一大作用就是储存数据咯. 为什么Web ...
- 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 ...
- Kali Linux Web 渗透测试视频教程—第十四课-arp欺骗、嗅探、dns欺骗、session劫持
Kali Linux Web 渗透测试视频教程—第十四课-arp欺骗.嗅探.dns欺骗.session劫持 文/玄魂 目录 Kali Linux Web 渗透测试—第十四课-arp欺骗.嗅探.dns欺 ...
- Kali Linux Web 渗透测试视频教程— 第四课 google hack 实战
Kali Linux Web 渗透测试— 第四课 google hack 实战 文/玄魂 目录 shellKali Linux Web 渗透测试— 第四课 google hack 实战 课程目录 Go ...
- NeHe OpenGL教程 第四十四课:3D光晕
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- NeHe OpenGL教程 第三十四课:地形
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- NeHe OpenGL教程 第二十四课:扩展
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- NeHe OpenGL教程 第十四课:图形字体
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- NeHe OpenGL教程 第四课:旋转
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
随机推荐
- [原创]关于tomcat启动时时候端口被占用,8080,8005,8009
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- 20145229吴姗珊 《Java程序设计》2天小总结
20145229吴姗珊 <Java程序设计>2天小总结 教材学习内容总结 由于这周学的内容比较简单,主要是关于日期.日期之类的东西.所以自己从书上看了一些内容 总结了第四章 认识对象 和第 ...
- 95th percentile concentration
很多网络流量监控软件都提供了一个95th的值,开始一直不太理解,终于在solarwinds官网找到答案. 95th百分点指的是所给数集中超过其95%的数.它是一个统计学上的概念.对于某个接口,准确统计 ...
- Mysql视图使用总结
视图View使用总结: 视图可以看作为“虚拟表”,因为它返回的结果集格式与实体数据表返回的数据集格式类似,并且引用视图的方式与引用数据表的方式相同.每次查询使用视图时,DBMS会动态生成视图结果集所需 ...
- Tomcat处理HTTP请求源码分析(上)
Tomcat处理HTTP请求源码分析(上) 作者 张华 发布于 2011年12月8日 | 8 讨论 分享到: 微博 微信 Facebook Twitter 有道云笔记 邮件分享 稍后阅读 我的阅读清单 ...
- java处理json数据
如果要处理json数据首先要确定使用的json包是那个,常用的有json-lib-x.jar和jack-json-x.jar.我这里的实例代码为json-lib-2.4-jdk15.jar. 在jso ...
- Delphi 读取 c# webservice XML的base64编码图片字符串转化图片并显示
Delphi 读取 c# webservice XML的base64编码图片字符串转化图片并显示 在 开发中遇到应用c#及asp.net的在的webservice 保存图片并以xml文件形式现实出来 ...
- 分享知识-快乐自己:redis集群搭建
Redis介绍: 1.开源的NoSql数据库 2.C语言编写 3.基于内存运行,并且支持持久化 4.Key value存储 5.是主流的Nosql数据库之一 Redis优点: 1.内存使用方面,表现优 ...
- NserviceBus过期处理
NserviceBus不过期,修改注册表 HKEY_CURRENT_USER\Software\NServiceBus\3.3下的项TrailDate到2099-08-02
- Linux-MySQL主从配置
1. MySQL主从原理以及应用场景MySQL的Replication原理非常简单,总结一下:每个从仅可以设置一个主.主在执行sql之后,记录二进制log文件(bin-log).从连接主,并从主获取b ...