当前位置: 首页 > news >正文

Roslaunch一次启动多个node-04 - jack

在 ROS 开发中,手动打开多个终端、分别输入 rosrun 是非常低效的。roslaunch 是 ROS 的核心工具,用于通过 XML 脚本一次性启动多个节点,并自动管理参数服务器。

而且,roslaunch 会自动检测 roscore 是否在运行,如果没有,它会帮你启动 Master,无需手动输入 roscore

以下是使用 roslaunch 的详细步骤和原理解析。


一、 准备工作

按照 ROS 的标准规范,我们将 launch 文件存放在包目录下的 launch 文件夹中。

假设我们的包名还是 my_robot_control

  1. 创建目录
cd ~/catkin_ws/src/my_robot_control
mkdir launch

二、 编写 Launch 文件

launch 目录下创建一个名为 start_chat.launch 的文件。

将以下 XML 代码复制进去:

<launch><node pkg="my_robot_control" type="talker" name="msg_sender" output="screen"/><node pkg="my_robot_control" type="listener" name="msg_receiver" output="screen"/>
</launch>

关键属性解析 (The "Big Three")

初学者最容易混淆 typename,请务必区分:

  • pkg: 功能包的名字(文件夹名)。
  • type: 二进制可执行文件的名字。这是你在 CMakeLists.txtadd_executable(talker ...) 设置的名字。
  • name: 节点运行时的名字。ROS 允许你运行同一个可执行文件多次,只要给它们起不同的 name 即可。

三、 运行 Launch 文件

回到终端(只需要一个终端):

# 别忘了刷新环境
source ~/catkin_ws/devel/setup.bash# 语法: roslaunch <包名> <launch文件名>
roslaunch my_robot_control start_chat.launch

你将看到:

  1. 它会自动启动 roscore(如果没启动)。
  2. 同时启动 talkerlistener
  3. 终端会交替显示 "Hello ROS..." 和 "I heard..."。

四、 进阶技巧:这是 roslaunch 真正强大的地方

roslaunch 不仅仅是批量运行,它还能修改节点的行为,而无需修改 C++ 源代码

1. 话题重映射 (Remapping)

假设你写了一个节点,监听的话题叫 /chatter。但是,另一个现成的相机节点发布的话题叫 /camera/data
你不需要改 C++ 代码,只需要在 launch 文件里“接线”:

<node pkg="my_robot_control" type="listener" name="my_listener" output="screen"><remap from="chatter" to="camera/data"/>
</node>

2. 设置参数 (Parameters)

你可以在 launch 文件中定义变量,传给 C++ 节点。

XML 中:

<node pkg="my_robot_control" type="talker" name="talker"><param name="publish_frequency" type="int" value="20" />
</node>

C++ 代码中读取:

int freq;
// 获取私有命名空间下的参数,默认值为 10
ros::NodeHandle nh("~"); 
nh.param("publish_frequency", freq, 10);
ros::Rate loop_rate(freq); // 频率变成了 20

3. 嵌套 (Include)

你可以把其他包的 launch 文件包含进来,实现“套娃”启动。比如启动机器人的时候,顺便把激光雷达驱动也启动了。

<launch><include file="$(find rplidar_ros)/launch/rplidar.launch" /><node pkg="my_robot_control" type="talker" name="my_talker" />
</launch>

五、 常见报错与排查

  1. ERROR: cannot launch node of type [xxx/yyy]: xxx
  • 原因:ROS 找不到你的包或可执行文件。
  • 解决
  1. source devel/setup.bash

  2. CMakeLists.txt 里没写 add_executable

  3. 还没运行 catkin_make 编译。

  4. RLException: [xxx.launch] is neither a launch file in package...

  • 原因:找不到 launch 文件。
  • 解决:检查文件名拼写,或者确认你是否运行过 source 命令让 ROS 知道新文件的存在。
  1. 看不到 ROS_INFO 打印
  • 原因roslaunch 默认吞掉了标准输出。
  • 解决:在 <node> 标签里加上 output="screen"

下一步建议:
你现在已经掌握了代码编写 (C++)构建系统 (CMake)系统编排 (Launch)

接下来,为了让机器人真正“动”起来或者便于调试,是否需要了解一下 ROS 的常用可视化工具(Rviz 和 Rqt),或者是 如何使用 Parameter Server (参数服务器) 在运行时动态调整参数

http://www.jsqmd.com/news/114202/

相关文章:

  • Open-AutoGLM语义分析进阶指南(关联强化技术全披露)
  • 【AI训练效率革命】:基于Open-AutoGLM的实时资源调配7大最佳实践
  • Linly-Talker如何处理方言输入?识别准确率测试
  • Nano Banana AI 图像工作室:生成式AI的“对象合成”——从风格迁移到跨领域物理规则的重建
  • 【Open-AutoGLM语义强化实战】:掌握5大核心技巧提升关联分析精度
  • 32. 最长有效括号
  • 快速上手 MaxKB4J:开源企业级 Agentic 工作流系统在 Sealos 上的完整部署指南
  • Open-AutoGLM推理引擎优化:5大关键技术让推理延迟降低80%
  • Linly-Talker语音合成质量评测:媲美商业TTS系统
  • 基于VUE的就业信息管理网站[VUE]-计算机毕业设计源码+LW文档
  • Linly-Talker在机场广播系统中的个性化播报尝试
  • Open-AutoGLM引爆产业变革(打破技术垄断的5大关键突破)
  • Substance 3D Painter 进阶:手绘“掉漆”太累?用 Anchor Point 让材质“活”过来
  • Linly-Talker开源优势分析:为什么开发者都在关注它?
  • 2025年靠谱知名的GEO优化专业公司排行榜,看哪家性价比高? - 工业推荐榜
  • 基于VUE的咖啡商城系统[VUE]-计算机毕业设计源码+LW文档
  • Open-AutoGLM行业拐点已至,你准备好应对策略了吗?
  • Open-AutoGLM动态调参陷阱曝光:80%团队踩过的3个坑
  • 2025年彩色金刚砂地坪制造企业推荐:彩色金刚砂地坪制造企业选择哪家好? - 工业推荐榜
  • 告别低效人工操作,Open-AutoGLM让效率提升300%?
  • 参数调优不再难,Open-AutoGLM动态调整全解析
  • 基于VUE的敬老院管理系统[VUE]-计算机毕业设计源码+LW文档
  • ros可视化工具-05 - jack
  • 打造24小时在线客服:用Linly-Talker构建数字员工
  • Open-AutoGLM技术路线图全解密:未来12个月将影响整个AIGC生态的4个决策点
  • 【全球首曝】Open-AutoGLM内部架构解析:掌握下一代AI协同引擎的7个核心模块
  • Open-AutoGLM如何重塑人机协作?5大关键技术颠覆传统工作流
  • 基于Python+Vue开发的新闻管理系统源码+运行步骤+计算机专业
  • 如何通过知识图谱增强Linly-Talker专业领域回答
  • 如何利用WebRTC实现实时远程操控Linly-Talker?