从零开始学ROS(话题通信的c++实现)

1.发布者实现

实现流程:
1.包含头文件
2.初始化 ROS 节点:命名(唯一)
3.实例化 ROS 句柄
4.实例化 发布者 对象
5.组织被发布的数据,并编写逻辑发布数据

//1.包含头文件 
#include"ros/ros.h"
#include"std_msgs/String.h"
#include<sstream>
int main(int argc,char* argv[]){
	//2.初始化 ROS 节点
	ros::init(argc,argv,"DaBao");
	//3.实例化 ROS 句柄
	ros::NodeHandle nh;
	//4.实例化 发布者 对象
	ros::Publisher pub=nh.advertise<std_msgs::String>("SanGuoSha",10);
	// 5.组织被发布的数据,并编写逻辑发布数据
	int count=0;
	std_msgs::String msgs;
	while(ros::ok())
    {
        std::stringstream ss;
        ss<<"hello--->"<<count++;
        msgs.data=ss.str();
        pub.publish(msgs);
        ROS_INFO("%s",ss.str().c_str());
        r.sleep();
    }
	return 0;
}

2.订阅方

实现流程:
1.包含头文件
2.初始化 ROS 节点
3.实例化 ROS 句柄
4.实例化 订阅者 对象
5.处理订阅的消息(回调函数)
6.设置循环调用回调函数

	//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());
}
	int main(int argc, char *argv[]){
	//2.初始化 ROS 节点
    ros::init(argc,argv,"Caochong");
    return 0;
    //3.实例化 ROS 句柄
    ros::NodeHandle nh;
    //4.实例化 订阅者 对象
    ros::Subscriber sub = nh.subscribe<std_msgs::String>("SanGuoSha",10,doMsg);
    //5.处理订阅的消息(回调函数)
	//6.设置循环调用回调函数
    ros::spin();//循环读取接收的数据,并调用回调函数处理
}

3. 配置CMakeLists.txt

add_executable(节点名,节点路径)
target_link_libraries(节点名
${catkin_LIBRARIES}
)

4.执行

1.启动 roscore;

2.启动发布节点;

3.启动订阅节点

从Autolabor的网课开始从0学习ROS
(【【Autolabor初级教程】ROS机器人入门】 https://www.bilibili.com/video/BV1Ci4y1L7ZZ/?p=70&share_source=copy_web&vd_source=d76161aaff16cdf3f82144c736e33912)

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐