zoukankan      html  css  js  c++  java
  • [转]RoboWare Studio的使用和发布器/订阅器的编写与测试

    原文地址:https://blog.csdn.net/han_l/article/details/77772352,转载主要方便随时查阅,如有版权要求,请及时联系。

    开始ROS学习之前,先按照官网教程和其他老大们写的博客安装好ROS,再安装一个RoboWare-Studio,虽然用Qt和Eclipse也行,但比较麻烦,这个很方便。

    RoboWare StudioROS的一款IDE,基于微软开源的VSCode开发,功能比较强大,使得开发更加快速、简单。是目前最好用的ROS开发工具了。

    整个安装过程非常简单,只要去RoboWare Studio官网,下载最新的安装包,然后双击安装即可。

    按照大多网络教材的顺序,我们先来做一个发布器和订阅器。步骤如下:
    1.在RoboWare-Studio里的工作区间下新建一个包beginner_tutorials,依赖项是std_msgs,roscpp.
    2.在_tutorials包下的src里创建两个cpp源文件talker和listener。
    talker文件内容如下:

     1 #include"ros/ros.h"//导入ros核心头文件
     2 #include"std_msgs/String.h"//导入std_msgs/String消息头文件,由std_msgs包的string.msg文件自动生成
     3 #include<sstream>
     4 int main(int argc, char **argv)
     5 {
     6     ros::init(argc, argv, "talker");//初始化ROS,指定节点名为talker
     7     ros::NodeHandle n;//实例化节点
     8     ros::Publisher chatter_pub=n.advertise<std_msgs::String>("chatter",1000);//发布一个名为chatter的的话题的消息,消息类型为std_msgs/String,消息队列大小为1000,超过后旧的消息丢弃
     9     ros::Rate loop_rate(10);//发消息的频率,这里指每秒10次,通过 Rate::sleep()来处理睡眠的时间来控制对应的发布频率。
    10     int count=0;
    11     while(ros::ok())//默认roscpp会植入一个SIGINT处理机制,当按下Ctrl-C,就会让ros::ok()返回false,那循环就会结束
    12     {
    13         std_msgs::String msg;
    14         std::stringstream ss;
    15         ss<<"hello world"<<count;
    16         msg.data=ss.str();//实例化消息msg, 定义字符串流“hello world”并赋值给ss, 最后转成为字符串赋值给msg.data
    17         ROS_INFO("%s",msg.data.c_str());//输出调试信息
    18         chatter_pub.publish(msg);//实际发布的函数
    19         ros::spinOnce();//不是必需的,但是保持增加这个调用,是好习惯。如果程序里也有订阅话题,就必需,否则回调函数不能起作用。
    20         loop_rate.sleep();
    21         ++count;
    22     }
    23     return 0;
    24 }
    25 /*ros::ok() 返回false的几种情况:
    26 
    27     SIGINT收到(Ctrl-C)信号
    28     另一个同名节点启动,会先中止之前的同名节点
    29     ros::shutdown()被调用
    30     所有的ros::NodeHandles被销毁
    31 */

    listener里的内容如下:

     1 #include"ros/ros.h"
     2 #include"std_msgs/String.h"
     3 
     4 void chatterCallback(const std_msgs::String::ConstPtr& msg)
     5 {
     6     ROS_INFO("I heared :[%s]",msg->data.c_str());
     7 }//回调函数,收到chatter话题时会调用这个函数,消息通过boost shared_ptr(共享指针)传递,收到消息通过ROS_INFO显示到终端
     8 int main(int argc, char **argv)
     9 {
    10     ros::init(argc, argv, "listener");
    11     ros::NodeHandle n;
    12     ros::Subscriber sub=n.subscribe("chatter",1000,chatterCallback);//订阅节点
    13     ros::spin();//调用此函数才能进入循环处理,直到ros::ok返回false结束
    14     return 0;
    15 }

    通过Roboware-studio编写,package.xml和CMakeLists.txt不需要修改,会帮我们修改好。
    3.点击左上角资源管理器边上的小锤子进行编译,有错误的话会报。
    4.上方菜单栏的ROS里的roscore点一下,也可以<Ctrl>+<Alt>+T打开终端运行roscore。
    5.在终端里到工作空间下source一下setup.sh文件

    1 # In your catkin workspace

    2 $ cd ~/catkin_ws

    3 $ source ./devel/setup.bash 

    6.在两个终端里分别rosrun talker和listener

    1 $ rosrun beginner_tutorials talker      (C++)
    2 $ rosrun beginner_tutorials talker.py   (Python) 
    3 
    4 
    5 $ rosrun beginner_tutorials listener      (C++)
    6 $ rosrun beginner_tutorials listener.py   (Python)

    7.验证一下成功后<Ctrl>+c关闭两个终端

    参考网站:
    测试消息发布器和订阅器 (C++)
    编写简单的消息发布器和订阅器 (C++)

    http://www.php8.org/fwq/90575.html

    http://www.rosclub.cn/post-591.html

  • 相关阅读:
    模拟退火、禁忌搜索、迭代局部搜索求解TSP问题Python代码分享
    多起点的局部搜索算法(multi-start local search)解决TSP问题(附Java代码及注释)
    爬取一定范围内的地图兴趣点并生成地点分布图
    Tabu Search求解作业车间调度问题(Job Shop Scheduling)-附Java代码
    Python爬虫系列
    干货 | 蚁群算法求解带时间窗的车辆路径规划问题详解(附Java代码)
    10分钟教你Python爬虫(下)--爬虫的基本模块与简单的实战
    vs code 打开文件时,取消文件目录的自动定位跟踪
    eclipse自动补全导致变量会跟上String后缀的问题解决
    16. nested exception is com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "auditUnitName"
  • 原文地址:https://www.cnblogs.com/qiuheng/p/9122423.html
Copyright © 2011-2022 走看看