ROS-节点-Topic
前言:本部分主要介绍ros一些基础功能的使用,包括创建和编译工作空间、功能包、节点以及话题。
第一种方式:使用roboware studio软件操作
1.1 创建工作空间

回车然后点击保存。
1.2 新建功能包
功能包名为:chapter2_tutorials std_msgs roscpp
注:chapter2_tutorials是功能包名,std_msgs 和roscpp是依赖。

1.3 新建源文件
在chapter2_tutorials包下的src中新建两个.cpp文件,分别命名为example1_a.cpp和example1_b.cpp。
注意新建cpp文件时选择第二项“加入到新的可执行文件中”,这样roboware就会自动修改cmake文件了。

example1_a.cpp的内容:
#include "ros/ros.h" //包含了使用ros节点所有必要的文件
#include "std_msgs/String.h" //包含了要使用的消息类型
#include <sstream>
int main(int argc, char *argv[])
{
ros::init(argc, argv, "example1_a"); //初始化节点并设置其名称,该名称是唯一的
ros::NodeHandle n; //进程处理程序
ros::Publisher chatter_pub= n.advertise<std_msgs::String>(); //将该节点设置为发布者,话题为message,消息类型为std_msgs::String,缓存1000条信息
ros::Rate loop_rate(); //发送频率为10HZ
while (ros::ok()) //判断是否有节点运行
{
std_msgs::String msg; //创建消息变量msg
std::stringstream ss; //创建一个字符串变量ss
ss<< "I am the example1_a node"; //字符串ss的内容
msg.data=ss.str(); //给msg赋值
chatter_pub.publish(msg); //发布者发送消息
ros::spinOnce(); //运行主循环
loop_rate.sleep(); //按照10HZDE频率将程序挂起
}
;
}
example1_b.cpp的内容:
#include "ros/ros.h"
#include "std_msgs/String.h"
void chatterCallback(const std_msgs::String::ConstPtr& msg) //回调函数,当收到消息时调用此函数
{
ROS_INFO("I [%s]",msg->data.c_str()); //输出信息,[%s]这里是小写s
}
int main(int argc, char *argv[])
{
/* code for main function */
ros::init(argc, argv, "example1_b");
ros::NodeHandle n;
ros::Subscriber sub =n.subscribe(,chatterCallback); //创建一个订阅者,处理信息的回调函数为chatterCallback
ros::spin();
;
}
1.4 编译

1.5 运行
ctrl+` 呼出控制台;
添加源
echo "source ~/dev/catkin_ws/devel/setup.bash" >> ~/.bashrcsource devel/setup.bash
注:绿色修改为自己工作空间的位置。这句话也可以在home目录下ctrl+h显示隐藏文件,打开.bashrc,在最后一行找到或添加。
启动节点管理器
roscore
运行节点
rosrun chapter2_tutorials example1_a rosrun chapter2_tutorials example1_b
-----------------------------------------------
输出如下:

----------------------------------------------------------------------------------------------------------------------------------------------------------------
第二种方式:使用命令行编写
2.1 创建和编译工作空间
2.1.1 查看正在使用的工作空间:
echo $ROS_PACKAGE_PATH
-----------------------------------------------
显示如下:
/opt/ros/kinetic/share
2.1.2 创建工作空间文件夹:
mkdir -p ~/dev/catkin_ws/src
-----------------------------------------------
其中:
mkdir是新建文件夹命令,-p是如果没有路径上的文件夹则新建文件夹,~是根目录。
2.1.3 初始化工作空间:
cd ~/dev/catkin_ws/src catkin_init_workspace
-----------------------------------------------
显示如下:
Creating symlink "/home/cdq/dev/catkin_ws/src/CMakeLists.txt" pointing to "/opt/ros/kinetic/share/catkin/cmake/toplevel.cmake"
2.1.4 编译工作空间
cd ~/dev/catkin_ws catkin_make
-----------------------------------------------
最后显示如下:
####
#### Running command: "make -j4 -l4" in "/home/cdq/dev/catkin_ws/build"
####
2.1.5 加载setup.bash文件
source devel/setup.bash
2.2 创建和编译功能包
2.2.1 创建新功能包
cd ~/dev/catkin_ws/src catkin_create_pkg chapter2_tutorials std_msgs roscpp
-----------------------------------------------
显示如下:
Created file chapter2_tutorials/CMakeLists.txt
Created file chapter2_tutorials/package.xml
Created folder chapter2_tutorials/include/chapter2_tutorials
Created folder chapter2_tutorials/src
Successfully created files in /home/cdq/dev/catkin_ws/src/chapter2_tutorials. Please adjust the values in package.xml.
-----------------------------------------------
其中:
catkin_create_pkg 是创建新功能包命令,chapter2_tutorials是功能包名称,std_msgs和roscpp是依赖项。
2.2.2 编译功能包
cd ~/dev/catkin_ws/ catkin_make
-----------------------------------------------
最后显示如下:
####
#### Running command: "make -j4 -l4" in "/home/cdq/dev/catkin_ws/build"
####
2.3 创建和编译节点
2.3.1 切换路径
roscd chapter2_tutorials/src
-----------------------------------------------
辨析:roscd和cd
roscd 直接加包名 例:roscd roscpp;
cd 加完整路径 例:cd /opt/ros/kinetic/share/roscpp
2.3.2 创建两个.cpp文件
在上一步的路径上建立(我是手动建立的)两个文件分别命名为example1_a.cpp和example1_b.cpp;
example1_a.cpp的内容:
#include "ros/ros.h" //包含了使用ros节点所有必要的文件
#include "std_msgs/String.h" //包含了要使用的消息类型
#include <sstream>
int main(int argc, char *argv[])
{
ros::init(argc, argv, "example1_a"); //初始化节点并设置其名称,该名称是唯一的
ros::NodeHandle n; //进程处理程序
ros::Publisher chatter_pub= n.advertise<std_msgs::String>(); //将该节点设置为发布者,话题为message,消息类型为std_msgs::String,缓存1000条信息
ros::Rate loop_rate(); //发送频率为10HZ
while (ros::ok()) //判断是否有节点运行
{
std_msgs::String msg; //创建消息变量msg
std::stringstream ss; //创建一个字符串变量ss
ss<< "I am the example1_a node"; //字符串ss的内容
msg.data=ss.str(); //给msg赋值
chatter_pub.publish(msg); //发布者发送消息
ros::spinOnce(); //运行主循环
loop_rate.sleep(); //按照10HZDE频率将程序挂起
}
;
}
example1_b.cpp的内容:
#include "ros/ros.h"
#include "std_msgs/String.h"
void chatterCallback(const std_msgs::String::ConstPtr& msg) //回调函数,当收到消息时调用此函数
{
ROS_INFO("I [%s]",msg->data.c_str()); //输出信息,[%s]这里是小写s
}
int main(int argc, char *argv[])
{
/* code for main function */
ros::init(argc, argv, "example1_b");
ros::NodeHandle n;
ros::Subscriber sub =n.subscribe(,chatterCallback); //创建一个订阅者,处理信息的回调函数为chatterCallback
ros::spin();
;
}
2.3.3 修改CMakeLists.txt文件
打开chapter2_tutorials包下的CMakeLists.txt文件,将以下命令行复制到文件的末尾处:
注:此处有坑,可执行文件的名字(example1_a1 )不能和节点原文件名字(example1_a.cpp)相同,不知道为什么。但节点原文件名字和文件内部的节点名字可以相同。
2.3.4 编译文件
使用catkin_make工具来编译包和全部的节点:
cd ~/dev/vstkin_ws/ catkin_make --pkg chapter2_tutorials
2.4 运行节点
2.4.1 启动节点管理器
roscore
2.4.2 运行节点
rosrun chapter2_tutorials example1_a1 rosrun chapter2_tutorials example1_b1
注:若节点无法运行,每次开启节点前先在 ~/dev/catkin_ws/ 目录下执行命令行:source devel/setup.bash,或者一次性解决 ,输入指令 echo "source ~/dev/catkin_ws/devel/setup.bash" >> ~/.bashrc,红色部分为自己工作空间的名字。
-----------------------------------------------
输出如下:

-END-
ROS-节点-Topic的更多相关文章
- ROS 笔记 程序包/节点/topic
官方教程: wiki.ros.org/cn/ROS/tutorials 程序包打创建于编译 创建程序包 在工作空间的src底下,输入如下命令: $ catkin_create_pkg 要创建的包名 依 ...
- 使用ROS节点(五)
先启动roscore roscore 为了获取节点信息,可以使用rosnode命令 $ rosnode 获取得一个可接受参数清单
- ROS学习(七)—— 理解ROS Topic
一.准备工作 1.打开roscore roscore 2.turtlesim 打开一个turtulesim节点 rosrun turtlesim turtlesim_node 3.turtle key ...
- ROS学习(六)—— 理解ROS节点
一.准备工作 下载一个轻量级的模拟器 sudo apt-get install ros-kinetic-ros-tutorials 二.图概念的理解 1.Nodes:一个节点就是一个可执行文件,用来与 ...
- ROS学习笔记三(理解ROS节点)
要求已经在Linux系统中安装一个学习用的ros软件包例子: sudo apt-get install ros-indigo-ros-tutorials ROS图形概念概述 nodes:节点,一个节点 ...
- ROS-4 : ROS节点和主题
依照<ROS-3 : Catkin工作空间和ROS功能包>,创建catkin工作空间,并在起src下创建功能包ros_demo_pkg,依赖项为roscpp.std_msgs.action ...
- 通过ros节点发布Twist Messages控制机器人--10
原创博客:转载请表明出处:http://www.cnblogs.com/zxouxuewei/ 1.到目前为止,我们已经从命令行移动机器人,但大多数时间你将依靠一个ros节点发布适当的Twist消息. ...
- (五)ROS节点
一. 理解ROS 节点: ROS的节点: 可以说是一个可运行的程序.当然这个程序可不简单.因为它可以接受来自ROS网络上其他可运行程序的输出信息,也可以发送信息给ROS网络,被其他 ROS 可运行程序 ...
- ROS节点理解--5
理解 ROS节点(原创博文,转载请标明出处--周学伟http://www.cnblogs.com/zxouxuewei/) Description: 本教程主要介绍 ROS 图(graph)概念 并讨 ...
- ROS Learning-007 beginner_Tutorials ROS节点
ROS Indigo beginner_Tutorials-06 ROS节点 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14.04.4 LT ...
随机推荐
- PHP 设计模式--序言
面向对象是PHP5之后增加的功能,是PHP走向现代语言的一个标志. 在过程式设计时代,PHP以学习成本低.入门快的特点赢得很多WEB开发者的青睐,但同时也限制了PHP的发展. 借鉴Java和C++之后 ...
- resize监听div的size变化
具体实现分两类, ie9-10 默认支持div的resize事件,可以直接通过div.attachEvent('onresize', handler);的方式实现 其它浏览器 通过在div中添加一个内 ...
- Xcode 插件因为UUID原因不能使用解决办法
Xcode 经常因为一些原因不能使用,需要重新在 ~/Library/Application Support/Developer/Shared/Xcode/Plug-ins目录下对每一个插件包下的p ...
- 二叉堆 及 大根堆的python实现
Python 二叉堆(binary heap) 二叉堆是一种特殊的堆,二叉堆是完全二叉树或者是近似完全二叉树.二叉堆满足堆特性:父节点的键值总是保持固定的序关系于任何一个子节点的键值,且每个节点的左子 ...
- Linux之强大的selinux
简单点说,SELinux就是用来加强系统安全性的.它给一些特定程序(这些程序也在不断增加)做了一个沙箱,它将文件打上了一个安全标签,这些标签属于不同的类,也只能执行特定的操作,也就是规定了某个应用程序 ...
- AtCoder ABC 085C/D
C - Otoshidama 传送门:https://abc085.contest.atcoder.jp/tasks/abc085_c 有面值为10000.5000.1000(YEN)的纸币.试用N张 ...
- JavaSE 学习笔记之Import 导入(十二)
Import - 导入:类名称变长,写起来很麻烦.为了简化,使用了一个关键字:import,可以使用这个关键字导入指定包中的类.记住:实际开发时,到的哪个类就导入哪个类,不建议使用*. import ...
- 美团 CodeM 复赛」城市网络
美团 CodeM 复赛」城市网络 内存限制:64 MiB时间限制:500 ms标准输入输出 题目描述 有一个树状的城市网络(即 nnn 个城市由 n−1n-1n−1 条道路连接的连通图),首都为 11 ...
- 用R语言 画条形图(基于ggplot2包)
1.用qplot(x,data=data,geom.=”bar”,weight=y)+scale_y_continuous("y")画出y关于x的条形. 图中提示binwidth这 ...
- Linux Container测试之block IO
简介 Linux Container是OS级别的虚拟化方案,它相比于一般的虚拟机没有了硬件模拟以及指令模拟,相比传统虚拟机具有更低的开销,因此可以应用到私有云之中.LXC目前的版本支持对memor ...