使用在 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 套件来跟随这篇文章。具体而言,我们将:
-
了解差速驱动机器人测程法。
-
了解 ROS 和 ROS2 如何处理计量数据。
-
设置基于哈达机器人浏览器的VSCode。
-
使用我们基于浏览器的 VSCode 编译和调试 ROS2 C++里程计节点。
-
了解ROS2项目(即工作区)结构和ROS包数据文件。
-
一起浏览里程计C++代码。
除了实现里程计的示例代码外,我们还将提供一个半实现的变体,供您尝试自己实现里程计代码。
按照示例阅读这篇文章应该需要 30 到 45 分钟。
二、 差速驱动机器人测程法
机器人测程法是估计机器人状态和姿势的过程。对于像我们的哈达机器人这样的差速驱动机器人,我们使用车轮如何转动的知识来估计哈达机器人的运动和姿势 - 稍后会详细介绍为什么它是估计。
运动需要我们的哈达机器人前进的速度,即速度(我们将使用米每秒)以及我们的哈达机器人转动的速度(以弧度每秒为单位) - 由这对表示 .
ROS2 使用右手坐标系。在 2D 空间中只考虑轮式机器人是相当常见的,其中绘制的 x 轴指向右,y 轴指向上方,(通常未使用的)z 轴指向我们的脸。因此,正旋转意味着在从上到下(即沿着 z 轴向下)观察我们的 Hadabot 时逆时针旋转。
姿势是(x,y) 我们的 Hadabot 的 2D 位置以及 (即航向角) 表示θ 在某些坐标空间中。
当机器人第一次通电时,将其初始姿势视为 和 .机器人指向某个坐标图的原点的右侧。
对于我们的差速器驱动 Hadabot,测程法成为估算的一种练习 和θ 根据我们对每个轮子旋转速度的测量。
我们用车轮编码器传感器测量哈达机器人的车轮旋转速度(弧度每秒)。用尺子物理测量车轮的半径(以米/弧度为单位)后,我们可以轻松计算出每个车轮的距离速度(米/秒) 和 - 用用简单的数学。
在连续的时间里,里程计变成了一个整合过程,这可能是非常讨厌的。但对我们来说幸运的是,我们可以在小的离散时间块中采样,即:Δt,这使得数学变得更加简单。我不太擅长微分方程,但我很擅长总结数字!
一旦你拥有 和,您可以计算每个车轮行进的距离(以米为单位):
测程练习变为使用以下输入:
- ,
- 机器人的前瞬位置(x,y) 和前瞬取向θ
...要计算这些输出,请执行以下操作:
- 新的线性和角速度(v′,ω′)
- 新姿势(x′,y′)和θ′
我们将自由地跳过一些推导,但最重要的中间计算是:
2.1 什么是 ?
它是左右车轮中心之间的测量距离,以米为单位。下图——
.但实际上,你可以用使用尺子的物理哈达机器人来衡量这一点。
2.2 什么是d_center?
如果左右轮以相同的速度旋转,哈达机器人就会沿着一条直线移动。但是,如果一个轮子碰巧比另一个轮子旋转得快,那么每个轮子的路径就会变成围绕某个旋转中心的弧形。P 在我们的坐标图中。每个弧的距离为和分别针对每个车轮。和 是车轮之间弧形路径的长度。
2.3 什么φ?
我们知道哈达博特以前的定位是θ 在我们的坐标图中。我们正在尝试计算新的方向θ′ .
直观 φ=θ′−θ 新方向和以前方向之间的差异。在数学上,您可以计算φ 使用上面的推导方程。
上述方程的推导在本篇关于差分驱动里程计的论文中有明确的描述。推导是直截了当的,依于找出旋转中心,P ,并使用一些基本的三角函数来推导其余部分。
通过中间计算和我们的当前状态,特别是φ , ,(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 节点编译运行调试器
请按照以下步骤操作:
-
启动特定于本文的基于浏览器的VSCode工作区(此链接指向您的本地主机,因此一切都在本地系统上安全运行)。
-
在“VSCode 资源管理器”面板中,右键单击 README.md 文件 ->“打开预览”。
-
按照自述文件中的说明编译、运行和调试 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(...)函数定义,并将你的结果与我们的结果进行比较。也许我们的代码中有一个错误。=)
八、结论
感谢您关注这篇关于机器人测程法的文章。我们做了以下工作:
-
学习了如何计算差速驱动机器人(如 Hadabot)的测程。
-
运行一个示例来编译计算测程的 ROS2 节点。
-
使用我们基于浏览器的 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.…...
嵌入式蓝海变红海?其实是大浪淘沙!
嵌入式是当下热门的职业方向之一,吸引了众多求职者的目光。然而,有人担心大家一拥而上,导致嵌入式就业竞争激烈,找工作难度大。其实,嵌入式行业的竞争并非无法逾越的天堑,也远远没有从蓝海变成红海…...
【附安装包】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 中打印日志,请按照以下步骤进行操作: 在你的 JNI C/C 代码中包含 <android/log.h> 头文件…...
第28次CCF计算机软件能力认证(测试)
测试300分要是考试的时候也能这么发挥就好 第一题:现值计算 解题思路:直接模拟 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包括两种子锁 (1)ReadWriteLock ReadWriteLock 可以实现多个读锁同时进行,但是读与写和写于写互斥,只能有一个写锁线程在进行。 (2)StampedLock StampedLock是Jdk在1.8提供的一种读写锁&a…...
【Linux操作系统】深入探索Linux系统编程中的信号集操作函数
在Linux系统编程中,信号集操作函数是非常重要的工具,它们允许我们对信号进行管理和控制。本篇博客将详细介绍Linux系统编程中的信号集操作函数,包括信号集的创建、添加和删除信号,以及对信号集进行操作的常用函数。通过深入了解这…...
忻州网站建设求职简历/选择一个产品做营销方案
👇👇关注后回复 “进群” ,拉你进程序员交流群👇👇来源:CSDN(ID:CSDNnews)绝大多数目前在工作岗位上的人,应该都经历过“面试”这个环节,对程序员…...
网站开源程序/seo营销的概念
Annotation(注释) 概述从 JDK 5.0 开始, Java 增加了对元数据(MetaData) 的支持, 也就是 Annotation(注释) Annotation 其实就是代码里的特殊标记, 这些标记可以在编译, 类加载, 运行时被读取, 并执行相应的处理. 通过使用 Annotation, 程序员可以在不改变原有逻辑的情况下, 在…...
永川做网站的公司/百度大数据平台
代码 关键字: javascript this用法小结this是JavaScript中功能最强大的关键字之一。不幸的是,如果你不知道它具体怎么工作,你将很难正确使用它。this是面向对象语言中的一个重要概念,在JAVA,C#等大型语言中,this固定指向运行时的当…...
东营网站建设哪家好/天眼查企业查询入口
本文来自于Stackoverflow上的一个问题,下面确实有很多盲人程序员作出回答,笔者感触颇深,故整理成文。 具体技术细节不必深究,主要了解一下他们的工作状态,以期让更多的朋友关注残障人士的生活与工作。 原问题大致如下…...
wordpress dz/东莞百度seo在哪里
Flex布局简单案例练习 一、自适应布局 不同的设备用不同的页面或局部伸缩 设计思路:判断设备的类型或控制局部的变化 1.1 页面跳转为例 index.html <script type"text/javascript">var redirect()>{// 获取设备信息let userAgent navigato…...
网站开发公司有哪些/优化大师破解版app
一、集合可被压缩存放 存储集合数据的时候可以采用内存压缩技术,以使用更少的内存存储更多的数据。 如 Hashes,Lists,Sets和Sorted Sets,当这些集合中的所有数都小于一个给定的元素,并且集合中元素数量小于某个值时,存储的数据会…...