当前位置: 首页 > news >正文

机器人TF坐标系变换与一些可视化工具的应用

TF坐标在ROS中是一个非常重要的概念,因为机器人在做日常操作任务的时候,对于其所在位置朝向是需要时刻知道的,而机器人是由很多节点组成的协同任务,对于每个部件,我们需要知道它的位姿(位置和朝向),这使得坐标系就成为了一个很重要的问题。
TF的功能就是能够换算出该点在其他坐标系下的坐标。比如,以机器人为例,定义两个坐标系,一个坐标系以机器人移动平台的中心为原点,称为base_link参考系,另一个坐标系以激光雷达的中心为原点,称为base_laser参考系,当然这个命名是需要唯一。利用TF坐标转换,将base_laser参考系与base_link参考系重合,这样就可以准确得知机器人自身位置,便于继续进行下一步的操作。

1、术语概述

那么在介绍坐标系的时候,会经常看到位置、朝向,位姿等术语,先介绍下在三维世界中的几个术语:
位置:是一个三维的向量(x,y,z),用于表示相对于原点沿着各个轴的方向分别移动了多远。
朝向:也是一个三维向量(roll,pitch,yaw),用于表示分别绕各个轴转动了多少。
位姿:将位置和朝向放在一起,一对(位置,朝向)表示一个位姿。这种具有六维(三维位移,三维旋转)的位姿成为6D位姿
给定两者之间的位姿,我们可以变换两个坐标系下的数据,这个变换通常是一些矩阵乘法。有的位姿是动态的,有的位置是固定的,比如说,固定在机器人身上的激光雷达,就是相对固定的;而机械手的位姿就是不断变化的,因为需要移动,旋转等和做一些抓取动作。
为了管理这些坐标系和变换,就设计了这个tf(Transform的缩写)包来实现,使用的是分布式的方式,用ROS话题来共享变换的数据。任何节点可以发布某些变换的当前信息,并且任何节点都可以订阅变换的数据,从不同的发布源得到机器人各部件之间的所有变换关系。

2、tf坐标系

对于一个强大系统来说,tf会比较的复杂,出错的可能性较大,所以就出现很多关于tf相关的检查和调试工具,帮助你理解正在发生的实情,我们接下来看下有哪些可视化的工具可供使用。

2.1、view_frames

我们先启动海龟示例,对于前面安装过的可以忽略,也可以使用 sudo apt install ros-melodic-turtle-tf 进行安装,对于ros的安装,推荐大家可以看下前面介绍的一篇文章:Ubuntu18.04版本安装ROS及出现错误的处理方法

启动海龟

roslaunch turtle_tf turtle_tf_demo.launch

启动键盘操作

rosrun turtlesim turtle_teleop_key

然后再开一个终端运行命令:rosrun tf view_frames

the rosdep view is empty: call 'sudo rosdep init' and 'rosdep update'
Listening to /tf for 5.0 seconds
Done Listening
dot - graphviz version 2.40.1 (20161225.0304)

Detected dot version 2.40
frames.pdf generated

这里生成了一个坐标系的pdf文件frames.pdf,在后面看到的frame也都表示为坐标系的意思。

2.2、rqt_tf_tree

对于上面这个view_frames命令,运行后保存的是当前坐标系,不过这样的保存是离线的,不能实时反映变化的坐标关系。
我们换一个命令:rqt_tf_tree,可以显示tf坐标系的树结构

rosrun rqt_tf_tree rqt_tf_tree

运行上面命令将会弹出可视化界面,如下图:

可以看到,显示了录制时间,两个海龟对应的广播(发布)节点,平均速率、缓冲大小,最近和最旧的转换时间,还可以高亮显示,鼠标放在节点上面,相关节点将显示不同颜色。
我们可以操作海龟,然后点击左上角的刷新,就会看到速率等都发生了变化,这样看起来就比较直观。如下图:

TF建立的树状结构的坐标系,在整个坐标系是没有闭环的,也就是说每个坐标系,只能有一个父坐标系,但可以有多个子坐标系。

2.3、tf_echo

命令格式:rosrun tf tf_echo <source_frame> <target_frame> 
显示的信息是从source_frametarget_frame的旋转平移变换。

查看两只海龟参考系之间的关系

rosrun tf tf_echo turtle1 turtle2

At time 1652155224.053
- Translation: [0.000, 0.000, 0.000]
- Rotation: in Quaternion [0.000, 0.000, 0.893, 0.450]
            in RPY (radian) [0.000, -0.000, 2.208]
            in RPY (degree) [0.000, -0.000, 126.509]
At time 1652155225.061
- Translation: [0.000, 0.000, 0.000]
- Rotation: in Quaternion [0.000, 0.000, 0.893, 0.450]
            in RPY (radian) [0.000, -0.000, 2.208]
            in RPY (degree) [0.000, -0.000, 126.509]
At time 1652155226.053
- Translation: [0.000, 0.000, 0.000]
- Rotation: in Quaternion [0.000, 0.000, 0.893, 0.450]
            in RPY (radian) [0.000, -0.000, 2.208]
            in RPY (degree) [0.000, -0.000, 126.509]

2.4、static_transform_publisher

两个坐标系之间的静态坐标变换,这两个坐标系不发生相对位置变化。比如说,无人车上的激光雷达与IMU惯性测量模块,这两者基本是固定的,所以可以使用static_transform_publisher来发布这两者的坐标变换。
命令格式如下:
第一种命令格式:

static_transform_publisher x y z yaw pitch roll frame_id child_frame_id period_in_ms

第二种命令格式:

static_transform_publisher x y z qx qy qz qw frame_id child_frame_id period_in_ms

上面的两种格式,需要设置坐标的偏移和旋转参数
偏移参数:都使用相对于x y z三轴的坐标位移。
旋转参数:其中第一种命令格式使用以弧度为单位的 yaw pitch roll 三个角度(yaw是围绕x轴旋转的偏航角,pitch是围绕y轴旋转的俯仰角,roll是围绕z轴旋转的翻滚角
第二种命令格式使用四元数表达旋转角度。
period_in_ms发布频率以毫秒为单位,一般100ms也就是0.1秒比较合适。

launch中使用方法示例如下:

<launch><node pkg="tf" type="static_transform_publisher" name="link1_broadcaster" args="1 0 0 0 0 0 1 link1_parent link1 100" />
</launch>

2.5、roswtf

roswtf是一个插件,分析你当前的tf配置并试图找出常见问题。
比如输入命令,本人当前状态显示如下信息,有错误等情况都会高亮显示:

the rosdep view is empty: call 'sudo rosdep init' and 'rosdep update'
No package or stack in the current directory
================================================================================
Static checks summary:

Found 1 error(s).

ERROR ROS Dep database not updated: Please update rosdep database with 'rosdep update'.
================================================================================
Beginning tests of your ROS graph. These may take a while...
analyzing graph...
... done analyzing graph
running graph rules...
connection to [/tf_echo_1652154589994246734] timed out
... done running graph rules

Online checks summary:

Found 1 warning(s).
Warnings are things that may be just fine, but are sometimes at fault

WARNING The following node subscriptions are unconnected:
 * /tf_echo_1652154589994246734:
   * /tf_static
 * /turtle_pointer:
   * /tf_static


Found 2 error(s).

ERROR Could not contact the following nodes:
 * /tf_echo_1652154589994246734

ERROR Errors connecting to the following services:
 * service [/tf_echo_1652154589994246734/set_logger_level] appears to be malfunctioning: Unable to communicate with service [/tf_echo_1652154589994246734/set_logger_level], address [rosrpc://jetson-desktop:54551]
 * service [/tf_echo_1652154589994246734/get_loggers] appears to be malfunctioning: Unable to communicate with service [/tf_echo_1652154589994246734/get_loggers], address [rosrpc://jetson-desktop:54551]

3、tab键

tab键,能够将代码补全或显示有关输入命令的未完成命令,双击tab键可以提高效率和确保输入的命令是无误的。
比如输入:rosrun rqt_   然后双击tab键,将自动出现关于rqt开头的各种节点:

rqt_action           rqt_logger_level     rqt_robot_monitor
rqt_bag              rqt_moveit           rqt_robot_steering
rqt_bag_plugins      rqt_msg              rqt_runtime_monitor
rqt_console          rqt_nav_view         rqt_rviz
rqt_dep              rqt_plot             rqt_service_caller
rqt_graph            rqt_pose_view        rqt_shell
rqt_gui              rqt_publisher        rqt_srv
rqt_gui_cpp          rqt_py_common        rqt_tf_tree
rqt_gui_py           rqt_py_console       rqt_top
rqt_image_view       rqt_reconfigure      rqt_topic
rqt_launch           rqt_robot_dashboard  rqt_web

如果内容显示特别多,还会提示,比如我只输入:rosrun然后双击tab键
Display all 229 possibilities? (y or n)
可以选择是否继续显示。

如果输入的命令接下来是确定性匹配,这个时候双击tab键将自动补全剩余的。
比如输入:rosrun rqt_gu
双击tab键将会自动补全成rosrun rqt_gui,我们再次双击tab键,将列出rqt_gui开头的所有匹配节点:

rqt_gui      rqt_gui_cpp  rqt_gui_py

4、可视化工具

4.1、rqt_graph

rqt_graph可以将计算图可视化,输入命令:rosrun rqt_graph rqt_graph
如果没有启动节点管理器而直接运行这条命令则会报错:
Could not find ROS master,Either start a 'roscore' or abort loading the plugin.

所以我们在此之前,先启动节点管理器,也是以海龟为示例,然后运行上面那条命令,如下图: 

可以直观的看到两个海龟节点,里面有pose位姿,键盘操作等话题,然后位姿通过各自的广播来发布信息,中间有一个就是我们这节重点讲解的tf坐标系的话题topic:/tf(具备订阅和发布功能)来变换坐标,最后通过节点/turtle_pointer/rosout输出。
对于图中有哪些节点,我们也可以通过命令来获取:rosnode list

/rosout
/sim
/teleop
/teleop_turtle
/turtle1_tf_broadcaster
/turtle2_tf_broadcaster
/turtle_pointer

对于节点可以看做是网站中的各自端口对应的应用,所以我们也可以像ping网络一样的来查看:
rosnode ping /rosout

rosnode: node is [/rosout]
pinging /rosout with a timeout of 3.0s
xmlrpc reply from http://jetson-desktop:46881/    time=1.574039ms
xmlrpc reply from http://jetson-desktop:46881/    time=1.164913ms
...

rosnode ping /sim

rosnode: node is [/sim]
pinging /sim with a timeout of 3.0s
xmlrpc reply from http://jetson-desktop:36081/    time=1.548052ms
xmlrpc reply from http://jetson-desktop:36081/    time=1.078129ms
...

4.2、rqt_topic 

rqt_topic查看话题的一个插件,能够知道各节点话题的具体实时变化情况,输入命令:

rosrun rqt_topic rqt_topic

如下图:

可以看到,每个话题的详细信息,有Type消息类别、Bandwidth带宽、Hz频率、Value值。
我们点开/tf坐标系查看下里面有哪些属性,如下图:


可以看到,指明了父坐标和子坐标,当然主要还是坐标的转换,其中时间戳有两个,一个纳秒和一个秒为单位的时间。 

 4.3、rqt_publisher

rqt_publisher用来发布具有固定或计算字段值的任意消息。输入命令:
rosrun rqt_publisher rqt_publisher
将会弹出如下图的界面:

topic话题和type消息数据类型,都可以点击下拉框进行选择,频率的输入,然后点击+号添加进来。如下图: 

然后就可以修改里面的expression字段对应的值,手动进行输入调试。

4.4、rviz

rvizROS自带的一个图形化工具,可以方便的对ros的程序进行图形化操作。输入命令:rviz
如下图:

主要分5个功能区,如图中所标识的。其中工具栏中的Set initial poseSet target posePublish location point:一般在建图导航时使用。

添加显示操作如图:

点击左下角的Add按钮,将会弹出一个界面,然后可以选择“By display type”通过显示类型来添加,不过需要自己修改对应话题,坐标系才可以显示出来;或者就是选择“By topic”通过话题的方式,直接添加就可以正常显示。最后点击右下角的OK按钮即可

最后温馨提示,在使用ROS核心工具和其他Linux命令的时候,常记得敲tab键,可以节省大量时间。

相关文章:

机器人TF坐标系变换与一些可视化工具的应用

TF坐标在ROS中是一个非常重要的概念&#xff0c;因为机器人在做日常操作任务的时候&#xff0c;对于其所在位置和朝向是需要时刻知道的&#xff0c;而机器人是由很多节点组成的协同任务&#xff0c;对于每个部件&#xff0c;我们需要知道它的位姿(位置和朝向)&#xff0c;这使得…...

c++ 友元 运算符重载详解

友元 c是面向对象的&#xff0c;目的之一&#xff1a;封装 封装&#xff1a; 优点之一&#xff0c;就是安全。 缺点&#xff1a;在某些特殊的场合&#xff0c;不是很方便。 华为与IBM 40亿的咨询故事 IBM需要对华为各级部门做深度咨询分析&#xff0c; 为了提高咨询效率&a…...

DataWhale 机器学习夏令营第三期

DataWhale 机器学习夏令营第二期 学习记录一 (2023.08.18)1.赛题理解2.缺失值分析3. 简单特征提取4. 数据可视化离散变量离散变量分布分析 DataWhale 机器学习夏令营第三期 ——用户新增预测挑战赛 学习记录一 (2023.08.18) 已跑通baseline&#xff0c;换为lightgbm基线&#…...

回归预测 | MATLAB实现BES-LSSVM秃鹰搜索算法优化最小二乘支持向量机多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现BES-LSSVM秃鹰搜索算法优化最小二乘支持向量机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现BES-LSSVM秃鹰搜索算法优化最小二乘支持向量机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&a…...

python分析实战(4)--获取某音热榜

1. 分析需求 打开某音热搜&#xff0c;选择需要获取的热榜如图 查找包含热搜内容的接口返回如图 将url地址保存 2. 开发 定义请求头 headers {Cookie: 自己的cookie,Accept: application/json, text/plain, */*,Accept-Encoding: gzip, deflate,Host: www.douyin.com,…...

Java根据List集合中的一个字段对集合进行去重

利用HashSet 创建了一个HashSet用于存储唯一的字段值&#xff0c;并创建了一个新的列表uniqueList用于存储去重后的对象。遍历原始列表时&#xff0c;如果字段值未在HashSet中出现过&#xff0c;则将其添加到HashSet和uniqueList中。 List<Person> originalList new Ar…...

(AtCoder Beginner Contest 315)

A.直接模拟即可 import random import sys import os import math from collections import Counter, defaultdict, deque from functools import lru_cache, reduce from itertools import accumulate, combinations, permutations from heapq import nsmallest, nlargest, h…...

API 接口选择那个?RESTful、GraphQL、gRPC、WebSocket、Webhook

大家好&#xff0c;我是比特桃。目前我们的生活紧紧地被大量互联网服务所包围&#xff0c;互联网上每天都有数百亿次API调用。API 是两个设备相互通讯的一种方式&#xff0c;人们在手机上每次指尖的悦动&#xff0c;背后都是 API 接口的调用。 本文将列举常见的一些 API 接口&…...

「Python|音视频处理|环境准备」如何在Windows系统下安装并配置音视频处理工具FFmpeg

本文主要介绍如何在Windows系统下安装并配置音视频处理工具FFmpeg&#xff0c;方便使用python进行音视频相关的下载或编辑处理。 文章目录 一、下载软件二、解压并配置三、验证安装 一、下载软件 首先要去 ffmpeg官网 下载软件包 由于上面直接下载的按钮是.tar.xz格式的。为了…...

软考高级架构师下篇-12层次式架构设计理论与实践

目录 1. 考情分析2. 层次式体系结构概述3. 表现层框架设计4. 中间层框架设计5. 数据访问层设计6. 数据架构规划与设计7. 物联网层次架构设计8. 前文回顾1. 考情分析 根据考试大纲,层次式架构设计理论与实践知识点会涉及单选题型(约占2~5分)和案例题(25分),本小时内容偏重于方…...

234. 回文链表

234. 回文链表 给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为回文链表。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* L…...

LInux之例行工作

目录 场景 单一执行例行任务 --- at&#xff08;一次性&#xff09; 安装 命令详解 语法格式 参数及作用 时间格式 案例 at命令执行过程分析 循环执行的例行性任务--crontab&#xff08;周期性&#xff09; crontd服务安装 linux 任务调度的工分类 crontab工作过程…...

C++,从“hello world“开始

一、"hello world" #inclue <iostream>using namespace std;int main() {cout << "hello world" << endl;return 0; } 1.1 #include&#xff1a;预处理标识 1.2 <iostream>&#xff1a;输入输出流类所在头文件 1.2.1 istream&a…...

/root/.ssh/config line 2: Bad protocol 2 host key algorithms ‘+ssh-rsa‘.

文章目录 1、问题2、查看openssh版本3、解决问题4、重新生成密钥5、查看是否可连接工蜂 1、问题 ssh访问工蜂报错&#xff1a; [rootlocalhost .ssh]# ssh -T gitgit.code.tencent.com /root/.ssh/config line 2: Bad protocol 2 host key algorithms ‘ssh-rsa’. 2、查看o…...

mac m1上系统内录内部声音的方法/无需安装Blackhole

总所周知&#xff0c;m1的mac不能录制桌面音频&#xff0c;obsstudio都不行。 最快的解决方法就是下载飞书&#xff1a; 登陆后新建直播/视频会议&#xff1a; 共享的时候选择下面的两个钩上去就好了...

数字人学习目录

数字人学习目录 百度PaddlePaddleHub图像风格迁移模型pp-tinypose模型 PaddleGANPaddleLitePaddleDetectionPP-TinyPose 人体骨骼关键点识别 PaddleSpeechVisualDLPaddleBobo TransformerWav2LibCLIPFFMpeg模型库数据集学习天地PythonJupyter Notebook Unity3DUE 百度Paddle P…...

PHP 房产网站系统Dreamweaver开发mysql数据库web结构php编程计算机网页项目

一、源码特点 PHP 房产网站系统是一套完善的WEB设计系统&#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 源码 https://download.csdn.net/download/qq_41221322/88233553 论文 https://download…...

0基础入门代码审计-2 Fortify初探

0x01 序言 目前又加入一位新童鞋了&#xff0c;最近将会再加入cs相关的专栏&#xff0c;都是以基础为主&#xff0c;毕竟太复杂的东西&#xff0c;能看懂的人太少。 0x02 准备工具 1、Fortify 2、需要审计的源码 0x03 Fortify的简单使用 1、 1、在开始菜单栏中找到Audit Wo…...

qiiuzhiji4

本篇是从慧与离职后到2023年8月21日这段时间的经历 2023/7/31至2023/8/21 本篇初次写于2023年8月21日 从慧与离职后基本上就是在专心找工作了&#xff0c;但是有在这段时间找工作经历的人都明白&#xff0c;IT行业不复以往了。尤其是对于我这样的普通二本学历的人来说&#xff…...

构建 NodeJS 影院微服务并使用 docker 部署【01/4】

图片来自谷歌 — 封面由我制作 一、说明 构建一个微服务的电影网站&#xff0c;需要Docker、NodeJS、MongoDB&#xff0c;这样的案例您见过吗&#xff1f;如果对此有兴趣&#xff0c;您就继续往下看吧。 在本系列中&#xff0c;我们将构建一个 NodeJS 微服务&#xff0c;并使用…...

变频器和plc之间无线MODBUS通讯

在工业现场由PLC远程控制变频器的应用非常常见&#xff0c;如果挖沟布线不便或者变频器在移动设备上&#xff0c;那么采用无线通讯就是最佳方案。 这里我们选用最常用的三菱 FX2N PLC和三菱变频器为例&#xff0c;并结合日系plc专用无线通讯终端DTD435M来说明PLC与变频器之间的…...

【云原生】3分钟快速在Kubernetes1.25部署Prometheus2.42+Grafana9.5.1+Alertmanager0.25

文章目录 1、简介2、GitHub地址3、环境信息4、安装5、访问Grafana1、简介 Prometheus-operator帮助我们快速创建Prometheus+Grafana+Alertmanager等服务,而kube-prometheus更加完整的帮助我们搭建全套监控体系,这包括部署多个 Prometheus 和 Alertmanager 实例, 指标导出器…...

Redis中常见的缓存穿透、缓存击穿、缓存雪崩、缓存预热解决方案

文章目录 一、缓存穿透1. 什么是缓存穿透2. 解决方案2.1 无效的key存放到Redis2.2 引入布隆过滤器2.3 如何选择&#xff1a; 二、缓存击穿1. 什么是缓存击穿2. 解决方案 三、缓存雪崩1. 什么是缓存雪崩2. 解决方案2.1 均匀过期2.2 热点数据缓存永远不过期2.3 采取限流降级的策略…...

第二章-自动驾驶卡车-自动驾驶卡车前装量产的要求

1、自动驾驶卡车的特点与挑战 重卡主要运行在相对封闭的高速公路&#xff0c;相较城市道路场景看似更简单。但是&#xff0c;由于重卡特有的物理特性、运行环境和商业运营要求&#xff0c;相较于乘用车的自动驾驶系统&#xff0c;重卡的自动驾驶系统对车辆的感知距离和精度、系…...

Midjourney API 申请及使用

Midjourney API 申请及使用 在人工智能绘图领域&#xff0c;想必大家听说过 Midjourney 的大名吧&#xff01; Midjourney 以其出色的绘图能力在业界独树一帜。无需过多复杂的操作&#xff0c;只要简单输入绘图指令&#xff0c;这个神奇的工具就能在瞬间为我们呈现出对应的图…...

mysql mysql 容器 忽略大小写配置

首先能够连接上mysql&#xff0c;然后输入下面这个命令查看mysql是否忽略大小写 show global variables like %lower_case%; lower_case_table_names 0&#xff1a;不忽略大小写 lower_case_table_names 1&#xff1a;忽略大小写 mysql安装分为两种&#xff08;根据自己的my…...

第58步 深度学习图像识别:Transformer可视化(Pytorch)

一、写在前面 &#xff08;1&#xff09;pytorch_grad_cam库 这一期补上基于基于Transformer框架可视化的教程和代码&#xff0c;使用的是pytorch_grad_cam库&#xff0c;以Bottleneck Transformer模型为例。 &#xff08;2&#xff09;算法分类 pytorch_grad_cam库中包含的…...

angular实现全局组件

之前我们实现全局组件的第一种方式。我们是在定义了组件的时候通过在declares:[component],然后exports出该组件。最后在页面中每次导入该组件&#xff0c;而这次我们将采用另一种方式来实现 1 新建公用组件&#xff1a; navbreadcrumbnavbreadcrumb.component.htmlnavbreadc…...

Spring编程模型(范式)

面向对象编程 契约接口&#xff1a;Aware aware:意识到的 契约接口(Aware)是Spring框架中的一个特性&#xff0c;它允许Bean对象意识到它们所在的环境并与之进行交互&#xff0c;用于提供特定的功能或信息给Bean对象。这些接口通常作为回调接口&#xff0c;在Bean初始化过程…...

Golang GORM 单表删除

删除只有一个操作&#xff0c;delete。也是先找到再去删除。 可以删除单条记录&#xff0c;也可以删除多条记录。 var s Studentdb.Debug().Delete(&s, "age ?", 100)fmt.Println(s)[15.878ms] [rows:1] DELETE FROM student WHERE age 100var s Studentdb.De…...

Windows 下 MySQL 源码学习环境搭建步骤【建议收藏】

【建议收藏】Windows 下如何安装最新版 MySQL 源码学习的调试环境步骤。 作者&#xff1a;芬达 《芬达的数据库学习笔记》公众号作者&#xff0c;开源爱好者&#xff0c;擅长 MySQL、ansible。 本文来源&#xff1a;原创投稿 爱可生开源社区出品&#xff0c;原创内容未经授权不…...

redis总复习

springboot基于redisson实现看门狗锁:Springboot基于Redisson实现Redis分布式可重入锁【案例到源码分析】_springboot redission lock_AP0906424的博客-CSDN博客 springboot基于redis实现设置缓存和过期时间的代码&#xff1f;包括key的设计 https://mbd.baidu.com/ug_share…...

[LeetCode - Python]844. 比较;含退格的字符串(Easy);415. 字符串相加(Easy)

1.题目 844. 比较含退格的字符串&#xff08;Easy&#xff09; 1.代码&#xff1a; class Solution:def backspaceCompare(self, s: str, t: str) -> bool:# 暴力法s list(s)t list(t)M 0N 0for i in range(len(s)):i -M if s[i] # :if i > 0 :s.pop(i)s.pop(i-…...

机器学习深度学习——NLP实战(自然语言推断——注意力机制实现)

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位即将上大四&#xff0c;正专攻机器学习的保研er &#x1f30c;上期文章&#xff1a;机器学习&&深度学习——NLP实战&#xff08;自然语言推断——数据集&#xff09; &#x1f4da;订阅专栏&#xff1a;机器学习&…...

mac垃圾清理软件有哪些

随着使用时间的增加&#xff0c;mac系统会产生一些垃圾文件&#xff0c;影响系统的性能和稳定性。为了保持mac系统的高效&#xff0c;用户需要定期使用mac垃圾清理软件来清理系统缓存、日志、语言包等无用文件。CleanMyMac是一款功能强大的mac垃圾清理软件&#xff0c;它可以帮…...

8.18 校招 内推 面经

绿泡泡&#xff1a; neituijunsir 交流裙&#xff0c;内推/实习/校招汇总表格 1、校招 | 小米集团2024届全球校园招聘正式启动&#xff08;内推&#xff09; 校招 | 小米集团2024届全球校园招聘正式启动&#xff08;内推&#xff09; 2、2023校招总结--软件测试岗位 - 2 2…...

docker的web管理平台docker.ui

docker.ui安装 docker run --name docker.ui \ -p 8999:8999 \ --restartalways \ -v /var/run/docker.sock:/var/run/docker.sock \ -d joinsunsoft/docker.ui参数说明&#xff1a; docker run&#xff1a;启动container–name&#xff1a;容器命名–restartalways&#xff…...

20230822 Windows上使用find_package引入OpenCV报错

报错信息 打开Cmake项目时&#xff0c;find_package 报错&#xff1a; Found OpenCV Windows Pack but it has no binaries compatible with yourconfiguration.You should manually point CMake variable OpenCV_DIR to your build of OpenCVlibrary.原因 大概率原项目是在 …...

MySQL下载安装配置

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…...

3D WEB轻量化引擎HOOPS产品助力NAPA打造船舶设计软件平台

NAPA&#xff08;Naval Architectural PAckage&#xff0c;船舶建筑包&#xff09;&#xff0c;来自芬兰的船舶设计软件供应商&#xff0c;致力于提供世界领先的船舶设计、安全及运营的解决方案和数据分析服务。NAPA拥有超过30年的船舶设计经验&#xff0c;年营业额超过2560万欧…...

lesson9: C++多线程

1.线程库 1.1 thread类的简单介绍 C11 中引入了对 线程的支持 了&#xff0c;使得 C 在 并行编程时 不需要依赖第三方库 而且在原子操作中还引入了 原子类 的概念。要使用标准库中的线程&#xff0c;必须包含 < thread > 头文件 函数名 功能 thread() 构造一个线程对象…...

安卓修改SwitchCompat色值

SwitchCompat控件色值跟系统设置的主题有关&#xff0c;但是主题效果不是能轻易就能改的&#xff0c;因为涉及到整个APP的样式。网上方案基本都是通过修改style文件来改变色值&#xff0c;经过多次尝试修改最终觉得单独修改控件色值比较好。 一、控件属性 //修改开关色值就是最…...

pytorch内存泄漏

问题描述&#xff1a; 内存泄漏积累过多最终会导致内存溢出&#xff0c;当内存占用过大&#xff0c;进程会被killed掉。 解决过程&#xff1a; 在代码的运行阶段输出内存占用量&#xff0c;观察在哪一块存在内存剧烈增加或者显存异常变化的情况。但是在这个过程中要分级确认…...

20230821-字符串相乘-给树命名(unordered_map)

字符串相乘 有两个非负整数字符串num1&#xff0c;num2&#xff0c;计算num1和num2所表达整数的乘积&#xff0c;结果以字符串形式存储。注意:不能通过强制转换方法解题。 示例1&#xff1a; 输入&#xff1a; "4", "3" 输出&#xff1a; "12" …...

[Go版]算法通关村第十二关黄金——字符串冲刺题

目录 题目&#xff1a;最长公共前缀解法1&#xff1a;纵向对比-循环内套循环写法复杂度&#xff1a;时间复杂度 O ( n ∗ m ) O(n*m) O(n∗m)、空间复杂度 O ( 1 ) O(1) O(1)Go代码 解法2&#xff1a;横向对比-两两对比&#xff08;类似合并K个数组、合并K个链表&#xff09;复…...

neovim为工作区添加本地clangd配置

1 背景 尝试使用neovim开发stm32&#xff0c;使用clangd作为LSP提供代码补全等功能。 2 思路 使用stm32cubeMX生成一个基于makefile的stm32工程。 使用bear或compiledb基于makefile生成compile_commands.json文件。 为clangd配置--query-driver选项&#xff0c;使其使用arm…...

信号处理--基于EEG脑电信号的眼睛状态的分析

本实验为生物信息学专题设计小项目。项目目的是通过提供的14导联EEG 脑电信号&#xff0c;实现对于人体睁眼和闭眼两个状态的数据分类分析。每个脑电信号的时长大约为117秒。 目录 加载相关的库函数 读取脑电信号数据并查看数据的属性 绘制脑电多通道连接矩阵 绘制两类数据…...

Redis高可用:主从复制详解

目录 1.什么是主从复制&#xff1f; 2.优势 3.主从复制的原理 4.全量复制和增量复制 4.1 全量复制 4.2 增量复制 5.相关问题总结 5.1 当主服务器不进行持久化时复制的安全性 5.2 为什么主从全量复制使用RDB而不使用AOF&#xff1f; 5.3 为什么还有无磁盘复制模式&#xff…...

[Flutter]有的时候调用setState(() {})报错?

先看FlutterSDK的原生类State中有一个变量mounted。 abstract class State<T extends StatefulWidget> with Diagnosticable {/// mounted的作用是&#xff0c;此State对象当前是否在树中。/// 在创建State对象之后&#xff0c;在调用initState之前&#xff0c;框架通过…...

利用屏幕水印学习英语单词,无打扰英语单词学习

1、利用屏幕水印学习英语单词&#xff0c;不影响任何鼠标键盘操作&#xff0c;不影响工作 2、利用系统热键快速隐藏&#xff08;ALT1键 隐藏与显示&#xff09; 3、日积月累单词会有进步 4、软件下载地址: 免安装&#xff0c;代码未加密&#xff0c;安全的屏幕水印学习英语…...