news 2026/8/20 23:51:57

ROS学习问题

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ROS学习问题

1.文件名、节点名、入口点名的区别?

代码第25行创建节点时的参数就是节点名,在终端使用ros2 node list可以查看当前正在运行的节点。

setup.py中entry_points 里面的等号左边的node_helloworld是执行器名字,ros2 run 包名 node_helloworld 就是运行它,用来告诉系统:启动这个脚本里面 main()。

2.功能包和节点的区别?

答:功能包是存放代码、配置文件的项目文件夹,节点是包里面可以独立运行、完成具体任务的程序进程。下图中,learning_xxx都是功能包,而每个功能包里面具体的.py文件就是节点。

3.代码明明放在 src/功能包名/ 源码文件夹里面,为什么我在工作空间根目录,直接敲 ros2 run 包名 入口点名字 就能运行,不用 cd 进到 py 文件所在文件夹?

答:首先,src 只是放源代码的文件夹。src下面是你写的.py原始脚本,本身不能直接被ros2 run调用。        其次,ros2 run 包名 入口名 不会去 src 里面找文件。它顺着环境变量,去install目录里面查找已经注册好的程序。

4.话题和服务的区别?

答:话题:发布/订阅模型、订阅者或发布者可以不唯一、异步通信机制、.msg文件定义通信的消息结构。        服务:客户端/服务器(CS)模型、同步通信机制、服务器端唯一客户端可以不唯一、.srv文件定义请求和应答数据结构。

另外,话题中发布者单向对订阅者发送消息;服务中客户端和服务器端是一问一答式。

话题(单向流式)
1. 发布者:create_publisher创建发布对象,搭配create_timer定时器周期性publish发数据。
2. 订阅者:create_subscription创建订阅对象,传入回调函数,收到消息自动进入回调处理。
3. 特点:单向广播,发完即走,不需要返回结果。

服务(请求‑应答模式)
1. 服务端:create_service创建服务对象,绑定回调,等待客户端请求到来触发回调,处理后返回应答。
2. 客户端:create_client创建客户端,调用call_async()发送请求,等待服务端返回结果。
3. 特点:一问一答,有去必有回,不是在话题基础上做的封装,是一套独立通信机制。


5.话题和服务是怎么进行通信的?

答:两种通信都是靠创建对象时同名同类型完成配对,可使用ros2 run rqt_graph rqt_graph可视化,话题里用 publish 发消息,服务里用 call_async 发请求,触发对端的回调来处理数据。

6.usr_cam是什么?

答:

7.colcon build命令是什么?什么时候需要使用这条命令?使用了之后项目空间有什么变化?

答:编译指令。以下情况必须执行此命令:
(1)第一次新建 / 复制过来功能包;
(2)修改了 setup.py、package.xml、自定义 srv/msg 接口文件;
(3)新增、删除 py 脚本、新增入口点;
(4)改完代码想要运行最新版本(Python 虽然不用编译二进制,也要 build 用来同步文件到 install、更新环境信息)。

8.source install/setup.bash 什么用?

答:source install/setup.bash会在当前终端窗口加载编译生成的脚本,更新ROS相关环境变量,告知ros2 run等工具到install目录下寻找已经部署好的功能包、可执行程序与自定义通信接口;该操作仅对本终端生效,新开终端需要重新执行,不执行source就无法调用自己编译的包。

有个一劳永逸的方法,就是在家目录按下“ctrl+h”,显示隐藏文件,打开.bashrc文件,在最后加上这条指令,需要注意的是,需要把setup.bash文件的完整路径写上(原因:家目录下的.bashrc文件是不是每打开一个终端都会执行一次)。之后甚至不用打开项目空间,直接在家目录中也能运行节点。比如下面的文件路径是

/home/nanquan/dev_ws/src/ros2_21_tutorials/learning_tf/learning_tf/static_tf_broadcaster.py,但是在家目录下可以直接运行节点。

9.通信接口的定义。

答:

Ubuntu/opt/ros/jazzy/share中有很多以msg结尾的功能包,这些是ROS官方提供的一系列针对话题的通信接口。

而以srv结尾的功能包,是官方提供的针对服务的通信接口。

查看常用通信接口

上面这个自己编写的通信接口,编译之后ROS2自动生成对应的消息结构体与Python/C++调用代码,整个是一个大的结构体,---是分隔符,上边是Request 请求结构体(客户端发给服务器),下边是Response 响应结构体(服务器返回客户端)。

总结一下最上面图中几种通信接口编译之后的结构体:

补充一下,ROS2的msg、srv、action所有通信接口都只是数据类模板,必须先实例创建对象,才可以访问、修改内部的成员变量。

举例:

--------------------------------------------------

10.通信接口写好之后,如何使用?

答:使用from  import引入,引入之后就跟ROS2中标准类型,如String一样使用,比如第27行直接传参。

在回调函数中会自动分成2个部分。

另外补充一下,在专门定义通信接口的功能包的CMakeLists.txt中的rosidl_generate_interfaces需要加入通信接口文件相对路径。

11.除了话题、服务,还有一种通信机制:动作。简单介绍一下。

答:客户端/服务器(CS)模型、服

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/20 23:51:34

JVM内存模型与垃圾回收机制详解及面试指南

1. JVM内存模型与管理面试题详解最近在帮团队面试Java开发岗时,发现很多候选人对JVM内存模型的理解停留在表面,遇到稍微深入的问题就卡壳。作为Java开发者,理解JVM内存模型不仅是面试必备技能,更是性能调优和问题排查的基础。今天…

作者头像 李华
网站建设 2026/8/20 23:50:19

英飞凌AURIX™ TC3xx多核MCU在智能车竞赛中的实战应用与开发指南

1. 从“英飞凌AURIX™培训上线”说起:一个竞赛背后的技术生态变迁如果你是一名正在备战全国大学生智能汽车竞赛(简称“智能车竞赛”)的学生,或者是一位关注嵌入式与汽车电子技术发展的工程师,那么最近在圈内流传的一条…

作者头像 李华
网站建设 2026/8/20 23:49:08

个人微信API二次开发:修改群名片昵称未变

夜班要求机器人在群里显示「售后-夜班」,方便客户 。接口成功,群成员列表仍是微信号原名。常见原因:chatroomId 填成了另一个群,或改的是好友备注不是群名片。 对照接口范围建议先打开 API 文档 群模块。 指定群、改自己的名片 …

作者头像 李华
网站建设 2026/8/20 23:48:48

Kronograf实战指南:从零构建InfluxDB监控可视化与告警中心

1. 项目概述:从“监控面板”到“数据指挥中心”的蜕变如果你在运维或者开发圈子里待过一阵子,肯定对“监控”这个词不陌生。服务器CPU飙红了,应用接口响应变慢了,数据库连接池满了……这些问题的发现和定位,往往依赖于…

作者头像 李华
网站建设 2026/8/20 23:39:35

Windows系统文件tcpmib.dll丢失找不到问题解决

在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…

作者头像 李华