ROS 概述與環境搭建

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技術是人機交互領域中的一個…