ROS话题通信C++(附launch启动方式)

ros,话题,通信,c++,launch,启动,方式 · 浏览次数 : 146

小编点评

**步骤 1:创建工作空间配置** ```c++ roscpp rospy std_msgssrc/topic/CMakeLists.txtsrc/topic/src/talker.cpp ``` **步骤 2:初始化 ROS 节点** ```c++ ros::init(argc,argv,\"talker\"); ``` **步骤 3:实例化发布者对象** ```c++ ros::Publisher pub = nh.advertise<std_msgs::String>("chatter",10); ``` **步骤 4:组织被发布的数据并编写逻辑发布数据** ```c++ std_msgs::String msg; std::string msg_front = "Hello 你好!\"; int count = 0; ros::Rate r(1); while (ros::ok()) { std::stringstream ss; ss << msg_front << count; msg.data = ss.str(); pub.publish(msg); ROS_INFO("发送的消息:%s", msg.data.c_str()); r.sleep(); count++; } ``` **步骤 5:实例化订阅者对象并处理订阅的消息** ```c++ ros::Subscriber sub = nh.subscribe<std_msgs::String>("chatter",10,doMsg); ``` **步骤 6:设置循环调用回调函数** ```c++ ros::spin(); ``` **步骤 7:启动工作空间和 ROS 节点** ``` # 启动指令 1 roscore2 # 进入 topic_ws 的路径 cd topic_ws # 执行 setup.bash 文件 source ./devel/setup.bash4 # 启动 topic talker rosrun topic talker5 # 进入 topic_ws 的路径 cd topic_ws # 执行 setup.bash 文件 source ./devel/setup.bash7 # 启动 listener rosrun topic listener use_launchsrc/topic/launch/start_topic.launch<launch> ```

正文

博客地址:https://www.cnblogs.com/zylyehuo/

ROS话题通信C++(附launch启动方式)

创建工作空间

mkdir -p topic_ws/src
cd topic_ws
catkin_make

设置环境变量

source ./devel/setup.bash
source $ROS_PACKAGE_PATH

效果图

未使用launch

使用launch

结构总览

友情提醒

每一步编辑完,执行一下 Ctrl+Shift+B进行编译,及时排查错误

准备工作

第一步:创建工作空间

配置:roscpp rospy std_msgs

src/topic/CMakeLists.txt

src/topic/src/talker.cpp

// 1.包含头文件 
#include "ros/ros.h"
#include "std_msgs/String.h" //普通文本类型的消息
#include <sstream>

int main(int argc, char  *argv[])
{   
    //设置编码
    setlocale(LC_ALL,"");

    //2.初始化 ROS 节点:命名(唯一)
    // 参数1和参数2 后期为节点传值会使用
    // 参数3 是节点名称,是一个标识符,需要保证运行后,在 ROS 网络拓扑中唯一
    ros::init(argc,argv,"talker");
    //3.实例化 ROS 句柄
    ros::NodeHandle nh;//该类封装了 ROS 中的一些常用功能

    //4.实例化 发布者 对象
    //泛型: 发布的消息类型
    //参数1: 要发布到的话题
    //参数2: 队列中最大保存的消息数,超出此阀值时,先进的先销毁(时间早的先销毁)
    ros::Publisher pub = nh.advertise<std_msgs::String>("chatter",10);

    //5.组织被发布的数据,并编写逻辑发布数据
    //数据(动态组织)
    std_msgs::String msg;
    std::string msg_front = "Hello 你好!"; //消息前缀
    int count = 0; //消息计数器

    //逻辑(一秒10次)
    ros::Rate r(1);

    //节点
    while (ros::ok())
    {
        //使用 stringstream 拼接字符串与编号
        std::stringstream ss;
        ss << msg_front << count;
        msg.data = ss.str();
        //发布消息
        pub.publish(msg);
        //加入调试,打印发送的消息
        ROS_INFO("发送的消息:%s",msg.data.c_str());

        //根据前面制定的发送贫频率自动休眠 休眠时间 = 1/频率;
        r.sleep();
        count++;//循环结束前,让 count 自增
        //暂无应用
        ros::spinOnce();
    }


    return 0;
}

src/topic/src/listener.cpp

// 1.包含头文件 
#include "ros/ros.h"
#include "std_msgs/String.h"

void doMsg(const std_msgs::String::ConstPtr& msg_p){
    ROS_INFO("接收的消息:%s",msg_p->data.c_str());
    // ROS_INFO("我听见:%s",(*msg_p).data.c_str());
}
int main(int argc, char  *argv[])
{
    setlocale(LC_ALL,"");
    //2.初始化 ROS 节点:命名(唯一)
    ros::init(argc,argv,"listener");
    //3.实例化 ROS 句柄
    ros::NodeHandle nh;

    //4.实例化 订阅者 对象
    ros::Subscriber sub = nh.subscribe<std_msgs::String>("chatter",10,doMsg);
    //5.处理订阅的消息(回调函数)

    //6.设置循环调用回调函数
    ros::spin();//循环读取接收的数据,并调用回调函数处理

    return 0;
}

启动指令

1、第一个终端执行 roscore

2、第二个终端进入topic_ws的路径

3、执行 source ./devel/setup.bash

4、执行 rosrun topic talker

5、第三个终端进入topic_ws的路径

6、执行 source ./devel/setup.bash

7、执行 rosrun topic listener

使用launch

src/topic/launch/start_topic.launch

<launch>
    <node pkg="topic" type="talker" name="talker" output="screen"/>
    <node pkg="topic" type="listener" name="listener" output="screen"/>
</launch>

启动指令

1、roscore

2、进入topic_ws的路径

3、source ./devel/setup.bash

4、roslaunch topic start_topic.launch

made by zyl

与ROS话题通信C++(附launch启动方式)相似的内容:

ROS话题通信C++(附launch启动方式)

博客地址:https://www.cnblogs.com/zylyehuo/ ROS话题通信C++(附launch启动方式) 创建工作空间 mkdir -p topic_ws/src cd topic_ws catkin_make 设置环境变量 source ./devel/setup.bash s

一键云部署:ROS的Terraform托管服务助你轻松上线2048经典游戏

在现代云计算环境中,自动化部署已经成为一项重要的任务。Terraform,作为HashiCorp公司的一款开源工具,以其强大的基础设施即代码(IaC)能力,使得我们能够轻松管理和部署各种云资源。 阿里云资源编排服务(Resource Orchestration Service,ROS)是一种简单易用

ROS服务通信(C++)

博客地址:https://www.cnblogs.com/zylyehuo/ 创建工作空间 mkdir -p catkin_ws/src cd catkin_ws catkin_make 设置环境变量 source ./devel/setup.bash source $ROS_PACKAGE_PAT

自动旋转ROS小车(rviz+urdf+xacro)(附加python操作键盘控制小车运动)

博客地址:https://www.cnblogs.com/zylyehuo/ 成果图 STEP1 创建工作空间 mkdir -p car_ws/src cd car_ws catkin_make STEP2 在vscode中准备需要的文件夹 右键src,点击Create Catkin Package

用C++编写一个简单的发布者和订阅者

摘要:节点(Node)是通过 ROS 图进行通信的可执行进程。 本文分享自华为云社区《编写一个简单的发布者和订阅者》,作者: MAVER1CK 。 @[toc] 参考官方文档:Writing a simple publisher and subscriber (C++) 背景 节点(Node)是通过

代价地图组成(多层叠加)

博客地址:https://www.cnblogs.com/zylyehuo/ 参考链接 Autolabor-ROS机器人入门课程《ROS理论与实践》 1、静态层 SLAM绘制的静态地图 2、障碍物层 导航中传感器感知的障碍物 3、膨胀层 为了避免碰撞而设置的安全区域 4、自定义层 根据业务自设置的地

map_server 中障碍物计算规则

> 博客地址:https://www.cnblogs.com/zylyehuo/ > 参考链接 > > [Autolabor-ROS机器人入门课程《ROS理论与实践》](http://www.autolabor.com.cn/book/ROSTutorials/di-6-zhang-ji-qi-re

《苏丹的复仇》携手华为HMS生态,实现用户、收入双增长

中国出海中东和北非地区的策略类手游《苏丹的复仇》(Revenge of Sultans,ROS)和华为HMS生态深度合作,为本地用户带来创新游戏体验,成为当地广受欢迎的游戏之一,下载量居应用市场前列。2023年5月10日,在阿联酋迪拜举办的HUAWEI P60系列及旗舰产品发布会中,ONEMT中东G

使用键盘控制gazebo小车模型运动

博客地址:https://www.cnblogs.com/zylyehuo/ gazebo小车模型创建详见另一篇博客 博客地址:gazebo小车模型(附带仿真环境) - zylyehuo - 博客园 参考链接 Autolabor-ROS机器人入门课程《ROS理论与实践》 ROS源码安装teleop_

基于Gazebo搭建移动机器人,并结合SLAM系统完成建图仿真

博客地址:https://www.cnblogs.com/zylyehuo/ gazebo小车模型创建及仿真详见之前博客 gazebo小车模型(附带仿真环境) - zylyehuo - 博客园 gazebo+rviz 仿真 - zylyehuo - 博客园 参考链接 Autolabor-ROS机器人