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

构建捡垃圾机器人的 ROS 2 项目

一、说明

        本系列是关于学习如何使用 ROS2、Docker 和 Github 设计、设置和维护机器人项目。
先决条件 — ROS2 软件包的基本知识、实现发布者、订阅者、操作并连接它们。

        我们之前在 ROS2 中了解了不同的部分。但是,在我们转向实际的基于硬件的项目之前,将它们很好地结合起来理解 ROS2 是关键。

        这是我们当前系列的议程— 第 1 部分:开始使用新的 ROS2 项目 — 演示带有垃圾拾取机器人自定义包的样板 ROS2 项目 第 2 部分:改进 ROS2 代码库 — 启动文件和 ROS 参数
第 3 部分:通过测试改进项目 — 添加 ROS 测试基础架构 第 4 部分:从业余爱好者到优质项目 —
在 Github 上为 CI/CD 添加 docker

二、垃圾捡拾机器人 —

以下是我们想要设计系统的方式 —

  1. 感知和解释 — 我们使用摄像头图像来查看机器人的附近,对其进行处理,并确定是否存在垃圾。该信息被转发到决策模块(大脑)。
  2. 决定 — 决策模块(大脑)从感知(和解释)中获取垃圾存在信息,并决定机器人是否应该采取行动。 如果大脑决定采取行动并移动机器人(因为存在垃圾),它会命令驱动模块这样做。
  3. 行动 —根据大脑的命令,驱动模块移动机器人(例如,使用电机)去收集垃圾。

注意:我们的朴素系统过于简单(只关注 ROS2 设计)。在本系列中,我们不考虑核心机器人算法、控件(开环/闭环)或视觉。这将在后面的课程中完成,我们将基于此处建立的基本 ROS2 思想。

我们将系统分为 3 个逻辑组件——感知、大脑和驱动。

如果我们想象我们的软件设计,我们应该有 3 个 ROS2 包(因此是节点)

  1. 感知 — 该节点将从机器人的摄像头获取输入图像并从中获取见解(例如垃圾的存在)。
  2. 脑—— 该节点从感知模块获取见解,处理此信息,并通知致动模块下一步该做什么。
    此外,大脑通常只关心每一帧中感知的视觉信息。但偶尔,大脑想知道感知相机的电池状态。
  3. 驱动 — 该节点将命令伺服电机移动机器人的四肢。想象一下,机器人走向垃圾桶,捡起它,移动到垃圾箱,然后收集它。使用致动代码控制运动

大脑模块实际上就像人脑一样,通过感觉器官(感知)接收信息,并通过电机(驱动)指挥适当的动作。甜!

接下来,本系列的第 1 部分将重点介绍如何使用垃圾收集机器人的自定义包构建一个样板 ROS2 项目。

让我们建造,好吗?

三、ROS2 有何不同 — 总结!

        1. 第三方中间件

        ROS1 与 ROS2:DDS

        ROS1有自己的中间件,它使用网络堆栈将信息从一个节点发送到正确的套接字,中间件再次接收到信息以将信息发送到正确的节点(过度简化)。
ROS2抛弃了中间,现在使用数据分发服务(DDS),这是一个可靠的行业标准的第三方中间件。

        2. 没有玫瑰大师

        Rosmaster是一项服务,方便两个节点找到彼此(如果它们希望通信)。接下来是它们直接相互连接。如果 rosmaster 在此过程中死亡,这些节点仍将连接,但没有新节点可以加入通信网络。

        在 ROS1 中,每个节点都需要知道主节点的位置(即使系统在多台机器上运行)。

        ROS2取消了rosmaster,节点可以直接找到彼此。

        3. Cpp 和 Python 的共享代码库

RCL

        ROS支持两种语言,Cpp和Python,底层实现在某些地方有所不同。例如,每个订阅者在 Python 中都有自己的线程,但在 Cpp.All
        对于 ROS1 来说都是如此,但 ROS2 具有相同的共享 C 实现。这个通用的代码库通过C++和Python中的ROS客户端库API公开。

        4. 一个进程中有多个ROS节点 ROS1不允许一个进程中
有多个ROS节点。ROS2 中的变化

        5. Python 构建要求
        在 ROS1 中更改 Python 文件不需要您构建项目。ROS2 需要你重新构建项目,这太糟糕了!😦

        6. 操作服务 操作服务
        不是核心 ROS1 库的一部分(而是 actionlib)。ROS2 核心库具有操作服务器

        7. 视窗支持
        ROS2 是视窗支持的!好吧,我真诚地希望你正在使用Linux 😛。

        8. 更改了启动基础结构
        ROS1 主要使用基于 XML 的启动文件。ROS2 有一个支持排序约束的 python 启动系统

四、为什么要迁移到 ROS2?

        这是一个很难回答的问题。此举有一些惯性,主要是因为 ROS2 社区仍然没有 ROS1 那么大。这导致更少的在线开发支持和更长的开发时间。

        但大多数著名的开源 ROS1 软件包已经或将很快达到生命周期的终点。面向未来的项目和技能提升是采取行动的两个原因。

五、ROS2 设置

第 1 阶段:安装 ROS2

在本课中,我们使用 ubuntu Focal(20.04.3 LTS),它支持 ROS2 Galactic。
这里有一个链接可以很好地解释 ROS2 的安装。他们在解释安装:)方面比我做得更好

第 2 阶段:测试 ROS2

为了测试我们的 ROS2 设置,我们执行以下操作:
1. 获取终端

source /opt/ros/$ROS_DISTRO/setup.bash 

如前所述,从今以后我将使用银河而不是$ROS_DISTRO

2. 运行演示监听器和说话者节点:
我们将使用“/opt/$ROS_DISTRO/lib/”中已经存在的demo_nodes_cpp包

在源终端中运行以下命令:

ros2 run demo_nodes_cpp listener & ros2 run demo_nodes_cpp talker 

您将看到以下内容:

如果是,我们可以确定我们的 ROS2 设置。
呜呜呜!我们已经准备好在 ROS2 中开始开发。让游戏开始 😉
转到本系列的第 2 部分 这里.

在第 1 部分中,我们在 Gazebo 中设置了 TurtleBot3 模拟,这构成了我们在 ROS 2 中所有移动机器人实验的基础。

下一步是什么? 我们现在了解如何使用 Nav2 在 ROS 2 中设置自主导航。在 ROS 1 中,我们使用了导航堆栈,它是多个包的组合,如 move_base、amcl 和地图服务器,仅举几例。

但是 Nav2 是镇上新的酷人,其中大多数软件包已经是其中的一部分,并且功能增强。制造商希望将“ ROS导航带出实验室”,或者简单地说,使其具有生产质量。

六、我们如何在 ROS 2 中设置自主导航?

为了回答这个问题,我们先来看看一些机器人导航概念,好吗?

有一秒钟,把自己放在机器人的鞋子里,你要求自主移动。假设有人说——“哎呀,搬到B位置!

你会怎么做?好吧,我想问以下两个问题——

  1. 我在哪里?
  2. 位置 B 在哪里,换句话说,我的周围(地图)是什么样的?

而这正是机器人真正需要的——

  1. 本地化 — 机器人在哪里?
  2. 映射 — 地图/世界是什么样的?

从技术上讲,这就是机器人大脑处理这些信息并决定移动所需要的。在这种情况下,我们机器人的大脑是导航包。直观,嗯?

因此,我们定义了导航所需的两条信息。

由于这仍然是一个基本的帖子,让我们避免理论(这很重要,但稍后),并转移到 ROS 2 中的 Nav2 包

正如我们所建立的,Nav2需要机器人的当前位置和地图。
在 ROS/ROS2 中,这转化为两个要求—

  • 机器人定位 — 变换和变换map -> odomodom -> base_link

Nav2 的预期输入是符合 REP-105 的两个 TF 转换。

全球定位系统(GPS,SLAM,运动捕捉)的工作至少可以提供转换。通常,这是 Nav2 的一部分用于此目的。map->odomamcl

测程系统的作用是提供->转换。里程计可以来自许多来源,包括激光雷达、雷达、车轮编码器、VIO 和 IMU。测程法的目标是提供基于机器人运动的平滑和连续的局部框架。全球定位系统将更新相对于全局帧的变换,以考虑测距漂移。odombase_link

机器人定位通常用于这种融合。它将采用各种类型的传感器,并为TF和主题提供连续和平滑的测程。典型的移动机器人设置可能具有以这种方式融合的车轮编码器、IMU 和视觉的测程计。N

然后,平滑输出可用于航位推算以实现精确运动,并在全局位置更新之间准确更新机器人的位置。

  • 地图 —在需要 SLAM(同时定位和映射)的应用程序中,这是与导航并行完成的。但目前,我们有兴趣使用静态地图(因此我们已经知道周围的地图)进行导航。在 ROS 2 中,SLAM 工具箱可用于生成静态地图,我们可以保存它以供导航。

如果这一切都有意义,那就太棒了。如果没有,请耐心等待。在下面的 ROS 2 中完成这项工作将澄清:)

从我内心深处,我相信边建边学的策略。那么,好吗?

七、使用 TurtleBot2 模拟设置基于 ROS 3 的导航—

        第 1 步 — 在凉亭中设置 ROS 2 和 TurtleBot3 以进行模拟
        请查看我们的第 0 部分和第 1 部分以完成此操作(如果您尚未完成)

如果你这样做了,你应该擅长在凉亭中运行TurtleBot3模拟。

        第 2 步 — 设置本地化

        首先,在凉亭中运行 TurtleBot3

        为 ROS 2 提供终端 —

source /opt/ros/galactic/setup.bash 

        转到我们在第 3 部分中构建的 TurtleBot1 包,然后获取终端 —

source ./install/setup.bash 

        运行海龟机器人3世界模拟 —

ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py 

        您应该看到模拟正在运行 —

现在,打开另一个终端,source ROS 2然后查找题目:

ros2 topic list

        看看!有一个主题,它给了我们测程值和转换。所以我们已经准备好了本地化,对吧?odomodom->base_link

        好吧,虽然我们将使用它,但在一般情况下,不完全是。
        当您使用真正的机器人时,这些测程值是嘈杂的并且容易漂移。因此,我们需要使用机器人定位包将它们与其他传感器输出(如 IMU(本地)和 GPS(全球))融合。

        在我们的例子中,odom 几乎没有任何噪声(我还没有找到一种方法来增加模型的 odom 噪声而不在代码中重新发布)。因此,我们将使用它。

        因此,对我们来说,本地化价值已经准备就绪。

        步骤 3 — 设置静态地图

        为此,我们使用 ROS 2 中的 SLAM 工具箱

  • 安装 SLAM 工具箱
sudo apt install ros-<ros2-distro>-slam-toolbox 

        我正在使用银河,所以——

sudo apt install ros-galactic-slam-toolbox 
  • 启动用于映射的 slam 工具箱包 —

        在一个新的终端中(当然,在采购 ROS 2 之后,一定要这样做)—

source /opt/ros/galactic/setup.bash
ros2 launch slam_toolbox online_async_launch.py 
  • 使用必要的可视化启动 Rviz2

        在新终端中,启动 rviz2

source /opt/ros/galactic/setup.bash
rviz2 

        添加以下内容以进行可视化

  1. 激光扫描 — 主题 , 可靠性政策/scanBest Effort
  2. 地图 — 主题/map
  3. TF

        这是我的 Rviz 观点——

  • 运行远程操作以移动机器人进行映射 —

        在一个新的终端中——

source /opt/ros/galactic/setup.bash
ros2 run teleop_twist_keyboard teleop_twist_keyboard 
  • 将 Gazebo 和 RViz 并排放置,然后 teleop 查看在 RViz 中创建的地图 —

        我通常会显着减慢机器人的速度以获得更好的地图

  • 保存地图

在新终端中,运行nav2_map_server

source /opt/ros/galactic/setup.bash
ros2 run nav2_map_server map_saver_cli -f ~/map 

        这会将地图保存在我们的主目录中(map.pgm 和 map.yaml)

        那是映射。

        而且。我们准备接下来导航!

                第 4 步 — 自主导航

        请杀死slam_toolbox节点、远程操作节点和 RViz。我们不再需要它们了。此时,只有 TurtleBot3 凉亭模拟应该运行

现在我们已经准备好本地化(主题)和映射(我们保存的地图),我们可以开始导航了/odom

  • 启动导航

        在一个新的终端中——

source /opt/ros/galactic/setup.bash
ros2 launch nav2_bringup bringup_launch.py use_sim_time:=True autostart:=True map:=/path/to/your-map.yaml 

        这将设置自主导航所需的所有节点,但会发出有关框架不存在的警告。我们会尽快解决这个问题。map

        在另一个终端中,启动 RViz,但具有预设的可视化 —

source /opt/ros/galactic/setup.bashros2 run rviz2 rviz2 -d $(ros2 pkg prefix nav2_bringup)/share/nav2_bringup/rviz/nav2_default_view.rviz 

        房车视图 —

        您将看到全局状态错误,这是关于地图不可用。
问题是,转换是由 amcl 发布的,它是作为上述的一部分推出的。但需要一个初始姿势才能开始工作。map->odomnav2_bringupamcl

        为此,请单击上方工具栏上的“2D 姿势估计”(绿色箭头之一),并通过在 RViz 中的地图上单击并拖动来根据凉亭(位置和标题)提供当前姿势。您应该尽可能精确(但小错误没问题)。

        一旦你这样做了,这应该是新的视图——

        现在,我们有了自主导航所需的所有转换:map->odom->base_link

  • 导航

        从底部开始,我们在这里;)

        让我们导航!

        要命令机器人自主移动,请转到 RViz 并单击 .现在,在 RViz 中的目的地上单击(用于位置)并拖动(用于方向)。下一个?观看凉亭里的魔术!Nav2 Goal

        你将看到 nav2 规划了一条路径(本地 + 全局)并开始移动机器人。如果这让你开心,你可以继续提供更多的 Nav2 目标!

        那么,我们已经成功地使用 Nav2 为 TurtleBot3 设置了自主导航,那就是本文的全部目标。

后记

        你接下来问什么?理想情况下,我想用一个物理的TurtleBot继续这个系列。也许我众包了一个TurtleBot。也许别的东西。我很想知道你想要什么。我们可以一起想办法!

相关文章:

构建捡垃圾机器人的 ROS 2 项目

一、说明 本系列是关于学习如何使用 ROS2、Docker 和 Github 设计、设置和维护机器人项目。 先决条件 — ROS2 软件包的基本知识、实现发布者、订阅者、操作并连接它们。 我们之前在 ROS2 中了解了不同的部分。但是&#xff0c;在我们转向实际的基于硬件的项目之前&#xff0c;…...

Spring常用注解(2)

6、切面&#xff08;AOP&#xff09;相关注解 Spring AOP详细介绍 Spring支持AspectJ的注解式切面编程。 Aspect 声明一个切面 After 在方法执行之后执行&#xff08;方法上&#xff09; Before 在方法执行之前执行&#xff08;方法上&#xff09; Around 在方法执行之前与之后…...

upload-labs靶场通关

文章目录 Pass-01 前端检测&#xff08;JS检测&#xff09;1.1 原理分析1.2 实验 Pass-02 后端检测&#xff08;MIME检测&#xff09;2.1 原理分析2.2 实验 Pass-03 后端检测&#xff08;黑名单绕过&#xff0c;特殊后缀名&#xff09;3.1 原理分析3.2 实验 Pass-04 后端检测&a…...

git拉取代码过程

第一步&#xff1a;先在本地创建文件夹 &#xff0c;比如我这里的文件夹名称是 fengkgong_zntjfx 第二步&#xff1a;执行命令&#xff1a;git init 第三步&#xff1a;git clone 第四步&#xff1a;git fetch 第五步&#xff1a;git branch -a 第六步&#xff1a;cd 项目 【…...

Swift | 属性包装器

Swift | 属性包装器 1. 什么是 Swift Property Wrapper&#xff1f; Swift Property Wrapper 是一种特性&#xff0c;它允许我们在声明属性时添加自定义的包装逻辑。通过使用属性包装器&#xff0c;我们可以在不修改类或结构体定义的情况下&#xff0c;定制属性的访问和存储方…...

Android改造CardView为圆形View,Kotlin

Android改造CardView为圆形View&#xff0c;Kotlin 可以利用androidx.cardview.widget.CardView的cardCornerRadius特性&#xff0c;将CardView改造成一个圆形的View&#xff0c;技术实现的关键首先设定CardView为一个宽高相等的View&#xff08;正方形&#xff09;&#xff0c…...

Idea下面git的使用:变基、合并、优选、还原提交、重置、回滚、补丁

多分支和分支切换 变基和合并 变基是把本项目的所有提交都列出来按顺序一个个提交到目标分支上去 而合并是把两个分支合并起来&#xff0c;但是旧的分支还是可以启动其他分支&#xff0c;在旧的分支上继续开发 master: A -- B -- C -- M/ feature: D -- Emaster: A -…...

【数据结构】什么是算法

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 目录 一.算法的定义 1.算法的概念 2.数据结构与算法的关系 二.算法的特性 输入 输出 有穷性 确定性 可行性 三.算法的设计要求 1.正确性 2.可读性 3.健壮性 4.效…...

复旦大学EMBA:揭秘科创企业,领略未来战略!

智能制造&#xff0c;国之重器。作为制造强国建设的主攻方向&#xff0c;智能制造的发展水平关系到我国未来制造业在全球的地位与影响力。发展智能制造&#xff0c;是加快建设现代化产业体系的重要手段&#xff0c;提升供给体系适配性的有力抓手&#xff0c;也是建设数字中国的…...

根据您的数据量定制的ChatGPT,改变客户服务的方式

在当今竞争激烈的商业环境中&#xff0c;提供优质的客户服务对于保持忠诚的客户群和推动业务增长至关重要。客户满意度已成为各行各企业的首要任务&#xff0c;因为它直接影响客户留存和品牌声誉。随着技术的进步&#xff0c;公司不断探索创新解决方案&#xff0c;以增强客户服…...

《Unity Shader 入门精要》笔记03

UnityShader的内置变量&#xff08;数学篇&#xff09; Unity内置的变换矩阵摄像机和屏幕参数float3 _WorldSpaceCameraPosfloat4 _ProjectionParamsfloat4 _ZBufferParamsfloat4 unity_OrthoParamsfloat4x4 unity_CameraProjectionfloat4x4 unity_CameraInvProjectionfloat4 u…...

LINUX系统使用软件异地同步数据(灾备)

rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步&#xff0c;支持本地复制&#xff0c;或者与其他SSH、rsync主机同步 一、宝塔环境: 有宝塔软件商城支持&#xff0c;参考&#xff1a;https://www.bt.cn/bbs/thread-98022-1-1.html 二、…...

IDEA Rogstry中找不到compiler.automake.allow.when.app.running问题解决

网上大部分人教我们 先 File > Settings 然后 勾选 Build 下的 Compiler中的 Build project automatically 这些步骤都不会有问题 然后就会让我们 ctrl shift alt / 点 Rogstry 打开后 我人就麻了 根本没有什么 compiler.automake.allow.when.app.running 也不用慌 我们…...

c#设计模式-行为型模式 之 状态模式

&#x1f680;简介 状态模式是一种行为设计模式&#xff0c;它允许对象在其内部状态改变时改变其行为&#xff0c;我们可以通过创建一个状态接口和一些实现了该接口的状态类来实现状态模式。然后&#xff0c;我们可以创建一个上下文类&#xff0c;它会根据其当前的状态对象来改…...

使用Docker安装JupyterHub

安装JupyterHub 拉取Jupyter镜像并运行容器 docker run -d -p 8000:8000 --name jupyterhub jupyterhub/jupyterhub jupyterhub # -d&#xff1a;后台运行 # -p 8000:8000&#xff1a;宿主机的8000端口映射容器中的8000端口 # --name jupyterhub&#xff1a;给运行的容器起名…...

SpringCloudGateway网关整合swagger3+Knife4j3,basePath丢失请求404问题

在集成 Spring Cloud Gateway 网关的时候&#xff0c;会出现没有 basePath 的情况&#xff0c;例如定义的 /jeeplus-auth、/jeeplus-system 等微服务前缀导致访问接口404&#xff1a; maven依赖&#xff1a; swagger2于17年停止维护&#xff0c;现在最新的版本为 Swagger3&am…...

html通过使用图像源的协议(protocol)相对 URL 来防止安全/不安全错误

有人知道使用 protocol relative URLs 是否有问题吗&#xff1f;用于图像源以防止混合内容安全警告。 例如链接一张图片: <img src"//domain.com/img.jpg" /> 代替: <img src"http://domain.com/img.jpg" /> or <img src"https…...

【SpringBoot】| Thymeleaf 模板引擎

目录 Thymeleaf 模板引擎 1. 第一个例子 2. 表达式 ①标准变量表达式 ②选择变量表达式&#xff08;星号变量表达式&#xff09; ③链接表达式&#xff08;URL表达式&#xff09; 3. Thymeleaf的属性 ①th:action ②th:method ③th:href ④th:src ⑤th:text ⑥th:…...

Vue Router的进阶

进阶 导航守卫 官方文档上面描述的会比较深奥&#xff0c;而守卫类型也比较多&#xff0c;其中包含了全局前置守卫、全局解析守卫、全局后置钩子、路由独享守卫、组件内守卫。每一种守卫的作用和用法都不相同。这会使得大家去学习的时候觉得比较困难&#xff0c;这边主要介绍…...

方案:快递站智能视频监控3大亮点汇总

快递站智能视频监控方案是一种利用先进的技术和设备&#xff0c;来提升快递站安全管理和快递流程监控的解决方案。具体包括哪些方面呢&#xff1f;今天小编就带大家来看看&#xff01; 1、视频监控系统 在快递站的关键区域安装旭帆科技高清摄像头&#xff0c;如快递仓库、操作…...

Direct3D网格

创建网格 我们可以用D3DXCreateMeshFVF函数创建一个"空"网格对象 &#xff0c;空网格对象是指我们指定了网格的面片总数和顶点总数&#xff0c;然后由该函数为顶点缓存、索引缓存和属性缓存分配大小合适的内存&#xff0c;之后即可手工填入网格数据。 HRESULT WINA…...

docker安装wiki

1.docker pull mediawiki 2.docker run -d --name mywiki -p 8666:80 mediawiki 访问ip:8666,就可以看到配置页面了 3.docker pull mysql docker run -d --name my-mysql -e MYSQL_ROOT_PASSWORD123456 -p 3307:3306 mysql 4.在配置页面链接ip:3307,连接数据库&#xff0c;接下…...

bigemap在林业勘测规划设计行业的一些应用

选择Bigemap的原因&#xff1a; 主要注重影像的时效性&#xff0c;软件的影像时效性比其他的更新快&#xff0c;更清晰。 使用场景&#xff1a; 1.林业督查&#xff0c;主要是根据国家下发的图斑&#xff0c;结合测绘局的影像以及bigemap的较新影像对比去年和今年的林地变化。…...

设计模式学习

文章目录 前言设计模式的七大原则单一职责原则开放封闭原则里氏替换原则依赖倒转原则接口隔离原则合成复用原则迪米特原则总结 GoF二十三种设计模式创建型模式&#xff08;五种&#xff09;结构型模式&#xff08;七种&#xff09;行为型模式&#xff08;十一种&#xff09; 游…...

Openfire身份认证绕过漏洞

漏洞详情&#xff1a; Openfire是采用Java编程语言开发的实时协作服务器&#xff0c;Openfire的管理控制台是一个基于Web的应用程序&#xff0c;被发现可以使用路径遍历的方式绕过权限校验。未经身份验证的用户可以访问Openfire管理控制台中的后台页面。同时由于Openfire管理控…...

类目体系设计总结

一、背景 公司窗帘产品在做分类调整&#xff0c;从原先二级类目调整为三级类目&#xff0c;相对于平台电商我们的类目层次结构要简单很多&#xff08;没有定义商品动态属性等&#xff09;&#xff0c;但对于也有上万款SKU的系统来讲,做好基础的分类对于采购、商品促销、数据报…...

gRPC之proto数据验证

1、proto数据验证 本篇将介绍grpc_validator&#xff0c;它可以对gRPC数据的输入和输出进行验证。 这里复用上一篇文章的代码。 1.1 创建proto文件&#xff0c;添加验证规则 这里使用第三方插件go-proto-validators 自动生成验证规则。 地址&#xff1a;https://github.co…...

计算机竞赛 题目: 基于深度学习的疲劳驾驶检测 深度学习

文章目录 0 前言1 课题背景2 实现目标3 当前市面上疲劳驾驶检测的方法4 相关数据集5 基于头部姿态的驾驶疲劳检测5.1 如何确定疲劳状态5.2 算法步骤5.3 打瞌睡判断 6 基于CNN与SVM的疲劳检测方法6.1 网络结构6.2 疲劳图像分类训练6.3 训练结果 7 最后 0 前言 &#x1f525; 优…...

css--踩坑

1. 子元素的宽高不生效问题 设置flex布局后&#xff0c;子元素的宽高不生效问题。 如果希望子元素的宽高生效&#xff0c;解决方法&#xff0c;给子元素添加如下属性&#xff1a; flex-shrink: 0; flex-shrink: 0;2. 横向滚动&#xff08;子元素宽度不固定&#xff09; /* tab…...

C超市商品信息查询系统

一、系统界面介绍 1. 超市商品信息查询系统 1、显示商品信息&#xff0c;包括&#xff1a;商品名称、商品种类&#xff08;休闲食品、奶品水饮、生鲜水果&#xff09;、商品价格、商品保质期、商品生产日期&#xff1b; 2、从文件中导入数据、显示、排序、查询的功能。&…...

黑马JVM总结(二十七)

&#xff08;1&#xff09;synchronized代码块 synchronized代码块的底层原理&#xff0c;它是给一个对象进行一个加锁操作&#xff0c;它是如何保证如果你出现了synchronized代码块中出现了问题&#xff0c;它需要给这个对象有一个正确的解锁操作呢&#xff0c;加锁解锁是成对…...

软件测试/测试开发丨Python异常处理 学习笔记

点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接&#xff1a;https://ceshiren.com/t/topic/27722 异常处理 编写程序时&#xff0c;即使语句或表达式使用了正确的语法&#xff0c;执行时仍可能触发错误。执行时检测到的错误称为异常&#xff0c;大…...

026 - STM32学习笔记 - 液晶屏控制(三) - DMA2D快速绘制矩形、直线

026- STM32学习笔记 - 液晶屏控制&#xff08;三&#xff09; - DMA2D快速绘制矩形、直线等 上节直接操作LTDC在先视频上直接显示&#xff0c;我们直接操作显存地址空间中的内容&#xff0c;用来显示图形&#xff0c;但是相对来说&#xff0c;这种方法费时费力&#xff0c;这节…...

【牛客网】OR59 字符串中找出连续最长的数字串

题目 思路 创建两个字符串 temp 和 ret 创建指针i用来遍历字符串通过i遍历字符串,如果遇到数字则将这个数组加到字符串temp中 i,如果遇到字母,则判断temp字符串的长度和ret字符串的长度,如果temp<ret则说明这个字符串不是要的字符串,如果temp>ret则说明此时temp字符串是…...

云原生监控系统Prometheus:基于Prometheus构建智能化监控告警系统

目录 一、理论 1.Promethues简介 2.监控告警系统设计思路 3.Prometheus监控体系 4.Prometheus时间序列数据 5.Prometheus的生态组件 6.Prometheus工作原理 7.Prometheus监控内容 8.部署Prometheus 9.部署Exporters 10.部署Grafana进行展示 二、实验 1.部署Prometh…...

C++ 学习系列 -- std::list

一 std::list 介绍 list 是 c 中的序列式容器&#xff0c;其实现是双向链表&#xff0c;每个元素都有两个指针&#xff0c;分别指向前一个节点与后一个节点 链表与数组都是计算机常用的内存数据结构&#xff0c;与数组连续内存空间不一样的地方在于&#xff0c;链表的空间是不…...

YOLOv8血细胞检测(6):多维协作注意模块MCA | 原创独家创新首发

💡💡💡本文改进:多维协作注意模块MCA,效果秒杀ECA、SRM、CBAM,创新性十足,可直接作为创新点使用。 MCA | 亲测在血细胞检测项目中涨点,map@0.5 从原始0.895提升至0.910 收录专栏: 💡💡💡YOLO医学影像检测:http://t.csdnimg.cn/N4zBP ✨✨✨实战医学影…...

FFmpeg横竖版视频互换背景模糊一键生成

视频处理是现代多媒体应用中常见的需求。其中横竖版视频互换和背景模糊是视频编辑中常见的操作。FFmpeg是一个功能强大的工具,适用于这些任务。 本文将详细介绍如何使用FFmpeg进行横竖版视频互换和背景模糊。 文章目录 操作命令与命令说明横版转竖版竖版转横版背景模糊处理横…...

Java 华为真题-小朋友分班

需求&#xff1a; 题目描述 幼儿园两个班的小朋友在排队时混在了一起&#xff0c;每位小朋友都知道自己是否与前面一位小朋友同班&#xff0c;请你帮忙把同班的小朋友找出来小朋友的编号是整数&#xff0c;与前一位小朋友同班用Y表示&#xff0c;不同班用N表示学生序号范围(0&…...

机器学习必修课 - 编码分类变量 encoding categorical variables

1. 数据预处理和数据集分割 import pandas as pd from sklearn.model_selection import train_test_split导入所需的Python库 !git clone https://github.com/JeffereyWu/Housing-prices-data.git下载数据集 # Read the data X pd.read_csv(/content/Housing-prices-data/t…...

ClickHouse进阶(二十二):clickhouse管理与运维-服务监控

进入正文前,感谢宝子们订阅专题、点赞、评论、收藏!关注IT贫道,获取高质量博客内容! 🏡个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Kerberos安全认证-CSDN博客 📌订阅:拥抱独家专题,你的订阅将点燃我的创作热情! 👍点赞:赞同优秀创作,你的点赞是对我创…...

Hadoop使用hdfs指令查看hdfs目录的根目录显示被拒

背景 分布式部署hadoop,服务机只有namenode节点,主机包含其他所有节点 主机关机后,没有停止所有节点,导致服务机namenode继续保存 再次开启主机hadoop,使用hdfs查看hdfs根目录的时候显示访问被拒 解决方案 1.主机再次开启hadoop并继续执行关闭 2.服务器再次开启hadoop并继…...

[Mac] 安装paddle-pipelines出现 ERROR: Failed building wheel for lmdb

今天在mac换了新系统&#xff0c;然后重新安装paddle-piplines的时候出现了下面的问题&#xff1a; xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrunerror: comma…...

LED灯亮灭

.text .global _start _start: 设置GPIO寄存器的时钟使能  RCC_MP_AHB4ENSETR[4]->1 0x50000a28LDR R0,0x50000A28LDR R1,[R0] 从R0为起始地址的&#xff14;个字节数据取出放入R1中ORR R1,R1,#(0x1<<4) 第四位设置为1STR R1,[R0] 写回LDR R0,0x5000…...

Acwing.143 最大异或对(trie树)

题目 在给定的N个整数A1&#xff0c;A2 . …Ax中选出两个进行xor(异或)运算&#xff0c;得到的结果最大是多少? 输入格式 第一行输入一个整数N。 第二行输入N个整数A1~AN。 输出格式 输出一个整数表示答案。 数据范围 1 ≤N ≤105,0≤A<231 输入样例: 3 1 2 3输出样…...

day10.8ubentu流水灯

流水灯 .text .global _start _start: 1.设置GPIOE寄存器的时钟使能 RCC_MP_AHB4ENSETR[4]->1 0x50000a28LDR R0,0X50000A28LDR R1,[R0] 从r0为起始地址的4字节数据取出放在R1ORR R1,R1,#(0x1<<4) 第4位设置为1STR R1,[R0] 写回2.设置PE10管脚为输出模式 G…...

transformer系列5---transformer显存占用分析

Transformer显存占用分析 1 影响因素概述2 前向计算临时Tensor显存占用2.1 self-attention显存占用2.2 MLP显存占用 3 梯度和优化器显存占用3.1 模型训练过程两者显存占用3.2 模型推理过程两者显存占用 1 影响因素概述 模型训练框架&#xff1a;例如pytorch框架的cuda context…...

Docker项目部署

目录 一、前端项目部署 1、上传文件 2、开启容器 3、测试 二、后端项目部署 1、打包java项目 2、将jar包和Dockerfile文件长传到Linux系统 3、构建镜像 4、开启容器 5、测试 三、DockerCompose快速部署 基本语法 一、前端项目部署 1、上传文件 里面包括页面和配置文…...

vue3实现文本超出鼠标移入的时候文本滚动

判断文本长度是否大于容器长度 鼠标移入的时候判断&#xff0c;此处使用了tailwindcss&#xff0c;注意一下要设置文本不换行。 <divref"functionsItems"mouseenter"enterFunctionsItem($event, index)"><img class"w-5 h-5" :src&quo…...

光伏系统MPPT、恒功率控制切换Simulink仿真

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...