【ROS 2】运行 ROS 2 机器人 ( ROS 2 机器人示例 - 海龟仿真器 | ROS 节点分析工具 - rqt | ros2 run 命令解析 | ros2 run 基础格式和完整格式 )

【ROS 2】运行 ROS 2 机器人 ( ROS 2 机器人示例 - 海龟仿真器 | ROS 节点分析工具 - rqt | ros2 run 命令解析 | ros2 run 基础格式和完整格式 )

文章目录

在上一篇博客 【ROS 2】ROS 2 Humble 完整环境配置 ( VirtualBox 7.2.4 + Ubuntu 22.04.5 LTS + ROS 2 Humble ) 中 , 安装了 ROS 2 Humble 环境 , 本篇博客开始进行 ROS 2 开发 ;




一、ROS 2 机器人示例 - 海龟仿真器



1、启动海龟仿真器节点

执行

ros2 run turtlesim turtlesim_node 

命令 ,启动 海龟仿真器 节点 ,

在这里插入图片描述

2、启动控制节点

在另一个 命令行终端 运行

ros2 run turtlesim turtle_teleop_key 

命令 , 可以通过 键盘方向键 控制 海龟 旋转 移动 ;

选中 该 命令行终端 ,使用 左右箭头 控制 海龟方向 ,使用 向上箭头 控制 前进 ,使用 向下箭头 控制 后退 ;

在这里插入图片描述

3、ROS 节点分析工具 - rqt

在终端一 启动了 海龟模拟器 节点 ,

在终端二 启动了 控制节点, 可以通过 上下左右 箭头按键 控制 海龟 左右旋转 和 前后移动 ;

在 终端二 可以控制 海龟模拟器 窗口 中的 海龟移动 , 下面分析其中的控制过程 ;

在 终端三 输入

rqt 

命令 ,这是 ROS 2 提供的 节点 分析工具 ;

在这里插入图片描述

选择 rqt 工具中的 " Plugins / Instrospection / Node Graph " 选项, 这是 ROS 2 的 节点图 ,

在这里插入图片描述

如果打开后 , 节点图内容太小 , 可以使用鼠标滚轮 滚动 放大显示 ;

点击 Fit 键后面的

在这里插入图片描述

按钮 , 可以让节点图自适应填充满整个界面 ;

在这里插入图片描述

鼠标左键点击 节点图 中的元素 , 会变成如下样式 :

  • 左侧的 /turtlesim 是 海龟模拟器 节点
  • 右侧的/teleop_turtle 是 键盘控制节点, 右侧节点 通过 话题 向 左侧节点发送了 控制命令 /turtle1/cmd_vel ;
在这里插入图片描述




二、ros2 run 命令解析



1、设计理念

ros2 run 命令 是 ROS 2 命令行工具 中 用于启动 单个功能包 内 可执行文件节点 的核心子命令 , 其格式设计严格遵循 ROS 2" 功能包 - 可执行文件 - 参数分离 " 的设计理念 ,

ros2 run 分为基础格式 ( 仅启动可执行文件 ) 和完整格式 ( 含可执行文件参数 + ROS 层面参数 ) ,完整格式 覆盖所有场景 ;

ros2 run 的核心逻辑是" 定位功能包 -> 找到可执行文件 -> 启动并接入 ROS 2 通信 ", 其格式设计的关键是分离 " 可执行文件自身参数 " 和 " ROS 层面参数 " ( 通过 --ros-args 分隔 ) ;

掌握该格式的核心是 :明确必选部分的匹配规则、可选部分的顺序要求 ,以及参数解析的边界 ;

2、ros2 run 基础格式

ros2 run 基础格式 命令格式如下 :

ros2 run <package_name><executable_name>
  • ros2 参数 :ROS 2 命令行入口, 所有 ROS 2 终端操作的统一前缀 ( 加载 ROS 2 核心工具链、DDS 通信层 ) ;
  • run 参数 : ros2 的子命令, 功能是 :
    • 查找功能包 : 查找系统 / 本地 工作空间 中已安装的 <package_name> ;
    • 定位可执行 : 定位该功能包 内 编译生成的 <executable_name> ;
    • 启动执行 :启动该 可执行文件, 并自动接入 ROS 2 通信系统( 成为 ROS 2 节点 ) ;
  • <package_name> 参数 : 功能包名称 ;
    • 功能包来源 : 已通过 colcon build 编译 ( 本地工作空间 ) 或apt install 安装 ( 系统级 ) ;
    • 命名规范 : 遵循 ROS 2 命名规范 ( 小写字母 + 下划线 , 如 turtlesim、my_robot_pkg ) ;
  • <executable_name> 参数 : 是 功能包下 的 编译生成 的 可执行文件 名称 ;
    • 配置位置 : 是 CMakeLists.txt/setup.py 中声明的 可执行目标名 ;

3、ros2 run 完整格式

ros2 run 完整格式 命令格式如下 :

ros2 run <package_name><executable_name>[executable_args...][--ros-args <ros_args...>]
  • <> 符号 : 表示 该参数 是必选参数, 需替换为实际值 , 最终 不保留尖括号 ;
  • [] 符号 : 表示 该参数 是可选参数, 可省略 ;
  • ... 符号 : 表示 该参数 是可重复参数 , 多个值用空格分隔 ;
  • [executable_args...] 参数 : 该参数 是传给可执行文件自身的参数, 非 ROS 层面参数 ,由 可执行文件 的 代码解析, ROS 2 CLI 不处理 , 一般都是 自定义节点的配置文件路径、阈值、模式等 ;
  • [--ros-args <ros_args...>] 参数 : 该参数 是ROS 2 层面的参数配置 ( 核心分隔符 ) , --ros-args 之后的所有参数均由 ROS 2 核心解析 , 而非传给可执行文件 ; 常用子参数如下 :
    • --remap 参数 : 重映射 ( 节点名、命名空间、话题 / 服务名 ) ;
    • --log-level 参数 : 设置日志等级 ( DEBUG/INFO/WARN/ERROR/FATAL ) ;
    • --param 参数 : 设置节点参数 ( 需节点支持 ) ;
    • --env 参数 : 设置节点运行的环境变量 ;

4、启动海龟仿真器命令分析

以启动 海龟模拟器 的 命令参数 为例 进行分析 :

ros2 run turtlesim turtlesim_node 
  • ros2 参数 : 是ROS 2 核心命令行入口, 所有 ROS 2 终端操作均以该关键词开头 ( 如 ros2 node/ros2 topic ) ;
  • run 参数 : 是 ros2 的子命令 , 功能是 从指定功能包中找到并运行对应的可执行文件 ( 本质是启动一个 ROS 2 节点 ) ;
  • turtlesim 参数 : 是 功能包名称 ( package name ) ,turtlesim 是 ROS 2 内置的示例功能包, 封装了海龟仿真器的所有代码 ( 包括节点、话题、服务、动作等逻辑 ) ;
  • turtlesim_node 参数 : 是 可执行文件名称 ( executable name ) ,turtlesim 功能包中编译生成的可执行文件, 运行后会启动海龟仿真器的核心节点 ;

Read more

Chromium WebRTC调试实战:从基础配置到高效问题定位

在WebRTC开发领域,调试工作常常是项目中最耗时、最令人头疼的环节。根据一些行业内的非正式统计,开发者平均花费在定位和解决一个WebRTC相关问题上(如音视频卡顿、连接失败、回声等)的时间可能超过8小时,其中超过60%的时间都消耗在信息收集和初步分析上。这些问题大致可以归类为:信令交互失败(约25%)、媒体协商与编解码问题(约35%)、网络传输质量(如抖动、丢包、带宽估计,约占30%)以及其他底层问题(如硬件加速、内存泄漏,约占10%)。面对如此复杂的调试场景,掌握一套高效的调试方法论和工具链至关重要。 Chromium浏览器作为WebRTC技术的重要实现者和推动者,其内置的调试工具链是我们进行高效问题定位的利器。下面我将结合实战经验,详细拆解这套工具链的核心用法。 1. chrome://webrtc-internals 深度解析 这是Chromium为WebRTC开发者和研究人员提供的“仪表盘”。在浏览器地址栏直接输入即可访问。它主要包含几个关键部分: * Peer Connections:这里列出了页面中创建的所有PeerConnection实例。点击任意一个连接

Linux网络 | 理解Web路径 以及 实现一个简单的helloworld网页

Linux网络 | 理解Web路径 以及 实现一个简单的helloworld网页

前言:本节内容承接上节课的http相关的概念, 主要是实现一个简单的接收http协议请求的服务。这个程序对于我们理解后面的http协议的格式,报头以及网络上的资源的理解, 以及本节web路径等等都有着重要作用。 可以说我们就用代码来理解这些东西。 那么废话不多说, 现在开始我们的学习吧。         ps:本节内容建议先看一下上一篇文章http的相关概念哦:linux网络 | 深度学习http的相关概念-ZEEKLOG博客 目录  准备文件  makefile HttpServer.hpp 类内成员 封装sockfd start  ThreadRun  全部代码 运行结果 响应书写 Web路径  准备文件         首先准备文件: 这里面Httpserver.cc用来运行接收http请求的服务。 HttpServer.hpp用来定义http请求。Log.hpp就是一个打印日志的小组件, Socket.hpp同样是套接字的组件。 到使用直接调用相关接口即可。(Log.hpp和Socket.hpp如何实现不讲解, 如果想要知道

复旦微FMQL开发环境搭建与Procise实战指南

1. 环境准备:搞定这堆软件,你就成功了一半 复旦微FMQL开发环境的搭建确实有点复杂,得同时搞定好几个软件工具。我第一次配置的时候也是折腾了好几天,主要是这些软件之间的版本兼容性要求特别严格,装错一个版本可能就得全部重来。 你需要准备的主要软件包括Procise、Iivado 2018.3、IAR Embedded Workbench,还有一个Ubuntu虚拟机。Procise是复旦微自家的FPGA开发工具,类似于Xilinx的Vivado,但功能上要简单一些。IAR则是用来开发ARM处理器程序的,相当于Xilinx的SDK。最特别的是还得装Vivado 2018.3,因为Procise自带的IP核实在太少了,复杂点的设计都得先在Vivado里做好,再导入到Procise中。 软件下载的话,复旦微有个专门的下载器,需要向技术支持申请账号密码。我建议把整个资料包都下载下来,虽然大概有200G左右,而且还在不断增大,但里面包含了例程、最新BSP、虚拟机镜像等所有需要的东西,一次性下载完省得后续麻烦。 安装顺序也很重要,我推荐先装Vivado 2018.3,然后装Procise,最

受够了网络反爬?这套 WebTop 方案,让云端 OpenClaw 像真人一样上网

受够了网络反爬?这套 WebTop 方案,让云端 OpenClaw 像真人一样上网

浏览器是网络世界的入口 对于云端部署的 OpenClaw,有一个最大的痛点,就是浏览器没有显示界面,这会对 OpenClaw 的浏览器自动化操作产生很大的影响。 刷知乎、小红书、推特,或者看 Reddit 时,传统的 Headless(无头)浏览器几乎过不了人机验证,也很容易卡在扫码登录界面。 云服务器没有显示器,你连验证码长什么样都看不到,更别提接管操作了。 那么,有没有一种优雅的姿势,让云端的 OpenClaw 拥有一个“有血有肉”的真实桌面浏览器? 就像我们在本地自己电脑上浏览网页一样自由? 既能保留 Cookie 环境,又能在遇到验证码时,让你通过浏览器随时“远程附体”进行人工接管? 我花了几天时间,反复追问 Claude、GPT、Grok、Gemini、Kimi,在我的云服务器上跑通了他们一致推荐的方案:WebTop + Tailscale,并且成功登录谷歌、知乎、小红书等平台。