从零开始学ROS(话题通信的c++实现)
·
从零开始学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)
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)