2.2.2.1 如何在vscode 中设置ROS2的 用户代码片段

news2024/10/5 13:59:43

 1. vscode中设置C++版本的ROS2用户代码片段

1) 找到vscode 下的设置选项,选择用户代码片段

2) 选择用户代码片段后,会弹出选择框,如下图,输入C++,选择 cpp.json

配置好的文件

进入如下文件,下图为本人配置的代码片段模版文件

{
	// Place your snippets for cpp here. Each snippet is defined under a snippet name and has a prefix, body and 
	// description. The prefix is what is used to trigger the snippet and the body will be expanded and inserted. Possible variables are:
	// $1, $2 for tab stops, $0 for the final cursor position, and ${1:label}, ${2:another} for placeholders. Placeholders with the 
	// same ids are connected.
	// Example:
	// "Print to console": {
	// 	"prefix": "log",
	// 	"body": [
	// 		"console.log('$1');",
	// 		"$2"
	// 	],
	// 	"description": "Log output to console"
	// }

	"Print to console": {
		"prefix": "ros2_node_cpp",
		"body": [
				"/*",  
				"	 需求:订阅发布方发布的消息,并在终端输出。",
				"	 流程:",
				"		1.包含头文件;",
				"		2.初始化ROS2客户端;",
				"		3.自定义节点类;",
				"		3-1.创建订阅方;",
				"		3-2.解析并输出数据。",
				"		4.调用spain函数,并传入节点对象指针;",
				"		5.资源释放。",
				"*/",
				"// 1.包含头文件",
				"#include \"rclcpp/rclcpp.hpp\"",
				"",
				"// 3.自定义节点类",
				"class MyNode: public rclcpp::Node{",
				"public:",
				"	MyNode():Node(\"mynode_node_cpp\"){",
				"		",
				"		",
				"	}",
				"};",
				"",
				"int main(int argc, char const *argv[])",
				"{",
				"	// 2.初始化ROS2客户端;",
				"	rclcpp::init(argc,argv);",
				"	// 4.调用spain函数,并传入节点对象指针;",
				"	rclcpp::spin(std::make_shared<MyNode>());",
				"	// 5.资源释放。",
				"	rclcpp::shutdown();",
				"	return 0;",
				"}",
		],
		"description": "ros2 main func"
	}
}
 配置方法:

把提前准备好的代码,复制到"body"的 [ ] 中,修改"prefix": 后的名字为“ros2_node_cpp”, 再修改最后一行“description”:后的描述 为“ros2 main func”

然后也是最关键的部分,把上述代码的每一行(包括:空行)都用  "   "  双引号包裹起来, 每一行的末尾加上逗号 ,  (一定是英文的符号),对于文件中原本自带的双引号,则原来的双引号前加上\ 如下所示:

"#include \"rclcpp/rclcpp.hpp\"",

如果代码仍然显示为报错的红色,则按住FN + F 键   弹出一个窗口,把 "        " tab 制表符,换成四个空格,如图所示:

然后选择全部替,保存此文件,即可

具体使用演示

在工作空间中的功能包的src下,新建一个.cpp文件,如test.cpp   

输入如下,选择ros2_node_cpp    然后即可显示出我们配置好的文件模版,选择并按下enter键即可,无需手写

 

2. vscode中设置python版本的ROS2用户代码片段

     在设置中选择用户代码片段后  输入python 即可,选择相应的文件  具体操作方法同方C++

配置好的文件

{
	// Place your snippets for python here. Each snippet is defined under a snippet name and has a prefix, body and 
	// description. The prefix is what is used to trigger the snippet and the body will be expanded and inserted. Possible variables are:
	// $1, $2 for tab stops, $0 for the final cursor position, and ${1:label}, ${2:another} for placeholders. Placeholders with the 
	// same ids are connected.
	// Example:
	// "Print to console": {
	// 	"prefix": "log",
	// 	"body": [
	// 		"console.log('$1');",
	// 		"$2"
	// 	],
	// 	"description": "Log output to console"
	// }

	"Print to console": {
		"prefix": "ros2_node_py",
		"body": [
				"\"\"\"",  
				"需求:以某个固定频率发送文本“hello world!”,文本后缀编号,每发布一条,编号+1.",
				"流程:",
				"	1.导包",
				"	2.初始化ROS2客户端",
				"	3.自定义节点类",
				"	3-1.创建消息发布方",
				"	3-2.创建定时器",
				"	3-3.组织并发布消息",
				"	4.调用spin函数,传入自定义类对象",
				"	5.释放资源",
				"",
				"\"\"\"",
				"# 1.导包",
				"import rclpy",
				"from rclpy.node import Node",
				"",
				"",
				"# 3.自定义节点类",
				"class MyNode(Node):",
				"	def __init__(self):",
				"		super().__init__(\"mynode_node_py\")",
				"",	
				"",
				"",
				"def main():",
				"	# 2.初始化ROS2客户端",
				"	rclpy.init()",
				"	# 4.调用spin函数,传入自定义类对象",
				"	rclpy.spin(MyNode())",
				"	# 5.释放资源",
				"	rclpy.shutdown()",
				"",
				"if __name__ == '__main__':",
				"	main()",
		],
		"description": "ros2 node func"
	}
}

具体使用演示

 

 3. vscode 中设置package.xml文件的用户代码片段

     在设置中选择用户代码片段后  输入xml 即可,选择相应的文件  具体操作方法同方C++

配置好的文件

{
	// Place your snippets for xml here. Each snippet is defined under a snippet name and has a prefix, body and 
	// description. The prefix is what is used to trigger the snippet and the body will be expanded and inserted. Possible variables are:
	// $1, $2 for tab stops, $0 for the final cursor position, and ${1:label}, ${2:another} for placeholders. Placeholders with the 
	// same ids are connected.
	// Example:
	// "Print to console": {
	// 	"prefix": "log",
	// 	"body": [
	// 		"console.log('$1');",
	// 		"$2"
	// 	],
	// 	"description": "Log output to console"
	// }

	"Print to console": {
		"prefix": "ros2_package_xml",
		"body": [
				"",
				"<!-- 编译依赖 -->",
				"<build_depend>rosidl_default_generators</build_depend>",
				"<!-- 执行依赖 -->",
				"<exec_depend>rosidl_default_runtime</exec_depend>",
				"<!-- 声明当前包所属的功能包组 -->",
				"<member_of_group>rosidl_interface_packages</member_of_group>",
				"",
		],
		"description": "ros2 package xml"
	}
}

因为这些依赖比较长,很容易记错,手写很容易出错,所以这部分可配置成用户代码片段

具体使用演示

 

 4. vscode 中设置 cmakelists.txt 文件的用户代码片段

   在设置中选择用户代码片段后  输入 cmake 即可,选择相应的文件  具体操作方法同方C++

 配置好的文件

{
	// Place your snippets for cmake here. Each snippet is defined under a snippet name and has a prefix, body and 
	// description. The prefix is what is used to trigger the snippet and the body will be expanded and inserted. Possible variables are:
	// $1, $2 for tab stops, $0 for the final cursor position, and ${1:label}, ${2:another} for placeholders. Placeholders with the 
	// same ids are connected.
	// Example:
	// "Print to console": {
	// 	"prefix": "log",
	// 	"body": [
	// 		"console.log('$1');",
	// 		"$2"
	// 	],
	// 	"description": "Log output to console"
	// }

	"Print to console": {
		"prefix": "ros2_cmake_txt",
		"body": [
				"",
				"find_package(rosidl_default_generators REQUIRED)",
				"# 为接口文件生成源码",
				"rosidl_generate_interfaces(${PROJECT_NAME}",
				"\"msg/Student.msg\"",
				")",
				"",
		],
		"description": "ros2 cmake txt"
	}
}

 具体使用演示

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1901062.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

E1.【C语言】练习:用函数求两个整数的较大值

有关创建函数见&#xff1a; 12.【C语言】创建函数 写法 1&#xff1a;if语句 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> int max(int a, int b) {if (a > b)return a;elsereturn b; } int main() {int a 0;int b 0;scanf("%d%d", &a,…

数据可视化之智慧城市的脉动与洞察

在数字化转型的浪潮中,城市作为社会经济发展的核心单元,正经历着前所未有的变革。城市数据可视化大屏看板作为这一变革中的重要工具,不仅极大地提升了城市管理效率,还为公众提供了直观、全面的城市运行状态视图,成为智慧城市建设不可或缺的一部分。本文将深入探讨以“城市…

【MySQL04】【 redo 日志】

文章目录 一、前言二、redo 日志1. redo 日志格式2. Mini-Transaction2.1 以组的形式写入 redo 日志2.2 Mini-Transaction &#xff08;MTR&#xff09;概念 3. redo 日志写入过程3.1 redo 日志缓冲区3.3 redo 日志写入 log buffer 4. redo 日志文件4.1 redo 日志刷盘机制4.2 r…

实现桌面动态壁纸(二)

目录 前言 一、关于 WorkerW 工作区窗口 二、关于窗口关系 2.1 窗口以及窗口隶属关系 2.2 桌面管理层窗口组分简析 2.3 厘清两个概念的区别 2.4 关于设置父窗口 三、编写代码以供在 Vista 上实现 3.1 方法二&#xff1a;子类化并自绘窗口背景 四、初步分析桌面管理层…

qt 如何添加子项目

首先我们正常流程创建一个项目文件&#xff1a; 这是我已经创建好的&#xff0c;请无视红线 然后找到该项目的文件夹&#xff0c;在文件夹下创建一个文件夹&#xff0c;再到创建好的文件夹下面创建一个 .pri 文件&#xff1a; &#xff08;创建文件夹&#xff09; &#xff08…

自闭症在生活中的典型表现

自闭症&#xff0c;这个看似遥远却又悄然存在于我们周围的疾病&#xff0c;其影响深远且复杂。在日常生活中&#xff0c;自闭症患者的典型表现往往让人印象深刻&#xff0c;这些表现不仅揭示了他们内心的世界&#xff0c;也提醒我们要以更加包容和理解的心态去面对他们。 首先…

嵌入式C语言面试相关知识——关键字(不定期更新)

嵌入式C语言面试相关知识——关键字 一、博客声明二、C语言关键字1、sizeof关键字2、static关键字3、const关键字4、volatile关键字5、extern关键字 一、博客声明 又是一年一度的秋招&#xff0c;怎么能只刷笔试题目呢&#xff0c;面试题目也得看&#xff0c;想当好厂的牛马其实…

六、快速启动框架:SpringBoot3实战-个人版

六、快速启动框架&#xff1a;SpringBoot3实战 文章目录 六、快速启动框架&#xff1a;SpringBoot3实战一、SpringBoot3介绍1.1 SpringBoot3简介1.2 系统要求1.3 快速入门1.4 入门总结回顾复习 二、SpringBoot3配置文件2.1 统一配置管理概述2.2 属性配置文件使用2.3 YAML配置文…

前端面试题8

基础知识 解释一下什么是跨域问题&#xff0c;以及如何解决&#xff1f; 跨域问题是由于浏览器的同源策略限制了从一个源加载的网页脚本访问另一个源的数据。解决方法包括使用JSONP、CORS&#xff08;跨源资源共享&#xff09;、设置代理服务器等。 描述一下事件冒泡和事件捕获…

kubernetes集群部署:node节点部署和cri-docker运行时安装(四)

安装前准备 同《kubernetes集群部署&#xff1a;环境准备及master节点部署&#xff08;二&#xff09;》 安装cri-docker 在 Kubernetes 1.20 版本之前&#xff0c;Docker 是 Kubernetes 默认的容器运行时。然而&#xff0c;Kubernetes 社区决定在 Kubernetes 1.20 及以后的…

Spring中的事件监听器使用学习

一、什么是Spring中的事件监听机制&#xff1f; Spring框架中的事件监听机制是一种设计模式&#xff0c;它允许你定义和触发事件&#xff0c;同时允许其他组件监听这些事件并在事件发生时作出响应。这种机制基于观察者模式&#xff0c;提供了一种松耦合的方式来实现组件间的通信…

自动缩放 win7 远程桌面

https://mremoteng.org/download 用这个软件&#xff0c;下载 zip 版&#xff0c;不需要管理员权限 在这里找到的&#xff0c;选票最高的一个就是 https://superuser.com/questions/1030041/remote-desktop-zoom-and-full-screen-how-win10-remote-win7-2008-2003-ho

蓝桥杯开发板STM32G431RBT6高阶HAL库学习FreeRtos——认识HAL_Delay和osDelay的区别

一、修改两个任务的优先级 任务一 任务二 二、使用HAL_Delay的实验结果 结果&#xff1a; LED1亮&#xff0c;LED2不亮 三、使用osDelay的实验结果 结果&#xff1a; LED1亮&#xff0c;LED2亮 四、解释原因 vTaskDelay 与 HAL_Delay 的区别 1.vTaskDelay 作用是让任务阻…

基于RK3588的8路摄像头实时全景拼接

基于RK3588的8路摄像头实时全景拼接 输入&#xff1a;2路csi转8路mpi的ahd摄像头&#xff0c;分辨率1920 * 1080 8路拼接结果&#xff1a; 6路拼接结果&#xff1a; UI界面&#xff1a; UI节目设计原理

Python爬虫获取视频

验证电脑是否安装python 1.winr输入cmd 2.在黑窗口输入 python.exe 3.不是命令不存在就说明python环境安装完成 抓取快手视频 1.在phcharm应用中新建一个项目 3.新建一个python文件 4.选择python文件,随便起一个名字后按回车 5.安装requests pip install requests 6.寻找需要的…

前端正悄悄蚕食后端开发者的工作,这真的好吗?

**前端正悄悄蚕食后端开发者的工作&#xff0c;这真的好吗&#xff1f;** 前端开发者的职责范围正在逐渐扩大。从最初的单纯页面设计&#xff0c;到现在的与后端数据交互、应用逻辑处理等&#xff0c;前端开发者在项目中的作用日益重要。与此同时&#xff0c;这也引发了一个值…

C++库函数--next_permutation(详细)

next_permutation介绍 用于生成某个序列的下一个排列。它通常在需要生成排列的问题中使用&#xff0c;比如全排列问题。 使用方法 普通序列 &#xff1a;next_permutation&#xff08;起始地址&#xff0c;末尾地址1&#xff09; 结构体&#xff1a;next_permutation&#…

cmake find_package 使用笔记

目录 1 find_package2 config mode2.1 搜索的文件名2.2 搜索路径 3 module mode3.1 搜索的文件名3.2 搜索路径 参考 1 find_package 这是官方文档 下面是学习总结&#xff1a; 首先是find_package的作用是什么&#xff1f;引入预编译的库。 find_package有两种模式&#xff1a…

如何搜索查找ICLR论文

记录有几个查找顶级会议文章的网址&#xff0c;不止ICLR ICLR 2024 还会有visualization模式&#xff1a; ICLR 2024 virtual 这个网站也很棒 Paper Copilot ICLR 2024 当然还有一个用图表示各论文相关关系的网站&#xff1a; connected papers

机械硬盘坏了怎么导出数据?5中高效恢复数据的方法

面对机械硬盘损坏的紧急情况&#xff0c;如何有效地导出数据成为了许多用户关注的焦点。以下是对上述方法的深入分析与润色&#xff0c;旨在为用户提供更加全面、清晰的指导。 机械硬盘损坏后的数据导出策略 1. 利用数据恢复软件&#xff1a; 当机械硬盘出现逻辑故障或轻微物…