ROS学习--RoboWare Studio的使用和发布器/订阅器的编写与测试
来源:互联网 发布:淘宝能买到色情光碟吗 编辑:程序博客网 时间:2024/06/05 14:33
开始ROS学习之前,先按照官网教程和其他老大们写的博客安装好ROS,再安装一个RoboWare-Studio,虽然用Qt和Eclipse也行,但比较麻烦,这个很方便。
按照大多网络教材的顺序,我们先来做一个发布器和订阅器。步骤如下:
1.在RoboWare-Studio里的工作区间下新建一个包beginner_tutorials,依赖项是std_msgs,roscpp.
2.在_tutorials包下的src里创建两个cpp源文件talker和listener。
talker文件内容如下:
#include"ros/ros.h"//导入ros核心头文件#include"std_msgs/String.h"//导入std_msgs/String消息头文件,由std_msgs包的string.msg文件自动生成#include<sstream>int main(int argc, char **argv){ ros::init(argc, argv, "talker");//初始化ROS,指定节点名为talker ros::NodeHandle n;//实例化节点 ros::Publisher chatter_pub=n.advertise<std_msgs::String>("chatter",1000);//发布一个名为chatter的的话题的消息,消息类型为std_msgs/String,消息队列大小为1000,超过后旧的消息丢弃 ros::Rate loop_rate(10);//发消息的频率,这里指每秒10次,通过 Rate::sleep()来处理睡眠的时间来控制对应的发布频率。 int count=0; while(ros::ok())//默认roscpp会植入一个SIGINT处理机制,当按下Ctrl-C,就会让ros::ok()返回false,那循环就会结束 { std_msgs::String msg; std::stringstream ss; ss<<"hello world"<<count; msg.data=ss.str();//实例化消息msg, 定义字符串流“hello world”并赋值给ss, 最后转成为字符串赋值给msg.data ROS_INFO("%s",msg.data.c_str());//输出调试信息 chatter_pub.publish(msg);//实际发布的函数 ros::spinOnce();//不是必需的,但是保持增加这个调用,是好习惯。如果程序里也有订阅话题,就必需,否则回调函数不能起作用。 loop_rate.sleep(); ++count; } return 0;}/*ros::ok() 返回false的几种情况: SIGINT收到(Ctrl-C)信号 另一个同名节点启动,会先中止之前的同名节点 ros::shutdown()被调用 所有的ros::NodeHandles被销毁*/
listener里的内容如下:
#include"ros/ros.h"#include"std_msgs/String.h"void chatterCallback(const std_msgs::String::ConstPtr& msg){ ROS_INFO("I heared :[%s]",msg->data.c_str());}//回调函数,收到chatter话题时会调用这个函数,消息通过boost shared_ptr(共享指针)传递,收到消息通过ROS_INFO显示到终端int main(int argc, char **argv){ ros::init(argc, argv, "listener"); ros::NodeHandle n; ros::Subscriber sub=n.subscribe("chatter",1000,chatterCallback);//订阅节点 ros::spin();//调用此函数才能进入循环处理,直到ros::ok返回false结束 return 0;}
通过Roboware-studio编写,package.xml和CMakeLists.txt不需要修改,会帮我们修改好。
3.点击左上角资源管理器边上的小锤子进行编译,有错误的话会报。
4.上方菜单栏的ROS里的roscore点一下,也可以<Ctrl>+<Alt>+T
打开终端运行roscore。
5.在终端里到工作空间下source一下setup.sh文件
# In your catkin workspace$ cd ~/catkin_ws$ source ./devel/setup.bash
6.在两个终端里分别rosrun talker和listener
$ rosrun beginner_tutorials talker (C++)$ rosrun beginner_tutorials talker.py (Python) $ rosrun beginner_tutorials listener (C++)$ rosrun beginner_tutorials listener.py (Python)
7.验证一下成功后<Ctrl>+c
关闭两个终端
参考网站:
测试消息发布器和订阅器 (C++)
编写简单的消息发布器和订阅器 (C++)
阅读全文
0 0
- ROS学习--RoboWare Studio的使用和发布器/订阅器的编写与测试
- ROS入门_1.14 编写及测试简单的消息发布器和订阅器 (C++)
- ROS学习(基于Ubuntu 15.04 和ROS Jade)第三章 ROS核心教程 之 11 编写简单的消息发布器和订阅器 (C++)
- ROS教程(十一):编写简单的消息发布器和订阅器
- ROS学习--(十三)编写简单的订阅器(subscriber),编译,测试
- ROS:编写简单的发布、订阅
- ROS简单的发布器节点和订阅器节点
- ROS学习笔记-1: 构建工作空间-创建catkin包-编写发布器与订阅器
- Roboware的安装与使用
- ROS学习笔记(八):消息的发布与订阅
- 编写测试简单的消息发布器和订阅器 (C++)(十)
- ROS学习笔记--消息发布器和订阅器
- ROS学习(基于Ubuntu 15.04 和ROS Jade)第三章 ROS核心教程 之 12 测试消息发布器和订阅器
- 编写简单的消息发布器和订阅器
- ROS学习笔记九:用C++编写ROS发布与订阅
- ROS 编写消息发布器(publisher)和订阅器(subscriber)-精简
- ROS-python实现简单的消息发布器和订阅器
- ROS 自定义消息发布器和订阅器测试 +代码详解(入门级)
- 资讯精选 | 如何使用阿里云虚拟主机搭建博客
- java多线程之重入锁ReentrantLock
- 统计以 www 用户启动所有进程使用的内存总数
- dataTables Uncaught TypeError: Cannot read property 'style' of undefined
- 全志R16平台的Android6系统下调通rtl8189es(分色排版)V1.0
- ROS学习--RoboWare Studio的使用和发布器/订阅器的编写与测试
- 虚基类的子类的构造函数
- freemarker之空值处理解决方案
- 关于opencv基础的设置的笔记
- maven分环境部署
- HDU 6168
- 函数指针
- Anaconda jupyter 出现 kernel error 解决办法
- [FAQ20158]N版本双卡铃声