ROS 学习笔记(一)发布者与订阅者

ROS 学习笔记(一)发布者与订阅者

一 创建发布节点

1新建工作空间

#先切回主目录
cd ~/

#新建工作空间文件夹
mkdir catkin_ws

#在catkin_ws目录下新建src文件夹
cd catkin_ws
mkdir src

#初始化src目录,生成的CMakeLists.txt为功能包编译配置
cd src
catkin_init_workspace

#切回catkin_ws目录,对该工作空间执行一次编译
cd ~/catkin_ws
catkin_make

#环境变量配置,使新建的catkin_ws工作空间可用
source devel/setup.bash
#在catkin_ws/src/下创建取名为beginner_tutorials的功能包,
cd ~/catkin_ws/src/
catkin_create_pkg beginner_tutorials

#切换到beginner_tutorials目录
#新建src文件夹
roscd beginner_tutorials
mkdir -p src

2 代码

#在src下新建talker.cpp文件
#复制以下代码
#ros/ros.h 是ros系统必需的一个头文件,其中包含了大部分公共组件;
#std_msgs/String.h 是一个基于std_msgs包的头文件,包含字符串相关组件;
#include "ros/ros.h"
#include "std_msgs/String.h"
#include <sstream>
int main(int argc, char **argv)
{
#ros初始化,指定节点名称,节点名称在系统中必须唯一且不能含有符号”/”
  ros::init(argc, argv, "talker");
  #在节点中创建一个句柄,创建第一个句柄的时候将执行节点的初始化
  ros::NodeHandle n;
  #在chatter话题上创建一个std_msgs/String类型的消息,队列深度1000
  ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter", 1000);
  #循环频率设置为10Hz
  ros::Rate loop_rate(10);
  int count = 0;
  while (ros::ok())
  {
#制作一个字符串数据
    std_msgs::String msg;
    std::stringstream ss;
    ss << "hello world " << count;
msg.data = ss.str();
#打印消息
ROS_INFO("%s", msg.data.c_str());
#发布消息
chatter_pub.publish(msg);
#回调函数
ros::spinOnce();
#循环延时
    loop_rate.sleep();
    ++count;
  }
  return 0;
}

二 创建订阅节点

1 代码
#include "ros/ros.h"
#include "std_msgs/String.h"
//回调函数,当一个新消息出现在chatter话题中时触发
void chatterCallback(const std_msgs::String::ConstPtr& msg)
{
  ROS_INFO("I heard: [%s]", msg->data.c_str());
}

int main(int argc, char **argv)
{
  ros::init(argc, argv, "listener");
  ros::NodeHandle n;
  //订阅chatter话题,每当出现新消息调用回调函数
  ros::Subscriber sub = n.subscribe("chatter", 1000, chatterCallback);
  //进入等待回调循环,不会占用很多CPU资源
  ros::spin();
  return 0;
}

三 修改CMakeLists.txt文件

#在find_package()处添加依赖包;
find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs genmsg)
#在## Generate messages in the 'msg' folder处添加信息依赖文件
generate_messages(
   DEPENDENCIES std_msgs
)
#在include_directories处添加头文件目录
include_directories(
#include
 ${catkin_INCLUDE_DIRS}
)
#在文件末尾添加依赖环境
add_executable(talker src/talker.cpp)
target_link_libraries(talker ${catkin_LIBRARIES})
add_dependencies(talker beginner_tutorials_generate_messages_cpp)
add_executable(listener src/listener.cpp)
target_link_libraries(listener ${catkin_LIBRARIES})
add_dependencies(listener beginner_tutorials_generate_messages_cpp)

四 编译调试

#切换至工作空间
cd ~/catkin_ws
#编译所有项目
catkin make
#启动ros核心
roscore
#新开一个终端,source工作空间
source ~/catkin_ws/devel/setup.bash
#运行发布者程序
rosrun beginner_tutorials talker
#新开一个终端,source工作空间
source ~/catkin_ws/devel/setup.bash
#运行订阅者程序
rosrun 

程序效果如下:

发布者与订阅者

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值