0%

vscode中的snippet功能简介

vscode的语言插件已经内置了一些snippet。例如:C++的插件。当你在编辑器里输入main时,会提示你可以插入的snippet。

img

但是也可以自己定义snippet,然后通过关键字来触发插入snippet

vscode支持非常多编程语言的snippet。通过ctrl+shift+p ,打开命令面板。输入snippet ,就能看到snippet的配置选项。

img

点击Configure User Snippets 后就可以选择配置哪种语言的snippet了。

img

点击语言名称可以生成相应语言的json文件。这个json文件就是用于维护snippet的。其中的cpp.json和python.json文件就是分别维护相应语言snippet的文件。snippet的内容可以按照语言类别来维护。在编辑器里插入时,vscode会检测当前编辑的是什么语言。当输入snippet的触发词时,只会触发对应语言的snippet。

阅读全文 »

ROS发展历程介绍

img

2006 年,无比好奇的一群人走在一起,组建了一个机器人研究实验室:柳树车库(Willow Garage)

2010年5月26日,人类历史上第一个机器人毕业典礼在硅谷这条蜿蜒的柳树街68号的小路旁,临时搭建的一座帐篷中举办。

img

四年思考的三个问题:

第一:为什么人类需要机器人?

斯科特·哈森的答案是:机器人可以帮助我们提高生产和工作效率。机器人已经在工厂里证明可以大幅度的提供工业的生产效率,在日常生活中,人类也需要机器人提高工作效率和生活质量。而且需要大量的机器人。

第二:为什么我们至今还没有好的机器人?

斯科特·哈森答案是:过去的经验告诉我们,造一个机器人非常困难,资本对机器人方向的关注和投入也很少。投资很少是因为市场很小,市场很小是因为机器人能做的事情很有限。没有市场,就没有投资,没有投资就没有人造机器人,没有人造机器人,就没有机器人。所以我们先从造机器人开始。

第三:如何实现人类拥有机器人的梦想?

斯科特·哈森答案是:我们正在做这件事,但是我们自己无法实现这个梦想,我们通过构建一个社群,让工程师,研究人员,工业企业参与进来,联合起来,一起来做 。希望有生之年能实现这个梦想,一个人人拥有机器人的梦想。

阅读全文 »

ROS2的通信中间件换成了DDS。这让我们可以精准地控制节点间的通信质量。通信效率也迎来了一次大的提升。

但是…

但是…

一个不小心,看到了类似这样的报错信息:

1
[WARN] [1644578813.965216245] [subscriber_qos_obj]: New publisher discovered on topic '/qos_test', offering incompatible QoS. No messages will be received from it. Last incompatible policy: RELIABILITY

本来好好的Rviz也显示不了雷达数据了。

这就是incompatible QoS搞的鬼!

两个节点的Qos设置不兼容将没法通信

阅读全文 »

C++ 标准库接口众多。在实际使用时如果不熟悉常常感到无从下手。阅读开源代码时,常常能看到使用C++新特性的优美代码,但却显得那么陌生。

如果你也遇到这样的问题。下面两个C++ API 网站正好是你需要的利器。

中文版C++ 参考手册

https://www.apiref.com/cpp-zh/index.html

img

这个网站已经支持到C++20了。

除此之外,网站内也有接口的示例代码,方便了解怎么使用。

阅读全文 »

建立Todo Tree

写代码时,常常需要标记某处是需要改动的。但是现在可能暂时没法处理。通常的习惯是,在相应的位置打上TODO,然后写明需要处理的内容。有时间后再回头处理。但是回头后怎么快速找到这些TODO的位置呢?

这里介绍VScode中的Todo Tree插件。它能自动帮你把现在工程里的TODO以文件树的形式显示在左侧边栏。

另一个TODO Highlight插件可以高亮TODOFIXME关键字。

Git插件

Git Graph

这个插件可以图形化显示分支的历史合并记录和commit内容。

ctrl+shift+p打开命令输入面板,输入git就能发现git graph了。

阅读全文 »

这篇文章着重介绍自定义ROS2类型数据时,我们可以使用哪些基础类型。这也是我之前困惑的一个问题。所以这里简单汇总说明一下。关于消息、服务和动作接口的使用说明,请查看本次推送的第一篇推文。

自定义msg示例

定义msg数据和在C++中定义一个结构体是一样的。只是类型名称有些区别。然后不需要加分号。

1
2
3
4
Header header
float64 circle_x
float64 circle_y
float32[] ranges

自定义service数据示例

service数据包含两个部分:请求和应答。这两部分用---隔开。两部分数据可分别定义,并且可以为空类型(std_msgs/Empty)。

1
2
3
4
5
6
7
8
# Request 
geometry_msgs/PoseStamped goal
geometry_msgs/PoseStamped start
string planner_id
bool use_start # If true, use current robot pose as path start, if false, use start above instead
---
# Respond
nav_msgs/Path path
阅读全文 »

想早起,那得早睡。但具体几点睡比较好,那还真是有科学依据的。

你是否总在早上被闹钟惊醒后,感觉浑身乏力、脑袋昏沉?又或者明明睡了七八个小时,白天却还是打不起精神?其实,这很可能不是你睡得不够,而是睡眠节奏出了问题。

其实睡眠是有周期的,在完整的睡眠周期结束后起床,精神是最饱满的。

但很多人对睡眠的理解还停留在 “睡够时间就行”,但事实上,睡眠是一场有规律的循环之旅。我们的睡眠由浅睡眠、深睡眠和 REM 睡眠(快速眼动睡眠)三个阶段组成,每个完整的循环大约持续 90-120 分钟。如果在循环中途醒来,哪怕总睡眠时间足够,也会觉得疲惫。

比如,成年人需要 7-9 小时睡眠,但有人睡了 8 小时却因为在深睡眠阶段被叫醒,反而比睡 6 小时但完整经历 4 个循环的人更累。

所以我们需要一款睡眠计算器来计算合适的睡觉时间,让睡眠高效又舒适。

睡眠计算器的核心作用,就是帮你避开 “打断循环” 的坑 —— 只要输入你的年龄和起床时间(或睡觉时间),它就能算出最适合的作息,确保你在睡眠周期的 “浅睡阶段” 醒来,起床后神清气爽。

阅读全文 »