ROS系统目前主流语言为C++/Python , Python需要安装vscode, 所以本文使用C++ .编译使用catkin (catkin和rosbuild都能用)

首先创建工作空间(working space)

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace

创建功能包pkg ,

catkin_create_pkg beginner_tutorials std_msgs rospy roscpp

创建源代码目录和源码cpp

mkdir -p ~/catkin_ws/src/beginner_tutorials/src

#include "ros/ros.h"
#include "std_msgs/String.h"#include <sstream>
#include <string>    /*** This tutorial demonstrates simple sending of messages over the ROS system.*/
int main(int argc, char **argv)
{/*** The ros::init() function needs to see argc and argv so that it can perform* any ROS arguments and name remapping that were provided at the command line. For programmatic* remappings you can use a different version of init() which takes remappings* directly, but for most command-line programs, passing argc and argv is the easiest* way to do it.  The third argument to init() is the name of the node.** You must call one of the versions of ros::init() before using any other* part of the ROS system.*/ros::init(argc, argv, "talker");/*** NodeHandle is the main access point to communications with the ROS system.* The first NodeHandle constructed will fully initialize this node, and the last* NodeHandle destructed will close down the node.*/ros::NodeHandle n;/*** The advertise() function is how you tell ROS that you want to* publish on a given topic name. This invokes a call to the ROS* master node, which keeps a registry of who is publishing and who* is subscribing. After this advertise() call is made, the master* node will notify anyone who is trying to subscribe to this topic name,* and they will in turn negotiate a peer-to-peer connection with this* node.  advertise() returns a Publisher object which allows you to* publish messages on that topic through a call to publish().  Once* all copies of the returned Publisher object are destroyed, the topic* will be automatically unadvertised.** The second parameter to advertise() is the size of the message queue* used for publishing messages.  If messages are published more quickly* than we can send them, the number here specifies how many messages to* buffer up before throwing some away.*/ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter", 1000);ros::Rate loop_rate(10);/*** A count of how many messages we have sent. This is used to create* a unique string for each message.*/int count = 1;while (ros::ok()){/*** This is a message object. You stuff it with data, and then publish it.*/std_msgs::String msg;std::stringstream ss;ss << "hello world from talker" << count;msg.data = ss.str();ROS_INFO("%s", msg.data.c_str());/*** The publish() function is how you send messages. The parameter* is the message object. The type of this object must agree with the type* given as a template parameter to the advertise<>() call, as was done* in the constructor above.*/chatter_pub.publish(msg);ros::spinOnce();  //监听一次消息 ,可不加loop_rate.sleep();++count;}return 0;
}
#include "ros/ros.h"
#include "std_msgs/String.h"/*** This tutorial demonstrates simple receipt of messages over the ROS system.*/
void chatterCallback(const std_msgs::String::ConstPtr& msg)
{ROS_INFO("I heard: [%s]", msg->data.c_str());
}int main(int argc, char **argv)
{/*** The ros::init() function needs to see argc and argv so that it can perform* any ROS arguments and name remapping that were provided at the command line. For programmatic* remappings you can use a different version of init() which takes remappings* directly, but for most command-line programs, passing argc and argv is the easiest* way to do it.  The third argument to init() is the name of the node.** You must call one of the versions of ros::init() before using any other* part of the ROS system.*/ros::init(argc, argv, "listener");/*** NodeHandle is the main access point to communications with the ROS system.* The first NodeHandle constructed will fully initialize this node, and the last* NodeHandle destructed will close down the node.*/ros::NodeHandle n;/*** The subscribe() call is how you tell ROS that you want to receive messages* on a given topic.  This invokes a call to the ROS* master node, which keeps a registry of who is publishing and who* is subscribing.  Messages are passed to a callback function, here* called chatterCallback.  subscribe() returns a Subscriber object that you* must hold on to until you want to unsubscribe.  When all copies of the Subscriber* object go out of scope, this callback will automatically be unsubscribed from* this topic.** The second parameter to the subscribe() function is the size of the message* queue.  If messages are arriving faster than they are being processed, this* is the number of messages that will be buffered up before beginning to throw* away the oldest ones.*/ros::Subscriber sub = n.subscribe("chatter", 1000, chatterCallback);/*** ros::spin() will enter a loop, pumping callbacks.  With this version, all* callbacks will be called from within this thread (the main one).  ros::spin()* will exit when Ctrl-C is pressed, or the node is shutdown by the master.*/ros::spin();  //阻塞监听return 0;
}

程序包(~/catkin_ws/src/beginner_tutorials)的 CMakeLists.txt文件,修改如下(最后两行,要不要都行)

返回工作空间编译

catkin_make 

编译之后测试,首先开启ROS系统,同样在工作空间分别开启两个控制台分别启动talker 和 listener

source ./devel/setup.bashrosrun beginner_tutorials talker
source ./devel/setup.bashrosrun beginner_tutorials listener

测试效果如下图,

特殊说明:

1. listener会丢失前面两次或者三次talker数据 ,具体原因未知,如果我系统性学习了ROS再来更新。使用ROS subscribe激光数据,丢失一丢丢貌似问题也不大。

2.ROS  publish之后的数据,如果没有及时被subscribe走,会直接丢失,ROS应该无缓存。

3.代码部分看本文英文注释即可,没有注释的是特定框架。如果需了解更多,参考下面网ROS入门教程-目录 - 创客智造

ROS基础命令学习:

roscore :启动rosmaster
rosrun:启动节点
rosnode list:节点列表
rosnode info :查看具体节点信息
rostopic list:话题信息
rostopic info :查看具体话题信息
rostopic echo :监听话题信息
rpt_graph:可视化计算图
rqt_plot:可视化数据绘图

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

ROS编程入门教程(全过程示例代码)相关推荐

  1. 【一学就会的ROS基础入门教程 】03-1 ROS基础编程:ROS工作空间的创建、话题topic的发布与接收、以及话题消息的自定义使用

    [一学就会的ROS基础入门教程 ]03-1 ROS基础编程:ROS工作空间的创建.话题topic的发布与接收.以及话题消息的自定义使用 文前白话 1.创建工作空间与功能包 关于工作空间的介绍 创建开发 ...

  2. Flash:Flash动画设计软件界面的简介、Flash AS 3.0代码编程入门教程之详细攻略

    Flash:Flash动画设计软件界面的简介.Flash AS 3.0代码编程入门教程之详细攻略 目录 Flash动画设计软件界面的简介 快捷键 菜单栏 下边工具栏 右边工具栏 工具箱 Flash A ...

  3. ROS入门21讲 | ROS机器人入门教程 【简明笔记】

    古月·ROS入门21讲 | 一学就会的ROS机器人入门教程 文章目录 ROS核心概念 ROS命令行 工作空间与功能包 订阅与发布 发布者 Publisher 订阅者 Subscriber 话题消息的自 ...

  4. TZC Python编程入门教程 ————题解

    本博客原文地址:Python编程入门教程(以在线评测平台为载体) - 暴力都不会的蒟蒻 - 博客园,原文体验更佳 如果你是一名浙江2020级及以后的高中生要学习Python,抑或是一位科学工作者要学习 ...

  5. JAVA入门Hwork,HBase Java编程入门教程

    一款优秀的数据库除了会提供客户端,还会提供编程语言接口,HBase 也不例外.HBase 除了支持使用 Shell 客户端来操作(请看<HBase Shell及其常用命令>),还提供了多种 ...

  6. python快速编程入门教程-终于懂得python快速编程入门教程

    为了提高模块加载的速度,每个模块都会在__pycache__文件夹中放置该模块的预编译模块,命名为module.version.pyc,version是模块的预编译版本编码,一般都包含Python的版 ...

  7. 《Delphi XE6 android 编程入门教程》推荐

    近5.6年已经没有看见关于delphi的新技术的书出来了(看来在国内delphi的使用量确实很低了), 高勇同学最近出了一本<Delphi XE6 android 编程入门教程>,上周刚拿 ...

  8. 怎么查看电脑有没有python_python人工智能爬虫系列:怎么查看python版本_电脑计算机编程入门教程自学...

    本文由简码编程原创,保留所有版权,转载请注明出处. 本python人工智能爬虫系列教程基于Python3.0版本, 将python结合windows桌面开发工具aardio一起做可视化的开发, 用py ...

  9. cala开发编程入门Hello World示例

    Scala开发编程入门Hello World示例 1.下载Scala http://www.scala-lang.org/downloads Windows scala-2.9.1.final.zip ...

最新文章

  1. 中随机打乱序列的函数_提前准备,方能“随机”应对,人生不悔
  2. 如何当好独立CIO(1)
  3. golang goroutine协程运行机制及使用详解
  4. Multi thread: std::promise
  5. nlp-tutorial代码注释2-1,CNN用于句子分类简介
  6. 数据结构基础--线性表
  7. python设置二维列表_Python设置为列表
  8. DAX/PowerBI系列 - 参数表(Parameter Table) - 大客户分析(Top N)
  9. Xcode工程添加第三方文件的详细分析 Create folder references for any added folders
  10. 自动化测试方案_2第二章、自动化测试是什么?(What)
  11. The process cannot access the file '' because it is being used by another process.....
  12. 非递归获取二叉树中叶子结点的个数
  13. 矩阵连乘问题算法思想_动态规划之矩阵连乘问题
  14. 两个特别的10分钟临时邮箱、免费
  15. vscode如何设置大小写转换的快捷键
  16. 智慧监狱(所)设计方案
  17. PDF文件加密解密-文件设置密码
  18. 初探TweenMax 动画
  19. 【Web前端】html+css+javascript
  20. SQLSERVER格式化日期时间

热门文章

  1. MySQL数据库文件转化为Word表格做论文/报告
  2. python小_Python小课——学习笔记(3)
  3. 云计算介绍 tcp/ip协议介绍及配置
  4. 在公共服务器上搭建python虚拟环境
  5. 中国数学家黄金一代-北大数学专业2000级
  6. 数学与造芯片_“芯片砸钱不行,得砸数学家”!8本书助你成为数学家
  7. 反恐精英代码_CS:GO和军团要塞2源代码泄漏,Valve:稳住
  8. python 安卓模拟点击_python模拟android屏幕高频点击工具
  9. 公共基础知识:诸子百家之道家
  10. 2-2 学生成绩链表处理 (20 分)