新闻中心
C++怎么在ROS中编程_C++机器人操作系统中创建节点、发布与订阅话题
答案:在ROS中使用C++通过roscpp库创建发布者和订阅者节点,首先建立工作空间和功能包,编写talker.cpp和listener.cpp实现消息发布与订阅,配置CMakeLists.txt后编译运行,确保roscore启动后分别运行节点,即可实现话题通信。

在ROS(机器人操作系统)中使用C++编程,主要是通过ROS提供的客户端库roscpp来实现节点的创建、话题的发布与订阅。下面详细介绍如何用C++在ROS中创建一个简单的发布者和订阅者节点。
创建ROS工作空间和功能包
开始前确保已安装ROS环境。然后创建工作空间和功能包:
- 创建工作空间目录:
mkdir -p ~/catkin_ws/src - 初始化catkin工作空间:
cd ~/catkin_ws && catkin_make - 进入src目录并创建功能包:
cd src && catkin_create_pkg my_robot_node roscpp std_msgs
上面命令创建了一个名为my_robot_node的功能包,依赖roscpp和std_msgs。
编写发布者节点
在功能包内创建一个src/talker.cpp文件:
#include <ros/ros.h>
#include <std_msgs/String.h>
int main(int argc, char **argv) {
ros::init(argc, argv, "talker");
ros::NodeHandle nh;
ros::Publisher pub = nh.advertise<std_msgs::String>("chatter", 10);
ros::Rate loop_rate(10
); // 10Hz
int count = 0;
while (ros::ok()) {
std_msgs::String msg;
msg.data = "Hello ROS: " + std::to_string(count);
pub.publish(msg);
ros::spinOnce();
loop_rate.sleep();
++count;
}
return 0;
}
这段代码做了以下几件事:
- 初始化ROS节点,名称为talker
- 创建NodeHandle用于与ROS系统通信
- 定义一个发布者,向话题chatter发布std_msgs/String类型的消息
- 以10Hz频率循环发送递增的消息
编写订阅者节点
创建src/listener.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 nh;
ros::Subscriber sub = nh.subscribe("chatter", 10, chatterCallback);
ros::spin();
return 0;
}
说明:
- 创建名为listener的节点
- 订阅chatter话题,回调函数为chatterCallback
- 每当收到消息,自动调用回调函数打印内容
- ros::spin()保持节点运行并监听回调
配置CMakeLists.txt
进入功能包根目录,编辑CMakeLists.txt,在末尾添加:
CA.LA
第一款时尚产品在线设计平台,服装设计系统
94
查看详情
add_executable(talker src/talker.cpp)
add_executable(listener src/listener.cpp)
target_link_libraries(talker ${catkin_LIBRARIES})
target_link_libraries(listener ${catkin_LIBRARIES})
add_dependencies(talker ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
add_dependencies(listener ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
确保可执行文件能正确编译和链接ROS库。
编译与运行
回到工作空间根目录并编译:
cd ~/catkin_ws catkin_make
启动ROS核心:
roscore
打开新终端,运行发布者:
source devel/setup.bash rosrun my_robot_node talker
再打开一个终端,运行订阅者:
rosrun my_robot_node listener
你将看到订阅者终端不断输出“Hello ROS: X”的消息。
基本上就这些。掌握节点初始化、发布与订阅的模式后,就可以扩展到传感器数据处理、控制指令发送等更复杂的场景。关键理解NodeHandle、Publisher/Subscriber机制以及回调模型。不复杂但容易忽略细节,比如忘记ros::spinOnce()或ros::spin()会导致程序无法响应消息。
以上就是C++怎么在ROS中编程_C++机器人操作系统中创建节点、发布与订阅话题的详细内容,更多请关注其它相关文章!
# 这段
# 什么是seo环保板材
# 百度seo入驻
# 什么行业的网站优化
# 文章seo采集
# 衡阳耒阳网站优化
# 良心网站推广怎么做
# 商场全年营销推广方案
# 学seo技术怎么赚钱
# 新乡论坛营销推广
# 沈阳网站推广计划书模板
# 之心
# 中文网
# 相关文章
# node
# 与其他
# 创建工作
# 创建一个
# 如何使用
# 回调
# talk
# c++编程
# string类
# c++
# ai
# 回调函数
# 操作系统
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
抖音商城签到领现金是真的吗_抖音商城签到奖励与提现说明
在J*a中如何在J*a中使用异常机制记录错误日志_异常日志实践经验
mysql如何设置表访问权限_mysql表访问权限配置
J*aScript DOM操作:高效清空列表元素的策略与实践
处理动态列数据:J*a ArrayList的正确初始化与字符累加教程
c++如何使用Meson构建系统_c++比CMake更快的构建工具
fishbowl官网免费版 fishbowl养鱼网站入口
将HTML Canvas内容转换为可上传的图像文件(File对象)
如何修改开机登录密码_Windows账户安全设置超详细教程【必学】
C++如何操作大型数据集_使用C++流式处理(Streaming)技术避免一次性加载大文件
b站如何看历史记录_b站观看历史找回方法
三星ZFold5多任务卡顿_Samsung ZFold5流畅度提升
Django表单验证失败时保留用户输入数据的最佳实践
c++如何使用折叠表达式(Fold Expressions)_c++17可变参数模板新技巧
c++如何使用TBB库进行任务并行_c++ Intel线程构建模块
顺丰快件物流信息 官方网站查询入口
汽水音乐在线解析 汽水音乐在线解析入口
怎么在html里运行vbs脚本_html中运行vbs脚本方法【教程】
Win10如何恢复误删的快捷方式_Win10重建常用软件快捷方式
CSS Flexbox与媒体查询:实现响应式布局中元素的并排与堆叠
c++ 命名空间怎么用 c++ namespace使用指南
移动端XML文件怎么转换成Excel 手机和平板上的解决方案
MongoDB聚合管道:正确匹配对象数组中_id的方法
AI泡沫首次被“刺破”:GPU十年都无法存活!
深入理解J*aScript Promise异步执行与微任务队列
微博网页版怎么开启两步验证_微博网页版账号安全两步验证设置方法
win11如何加载ICC颜色配置文件 Win11校色文件安装与显示器色彩管理【指南】
新手怎么开始学化妆 零基础化妆入门教程
高德地图家和公司地址在哪设置 高德地图通勤路线设置方法【超详细】
PS5 Pro有点优势但不多! 《燕云十六声》PS5平台与PC性能画面对比
Excel文件在线转换快速入口 Excel在线格式转换网站
Composer的 "check-platform-reqs" 命令有什么用_在部署前检查生产环境是否满足Composer依赖需求
TikTok搜索不到用户发布内容怎么办 TikTok用户内容搜索优化方法
蛙漫限时开放最深处链接_蛙漫全站漫画会员同款秒开地址
Pandas DataFrame 多条件优先级排序与排名
魅族20怎样在浏览器开无图省流_iPhone魅族20浏览器开无图省流【流量节省】
企业名称高精度匹配:N-gram方法在结构相似性分析中的应用
提升屏幕阅读器对“m”时间单位的播报准确性:HTML与CSS组合解决方案
J*aScript井字棋(Tic-Tac-Toe)核心交互逻辑实现教程
PDF怎么合并PDF并保持格式_PDF合并文件保持排版教程
韩小圈电脑版在线入口_网页版免费登录地址
顺丰快递查单号物流信息 顺丰快递小程序查询入口
SteamMachine定价或为699美元 大家想入手吗?
2026春节假期时间安排 2026春节假日查询
QQ网页版官方账号入口 QQ网页版网页版登录指南
抖音创作助手登录入口_抖音创作辅助工具官网直达
Win11截图该按哪些键 Win11截屏完整流程解析【教程】
Highcharts 雷达图径向轴标签定制指南:利用多Y轴实现数值标注
绝地鸭卫平a核爆刀流玩法攻略
高德地图怎么看全景照片_高德地图全景照片浏览教程


2025-11-22
浏览次数:次
返回列表
); // 10Hz
int count = 0;
while (ros::ok()) {
std_msgs::String msg;
msg.data = "Hello ROS: " + std::to_string(count);
pub.publish(msg);
ros::spinOnce();
loop_rate.sleep();
++count;
}
return 0;
}