新闻详情

新闻详情

首页 / 资讯中心 / 详情

ROS2入门不迷路:从零搭建环境到跑通最小Demo(逻辑+代码全解析)

发布时间:2026/9/27 6:56:49来源:尧图网络
ROS2入门不迷路:从零搭建环境到跑通最小Demo(逻辑+代码全解析)
ROS2入门不迷路从零搭建环境到跑通最小Demo逻辑代码全解析标签#ROS2 #机器人操作系统 #Humble #入门教程 #C前言刚接触ROS2的新手最怕的就是环境装半天装不好、代码跑不通不知道哪错了。本文从零开始用国内一键脚本装环境通过话题通信和服务通信两个最小Demo把ROS2最核心的通信逻辑讲清楚。代码注释适中适合想快速上手跑通的新手。废话不多说直接开干。一、环境搭建1.1 一键安装推荐国内用户用鱼香ROS的一键脚本省心省力wgethttp://fishros.com/install-Ofishros.fishros运行后选择安装ROS2 Humble Desktop装完再跑一次脚本配置 rosdep。1.2 验证安装ros2 doctor输出All checks passed就完事环境没问题。二、验证环境跑通内置DemoROS2自带了示例节点先跑一下确认环境没问题。打开两个终端分别执行# 终端1发布消息ros2 run demo_nodes_cpp talker# 终端2接收消息ros2 run demo_nodes_cpp listener终端2能持续收到终端1发的消息说明通信链路通了环境OK。三、话题通信自己写最小Demo3.1 核心逻辑串一下话题通信就是发布/订阅模式类似广播电台发布端创建节点 → 创建发布者指定话题名→ 循环发消息订阅端创建节点 → 创建订阅者指定同一个话题名→ 收到消息触发回调两边话题名对得上就能通3.2 建包mkdir-p~/ros2_ws/srccd~/ros2_ws/src ros2 pkg create demo --build-type ament_cmake--dependenciesrclcpp std_msgs3.3 发布端talker.cpp在src/demo/src/下新建talker.cpp#includerclcpp/rclcpp.hpp#includestd_msgs/msg/string.hppusingnamespacestd::chrono_literals;intmain(intargc,char**argv){rclcpp::init(argc,argv);// 初始化ROS2autonoderclcpp::Node::make_shared(talker);// 创建节点// 创建发布者话题名chatter队列长度10autopubnode-create_publisherstd_msgs::msg::String(chatter,10);std_msgs::msg::String msg;msg.datahello;rclcpp::Raterate(1s);// 每秒发一次while(rclcpp::ok()){pub-publish(msg);// 发消息RCLCPP_INFO(node-get_logger(),发了: %s,msg.data.c_str());rate.sleep();}rclcpp::shutdown();return0;}3.4 订阅端listener.cpp在src/demo/src/下新建listener.cpp#includerclcpp/rclcpp.hpp#includestd_msgs/msg/string.hppintmain(intargc,char**argv){rclcpp::init(argc,argv);autonoderclcpp::Node::make_shared(listener);// 订阅chatter话题收到消息执行回调autosubnode-create_subscriptionstd_msgs::msg::String(chatter,10,[](conststd_msgs::msg::String::SharedPtr msg){RCLCPP_INFO(rclcpp::get_logger(listener),收到: %s,msg-data.c_str());});rclcpp::spin(node);// 阻塞等待消息rclcpp::shutdown();return0;}3.5 修改CMakeLists.txt在src/demo/CMakeLists.txt末尾添加add_executable(talker src/talker.cpp) ament_target_dependencies(talker rclcpp std_msgs) add_executable(listener src/listener.cpp) ament_target_dependencies(listener rclcpp std_msgs) install(TARGETS talker listener DESTINATION lib/${PROJECT_NAME} ) ament_package()3.6 编译运行cd~/ros2_ws colcon build --packages-select demosourceinstall/setup.bash打开两个终端# 终端1ros2 run demo talker# 终端2ros2 run demo listener终端2持续打印收到: hello通了。四、服务通信请求/响应模式4.1 核心逻辑串一下服务通信是一问一答模式类似打电话服务端创建节点 → 创建服务指定服务名回调函数→ 阻塞等待请求客户端创建节点 → 创建客户端指定同一个服务名→ 构造请求 → 发送并等待结果两边服务名对得上客户端才能拿到返回值4.2 建包cd~/ros2_ws/src ros2 pkg create svc_demo --build-type ament_cmake--dependenciesrclcpp example_interfaces4.3 服务端server.cpp在src/svc_demo/src/下新建server.cpp#includerclcpp/rclcpp.hpp#includeexample_interfaces/srv/add_two_ints.hpp// 回调函数收到请求时执行计算abvoidhandle(conststd::shared_ptrexample_interfaces::srv::AddTwoInts::Requestreq,std::shared_ptrexample_interfaces::srv::AddTwoInts::Responseresp){resp-sumreq-areq-b;RCLCPP_INFO(rclcpp::get_logger(server),%ld %ld %ld,req-a,req-b,resp-sum);}intmain(intargc,char**argv){rclcpp::init(argc,argv);autonoderclcpp::Node::make_shared(server);// 创建服务服务名add_two_intsautosrvnode-create_serviceexample_interfaces::srv::AddTwoInts(add_two_ints,handle);RCLCPP_INFO(rclcpp::get_logger(server),服务已启动);rclcpp::spin(node);// 阻塞等待请求rclcpp::shutdown();return0;}4.4 客户端client.cpp在src/svc_demo/src/下新建client.cpp#includerclcpp/rclcpp.hpp#includeexample_interfaces/srv/add_two_ints.hppintmain(intargc,char**argv){rclcpp::init(argc,argv);autonoderclcpp::Node::make_shared(client);// 创建客户端连接add_two_ints服务autoclientnode-create_clientexample_interfaces::srv::AddTwoInts(add_two_ints);// 构造请求autoreqstd::make_sharedexample_interfaces::srv::AddTwoInts::Request();req-a3;req-b7;// 等服务端启动while(!client-wait_for_service(std::chrono::seconds(1))){RCLCPP_INFO(rclcpp::get_logger(client),等服务端...);}// 发请求并等待结果autoresultclient-async_send_request(req);if(rclcpp::spin_until_future_complete(node,result)rclcpp::FutureReturnCode::SUCCESS){RCLCPP_INFO(rclcpp::get_logger(client),结果: %ld,result.get()-sum);}rclcpp::shutdown();return0;}4.5 修改CMakeLists.txt在src/svc_demo/CMakeLists.txt末尾添加add_executable(server src/server.cpp) ament_target_dependencies(server rclcpp example_interfaces) add_executable(client src/client.cpp) ament_target_dependencies(client rclcpp example_interfaces) install(TARGETS server client DESTINATION lib/${PROJECT_NAME} ) ament_package()4.6 编译运行cd~/ros2_ws colcon build --packages-select svc_demosourceinstall/setup.bash先跑服务端再跑客户端# 终端1ros2 run svc_demo server# 终端2ros2 run svc_demo client服务端打印3 7 10客户端打印结果: 10通了。五、总结类型模式逻辑适用场景话题发布/订阅发布端一直发订阅端一直收传感器数据、状态广播服务请求/响应客户端问服务端答一问一答计算、查询、开关控制两套通信搞明白ROS2就算入门了。常见问题colcon build 报错确认执行了source install/setup.bashros2 run 找不到节点确认编译成功包名和节点名正确客户端等服务超时确认服务名一致服务端先启动
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

GR00T-WholeBodyControl运动学规划器详解:如何实时生成奔跑、潜行、跪姿、拳击8种动作风格 2026/9/27 6:56:22

GR00T-WholeBodyControl运动学规划器详解:如何实时生成奔跑、潜行、跪姿、拳击8种动作风格

GR00T-WholeBodyControl运动学规划器详解:如何实时生成奔跑、潜行、跪姿、拳击8种动作风格 【免费下载链接】GR00T-WholeBodyControl Welcome to GR00T Whole-Body Control (WBC)! This is a unified platform for developing and deploying advanced humanoid cont…

阅读更多 →
佛山网站建设公司3lue:5个免费工具搞定丑站痛点 2026/9/27 6:56:16

佛山网站建设公司3lue:5个免费工具搞定丑站痛点

佛山网站建设公司3lue:5个免费工具搞定丑站痛点 还在为模板网站太丑不够用而头疼?别急着掏钱找佛山网站建设公司3lue,先试试这几个 免费工具 。很多甲方朋友一上来就问价格,却忽略了网站上线前的视觉诊断和性能体检。…

阅读更多 →
解决matplotlib绘图中文字符显示问题 2026/9/27 6:56:16

解决matplotlib绘图中文字符显示问题

在使用Python进行数据可视化时,常常会遇到中文字符无法正常显示的问题。默认情况下,Matplotlib等常用可视化库并不支持中文字体,这导致中文字符显示为方框或者引发字体相关的警告,给数据展示和报告生成带来不便。尤其对于数据分析师而言,频繁手动调整字体配置既耗时又易出…

阅读更多 →
RL-赵-(九)-Policy函数拟合算法-Policy Gradient算法01:基本概念【用参数化的函数来拟合π,来取代表格形式的π(表格中每个元素直接保存了某个s-a对的π概率值)】 2026/9/27 6:56:15

RL-赵-(九)-Policy函数拟合算法-Policy Gradient算法01:基本概念【用参数化的函数来拟合π,来取代表格形式的π(表格中每个元素直接保存了某个s-a对的π概率值)】

从本文开始,将从value-based methods转向到policy-based methods,从value function approximation到policy function approximation。 一、Basic idea of policy gradient 到目前,我们的policies都是用tables表示的。 如下是所有state的action probabilities,存储在一个t…

阅读更多 →
用AgentENV训练Terminal-Bench-2:搭建Agent强化学习的沙箱后端 2026/9/27 6:56:01

用AgentENV训练Terminal-Bench-2:搭建Agent强化学习的沙箱后端

用AgentENV训练Terminal-Bench-2:搭建Agent强化学习的沙箱后端 【免费下载链接】AgentENV AgentENV (AENV) is a distributed platform for running agent environments at scale. 项目地址: https://gitcode.com/gh_mirrors/age/AgentENV AgentENV&#xff…

阅读更多 →
别被建站报价忽悠 揭秘免费做调查问卷的网站真底细 2026/9/27 6:55:54

别被建站报价忽悠 揭秘免费做调查问卷的网站真底细

别被建站报价忽悠 揭秘免费做调查问卷的网站真底细 找建站公司怕被坑高价,这是很多老板心里的痛点。市面上那些号称“全网最低”的建站报价单,往往藏着无数的隐形消费。今天咱们不聊虚的,直接拆解一个看似与建站无关,实则能帮你省下一大笔营销成本的场景…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉