ROS官网教程

文章目录

  • 1 创建ROS工作空间
  • 2 创建ROS软件包
  • 3 一个发布/订阅示例
  • 4 构建节点
  • 5 运行示例

1 创建ROS工作空间

  • 创建ROS工作空间:
$ mkdir -p ~/your_dir/src
$ cd ~/your_dir/
$ catkin_make

创建成功:

$ /work/ros$ ls -a
.  ..  build  .catkin_workspace  devel  src
  • 将当前工作空间设置在环境的最顶层:
echo "source /home/you/your_dir/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc

查看ROS_PACKAGE_PATH环境变量是否包含你当前的工作空间目录:

echo $ROS_PACKAGE_PATH

显示如下,路径用:隔开

/home/you/your_dir/src:/opt/ros/melodic/share

2 创建ROS软件包

  • 创建ROS软件包
    命令:catkin_create_pkg <package_name> [depend1] [depend2] [depend3]...
#切换至工作空间中的源文件空间目录
cd /home/you/your_dir/src#创建软件包
catkin_create_pkg pub_sub_eg roscpp std_msgs
  • 正确的目录结构如下:
your_dir/                 -- 工作空间build/.catkin_workspacedevel/src/                   -- 源文件空间CMakeLists.txt       -- catkin自动创建的CMake 文件pub_sub_eg/           -- 软件包CMakeLists.txt     -- pub_sub_eg的CMakeLists.txtpackage.xml        -- pub_sub_eg的文件、依赖清单...其他包/CMakeLists.txtpackage.xml

3 一个发布/订阅示例

  • 发布者
//pub_eg.cpp
#include "ros/ros.h"
#include "std_msgs/String.h"#include <sstream>int main(int argc, char **argv)
{ros::init(argc, argv, "talker");ros::NodeHandle n;ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter", 1000);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;
}
  • 订阅
//sub_eg.cpp
#include "ros/ros.h"
#include "std_msgs/String.h"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;ros::Subscriber sub = n.subscribe("chatter", 1000, chatterCallback);ros::spin();return 0;
}
  • 修改CMakeLists
    将以下内容添加到/home/you/your_dir/src/pub_sub_eg/CMakeLists.txt文件的最后
add_executable(talker src/pub_eg.cpp)
target_link_libraries(talker ${catkin_LIBRARIES})add_executable(listener src/sub_eg.cpp)
target_link_libraries(listener ${catkin_LIBRARIES})

4 构建节点

  • 指令:
cd /home/you/your_dir
catkin_make
  • 成功:
    如下图所示,并在/home/you/your_dir/devel/lib/pub_sub_eg目录下生成两个可执行文件listenertalker

5 运行示例

  • 运行roscore
    新开终端,执行roscore,成功界面如下图,不是卡住了,这个终端被它占用了
  • 运行发布者(talker)节点
    命令:rosrun <package_name> <node_name>
:~$ rosrun pub_sub_eg talker
[ INFO] [1632380887.305613762]: hello world 0
[ INFO] [1632380887.406156027]: hello world 1
[ INFO] [1632380887.506550027]: hello world 2
[ INFO] [1632380887.605821851]: hello world 3
[ INFO] [1632380887.705849630]: hello world 4
[ INFO] [1632380887.806313501]: hello world 5
[ INFO] [1632380887.906271487]: hello world 6
[ INFO] [1632380888.006119049]: hello world 7
  • 运行订阅者(listener)节点
:~$ rosrun pub_sub_eg listener
[ INFO] [1632381058.295723795]: I heard: [hello world 3]
[ INFO] [1632381058.395464944]: I heard: [hello world 4]
[ INFO] [1632381058.494946567]: I heard: [hello world 5]
[ INFO] [1632381058.595786883]: I heard: [hello world 6]
[ INFO] [1632381058.695049193]: I heard: [hello world 7]

ROS基本操作(一):发布与订阅相关推荐

  1. ROS学习笔记九:用C++编写ROS发布与订阅

    ROS学习笔记九:用C++编写ROS发布与订阅 本节主要介绍如何用C++编写一个简单的ROS发布与订阅. 编写发布节点 在之前创建的例子beginner_tutorials软件包中,在其目录下的src ...

  2. ROS发布/订阅Float64MultiArray数组类消息(C++和Python相互发布和订阅)

    在terminal用指令发布一个Float64MultiArray消息,这个在调试时特别好用,注意格式,最后一行的data: [1,2,3]中冒号和后面的中括号间要有空格 rostopic pub / ...

  3. ros订阅话题python_ROS之话题的发布与订阅

    消息: msg文件就是一个描述ROS中所使用消息类型的简单文本.它们会被用来生成不同语言的源代码. 注意,在构建的时候,我们只需要"message_generation".然而,在 ...

  4. ROS入门学习笔记|话题发布与订阅

    文章目录 一.工作空间 1.创建一个名称为sor_ws的工作空间 2.编译工作空间 3.创建功能包 二.自定义话题消息 1.定义msg文件 2.配置package.xml和CMakeLists.txt ...

  5. ROS踩坑笔记2-基于海曼红外测温仪的消息发布与订阅

    系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮 ...

  6. ROS通信机制——发布/订阅者模型

    目录 发布/订阅者模型 (一)发布者 (二)订阅者 (三)综合 参考资料 ROS (Robot Operating System),即机器人操作系统,是为了加快机器人的开发效率,提高机器人软件代码的复 ...

  7. ROS在同一节点同时订阅和发布消息

    ROS版本: ROS Kinetic 操作系统:Ubuntu16.04 LTS 方法一,采用类的方法 参考网站 https://blog.csdn.net/ethan_guo/article/deta ...

  8. 【cartographer_ros】四: 发布和订阅里程计odom信息

    上一节介绍了激光雷达Scan传感数据的订阅和发布. 本节会介绍里程计Odom数据的发布和订阅.里程计在cartographer中主要用于前端位置预估和后端优化. 官方文档: http://wiki.r ...

  9. ROS1中使用Python发布和订阅主题

    ROS是开发机器人应用的极具生产力的工具,最常用于概念开发.算法验证.在算法开发工具中,Python是一个极佳的选择,因为Python的工具包十分丰富,脚本语言的特性也使得无需编译,算法修改方便. 本 ...

  10. 面试被问到Redis实现发布与订阅,手摸手教

    简介 Redis发布与发布功能(Pub/Sub)是基于事件座位基本的通信机制,是目前应用比较普遍的通信模型,它的目的主要是解除消息的发布者与订阅者之间的耦合关系. Redis作为消息发布和订阅之间的服 ...

最新文章

  1. 使用SAX解析XML封装实体Bean
  2. python变量定义问题_python 定义n个变量方法 (变量声明自动化)
  3. 计算机应用基础理论,计算机应用基础理论A卷.doc
  4. C语言实现单例模式,以及使用内存屏障的性能优化方案
  5. 【386天】跃迁之路——程序员高效学习方法论探索系列(实验阶段143-2018.02.26)...
  6. 坦克大战python_基于Python的坦克大战小游戏
  7. win10网络共享计算机名,手把手教你win10一键共享局域网的具体解决步骤
  8. 常见耳机品牌简介及鉴赏
  9. 月薪过万的java程序员需要什么能力_什么样能力的Java程序员月薪过万
  10. Word2010撤销按钮失效,Ctrl+Z失效解决办法
  11. Visual Tracking via Adaptive Structural Local Sparse Appearance Model
  12. docer kafka安装
  13. python搭建微信小程序卖货要收费用吗_开发一个微信小程序需要多少钱?
  14. Cesi运行报错AttributeError: can‘t set attribute
  15. Hive面试基本须知
  16. 如何拍背景虚化的照片_如何拍摄出突出主体(背景虚化)的照片
  17. 再看bit、kbit、bit/s,byte、kbyte、byte/s
  18. 对软件工程的认识和个人职业生涯规划
  19. 推荐一款离线MarkDown编辑工具Haroopad
  20. 服务条款和隐私_数据中心设备和条款| 第1部分

热门文章

  1. 【慢雾出品】EOS超级节点安全执行指南
  2. RFID 冷库仓库管理解决方案
  3. FX3U PLC控制器资料 主控芯片:STM32F103VCT6
  4. 同步电机matlab设计,同步发电机matlab仿真 同步电机模型的MATLAB仿真毕业设计.doc...
  5. 梦境画成现实,Meta最新AI图像生成工具
  6. vim中快速产生列项递增数列,vim生成序号
  7. LinX 启动 RabbitMQ
  8. 这些小工具让你的Android 开发更高效
  9. 论文笔记 -SNIP 基于灵敏度的单次网络剪枝
  10. HTML点击元素页面回到顶部,博客园页面添加返回顶部 TOP 按钮