ROS学习笔记-3 RoboWare的使用和简单的发布话题

本来ROS学习笔记-2 应该已经写完了,是关于cartographer的尝试

第一次成功跑了一遍,但是后来再运行的时候又出了点问题,于是决定找找问题再修改一下。

这篇的内容主要是包括RoboWare的使用和简单的发布Twist消息

1.RoboWare

RoboWare是国人开发的一个ROS系统IDE,最大的好处就是可以方便代码和CMAKE文件,免去了繁琐的编译和编辑CMAKE文件过程。

安装非常简单,在官网下载deb包,通过GDebi安装即可

http://www.roboware.me/#/home


RoboWare界面

2.简单的介绍一下我了解到的RoboWare里面比较贴心的功能

2.1新建好一个Catkin_Ws文件夹后,你可以右键选择添加新的ROS包,在ROS包下,可以自行选择创建src,launch文件夹等

2.2 这个IDE在代码编辑的时候,和其他的IDE一样,都有补全功能和debug的功能

2.3左上角的绿色小锤子可以一键编译,并且CMAKE也是自动生成的。

2.4上方菜单有很多小功能,如启动roscore等等

。。。。


3.使用RoboWare实现简单的话题发布和订阅

我学的过程里,主要是先学了ROS官方WIKI里的教程

http://wiki.ros.org/cn/ROS/Tutorials/WritingPublisherSubscriber%28c%2B%2B%29

编写简单的消息发布器和订阅器 (C++)

学习了一下关于节点(node)以及话题(topic)的内容

再学习案例做了一个简单的发布器和订阅器

然后再学了一些关于Twist消息的内容

Twist消息,它的Topic是/cmd_vel,base controler订阅Twist消息来控制电机。

在终端中执行以下指令查看Twist消息的具体内容:

rosmsgshowgeometry_msgs/Twist

一切正常的话,终端会输出以下信息。

其中有linear和angular两个子消息,可以唯一确定机器人的运动状态。

3.1编写一个控制turtlesim的发布器

我们知道,安装ROS后,会有一个自带的turtlesim可以模拟,也就是那只小海龟,通过小海龟,可以完成ROS系统的部分功能,于是我就在turtlesim上试验twist消息的发布和接受。

首先,只编写一个发布器,广播给turtlesim

再RoboWare里创建一个新的package,名字为beginner_tutorials(和ROS教程内相同,不改了)

在src文件夹下创建一个talker.cpp的文件

#include "ros/ros.h"

#include "std_msgs/String.h"

#include

#include

int main(int argc, char **argv)

{

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

  ros::NodeHandle n;

  ros::Publisher chatter_pub = n.advertise("/turtle1/cmd_vel", 1000);

  ros::Rate loop_rate(10);

  int count = 0;

  while (ros::ok())

  {

    geometry_msgs::Twist msg;

    msg.linear.x = 1; // 设置线速度为1m/s,正为前进,负为后退

    msg.angular.z = 1; // 设置角速度为1rad/s,正为左转,负为右转

    chatter_pub.publish(msg);

    ros::spinOnce();

    loop_rate.sleep();

  }

  return 0;

}

代码内重要的部分:

1 ros::Publisher chatter_pub = n.advertise("/turtle1/cmd_vel", 1000);

定义一个publisher类的对象,其中advertise内的参数为(话题,发布的缓冲区大小)

2 geometry_msgs::Twist msg;

定义一个twist类的消息对象

msg.linear.x = 1; // 设置线速度为1m/s,正为前进,负为后退

msg.angular.z = 1; // 设置角速度为1rad/s,正为左转,负为右转

设置对象的参数

 3 chatter_pub.publish(msg);

通过刚才创建的publisher对象发布刚才创建的twist类对象

这样执行完上面的代码,我们就可以将复制好linear和angular参数的twist对象广播出去,广播的topic是/turtle1/cmd_vel,也就是turtlesim会自动订阅的topic

我们来测试一下

点击小锤子,把代码编译一下

首先,启动ros

roscore

然后,启动turtlesim

rosrun turtlesim turtlesim_node

然后,source一下

source ./devel/setup.bash

然后,执行刚刚的cpp文件

rosrun beginner_tutorials talker

然后可以看一下结果

turtlesim,也就是图上的小乌龟,会绕圆循环移动。

发成了发布器的编写,趁热打铁,再写一个订阅器,订阅器其实只需要设置接受的topic即可

首先在src文件夹内创建一个listener的cpp文件

代码如下

#include "ros/ros.h"

#include "std_msgs/String.h"

#include

void chatterCallback(const geometry_msgs::Twist& msg)

{

    ROS_INFO("Start");

    ROS_INFO_STREAM(std::setprecision(2) << std::fixed << "linear.x=("<< msg.linear.x<<" msg.angular.z="<<msg.angular.z);

}

int main(int argc, char **argv)

{


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

  ros::NodeHandle n;

  ros::Subscriber sub = n.subscribe("chatter",1000, chatterCallback);

  ros::spin();

  return 0;

}

这里,我们定义了一个chatter的话题,我们通过这个话题,来接受来自广播的chatter话题内容,然后执行chatterCallback函数

接收到广播后,执行函数chatterCallback

函数的作用是返回收到的twist消息里的参数

这里还需要把talker文件里的话题改一下

#include "ros/ros.h"

#include "std_msgs/String.h"

#include

#include

int main(int argc, char **argv)

{

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

  ros::NodeHandle n;

  ros::Publisher chatter_pub = n.advertise("chatter", 1000);

  ros::Rate loop_rate(10);

  int count = 0;

  while (ros::ok())

  {

    geometry_msgs::Twist msg;

    msg.linear.x = 1; // 设置线速度为1m/s,正为前进,负为后退

    msg.angular.z = 1; // 设置角速度为1rad/s,正为左转,负为右转

    chatter_pub.publish(msg);

    ros::spinOnce();

    loop_rate.sleep();

  }

  return 0;

}


然后,我们测试一下

同样的启动ROS

roscore

source一下

source ./devel/setup.bash

rosrun beginner_tutorials talker

rosrun beginner_tutorials listener

分别在两个terminal内执行talker和listener文件


可以看到返回了twist消息的参数,打印出了“Start”也证明了chatterCall函数被调用了。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,723评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,485评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,998评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,323评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,355评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,079评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,389评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,019评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,519评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,971评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,100评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,738评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,293评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,289评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,517评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,547评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,834评论 2 345

推荐阅读更多精彩内容