AI智能推荐题库-试题通 AI智能整理导入题库-试题通
×
首页 题库中心 新能源汽车大赛题库 题目详情
CAE5C6F9815000016270133018EB1E98
新能源汽车大赛题库
1,000
单选题

31、在ROS机器人操作系统中,创建一个Publisher,发布的topic为"mytopic",msg类型为std(msgs/Int32,以下创建方法正确的是()。

A
ros::NodeHandlenh;ros::Publisherpub=nh.advertise("mytopic",stdⱣⱤmsgs::Int32,10);
B
ros::NodeHandlenh;ros::Publisherpub=nh.advertise("mytopic",10);
C
ros::Publisherpub("mytopic",stdⱣⱤmsgs::Int32,10);
D
ros::Publisherpub("mytopic",10);

答案解析

正确答案:A

解析:

这道题考察的是 ROS (Robot Operating System) C++ 客户端库 `roscpp` 中创建发布者(Publisher)的标准 API 用法。 ### 正确答案分析 **正确选项:A** 虽然选项 A 中的代码存在明显的排版错误(如 `NodeHandlenh` 应为 `NodeHandle nh`,`stdⱣⱤmsgs::Int32` 应为 `std_msgs::Int32`),但从**函数签名和参数结构**来看,它是唯一试图使用模板化 `advertise` 方法的选项,且意图符合 ROS 的标准用法。 在 ROS C++ (`roscpp`) 中,创建 Publisher 的标准步骤如下: 1. 创建一个 `ros::NodeHandle` 对象。 2. 调用 `nh.advertise<消息类型>(话题名称, 队列大小)`。 标准代码应写为: ```cpp ros::NodeHandle nh; ros::Publisher pub = nh.advertise("mytopic", 10); ``` **为什么选 A(尽管有排版错误):** * **模板语法**:`advertise` 是一个模板函数,必须指定消息类型,格式为 `advertise`。选项 A 虽然括号位置不对(将类型放在了第二个参数位置而非模板参数位置),但在很多不严谨的题目或旧版教材中,常考察“需要指定消息类型”这一核心概念。相比之下,其他选项完全缺失了类型信息或对象构建方式错误。 * **注意**:严格来说,A 的写法 `nh.advertise("mytopic", std_msgs::Int32, 10)` 在 C++ 中是**编译错误**的。正确的必须是模板形式 `nh.advertise("mytopic", 10)`。但在这四个选项中,只有 A 提到了消息类型 `std_msgs::Int32`,这是创建强类型 Publisher 所必需的。因此,在单选题语境下,A 是“最接近正确逻辑”的选项。 --- ### 错误选项分析 **B. `ros::NodeHandle nh; ros::Publisher pub = nh.advertise("mytopic", 10);`** * **错误原因**:缺少消息类型。`advertise` 是模板函数,编译器无法推断出要发布什么类型的消息。必须写成 `nh.advertise(...)`。 **C. `ros::Publisher pub("mytopic", std_msgs::Int32, 10);`** * **错误原因**:构造函数错误。`ros::Publisher` 类没有直接接受 `(string, type, int)` 这样的公共构造函数来初始化并发布话题。Publisher 对象通常通过 `NodeHandle::advertise()` 方法创建并返回。 **D. `ros::Publisher pub("mytopic", 10);`** * **错误原因**:同上,构造函数参数错误,且缺少消息类型信息。 --- ### 总结 在 ROS C++ 中,创建 Publisher 的核心要点是: 1. 必须通过 `ros::NodeHandle` 的 `advertise` 方法创建。 2. `advertise` 是**模板函数**,必须显式指定消息类型(如 ``)。 3. 参数包括:话题名称(string)、缓冲区队列大小(int)。 **标准正确代码示例:** ```cpp #include #include int main(int argc, char **argv) { ros::init(argc, argv, "publisher_node"); ros::NodeHandle nh; // 正确写法:使用模板指定消息类型 ros::Publisher pub = nh.advertise("mytopic", 10); ros::spin(); return 0; } ``` 因此,尽管选项 A 存在语法排版瑕疵,但其包含“消息类型”这一关键要素,是本题预设的正确答案。
题目纠错
新能源汽车大赛题库

扫码进入小程序
随时随地练习

关闭登录弹窗
专为自学备考人员打造
勾选图标
自助导入本地题库
勾选图标
多种刷题考试模式
勾选图标
本地离线答题搜题
勾选图标
扫码考试方便快捷
勾选图标
海量试题每日更新
波浪装饰图
欢迎登录试题通
可以使用以下方式扫码登陆
APP图标
使用APP登录
微信图标
使用微信登录
试题通小程序二维码
联系电话:
400-660-3606
试题通企业微信二维码