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

使用在 Web 浏览器中运行的 VSCode 实现 ROS2 测程法

一、说明

                Hadabot是软件工程师学习ROS2和机器人技术的机器人套件。我们距离Hadabot套件的测试版还有一周左右的时间。我们将在本文末尾披露有关如何注册的更多信息。

        新的Hadabot套件完全支持ROS2。除了硬件套件外,Hadabot软件环境将主要基于Web浏览器,以最大程度地减少用户体验的跨平台差异。为了大大减少用户在设置和库管理方面的挫败感,我们使用 Docker 将 ROS2 系统创建为一堆 Docker 容器,从单个命令轻松启动。Docker还将帮助我们从您的主机系统对所有ROS2库进行沙盒处理,并使您的Hadabot可以从主机系统移植到主机系统。

        在这篇文章中,我们将通过实施和学习我们的 Hadabot 的机器人里程计来开始深入研究机器人导航的概念,Hadabot 是一种差速器驱动机器人。我们将使用在Web浏览器中运行的Visual Studio Code(VSCode)将测程图编程为ROS2组件(即ROS2节点)。

        由于整个ROS2系统,Hadabot模块,甚至VSCode都在Hadabot的Docker容器堆栈中运行,因此您无需设置或安装VSCode或ROS2。只需启动 Docker 堆栈并开始黑客攻击!

您        需要了解一些C++但您不需要物理 Hadabot 套件来跟随这篇文章。具体而言,我们将:

  1. 了解差速驱动机器人测程法。

  2. 了解 ROS 和 ROS2 如何处理计量数据。

  3. 设置基于哈达机器人浏览器的VSCode。

  4. 使用我们基于浏览器的 VSCode 编译和调试 ROS2 C++里程计节点。

  5. 了解ROS2项目(即工作区)结构和ROS包数据文件。

  6. 一起浏览里程计C++代码。

        除了实现里程计的示例代码外,我们还将提供一个半实现的变体,供您尝试自己实现里程计代码。

        按照示例阅读这篇文章应该需要 30 到 45 分钟。


二、 差速驱动机器人测程法

        机器人测程法是估计机器人状态和姿势的过程。对于像我们的哈达机器人这样的差速驱动机器人,我们使用车轮如何转动的知识来估计哈达机器人的运动和姿势 - 稍后会详细介绍为什么它是估计

        运动需要我们的哈达机器人前进的速度,即速度(我们将使用米每秒)以及我们的哈达机器人转动的速度(以弧度每秒为单位) - 由这对表示(v,\omega ) .

        ROS2 使用右手坐标系。在 2D 空间中只考虑轮式机器人是相当常见的,其中绘制的 x 轴指向右,y 轴指向上方,(通常未使用的)z 轴指向我们的脸。因此,正旋转意味着在从上到下(即沿着 z 轴向下)观察我们的 Hadabot 时逆时针旋转。

        姿势是(x,y) 我们的 Hadabot 的 2D 位置以及 (即航向角) 表示θ 在某些坐标空间中。

        当机器人第一次通电时,将其初始姿势视为(x_0,y_0)=( 0,0)\theta _0=0 .机器人指向某个坐标图的原点的右侧。

        对于我们的差速器驱动 Hadabot,测程法成为估算的一种练习(v, \omega ), (x,y) 和θ 根据我们对每个轮子旋转速度的测量。

        我们用车轮编码器传感器测量哈达机器人的车轮旋转速度(弧度每秒)。用尺子物理测量车轮的半径(以米/弧度为单位)后,我们可以轻松计算出每个车轮的距离速度(米/秒)v_{left}  和v_{right}  - 用用简单的数学。

        在连续的时间里,里程计变成了一个整合过程,这可能是非常讨厌的。但对我们来说幸运的是,我们可以在小的离散时间块中采样,即:Δt,这使得数学变得更加简单。我不太擅长微分方程,但我很擅长总结数字!

        一旦你拥有v_{left} 和v_{right},您可以计算每个车轮行进的距离(以米为单位):

        测程练习变为使用以下输入:

  •  d_{left}, d_{right} 
  • 机器人的前瞬位置(x,y) 和前瞬取向θ

        ...要计算这些输出,请执行以下操作:

  • 新的线性和角速度(v′,ω′)
  • 新姿势(x′,y′)和θ′

        我们将自由地跳过一些推导,但最重要的中间计算是:

 2.1 什么是d_{WHEELBASE} ?

        它是左右车轮中心之间的测量距离,以米为单位。下图——

         .但实际上,你可以用使用尺子的物理哈达机器人来衡量这一点。

        2.2 什么是d_center?

        如果左右轮以相同的速度旋转,哈达机器人就会沿着一条直线移动。但是,如果一个轮子碰巧比另一个轮子旋转得快,那么每个轮子的路径就会变成围绕某个旋转中心的弧形。P 在我们的坐标图中。每个弧的距离为d_{left}d_{right}分别针对每个车轮。和 d_{center}是车轮之间弧形路径的长度。

        2.3 什么φ?

             我们知道哈达博特以前的定位是θ 在我们的坐标图中。我们正在尝试计算新的方向θ′ .

        直观 φ=θ′−θ  新方向和以前方向之间的差异。在数学上,您可以计算φ 使用上面的推导方程。

        上述方程的推导在本篇关于差分驱动里程计的论文中有明确的描述。推导是直截了当的,依于找出旋转中心,P ,并使用一些基本的三角函数来推导其余部分。

        通过中间计算和我们的当前状态,特别是φ , d_{center},(x,y,θ) ,我们可以计算新的姿势,(x′,y′,θ′) ,我们的机器人具有以下等式:

        我们的哈达机器人的新线性和角速度是:

三. ROS,ROS2上的里程计

        ROS机器人系统由许多ROS节点组成,通过发布和订阅主题消息与每个节点进行通信。

        在计算Hadabot的新姿势和速度后,我们将使用nav_msgs/msg/Odomemeter消息将这些新估计发布到ROS系统。

        在里程计消息中,有 4 个主要字段 - 标题、child_frame_id、姿势和扭转。

        我们将在扭曲字段中发布新的速度估计值,并在姿势字段中发布新的姿势估计值:

  • odometry.twist.twist.linear.x = v′ 
  • odometry.twist.twist.angular.z = ω′ 
  • odometry.pose.pose.position.x = x′ 
  • odometry.pose.pose.position.y = y′ 
  • odometry.pose.pose.orientation = quaternion_from_roll_pitch_yaw(0, 0, ω′ )

        由于 Hadabot 差速器驱动机器人在具有 2 个自由度的 3D 平面地图空间上运行 - 沿 x、沿 y 移动并沿 z 旋转(即偏航旋转)——完整 3D 地图的许多字段,6 个自由度被忽略。对于偏航方向        ω′ ,ROS 将角方向表示为四元数。所以在我们存储方向之前,我们需要转换偏航方向角        ω′ ,连同零滚动角和俯仰角,形成四元数。

        此外,测程法消息中还有许多其他字段被我们忽略了 - 标题、child_frame_id以及姿势和扭曲中的协方差子字段。

  • 标题字段包含此消息的时间戳数据,以及一个地图框字段,用于指定姿势数据的坐标地图框 - 即(x,y) 在地球上、局部区域地图上坐标等?

  • 该child_frame_id与header.frame_id字段类似,将数据与地图框相关联,即速度。

  • 协方差场表示我们对各自扭曲和姿势测量的不确定性。请记住,我们说过我们的里程计只是估计值。这是因为车轮可能会打滑,编码器传感器有噪音并且不准确,并且还可能存在采样误差(当机器人连续移动时,我们仅在 Δ t间隙采样一次)。所有这些都会导致误差,这些误差应该以某种方式在协方差字段中表示。

        对于当前的测程示例,为了简单起见,我们可以安全地忽略时间戳、frame_id和协方差。但是为了稳健地执行机器人导航,我们将需要它们,并且肯定会在以后的帖子中涉及它们。


四、 在浏览器上使用VSCode编译、运行测程ROS2节点

        你们中的许多人可能听说过一个名为Visual Studio Code(VSCode)的IDE。Hadabot将广泛使用VSCode来指导、编译和展示我们共同实现的各种ROS2代码和机器人概念。

我        们的VSCode将作为Hadabot Docker堆栈中的本地Docker容器运行。此外,我们将从 Web 浏览器使用 VSCode,以获得独立于主机系统操作系统的一致用户体验。

        除了编辑代码外,VSCode 还支持基于浏览器的集成界面,以便:

  • 文件系统
  • 一个bash终端 - 我们偶尔称之为web-bash。
  • 查看渲染的降价以阅读指导说明

        注意:对于那些关注过去帖子的人来说,Hadabot web-bash是从Hadabot Docker堆栈中的Portainer容器启动的。由于VSCode还提供了具有更简单界面的web-bash功能,因此我们消除了对Portainer的需求,并将其从堆栈中完全删除。

4.1 设置哈达机器人在线开发环境

在运行示例之前,我们需要按照步骤 2a 更新您的 Hadabot Git 存储库,重新启动 Hadabot Docker 堆栈。

4.2 通过测程 ROS2 节点编译运行调试器

        请按照以下步骤操作:

  1. 启动特定于本文的基于浏览器的VSCode工作区(此链接指向您的本地主机,因此一切都在本地系统上安全运行)。

  2. 在“VSCode 资源管理器”面板中,右键单击 README.md 文件 ->“打开预览”。

  3. 按照自述文件中的说明编译、运行和调试 ROS2 测程代码。


五、 源代码的结构 - ROS2 工作区、包和节点

        ROS2使用工作区和包的概念来组织实现机器人系统的各种架构模块。工作区由一组包组成。一个包通常实现一个功能模块,如导航或机器人控制,所以它由源代码组成,实现可以作为可执行文件启动的ROS节点。

        我们不会详细介绍如何创建 ROS2 工作区或包,因为在线上有关于如何创建 ROS2 工作区以及如何在工作区中创建 ROS2 包的教程。

        为了简化这篇文章,我们预先创建了一个hadabot_ws ROS2工作区。在其中,我们创建了一个 ROS2 包 hadabot_driver,它有一个源文件hadabot_odom.cpp(2 个源文件 - hadabot_odom_diy.cpp我们现在将忽略它,稍后解释它的用法)。

        ROS2 使用一个名为 colcon 的工具在工作区中构建 ROS2 包。

        colcon 工具从我们的hadabot_driver包构建源文件,以创建一个hadabot_odom ROS2 节点。

        一旦我们获取了 ROS2 hadabot_ws/install/setup.bash 环境,我们就hadabot_odom可以使用命令 ros2 run 或专门 .通过采购 setup.bash,我们设置了终端环境以查找 ros2 工具,并能够自动按 Tab 键完成包中的包和节点名称。ros2 run hadabot_driver hadabot_hadabot_odom


六. 什么是ROS袋?

        ROS2有一个概念,称为“bags”,它是预先保存的ROS消息的目录结构。

        在我们的示例中,我们有一个名为 rosbag2_wheel_rotational_velocity_data 的文件夹,其中包含我们从正在运行的 Hadabot 机器人预先保存的大量 ROS2 消息。当 Hadabot 的车轮转动时,它发布了 /hadabot/wheel_radps_right 和 /hadabot/wheel_radps_left ROS2 主题的车轮旋转速度测量值,我们将其保存到rosbag2_data中。

        为了播放(以及保存)消息,我们调用 ros2 包 ,如果您已经浏览了示例,您已经完成了此操作。

        通过回放保存的袋子数据,我们可以测试我们的测程节点,而无需物理 Hadabot 在场。


七. 我们如何在 ROS2 中实现里程计

测程代码位于 hadabot_ws_/src/hadabot_driver/src/hadabot_odom.cpp 文件中。正如这个简单的 ROS2 C++ 节点教程中所解释的,cpp 文件包含一些必要的 ROS2 库并定义了一个 main(...) 函数。

在高级别上,会发生以下情况:

  • 我们创建了 2 个订阅者,radps_left_sub_ 和 radps_right_sub__,以捕获车轮旋转速度消息并保存相应车轮的当前旋转速度。

  • 我们创建一个触发回调的计时器,publish_odometry(...)_,每隔一段时间就发布出当前的里程计。

  • 我们创建了一个计时器,可以更频繁地触发回调update_odometry(...),以更新给定每个 Hadabot 轮子的最新旋转速度的当前测程法。

update_odometry(...) 函数是我们实现上面描述的测程方程的地方。计算结果存储在pose_变量中。

我们将更新与里程计的发布分开,因为我们可能希望更新里程计的速度比发布速度快。这使我们能够减少δ吨Δ�无需用测程消息淹没我们的 ROS2 系统。

7.1 使用 VSCode 调试器逐步执行 ROS2 C++代码

        通过使用内置的 GDB 调试器单步执行代码,可以更好地理解实现的更精细细节。有关如何启动调试器的所有易于遵循的说明都由您之前在基于浏览器的 VSCode 环境中打开的自述文件标记描述。

7.2 尝试自己实现里程计

        您可能还注意到hadabot_driver_包中另一个名为 hadabot_odom_diy.cpp 的C++源文件。此文件与_hadabot_odom.cpp文件几乎相同,只是它只有用于 update_odometry(...) 函数定义的基架代码。

        做比阅读更好,所以我们欢迎你自己实现测程方程,充实update_odometry(...)函数定义,并将你的结果与我们的结果进行比较。也许我们的代码中有一个错误。=)


八、结论

        感谢您关注这篇关于机器人测程法的文章。我们做了以下工作:

  1. 学习了如何计算差速驱动机器人(如 Hadabot)的测程。

  2. 运行一个示例来编译计算测程的 ROS2 节点。

  3. 使用我们基于浏览器的 VSCode 环境再次运行调试器,该节点针对 ROS2 包数据编译。

        我们将在以后的帖子中继续沿着机器人导航线程。

        至于哈达博特的进展 - 我们有测试版哈达博特套件的零件库存!!请注册以保持联系,以表明您对抢先体验我们套件的兴趣。当我们最终确定细节时,我们将有一个明确的成本,但它将在 100 到 120 美元左右。

        像往常一样,如果您有建议,有意见,或者只是想打个招呼,请随时与我们联系 - 你好AT hadabot DOT com。

        请与其他软件工程师黑客和机器人专家分享Hadabot。杰克“哈达机器人制造者”

相关文章:

使用在 Web 浏览器中运行的 VSCode 实现 ROS2 测程法

一、说明 Hadabot是软件工程师学习ROS2和机器人技术的机器人套件。我们距离Hadabot套件的测试版还有一周左右的时间。我们将在本文末尾披露有关如何注册的更多信息。 新的Hadabot套件完全支持ROS2。除了硬件套件外,Hadabot软件环境将主要基于Web浏览器,以…...

快速学习GO语言总结

备注:本博客将自己初步学习GO的总结进行分享,希望大家通过本博客可以在短时间内快速掌握GO的基本程序编码能力,如有错误请留言指正,谢谢! 一、初步了解Go语言 (一)Go语言诞生的主要问题和目标…...

尚硅谷宋红康MySQL笔记 10-18

是记录,我不会记录的特别详细 第10章 创建和管理表 标识符命名规则 数据库名、表名不得超过30个字符,变量名限制为29个只能包含 A–Z, a–z, 0–9, _共63个字符数据库名、表名、字段名等对象名中间不要包含空格同一个MySQL软件中,数据库不能…...

Java 面试题--SpringBoot篇

一、什么是 SpringBoot? Spring Boot 是 Spring 开源组织下的子项目, 是 Spring 组件一站式解决方案,主要是简化 了使用 Spring 的难度,简省了繁重 xml 的配 置,提供了各种启动器,在运行过程中自定 配置,&a…...

GitKraken 详细图文教程

前言 写这篇文章的原因是组内的产品和美术同学,开始参与到git工作流中,但是网上又没有找到一个比较详细的使用教程,所以干脆就自己写了一个[doge]。文章的内容比较基础,介绍了Git内的一些基础概念和基本操作,适合零基…...

ubuntu20.04 root用户下使用中文输入法——root用户pycharm无法用中文输入法问题

因为一些众所不周知的bug,我的pycharm使用apt或者snap安装都不行了,官网下了“绿色版”,运行pycharm.sh也运行不起来,有个java相关环境报错,jre和jdk都装了,还是有点问题,最后尝试发现可以用roo…...

FastDFS与Nginx结合搭建文件服务器,并实现公网访问【内网穿透】

文章目录 前言1. 本地搭建FastDFS文件系统1.1 环境安装1.2 安装libfastcommon1.3 安装FastDFS1.4 配置Tracker1.5 配置Storage1.6 测试上传下载1.7 与Nginx整合1.8 安装Nginx1.9 配置Nginx 2. 局域网测试访问FastDFS3. 安装cpolar内网穿透4. 配置公网访问地址5. 固定公网地址5.…...

嵌入式蓝海变红海?其实是大浪淘沙!

嵌入式是当下热门的职业方向之一,吸引了众多求职者的目光。然而,有人担心大家一拥而上,导致嵌入式就业竞争激烈,找工作难度大。其实,嵌入式行业的竞争并非无法逾越的天堑,也远远没有从蓝海变成红海&#xf…...

【附安装包】Solid Edge2023安装教程最强CAD选择

软件下载 软件:Solid Edge版本:2023语言:简体中文大小:3.85G安装环境:Win11/Win10/Win8/Win7硬件要求:CPU2.0GHz 内存4G(或更高)下载通道①百度网盘丨64位下载链接:https://pan.bai…...

494. 目标和

494. 目标和 原题链接:完成情况:解题思路:数组回溯法动态规划 参考代码:数组回溯法__494目标和__动态规划 经验吸取 原题链接: 494. 目标和 https://leetcode.cn/problems/target-sum/description/ 完成情况&#…...

C++学习笔记总结练习:C++编译过程详解

编译和链接的过程 0 概述 程序要运行起来,必须要经过四个步骤:预处理、编译、汇编和链接。接下来通过几个简单的例子来详细讲解一下这些过程。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EFwSfKYp-1692237034055)(imag…...

嵌入式设备应用开发(qt界面开发)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 linux界面开发有很多的方案可以选。比如说lvgl、minigui、ftk之类的。但是,这么多年来,一直屹立不倒的还是qt。相比较其他几种方案,qt支持多个平台,这里面就包括了linux平台。此…...

pytest结合Excel实现接口自动化

前言 我们先来回顾下之前篇章“pytest通过parametrize方法实现数据驱动实战”,主要是通过yaml文件来读取测试用例。而我们用Excel文件存放测试用例又有什么区别呢? 毫无疑问,Pytest自动化测试框架也能读取Excel文件实现数据驱动。 还记得之…...

【LLM数据篇】预训练数据集+指令生成sft数据集

note 在《Aligning Large Language Models with Human: A Survey》综述中对LLM数据分类为典型的人工标注数据、self-instruct数据集等优秀的开源sft数据集:alpaca_data、belle、千言数据集、firefly、moss-003-sft-data多轮对话数据集等 文章目录 note构造指令实例…...

WebDAV之π-Disk派盘 + 一羽记帐

一羽记帐是一款真正让你体验3S极速记账的轻量级APP。针对个人记账,没有花哨冗余的功能。界面美丽、无广告、极速启动、功能全面。一羽记帐功能涵括广,基本可以满足90%人的记账需求。完全无侵入、百分百无广告,无需担心数据安全,所有的操作都不经过任何第三方。 π-Disk派盘…...

ChatGPT:记一次超复杂的KVM桌面系统连接问答记录

​ KVM切换器可以使多台电脑共用键盘,显示器,鼠标,当电脑很多,显示器也是分为主从,需要共用键盘鼠标和音响设备,而买KVM切换器只有2个通道4进2出不满足需求时,就要组合多个KVM使用,大…...

python-docx把dataframe表格添加到word文件中

python-docx把dataframe表格添加到word文件中思路较为简单: 先把dataframe格式转变为table新建一个段落:document.add_paragraph()把table添加到这个段落下方 效果图 示例代码 from docx import Document, oxml import pandas as pd import numpy as …...

Web AP—BOM 浏览器对象模型

代码下载 BOM BOM(Browser Object Model)即浏览器对象模型,它提供了独立于内容而与浏览器窗口进行交互的对象,其核心对象是 window。 BOM 由一系列相关的对象构成,并且每个对象都提供了很多方法与属性。 BOM 缺乏标…...

Flink分流,合流,状态,checkpoint和精准一次笔记

第8章 分流 1.使用侧输出流 2.合流 2.1 union :使用 ProcessFunction 处理合流后的数据 2.2 Connect : 两条流的格式可以不一样, map操作使用CoMapFunction,process 传入:CoProcessFunction 2.2 BroadcastConnectedSt…...

c# 实现sql查询DataTable数据集 对接SqlSugar ORM

有时候对于已经查询到的数据集,想要进行二次筛选或者查询,还得再查一遍数据库 或者其他的一些逻辑处理不太方便,就想着为什么不能直接使用sql来查询DataTable呢? 搜索全网没找到可用方案,所以自己实现了一个。 主要…...

记一次布尔盲注漏洞的挖掘与分析

在上篇文章记一次由于整型参数错误导致的任意文件上传的漏洞成因的分析过程中,发现menu_id貌似是存在注入的。 public function upload() {$menu_id $this->post(menu_id);if ($id) {$where "id {$id}";if ($menu_id) {$where . " and menu_id…...

C++11 新特性 ---- noexcept

1. 异常 异常通常用于处理逻辑上可能发生的错误 在C98中,提供了一套完善的异常处理机制,直接在程序中将各种类型的异常抛出,从而强制终止程序的运行。 1.1 基本语法 当函数抛出异常时,程序会停止执行,并显示异常信息…...

《Linux运维总结:Centos7.6之OpenSSH7.4p1升级版本至9.4p1》

Centos通过yum升级OpenSSH 在官方支持更新的CentOS版本,如果出现漏洞,都会通过更新版本来修复漏洞。这时候直接使用yum update就可以升级版本。 yum -y update openssh 但是,CentOS更新需要有一段时间,不能在漏洞刚出来的时候就有…...

七夕节日表白:七大网页风格与其适用人群

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…...

通达信指标公式16:使用BARSLAST函数写一个指标回测的思路

★★★★★博文原创不易,我的博文不需要打赏,也不需要知识付费,可以白嫖学习小技巧,喜欢的老铁可以多多帮忙点赞,小红牛在此表示感谢,就是对作者的最大支持。愿与诸君共勉,悟道于股市★★★★★…...

Jenkins自动化部署Vue项目

1、新建item,选择 Freestyle project 2、源码管理选择git,输入git仓库地址和授权账号,并指明要部署的分支 3、构建选择 Execute shell,输入vue项目打包命令 命令示例: source /etc/profile node -v npm config set re…...

Android JNI打印logcat日志

在 JNI 中打印日志可以使用 __android_log_print 函数来实现。该函数是 Android NDK 提供的一个用于在本地代码中输出日志消息到 logcat 的方法。 要在 JNI 中打印日志&#xff0c;请按照以下步骤进行操作&#xff1a; 在你的 JNI C/C 代码中包含 <android/log.h> 头文件…...

第28次CCF计算机软件能力认证(测试)

测试300分要是考试的时候也能这么发挥就好 第一题&#xff1a;现值计算 解题思路&#xff1a;直接模拟 n , m input().split() n int(n);m float(m) l list(map(int , input().split())) res 0 for i in range(0 , n 1):res pow(1 m , -i) * l[i] print(res) 第二题…...

九耶丨阁瑞钛伦特-Java高频面试题-请谈谈 ReadWriteLock 和 StampedLock

ReadWriteLock包括两种子锁 &#xff08;1&#xff09;ReadWriteLock ReadWriteLock 可以实现多个读锁同时进行&#xff0c;但是读与写和写于写互斥&#xff0c;只能有一个写锁线程在进行。 &#xff08;2&#xff09;StampedLock StampedLock是Jdk在1.8提供的一种读写锁&a…...

【Linux操作系统】深入探索Linux系统编程中的信号集操作函数

在Linux系统编程中&#xff0c;信号集操作函数是非常重要的工具&#xff0c;它们允许我们对信号进行管理和控制。本篇博客将详细介绍Linux系统编程中的信号集操作函数&#xff0c;包括信号集的创建、添加和删除信号&#xff0c;以及对信号集进行操作的常用函数。通过深入了解这…...

[C初阶笔记]P2

Git 1、Git是Linus为了帮助管理Linux内核开发 而开发的一个开放源码的分布式版本控制软件。 2、Git和TortoiseGit的作用。 Git中有各种命令行操作&#xff0c;来维护代码&#xff0c;可以将代码推送到代码托管平台。 TortoiseGit是将Git中各自命令行操作转化为图形化操作。 …...

C++并发编程学习01——hello concurrent world

经典用例 #include <iostream> #include <thread>void hello() {std::cout << "hello concurrent world" << std::endl; }int main() {std::thread t(hello);t.join(); }编译 g -g test.cpp -o out -lpthreadgdb调试 (gdb) r Starting pr…...

大数据扫盲(2): 数据分析BI与ETL的紧密关系——ETL是成功BI的先决条件

着业务的发展每个企业都将产生越来越多的数据&#xff0c;然后这些数据本身并不能直接带来洞察力并产生业务价值。为了释放数据的潜力&#xff0c;数据分析BI&#xff08;商业智能&#xff09;成为了现代企业不可或缺的一部分。然而&#xff0c;在数据分析的背后&#xff0c;有…...

Java web 中的 jsp

JSP是什么 JSP是动态网页编程技术 JSP的四大作用域 1.page 表示在当前页面有效 2.request 表现在一次请求中有效 3.session 表示在一次会话中有效 4.application 表示在整个应用程序中有效 jsp内置对象是什么 在jsp开发中会频繁使用到一些对象,如果每次我们在jsp页面中需要…...

uniapp 数组操作

字符串转数组 let string "12345,56789" string.split(,) // [12345,56789] 数组转字符串 let array ["123","456"] array.join(",") // "123,456" 数组元素删除 let array [123,456] // 删除起始下标为1&#xff0…...

数据结构算法--4堆排序

堆排序过程: >建立堆(大根堆) >得到堆顶元素&#xff0c;为最大元素 >去掉堆顶&#xff0c;将堆最后一个元素放到堆顶&#xff0c;此时可通过一次调整使堆重新有序 >堆顶元素为第二大元素 >重复步骤3&#xff0c;直到堆变空 此时是建立堆后的大根堆模型 将…...

C++学习系列之DLL动态库使用

C学习系列之DLL动态库使用 啰嗦动态库的创建动态库的调用函数生成1.需要头文件函数定义&#xff08;头文件&#xff09;2.需要函数定义&#xff08;函数文件&#xff09;3.动态库中的头文件4.动态库中的主文件5.运行查看是否存在C#的调用的入口点6.C#调用 总结 啰嗦 项目需要&…...

Java实现钉钉企业内部应用机器和自定义机器人发送消息

前言 公司让写一个服务监控的功能,当监测到服务停止时,向钉钉群里推送报警信息。之前大概看到钉钉的开放平台的API文档,好像能群发消息的只有机器人。 钉钉开放平台目前提供三种机器人: 企业内部应用机器人 群模板机器人 自定义机器人 本来向用自己比较熟悉的自定义机器人…...

基于QT4的GPX文件编辑器开发

GPX文件是记录地理点的文件,本质是一种xml文件。GPX文件目前没有很好的编辑器,因此作者决定开发一款无需安装的绿色编辑器。 在QT4开发中,XML可以用DOM来实现,但其逻辑并不是很清晰。使用模型视图反而会更加可读。因此在开发中,使用model-view模式来实现数据读写。 1 需…...

树结构使用实例---实现数组和树结构的转换

文章目录 一、为什么要用树结构&#xff1f;二、使用步骤 1.引入相关json2.树结构的转换总结 一、为什么要用树结构&#xff1f; 本文将讲述一个实例&#xff0c;构造一棵树来实现数组和tree的转换&#xff0c;这在前端树结构中是经常遇到的 后端返回树结构方便管理&#xff…...

论文阅读_条件控制_ControlNet

name_en: Adding Conditional Control to Text-to-Image Diffusion Models name_ch: 向文本到图像的扩散模型添加条件控制 paper_addr: http://arxiv.org/abs/2302.05543 date_read: 2023-08-17 date_publish: 2023-02-10 tags: [‘图形图像’,‘大模型’,‘多模态’] author: …...

全链路数据湖开发治理解决方案2.0重磅升级,全面增强数据入湖、调度和治理能力

简介&#xff1a; 阿里云全链路数据湖开发治理解决方案能力持续升级&#xff0c;发布2.0版本。解决方案包含开源大数据平台E-MapReduce(EMR) &#xff0c; 一站式大数据数据开发治理平台DataWorks &#xff0c;数据湖构建DLF&#xff0c;对象存储OSS等核心产品。支持EMR新版数据…...

【算法题】2769. 找出最大的可达成数字

题目&#xff1a; 给你两个整数 num 和 t 。 如果整数 x 可以在执行下述操作不超过 t 次的情况下变为与 num 相等&#xff0c;则称其为 可达成数字 &#xff1a; 每次操作将 x 的值增加或减少 1 &#xff0c;同时可以选择将 num 的值增加或减少 1 。 返回所有可达成数字中的…...

023:vue中解决el-date-picker更改样式不生效问题

第023个 查看专栏目录: VUE ------ element UI 本文章目录 修改后的效果示例源代码&#xff08;共52行&#xff09;核心内容步骤&#xff1a;&#xff08;1&#xff09;更改样式&#xff08;2&#xff09;添加参数 专栏目标 在vue项目开发中&#xff0c;我们打算保持颜色的一致…...

爬虫借助代理会让网速快点吗?

亲爱的程序员朋友们&#xff0c;你曾经遇到过爬虫网速慢的情况吗&#xff1f;别着急&#xff01;今天我将和你一起探讨一下使用代理是否可以加速爬虫&#xff0c;让我们一起进入这个轻松又专业的知识分享。 一、原因和机制的解析 1.IP限制 某些网站为了保护资源和防止爬虫行…...

探索智能文字识别:技术、应用与发展前景

探索智能文字识别&#xff1a;技术、应用与发展前景 前言一张图全览大赛作品解读随心记你不对我对小结 智能文字识别体系化解读图像预处理文字定位和分割文字区域识别图像校正字体识别和匹配结果后处理小结 如何应对复杂场景下挑战复杂场景应对方法小结 人才时代对人才要求合合…...

STL——list用法

一、list介绍 1、list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。 2、list就是一个带头双向循环链表&#xff0c;list通常在任意位置进行插入、移除元素的执行效率更好。 3、list最大的缺陷是不支持任意位置的随机访问…...

Linux的基础指令

目录 1、ls指令 .和..意义 2、pwd指令 3、cd指令 ①cd ~ ②cd - 关于cd ..的用法 绝对路径和相对路径 4、touch指令 5、mkdir指令 tree指令 6、rmdir指令 7、rm指令 * 8、man指令 9、cp指令 nano&#xff1a; 10、mv指令 11、cat指令 12、more指令 13、less…...

深入浅出Pytorch函数——torch.nn.init.normal_

分类目录&#xff1a;《深入浅出Pytorch函数》总目录 相关文章&#xff1a; 深入浅出Pytorch函数——torch.nn.init.calculate_gain 深入浅出Pytorch函数——torch.nn.init.uniform_ 深入浅出Pytorch函数——torch.nn.init.normal_ 深入浅出Pytorch函数——torch.nn.init.c…...

Vue.js知识点学习的一点笔记

一、虚拟DOM 1、原生JS是命令式编程&#xff0c;当渲染在页面的数据发生一点点变化&#xff0c;需要整个重新渲染一编。vue.js渐进式框架有个虚拟DOM的概念&#xff0c;运用diff算法&#xff0c;比较新旧数据&#xff0c;相同的数据不变不重渲染&#xff0c;不同的部分新数据…...