1. ROS 简介

1.1 ROS 诞生背景

  机器人是一种高度复杂的系统性实现,机器人设计包含了机械加工、机械结构设计、硬件设计、嵌入式软件设计、上层软件设计....是各种硬件与软件集成,甚至可以说机器人系统是当今工业体系的集大成者。

  机器人体系是相当庞大的,其复杂度之高,以至于没有任何个人、组织甚至公司能够独立完成系统性的机器人研发工作。

  一种更合适的策略是:让机器人研发者专注于自己擅长的领域,其他模块则直接复用相关领域更专业研发团队的实现,当然自身的研究也可以被他人继续复用。这种基于"复用"的分工协作,遵循了不重复发明轮子的原则,显然是可以大大提高机器人的研发效率的,尤其是随着机器人硬件越来越丰富,软件库越来越庞大,这种复用性和模块化开发需求也愈发强烈。

  在此大背景下,2007年,一家名为柳树车库(Willow Garage)的机器人公司发布了 ROS(机器人操作系统),ROS 是一套机器人通用软件框架,可以提升功能模块的复用性,并且随着该系统的不断迭代与完善,如今 ROS 已经成为机器人领域的事实标准。


1.2 ROS 相关概念

  ★  ROS 全称为 Robot Operating System(机器人操作系统)。
  ★ ROS 是适用于机器人的开源元操作系统。
  ★ ROS 集成了大量的工具,库,协议,提供类似 OS 所提供的功能,简化了对机器人的控制。
  ★ ROS 提供了用于在多台计算机上获取,构建,编写和运行代码的工具和库,ROS 在某些方面类似于“机器人框架”。

  ROS 设计者将 ROS 表述为“ROS = Plumbing + Tools + Capabilities + Ecosystem”,即 ROS 是通讯机制、工具软件包、机器人高层技能以及机器人生态系统的集合体。


1.3 ROS 设计目标

  机器人开发的分工思想,实现了不同研发团队间的共享和协作,提升了机器人的研发效率,为了服务“ 分工”,ROS 主要设计了如下目标:

  ✔ 代码复用:ROS 的目标不是成为具有最多功能的框架,ROS 的主要目标是支持机器人技术研发中的代码重用

  ✔ 分布式:ROS 是进程(也称为Nodes)的分布式框架,ROS 中的进程可分布于不同主机,不同主机协同工作,从而分散计算压力。

  ✔ 松耦合:ROS 中功能模块封装于独立的功能包或元功能包,便于分享,功能包内的模块以节点为单位运行,以 ROS 标准的 IO 作为接口,开发者不需要关注模块内部实现,只要了解接口规则就能实现复用,实现了模块间点对点的松耦合连接。

  ✔ 精简:ROS 被设计为尽可能精简,以便为 ROS 编写的代码可以与其他机器人软件框架一起使用。ROS易于与其他机器人软件框架集成:ROS 已与 OpenRAVE、Orocos 和 Player 集成。

  ✔ 语言独立性:包括Java,C++,Python等。为了支持更多应用开发和移植,ROS 设计为一种语言弱相关的框架结构,使用简洁,中立的定义语言描述模块间的消息接口,在编译中再产生所使用语言的目标文件,为消息交互提供支持,同时允许消息接口的嵌套使用。

  ✔ 易于测试:ROS 具有称为 rostest 的内置单元/集成测试框架,可轻松安装和拆卸测试工具。

  ✔ 大型应用:ROS 适用于大型运行时系统和大型开发流程。

  ✔ 丰富的组件化工具包:ROS 可采用组件化方式集成一些工具和软件到系统中并作为一个组件直接使用,如RVIZ(3D可视化工具),开发者根据 ROS 定义的接口在其中显示机器人模型等,组件还包括仿真环境和消息查看工具等。

  ✔ 免费且开源:开发者众多,功能包多。


1.4 ROS 发展历程

  ROS是一个由来已久、贡献者众多的大型软件项目。在 ROS 诞生之前,很多学者认为,机器人研究需要一个开放式的协作框架,并且已经有不少类似的项目致力于实现这样的框架。在这些工作中,斯坦福大学在2000年年中开展了一系列相关研究项目,如斯坦福人工智能机器人(STandford AI Robot, STAIR)项目、个人机器人(Personal Robots, PR)项目等,在上述项目中,在研究具有代表性、集成式人工智能系统的过程中,创立了用于室内场景的高灵活性、动态软件系统,其可以用于机器人学研究。

  2007年,柳树车库(Willow Garage)提供了大量资源,用于将斯坦福大学机器人项目中的软件系统进行扩展与完善,同时,在无数研究人员的共同努力下,ROS 的核心思想和基本软件包逐渐得到完善。

  ROS 的发行版本(ROS distribution)指 ROS 软件包的版本,其与Linux的发行版本(如Ubuntu)的概念类似。推出 ROS 发行版本的目的在于使开发人员可以使用相对稳定的代码库,直到其准备好将所有内容进行版本升级为止。因此,每个发行版本推出后,ROS 开发者通常仅对这一版本的 bug 进行修复,同时提供少量针对核心软件包的改进。

  版本特点: 按照英文字母顺序命名,ROS 目前已经发布了 ROS1 的终极版本:noetic,并建议后期过渡至 ROS2 版本。noetic 版本之前默认使用的是 Python2,noetic 支持 Python3。

  【建议版本】: noetic 或 melodic 或 kinetic。

2. ROS 安装

  我们使用的是 ROS 版本是 Noetic,因此可以在 Ubuntu20.04、Mac 或 Windows10 系统上安装。虽然一般用户平时使用的操作系统以 Windows 居多,但是 ROS 之前的版本基本都不支持 Windows,所以当前我们选用的操作系统是 Ubuntu,以方便向历史版本过渡。

  Ubuntu 安装常用方式有两种:

    ✎ 方案1:实体机安装 Ubuntu (较为常用的是使用双系统,Windows 与 Ubuntu 并存)。

    ✎ 方案2:虚拟机安装 Ubuntu。

  两种方式比较,各有优缺点:

    ☃ 方案1:可以保证性能,且不需要考虑硬件兼容性问题,但是和 Windows 系统交互不便。

    ☃ 方案2:可以方便的实现 Windows 与 Ubuntu 交互,不过性能稍差,且与硬件交互不便。

  在 ROS 中,一些仿真操作是比较耗费系统资源的,且经常需要和一些硬件(雷达、摄像头、imu、STM32、arduino....)交互,因此,原则上建议采用方案1,不过如果只是出于学习目的,那么方案2也基本够用,且方案2在 Windows 与 Ubuntu 的交互上更为方便,对于学习者更为友好,因此本教程在此选用的是方案2。当然,具体采用哪种实现方案,请按需选择。

  如果采用虚拟机安装 Ubuntu,再安装 ROS 的话,大致流程如下:

    1、安装虚拟机软件(比如:virtualbox 或 VMware);

    2、使用虚拟机软件虚拟一台主机;

    3、在虚拟主机上安装 Ubuntu 20.04;

    4、在 Ubuntu 上安装 ROS;

    5、测试 ROS 环境是否可以正常运行。

  虚拟机软件选择上,对于我们学习而言 virtualbox 和 VMware 都可以满足需求,二者比较,前者免费,后者收费。


2.1 安装虚拟机软件

  安装 VMware Workstation 需要先访问官网,下载安装包。

  官网下载地址:官网下载。

  下载后正常安装。


2.2 虚拟一台主机

  使用 VMware 虚拟计算机的过程也不算复杂,只需要按照提示配置其相关参数即可。

  打开 VMware Workstation ,在主界面点击【创建新的虚拟机】:

  下一步:

  选择稍后安装操作系统:

  依次选择 Linux,Ubuntu 64位:

  设置虚拟机名称、存放位置:

  为虚拟机分配磁盘大小(上限),不是真实大小,用多少占多少:

  硬件信息配置,设置内存(最低4G)、移除打印机:

  最终信息如下:

  创建完成:


2.3 安装 Ubuntu

2.3.1 系统安装

  首先,下载 Ubuntu 的镜像文件,阿里云官网镜像下载链接。

  然后,配置虚拟主机,关联 Ubuntu 镜像文件。

  使用下载好的 ISO 镜像文件:

  最后,打开虚拟机,安装系统,系统正常安装就好。


『可能出现的问题一』

  安装界面显示不全,无法进行正常安装。

『解决步骤』

  1、选择语言,点击试用系统;

  2、右上角点击设置,设置屏幕分辨率;

  3、点击桌面的安装系统;

  4、开始安装。


【温馨提示】 

  root 初始密码更改命令如下:

sudo passwd root

2.3.2 配置远程连接

  ① 安装 openssh-server 服务

sudo apt-get install openssh-server

  ② 安装 ufw

sudo apt-get install ufw

  ③ 使用 ufw 开启22端口

sudo ufw enablesudo ufw allow 22

  ④ 查看 ip 命令

sudo apt install net-toolsifconfig

  ⑤ 使用 Xshell 测试连接

2.3.3 文件交互配置

  使用 Xshell 来操作服务非常方便,传文件也比较方便,就是使用rz,sz。

  首先,服务器要安装了rz,sz:

sudo apt install lrzsz

  ✎ 运行 sudo rz ,会将 Windows 的文件传到 Linux 服务。

  ✎ 运行 sudo sz filename ,会将文件下载到 Windows本地。


2.4 安装 ROS

  Ubuntu 安装完毕后,就可以安装 ROS 操作系统了,大致步骤如下:

    ① 配置 Ubuntu 的软件和更新;

    ② 设置安装源;

    ③ 设置 key;

    ④ 安装;

    ⑤ 配置环境变量;

    ⑥ 安装构建依赖。


2.4.1 配置 Ubuntu 的软件和更新

  配置 Ubuntu 的软件和更新,允许安装不经认证的软件。

  首先打开“软件和更新”对话框,具体可以在 Ubuntu 搜索按钮中搜索。打开后按照下图进行配置(确保勾选了"restricted", "universe," 和 "multiverse.")。

2.4.2 设置安装源

  配置国内南京大学的安装源:(推荐)

sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.nju.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'

  或:官方默认安装源:

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

  或:来自国内清华的安装源

sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'

  或:来自国内中科大的安装源

sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'

2.4.3 设置 key

sudo apt install curlcurl -s https://gitee.com/zhao-xuzuo/rosdistro/raw/master/ros.asc | sudo apt-key add -

  下载密钥文件:文件链接。

  下载后,保存文件名为 “ros.asc”,传入虚拟机。

  在文件所在文件夹下打开终端,输入:

sudo apt-key add ros.asc

2.4.4 安装

  首先,更新 apt(以前是 apt-get,官方建议使用 apt 而非 apt-get),apt 是用于从互联网仓库搜索、安装、升级、卸载软件或操作系统的工具。

sudo apt updatesudo apt upgrade

  等待...

  此处可能出现报错。。。

  然后,再安装所需类型的 ROS。ROS 的多个类型:Desktop-Full、Desktop、ROS-Base。这里介绍较为常用的Desktop-Full(官方推荐)安装: ROS, rqt, rviz, robot-generic libraries, 2D/3D simulators, navigation and 2D/3D perception。

sudo apt install ros-noetic-desktop-full

  等待......(比较耗时)

  友情提示: 由于网络原因,导致连接超时,可能会安装失败,可以多次重复调用 更新 和 安装命令,直至成功。

2.4.5 配置环境变量

  配置环境变量,方便在任意终端中使用 ROS。

echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrcsource ~/.bashrc

2.4.6 安装构建依赖

  在 noetic 最初发布时,和其他历史版本稍有差异的是:没有安装构建依赖这一步骤。随着 noetic 不断完善,官方补齐了这一操作。

  首先,安装构建依赖的相关工具:

sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential

  ROS 中使用许多工具前,要求需要初始化 rosdep (可以安装系统依赖) -- 上一步实现已经安装过了。

sudo apt install python3-rosdep

  初始化 rosdep:

sudo rosdep initrosdep update

  如果一切顺利的话,rosdep 初始化与更新的打印结果如下:

  但是,在 rosdep 初始化时,多半会抛出异常。

  出现问题: Rosdep experienced an error: The read operation timed out 

  解决方法:

wget -qO - https://raw.fastgit.org/my-rds-store/my_space/master/source/ros/shell/rosdep_repair.sh | bash

  然后进行初始化:

  然后更新,发现读取源列表超时,这是网络原因。

  解决:

    方法一:使用手机热点进行更新。

    方法二:XX,模式设置为【全局模式】。

   然后进行更新,此刻就能更新成功。


2.5 测试 ROS

  ROS 内置了一些小程序,可以通过运行这些小程序以检测 ROS 环境是否可以正常运行

  首先,启动三个命令行(ctrl + alt + T)

    ➹  命令行【1】键入: roscore 

    ➹ 命令行【2】键入: rosrun turtlesim turtlesim_node ,此时会弹出图形化界面。

    ➹ 命令行【3】键入: rosrun turtlesim turtle_teleop_key ,在【3】中可以通过上下左右控制【2】中乌龟的运动。

    ☛ 注意:光标必须聚焦在键盘控制窗口【3】,否则无法控制乌龟运动。

  最终结果如下所示:

3. ROS 快速体验

  编写 ROS 程序,在控制台输出文本: Hello World,分别使用 C++ 和 Python 实现。

3.1 Hello World 实现简介

  ROS 中涉及的编程语言以 C++ 和 Python 为主,ROS 中的大多数程序两者都可以实现,在本系列教程中,每一个案例也都会分别使用 C++ 和 Python 两种方案演示,大家可以根据自身情况选择合适的实现方案。

  ROS 中的程序即便使用不同的编程语言,实现流程也大致类似,以当前 Hello World 程序为例,实现流程大致如下:

    ① 先创建一个工作空间;

    ② 再创建一个功能包;

    ③ 编辑源文件;

    ④ 编辑配置文件;

    ⑤ 编译并执行。

  上述流程中,C++ 和 Python 只是在步骤3和步骤4的实现细节上存在差异,其他流程基本一致。本节先实现 C++ 和 Python 程序编写的通用部分步骤1与步骤2,1.3.2节和1.3.3节再分别使用C++和Python编写HelloWorld。

3.1.1 创建工作空间并初始化

mkdir -p 自定义空间名称/srccd 自定义空间名称catkin_make

  上述命令,首先会创建一个工作空间以及一个 src 子目录,然后再进入工作空间调用 catkin_make 命令编译。

3.1.2 进入 src 创建 ros 包并添加依赖

cd srccatkin_create_pkg 自定义ROS包名 roscpp rospy std_msgs

  上述命令,会在工作空间下生成一个功能包,该功能包依赖于 roscpp、rospy 与 std_msgs,其中 roscpp 是使用 C++ 实现的库,而 rospy 则是使用 Python 实现的库,std_msgs 是标准消息库,创建 ROS 功能包时,一般都会依赖这三个库实现。

  注意: 在 ROS 中,虽然实现同一功能时,C++ 和 Python 可以互换,但是具体选择哪种语言,需要视需求而定。两种语言相较而言: C++ 运行效率高但是编码效率低,而 Python 则反之。基于二者互补的特点,ROS 设计者分别设计了 roscpp 与 rospy 库,前者旨在成为 ROS 的高性能库,而后者则一般用于对性能无要求的场景,旨在提高开发效率。


3.2 HelloWorld(C++版)

  我们已经创建了 ROS 的工作空间,并且创建了 ROS 的功能包,那么就可以进入核心步骤了,本节使用 C++ 编写程序实现 HelloWorld。

3.2.1 进入 ros 包的 src 目录编辑源文件

cd 自定义的包

  创建 xxx.cpp 文件,文件名自定义,使用 vim 打开文件进行编辑。

  C++源代码:

#include "ros/ros.h"int main(int argc, char *argv[])
{//执行 ros 节点初始化ros::init(argc,argv,"hello");//创建 ros 节点句柄(非必须)ros::NodeHandle n;//控制台输出 hello worldROS_INFO("hello world!");return 0;
}

  保存并退出。

3.2.2 编辑 ros 包下的 Cmakelist.txt 文件

add_executable(C++源文件名src/C++源文件名.cpp
)target_link_libraries(C++源文件名${catkin_LIBRARIES}
)

3.2.3 进入工作空间目录并编译

cd 自定义ros空间名称catkin_make

  生成 build devel ....

3.2.4 执行

  终端1:先启动 ROS 核心

roscore

  终端2:再启动节点

cd 工作空间source ./devel/setup.bashrosrun 包名 C++节点名

  命令行输出: HelloWorld!

PS:

   source ~/工作空间/devel/setup.bash 可以添加进 .bashrc 文件,使用上更方便。

✎ 添加方式1:直接使用 gedit 或 vim 编辑 .bashrc  文件,最后添加该内容。

✎ 添加方式2: echo "source ~/工作空间/devel/setup.bash" >> ~/.bashrc 


3.3 HelloWorld(Python版)

  我们已经创建了 ROS 的工作空间,并且创建了 ROS 的功能包,那么就可以进入核心步骤了,本节使用 Python 编写程序实现:

3.3.1 进入 ros 包添加 scripts 目录并编辑 python 文件

cd ros包mkdir scriptscd scripts

  新建 python 文件,文件名自定义。

  Python文件源代码:

#! /usr/bin/env python"""Python 版 HelloWorld
"""
import rospyif __name__ == "__main__":rospy.init_node("Hello")rospy.loginfo("Hello World!!!!")

3.3.2 为 python 文件添加可执行权限

chmod +x 自定义文件名.py

3.3.3 编辑 ros 包下的 CamkeList.txt 文件

catkin_install_python(PROGRAMS scripts/自定义文件名.pyDESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

3.3.4 进入工作空间目录并编译

cd 自定义空间名称catkin_make

3.3.5 进入工作空间目录并执行

  终端1:先启动 ROS 核心

roscore

  终端2:再启动节点

cd 工作空间source ./devel/setup.bashrosrun 包名 自定义文件名.py

  输出结果:Hello World!!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/87359.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/87359.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/87359.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mac python3.13 selenium安装使用

一、安装 # 进入虚拟环境 workon xxxx pip install selenium二、安装驱动 查询自己浏览器版本 /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --versionGoogle Chrome 138.0.7204.93下载对应的驱动,其他版本 sudo mv ~/Downloads/chromedr…

AI 开发平台:中小企业的创新破局点在哪里?

在浙江义乌的一个小商品加工厂里,老板王建国最近有点烦。订单量忽高忽低,原材料价格波动不定,他想通过数据分析提前规划生产,却苦于没有专业的技术团队;在广东东莞的一家电子配件公司,业务员李娜每天要处理…

.NET 8.0 Redis 教程

一、环境准备 1. 安装 Redis 服务器 Windows/macOS/Linux:使用 Docker 快速部署 bash docker run -d --name redis -p 6379:6379 redisLinux:直接安装 bash sudo apt-get install redis-server sudo systemctl start redis-server2. 创建 .NET 项目 b…

2025年游戏鼠标推荐,游戏鼠标推荐,打CSGO(罗技、雷蛇、卓威、ROG、漫步者、赛睿、达尔优)

可能很多人对于游戏鼠标的了解还是不够深,会有很多疑问,比如:“游戏鼠标和办公鼠标的区别”、“游戏鼠标无线好还是有线好”等等一系列的问题,本文将会介绍游戏鼠标领域处于领先地位的几个厂家:罗技鼠标、雷蛇鼠标、赛…

OpenCV CUDA模块设备层-----在 GPU上高效地执行两个uint类型值的最小值比较函数vmin2()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 OpenCV 的CUDA模块(cudev) 中的一个设备端内联函数,用于在GPU上高效地执行两个uint类型值的最小值比较。 该函…

Web3与传统网络安全模型对比:关键差异解析

随着互联网技术的飞速发展,Web3的概念逐渐成为人们关注的焦点。Web3代表着一个更加去中心化、安全和用户友好的网络环境。与传统的网络安全模型相比,Web3在多个方面展现出了其独特的优势和特点。本文将深入探讨Web3与传统网络安全模型之间的关键差异。 …

FLAN:微调语言模型是 Zero-Shot 学习者

摘要 本文探讨了一种简单的方法来提升语言模型的零样本学习能力。我们展示了指令微调——即在通过指令描述的数据集集合上对语言模型进行微调——能够显著提升模型在未见任务上的零样本表现。 我们以一个拥有1370亿参数的预训练语言模型为基础,在60多个通过自然语…

springboot中的事件发布和监听

事件定义 创建一个自定义事件类 UserLoginEvent,继承 ApplicationEvent,用于携带用户登录信息: import org.springframework.context.ApplicationEvent;public class UserLoginEvent extends ApplicationEvent { //关键点1:ext…

“开源双轨架构+40亿参数扩散Transformer——ComfyUI-OmniGen2本地部署教程:重塑多模态生成的效率边界!

一、简介 OmniGen2 是由北京智源研究院最新推出的一个强大、高效的开源多模态生成模型。与 OmniGen v1 不同,OmniGen2 具有两种不同的文本和图像模态解码路径,利用非共享参数和解耦的图像分词器。OmniGen2 在四个主要功能方面具有竞争力的性能&#xff…

Java的SpringAI+Deepseek大模型实战之会话记忆

文章目录 背景项目环境实现步骤第一步、定义会话存储方式方式一、定义记忆存储ChatMemory方式二、注入记忆存储ChatMemory 第二步、配置会话记忆方式一、老版本实现方式二、新版本实现 第三步、存储会话信息 异常处理1、InMemoryChatMemory 无法解析 背景 前两期【环境搭建】和…

RDS MySQL vs. Aurora MySQL:高需求工作负载的终极迁移指南

在 AWS 上,开发团队最常见且关键的决策之一就是选择合适的关系型数据库。通常,讨论会从 RDS for MySQL 这个可靠且熟悉的“老黄牛”开始。但很快,就会有人提到一个更强大、更云原生的选项:Aurora MySQL。 也许,就像最…

使用仓颉编程语言是一种怎样的体验?

2024年6月21日下午,华为终端BG软件部总裁龚体先生在华为开发者大会主题演讲《鸿蒙原生应用,全新出发!》中向全球开发者介绍了华为自研仓颉编程语言,并发布了HarmonyOS NEXT仓颉语言开发者预览版。这是华为首次公开仓颉编程语言。 …

Qt Creator自定义控件开发流程

Qt Creator自定义控件开发流程 在 Qt 5.9 Creator 中开发自定义控件的完整流程如下,分为设计、实现、集成和测试四个阶段: 1. 创建自定义控件类 (1) 新建类文件 右键项目 → 添加新文件 → C Class基类选择 QWidget 或现有控件(如 QPushBu…

翻译《The Old New Thing》- 如何创建一个与屏幕大小相同的窗口,而不会被当作全屏窗口处理?

How can I create a window the size of the screen without it being treated as a fullscreen window? - The Old New Thinghttps://devblogs.microsoft.com/oldnewthing/20250522-00/?p111211 问题描述 任务栏允许全屏窗口覆盖它。这样,当你在放映幻灯片或进行…

深分页末日救星:MySQL延迟关联原理与实战手册

MySQL 深分页(如 LIMIT 100000, 10)本质是 高代价的偏移量扫描,可通过以下方案优化,附核心原理和实操示例: 一、深分页为什么慢? SELECT * FROM orders ORDER BY id DESC LIMIT 100000, 10; 执行过程&…

前端技术栈 —— HTML、CSS和JavaScirpt执行环境

以下内容由GLM回答生成,不保证正确性。 前端技术栈 —— HTML、CSS和JavaScirpt执行环境 JavaScript 的执行环境HTML 和 CSS 的执行环境HTML 和 CSS 是否可以在其他环境中执行?总结 JavaScript 是一种 解释型语言,但它也可以被编译。JavaScr…

多项式带余除法——线性代数题目为例

一、多项式带余除法的定义 二、例题 使用方法将在例题中展示:

学习日记-spring-day40-7.3

知识点: 1.自动装配Resource(3) 知识点 核心内容 重点 Autowired与Resource注入规则 默认注入逻辑:未指定参数时,Resource优先按属性名匹配(by name),失败后按类型匹配&#xf…

重新认识JNIEnv

引言 抛开一堆概念,我们从本质出发。 java 调用c 我们开发移动端或者后端服务 ,都是用的java 或者kotlin 语言。有时候我们需要用c的一些库(ocr识别/导航的算法/ 等) 因为一些跟硬件相关的接口或者系统的api 都是c写的。 C调用J…

人工智能训练师——智能语音识别ASR

人机对话——ASR 概念 ASR(Automatic Speech Recognition,自动语音识别)是一种将人类语音转换为文本的技术。它使得计算机能够“听”懂人类的语音指令或对话,并将其转换成可读、可编辑的文本形式。ASR技术是人机交互领域中的一个…