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

 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"
	}
}

 具体使用演示

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

利用 Hexo 搭建个人博客

〇、前言 本文将会讨论&#xff0c;如何将 CSDN 上的博客&#xff0c;拉取到本地&#xff0c;然后PicGo、Hexo、Github 等工具建立个人博客&#xff0c;环境为 Ubuntu 20.04。 一、利用 Hexo 预备工作 首先安装 Node.js、npm、git工具。 > node -v v12.22.9 > npm -…

复现YOLO_ORB_SLAM3_with_pointcloud_map项目记录

文章目录 1.环境问题2.遇到的问题2.1编译问题1 monotonic_clock2.2 associate.py2.3 associate.py问题 3.运行问题 1.环境问题 首先环境大家就按照github上的指定环境安装即可 环境怎么安装网上大把的资源&#xff0c;自己去找。 2.遇到的问题 2.1编译问题1 monotonic_cloc…

DDR3(三)

目录 1 预取1.1 什么是预取1.2 预取有哪些好处1.3 结构框图1.4 总结 2 突发2.1 什么是突发2.2 突发与预取 本文讲解DDR中常见的两个术语&#xff1a;预取和突发&#xff0c;对这两个概念理解的关键在于地址线的低位是否参与译码&#xff0c;具体内容请继续往下看。 1 预取 1.1…

印尼网络安全治理能力观察

在全国国际机场的移民服务完全瘫痪 100 多个小时后&#xff0c;印尼政府承认其新成立的国家数据中心 (PDN) 遭受了网络攻击。 恶意 Lockbit 3.0 勒索软件加密了存储在中心的重要数据&#xff0c;其背后的黑客组织要求支付 800 万美元的赎金。 不幸的是&#xff0c;大多数数据…

使用Source Insight 4.0

一、使用书签 二、添加文件 三、Search 3.1 替换所有变量 四、右键查询 4.1 查看被调用的地方

【算法笔记自学】第 6 章 C++标准模板库(STL)介绍

6.1vector常见用法详解 #include <cstdio> #include <vector> using namespace std;int main() {int n, x;scanf("%d", &n);vector<int> v;for (int i 0; i < n; i) {scanf("%d", &x);v.push_back(x);}for (int i 0; i <…

[数据结构] 基于插入的排序 插入排序希尔排序

标题&#xff1a;[数据结构] 排序#插入排序&希尔排序 水墨不写bug 目录 &#xff08;一&#xff09;插入排序 实现思路&#xff1a; 插入排序实现&#xff1a; &#xff08;二&#xff09;希尔排序 希尔排序的基本思想&#xff1a; 希尔排序的实现&#xff1a; 正…

Linux 进程间的信号

1.信号的初认识 信号是进程之间事件异步通知的一种方式&#xff0c;属于软中断。通俗来说信号就是让用户或进程给其他用户和进程发生异步信息的一种方式。对于信号我们可以根据实际生活&#xff0c;对他有以下几点认识&#xff1a;1.在没有产生信号时我们就知道产生信号要怎么处…

Win11 Python3.10 安装pytorch3d

0&#xff0c;背景 Python3.10、cuda 11.7、pytorch 2.0.1 阅读【深度学习】【三维重建】windows10环境配置PyTorch3d详细教程-CSDN博客 1&#xff0c;解决方法 本来想尝试&#xff0c;结果发现CUB安装配置对照表里没有cuda 11.7对应的版本&#xff0c;不敢轻举妄动&#x…

求 自然对数 ln(x)

np.log()函数是用来计算数组中每个元素的自然对数的。自然对数是以数学常数e&#xff08;约等于2.71828&#xff09;为底的对数。NumPy作为一个强大的数值计算库&#xff0c;提供了很多用于数组操作的函数&#xff0c;np.log()就是其中之一。 • 下面是一个简单的例子&#xff…

24西安电子科技大学经济与管理学院—考研录取情况

24西安电子科技大学—经理与管理学院—考研录取统计 01、经理与管理学院各个方向 02、24经济与管理近三年复试分数线对比 1、经管院24年院线相对于23年院线普遍下降2-15分&#xff0c;个别专业上涨4-10分。 2、经管院应用经济学2024年院线350分&#xff1b;管理科学与工程院线…

进程控制-exec函数

让父子进程来执行不相干的操作 能够替换进程地址空间的代码.text段 执行另外的程序&#xff0c;不需要创建额外的的地址空间 当前程序中调用另外一个应用程序 指定执行目录下的程序 int execl(const char *path, const char *arg&#xff0c;/* (char *) NULL */); /* pat…

如何配置 PostgreSQL 以实现高可用性和故障转移?

文章目录 一、高可用性和故障转移的概念&#xff08;一&#xff09;数据复制&#xff08;二&#xff09;监控和检测&#xff08;三&#xff09;快速切换 二、实现高可用性和故障转移的技术方案&#xff08;一&#xff09;流复制&#xff08;Streaming Replication&#xff09;&…

一文了解常见DNS结构

很多企业忽略DNS这个关键的组件&#xff0c;而当DNS出现问题是&#xff0c;就会导致网站无法访问、电子邮件无法发送和接收&#xff0c;从而影响到企业的正常运行。而网络团队成员如果想要处理DNS问题就必须对所在网络的DNS架构有一定的理解。 主DNS服务器&#xff1a; 主DNS服…

Pycharm python解释器 unsupported python 3.1 解决

Pycharm 环境 unsupported python 3.1解决 1. 问题重现2. 原因分析3. 解决方法 1. 问题重现 之前使用Pycharm 2024.1.1的时候&#xff0c;环境配置的Python 3.11.9&#xff0c;现在改成使用Pycharm 2020.2.2&#xff0c;结果Python解释器显示“unsupported python 3.1”&#…

一.1.(3)半导体二极管基本电路的分析方法及常见应用电路

1.二极管基本电路的分析方法 先标正负极&#xff0c;再看是否理想二极管 将二极管视为断路&#xff0c;求两端电压 两端电压均大于导通电压&#xff0c;压差大的先导通&#xff08;由于电源不是完全的阶跃&#xff0c;而是有一个电压爬升的过程&#xff09; 2.常见应用电路 1.求…

STL—容器—string类【对其结构和使用的了解】【对oj相关练习的训练】

STL—容器—string类 其实string类准确来说并不是容器&#xff0c;因为他出现的时间比STL要早&#xff0c;但是也可以说是容器吧。 1.为什么要学习string类&#xff1f; 1.1C语言当中的字符串 C语言中&#xff0c;字符串是以’\0’结尾的一些字符的集合&#xff0c;为了操作…

【技术支持】vscode代码格式化空格数量问题

问题 使用AltShiftF代码格式化时&#xff0c;发现有些文件格式化后缩进为2格个空格&#xff0c;有些文件正常4个空格 刨析 发现vue创建的文件使用的是两个空格&#xff0c;而且换行符表示方式也不一样 LF 是 Unix 和 Unix-like 系统&#xff08;如 Linux 和 macOS&#xff0…

springcloud分布式架构网上商城 LW +PPT+源码+讲解

3系统分析 3.1可行性分析 在开发系统之前要进行系统可行性分析&#xff0c;目的是在用最简单的方法去解决最大的问题&#xff0c;程序一旦开发出来满足了用户的需要&#xff0c;所带来的利益也很多。下面我们将从技术、操作、经济等方面来选择这个系统最终是否开发。 3.1.1技术…

网络漏洞挖掘实测报告

关于作者&#xff1a;个人主页 网络漏洞挖掘实测报告 一、前言 网络漏洞挖掘是信息安全领域中至关重要的一环。通过挖掘和修复漏洞&#xff0c;可以有效地保护系统免受潜在的攻击和破坏。本报告旨在记录一次完整的网络漏洞挖掘实测过程&#xff0c;包括实施方法、过程、结果以…