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

Launch学习

参考博客:
(1) 史上最全的launch的解析来啦,木有之一欧

1 ROS工作空间简介

在这里插入图片描述

2 元功能包

src目录下可以包含多个功能包,假设需要使用机器人导航模块,但是这个模块中包含着地图、定位、路径规划等不同的功能包,它们的逻辑关系如下:

在这里插入图片描述
在Linux系统中为了更方便的组织工程项目(这里针对的是项目文件,即功能包),出现了“元功能包”的概念。这个是一个“虚包”,就是这个功能包的src目录下没有源文件,因此自身不会实现专属功能,其功能的实现完全依赖于其他的功能包,起到一个组织功能包的作用。

以导航模块中的元功能包为例:
在这里插入图片描述navigation功能包为元功能包(metapackage),元功能包中由于没有src目录因此无需添加任何依赖项,因为这个功能包没有自己的专属功能,它的功能是借助其他的功能包的功能来实现的。元功能包有两个文件即可:一个是package.xml文件:用于声明元功能包所依赖的其他功能包;另一个是CMakelist.txt文件:用于指定功能包之间的依赖关系。

CMakelist.txt

cmake_minimum_required(VERSION 3.0.2)  
project(navigation)  
find_package(catkin REQUIRED)  
catkin_metapackage() // 只需添加此条内容即可

package.xml

<exec_depend>amcl</exec_depend>  
<exec_depend>base_local_planner</exec_depend>  
<exec_depend>carrot_planner</exec_depend>  
<exec_depend>clear_costmap_recovery</exec_depend>  
<exec_depend>costmap_2d</exec_depend>  
<exec_depend>dwa_local_planner</exec_depend>  
<exec_depend>fake_localization</exec_depend>  
<exec_depend>global_planner</exec_depend>  
<exec_depend>map_server</exec_depend>  
<exec_depend>move_base</exec_depend>  
<exec_depend>move_base_msgs</exec_depend>  
<exec_depend>move_slow_and_clear</exec_depend>  
<exec_depend>navfn</exec_depend>  
<exec_depend>nav_core</exec_depend>  
<exec_depend>rotate_recovery</exec_depend>  
<exec_depend>voxel_grid</exec_depend>  <export>  <metapackage/> // 表征:这个功能包为元功能包
</export>  

3 Launch文件

Launch文件:源文件的组织者
① 节点启动标签

<launch>  <node pkg = "turtlesim" type = "turtlesim_node" name = "my_node"/>  <node pkg = "turtlesim" type = "turtle_teleop_key" name = "my_key"/>  
</launch>  

Tip:因为ROS中采用多线程,因此节点的运行不会按照节点在launch中排列顺序进行。

pkg:功能包的名称
type:节点本来的名称,这个名称和节点所在.cpp源文件的文件名一致
name:节点重映射的名称,相当于在系统中给节点所在源文件改了个名字

launch标签有一个子级标签deprecated,用于文本说明:

<launch deprecated="this vision is out-of-date!">  
</launch> 

如果认为给很多节点取名太麻烦,可以使用name=”$(anon node_name)”标签在节点node_name名称之后加一些随机数,使得该节点名称在整个catkin编译项目中唯一:

<launch deprecated="this vision is out-of-date!">  <!-- the topic of turtlesim_node is /turtle1/cmd_vel -->  <node pkg="turtlesim" type="turtlesim_node" name="$(anon my_node)"/>  <!-- the topic of turtle_teleop_key is /turtle1/cmd_vel -->  <node pkg="turtlesim" type="turtle_teleop_key" name="my_key" output="screen"/>  
</launch>  

意外关闭后自动启动的子级标签
respawn = true|false 表示:如果节点意外关闭是否重新启动

<launch>  <node pkg="turtlesim" type="turtlesim_node" name="my_node" respawn="true"/>  <node pkg="turtlesim" type="turtle_teleop_key" name="my_key" respawn="true"/>  
</launch>  

节点延迟启动的子级标签,一般结合节点重启动是使能标签respawn(如果节点异常退出运行,那么该节点会被重新启动)一起使用

<launch>  <node pkg="turtlesim" type="turtlesim_node" name="my_node" respawn="true" respawn_delay="10"/>  <node pkg="turtlesim" type="turtle_teleop_key" name="my_key" respawn="true" respawn_delay="10"/>  
</launch>  

如果XXX节点结束运行(XXX节点被杀死),则所有节点都停止运行

<launch>  <node pkg="turtlesim" type="turtlesim_node" name="my_node" required="true"/>  <node pkg="turtlesim" type="turtle_teleop_key" name="my_key" />  
</launch>  

给节点名称添加前缀(给节点添加命名空间)的子级标签

<launch>  <node pkg="turtlesim" type="turtlesim_node" name="my_node" ns="hello"/>  <node pkg="turtlesim" type="turtle_teleop_key" name="my_key"/>  
</launch> 

② 参数设置标签
设置global全局参数

<launch><param name="var" type="int" value="10"/>
</launch>

结合标签设置带有命名空间的私有参数

<launch><node pkg="turtlesim" type="turtlesim_node" name="my_node"/><node pkg="turtlesim" type="turtle_teleop_key" name="my_key" output="screen"><param name="var1" type="int" value="20"/></node>
</launch>

③ 参数打包输入输出删除的标签
从.yaml文件中读取参数:

<launch><rosparam command="load" file="$(find test01)/launch/params.yaml"/><node pkg="turtlesim" type="turtlesim_node" name="my_node"/>  <node pkg="turtlesim" type="turtle_teleop_key" name="my_key" output="screen"/> <param name="var" type="int" value="10"/>  
</launch> 

将.yaml参数文件中的参数导入参数服务器时,我们还可以给这些参数添加namespace命名空间:

<launch>  <node pkg="turtlesim" type="turtlesim_node" name="my_node"/>  <node pkg="turtlesim" type="turtle_teleop_key" name="my_key" output="screen"/>  <param name="var" type="int" value="10"/>  <rosparam command="load" file="$(find test01)/launch/params.yaml" ns="hello"/>  
</launch> 

将参数打包输入进.yaml文件中,这样做啥变量都没导进去:
在这里插入图片描述

<launch>  <rosparam command="dump" file="$(find test01)/launch/input.yaml"/>  <node pkg="turtlesim" type="turtlesim_node" name="my_node"/>  <node pkg="turtlesim" type="turtle_teleop_key" name="my_key" output="screen"/>  <param name="var" type="int" value="10"/>  
</launch>  

我们要想导入参数必须另建一个.launch文件,在使用上述launch文件启动完所有节点之后,在另一个launch文件中执行该功能包参数的导出操作:

<launch><rosparam command="dump" file="$(find test01)/launch/input.yaml" />
</launch>
<launch>  <rosparam command="dump" file="$(find test01)/launch/input.yaml"/>  <rosparam command="delete" param="/hello/n1"/>  
</launch>  

④ 参数统一管理的标签

<launch>  <arg name="car_width" default="[1,2,3,4]" doc="the width of car"/>  <rosparam param="a_list">$(arg car_width)</rosparam>  <rosparam>  Name:  a: 9  b: "hello"  c: $(arg car_width)  </rosparam>  
</launch>

⑤ 改topic名称的标签

<launch>  <!-- the topic of turtlesim_node is /turtle1/cmd_vel -->  <node pkg="turtlesim" type="turtlesim_node" name="my_node"/>  <remap from="/turtle1/cmd_vel" to="new_topic"/>  
</launch>  

⑥ 节点组织标签
就是给被<group>…</group>包含的所有参数、节点的属性加上了namespace

<launch deprecated="this vision is out-of-date!">  <group ns="family">  <!-- the topic of turtlesim_node is /turtle1/cmd_vel -->  <node pkg="turtlesim" type="turtlesim_node" name="my_node"/>  <!-- the topic of turtle_teleop_key is /turtle1/cmd_vel -->  <node pkg="turtlesim" type="turtle_teleop_key" name="my_key" output="screen"/>  <rosparam command="load" file="$(find test01)/launch/params.yaml" ns="hello"/>  <arg name="car_width" default="[1,2,3,4]" doc="the width of car"/>  <rosparam param="a_list" value="$(arg car_width)"/>  <rosparam>  Name:  a: 9  b: "hello"  c: [1,2,3,4]  </rosparam>  <param name="var" type="int" value="$(arg car_width)"/>  </group>  
</launch> 

⑦ 启动其他launch文件的标签

<launch>  <include file="$(find test01)/launch/test01_launch.launch">  <arg name="car_width" default="10"/>  </include>  
</launch>  

4 功能包/源文件/launch文件组织工具

在这里插入图片描述文件组织形式如下所示:
在这里插入图片描述

5 功能包绝对路径替换标签

标签格式:$(find package_name)
使用示例:

<launch>  <include file="$(find tf2_turtle)/launch/setupGUI.launch"/>  
</launch>  

6 工作空间下绝对路径替换标签

下面是test1.launch调用setupGUI.launch文件的代码,并且两个launch文件在一个文件夹之中:

<launch>  <include file="$(dirname)/setupGUI.launch"/>  
</launch> 

$(dirname)代表“test1.launch文件所在工作空间的绝对地址

7 Launch文件

列出几个Launch文件自测一下学习成果

<?xml version="1.0"?>
<launch><!--  加载车模型 --><include file="$(find vehicle_description)/launch/estima_black.launch" /><!--  --><node pkg="car_simulation" type="car_model_node" name="car_simulation" output="screen" />
</launch>
<launch><include file="$(find global_routing)/launch/global_routing.launch"/><!-- 车辆仿真 --><include file="$(find car_simulation)/launch/car_simulation.launch" /><!-- rviz --><node pkg="rviz" type="rviz" name="rviz" args="-d $(find global_routing)/config/planning_demo.rviz"/>  
</launch>
<?xml version="1.0"?>
<launch><!-- 其他launch文件传入的参数 --><arg name="is_planner"/><arg name="is_lateral_optimization"/><arg name="is_change_lane"/><arg name="is_carla_simulation"/><arg name="ego_vehicle_name"/><arg name="is_parking"/><arg name="is_goal"/><!-- 模拟动态障碍物的加载文件,这些都是录好的轨迹点,播放这个文件就可以实现障碍物移动 --><param name="obstacle_test_path" value="$(find dynamic_routing)/obstacle_files"/><!-- 加载存储的其他参考线数据 --><param name="referenceline_path" value="$(find dynamic_routing)/other_referenceline_files"/><!-- yaml文件 --><param name="yaml_path" value="$(find dynamic_routing)/config"/><!-- 规划算法选择 --><param name="use_what_planner"  value="$(arg is_planner)"/><!-- 变道决策是否开启 --><param name="change_lane"  value="$(arg is_change_lane)"/><!-- 是否使用二次规划,选择了lattice规划,选择这个才有效果 --><param name="use_lateral_optimization"  value="$(arg is_lateral_optimization)"/><!-- 是否选择carla联合仿真 --><param name="carla_simulation"  value="$(arg is_carla_simulation)"/><!-- role_name --><param name="role_name"  value="$(arg ego_vehicle_name)"/><!-- carla 停车场景 --><param name="parking_mode" value="$(arg is_parking)"/><!-- 在frenet规划下的参数设置,lattice规划不用这些 --><!-- COLLISION_CHECK_THRESHOLD 距离障碍物的最短距离 --><param name="COLLISION_CHECK_THRESHOLD" type="double" value="2" /><!-- 调整轨迹的长度 --><param name="MaxT" type="double" value="11" /><param name="MinT" type="double" value="9" /><!--  判断与终点的停车距离阈值 --><param name="goal_distanse"  type="double" value="$(arg is_goal)"/><!-- 打开 Hybrid_a_star 的测试图 --><!-- mapserver提供了一个ROS节点,该节点通过一个ROS Service来提供地图数据 --><node name="map_server" pkg="map_server" type="map_server" args="$(find dynamic_routing)/maps/map.yaml" ><param name="frame_id" value="map" /></node><!--Open palnner的launch参数,顺便加载dynamic节点 --><include file="$(find dynamic_routing)/launch/op_common_params.launch" /><!-- DWA --><arg name="dwa_params" default="$(find dynamic_routing)/config/dwa_params.yaml"/><rosparam command="load" file="$(arg dwa_params)"/>
</launch> 
<?xml version="1.0"?>
<launch><!-- 是否使用carla联合仿真 --><arg name="carla"  default="false"/>   <arg name="ego_vehicle_name"  default="ego_vehicle"/>  <param name="carla_simulation" value="$(arg carla)"/><param name="role_name" value="$(arg ego_vehicle_name)"/><!-- 不能改这里的参数 --><arg name="parking" default="false"/><param name="parking_mode" value="$(arg parking)"/><!-- ros单独仿真下的controller,carla不适用: 1 stanley  2 lqr 3 pure_pursuit4 pid 5 mpc  --><arg name="control"  value="2"/>  <param name="use_what_controller" value="$(arg control)"/><!-- planner: 1是纯frenet规划2是lattice规划3是em_palnner规划4是混合A*规划5是op_planner规划6是DWA规划7是Teb规划8是simple_em(EM的简化版本,待更新)--><arg name="planner"  value="7"/>    <param name="use_what_planner" value="$(arg planner)"/><!-- 是否使用二次规划,选择了lattice规划,选择这个才有效果 --><!-- false:lattice 采样规划,true:lattice 二次规划 --><arg name="use_lateral_optimization" default="false"/>    <!-- 是否开启变道决策,变道选择的是Lattce采样规划,其他方法不使用 --><arg name="change_lane"  default="false"/>    <!-- 参考线平滑的方式选择: true:CosThetaSmoother  false:FemPosSmooth--><arg name="which_smoother" default="false"/>    <param name="which_smoothers" value="$(arg which_smoother)"/><!--  判断与终点的停车距离阈值 --><arg name="goal_dis"  value="0.5"/>  <param name="goal_distanse"  type="double" value="$(arg goal_dis)"/><!-- 局部规划 --><include file="$(find dynamic_routing)/launch/dynamic_routing.launch" ><arg name="is_planner" value="$(arg planner)" /><arg name="is_lateral_optimization" value="$(arg use_lateral_optimization)" /><arg name="is_change_lane" value="$(arg change_lane)" /><arg name="is_carla_simulation" value="$(arg carla)" /><arg name="ego_vehicle_name" value="$(arg ego_vehicle_name)" /><arg name="is_parking" value="$(arg parking)"/><arg name="is_goal" value="$(arg goal_dis)"/></include><!-- carla联合仿真下的控制方法和参数  --><!-- LQR_dynamics  LQR_kinematics Stanley PurePursuit --><param name="control_method" value='LQR_kinematics'/>  <!-- "PurePursuit"增益系数 --><param name="k_pure" type="double" value="0.3" /> <!-- "Stanley"增益系数  --><param name="k_cte" type="double" value="100" /> <param name="kp"  value="0.5" /><param name="ki" type="double" value="0.02" /><param name="kd" type="double" value="0.05" /><!-- LQR Q R矩阵参数 --><param name="Q_ed" type="double" value="20.0" /><param name="Q_ed_dot" type="double" value="1.0" /><param name="Q_ephi" type="double" value="10.0" /><param name="Q_ephi_dot" type="double" value="1.0" /><param name="R_value" type="double" value="40.0" /><!--  --><param name="Q_ex_k" type="double" value="3.0" /><param name="Q_ed_k" type="double" value="3.0" /><param name="Q_ephi_k" type="double" value="1.5" /><param name="R_value_k" type="double" value="4.0" /><!-- 全局规划 --><node pkg="global_routing" type="global_routing_node" name="global_routing" output="screen" /></launch>

相关文章:

Launch学习

参考博客&#xff1a; (1) 史上最全的launch的解析来啦&#xff0c;木有之一欧 1 ROS工作空间简介 2 元功能包 src目录下可以包含多个功能包&#xff0c;假设需要使用机器人导航模块&#xff0c;但是这个模块中包含着地图、定位、路径规划等不同的功能包&#xff0c;它们的逻…...

蓝桥OJ 2942数字王国之军训排队 DFS剪枝

蓝桥OJ 2942数字王国之军训排队 #include<bits/stdc.h> using namespace std;const int N 15;//最多10队 int a[N], n; vector<int>v[N];//二维数组 v[i]记录队伍i中所有人的编号bool dfs(int cnt, int dep) {if (dep n1){//判断合法性for (int i 1; i < n; …...

SSL证书

SSL证书&#xff08;Secure Sockets Layer证书&#xff09;是一种网络安全协议&#xff0c;用于在互联网上建立加密链接&#xff0c;确保数据在从用户浏览器到服务器之间传输的过程中保持私密性和完整性。尽管现在实际上已经被TLS&#xff08;Transport Layer Security&#xf…...

【C++】string 类 ( 上)

标准库中的string类 注意&#xff1a; 1. string是表示字符串的字符串类 2. 该类的接口与常规容器的接口基本相同&#xff0c;再添加了一些专门用来操作string的常规操作。 比特就业课 3. string在底层实际是&#xff1a;basic_string模板类的别名&#xff0c;typedef basi…...

《中华人民共和国消防法》(2021年修订版)解读

单选题&#xff08;共7题&#xff0c;每题5分&#xff09; 1、举办大型群众性活动&#xff0c;承办人应当依法向&#xff08;&#xff09;申请安全许可。 正确答案&#xff1a;B、公安机关 2、违反消防安全规定进入生产、储存易燃易爆危险品场所的&#xff0c;情节严重的要处…...

vue+element模仿实现云码自动验证码识别平台官网

一、项目介绍 项目使用传统vue项目结构实现&#xff0c;前端采用element实现。 element官网&#xff1a;Element - The worlds most popular Vue UI framework 云码官网地址&#xff1a;云码-自动验证码识别平台_验证码识别API接口_免费验证码软件 项目截图&#xff0c;支持…...

蓝桥杯练习系统(算法训练)ALGO-992 士兵杀敌(二)

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述 南将军手下有N个士兵&#xff0c;分别编号1到N&#xff0c;这些士兵的杀敌数都是已知的。   小工是南将军手下的军师&…...

Pycharm下如何生成exe软件

第一步 下载pyinstaller pip install pyinstaller 对pyinstaller第二步 使用pyinstaller cmd切换到项目目录执行命令:pyinstaller --add-data “./templates;templates” 入口文件名.py...

KubeSphere平台安装系列之三【Linux多节点部署KubeSphere】(3/3)

**《KubeSphere平台安装系列》** 【Kubernetes上安装KubeSphere&#xff08;亲测–实操完整版&#xff09;】&#xff08;1/3&#xff09; 【Linux单节点部署KubeSphere】&#xff08;2/3&#xff09; 【Linux多节点部署KubeSphere】&#xff08;3/3&#xff09; **《KubeS…...

YOLOv9独家改进|动态蛇形卷积Dynamic Snake Convolution与空间和通道重建卷积SCConv与RepNCSPELAN4融合

专栏介绍&#xff1a;YOLOv9改进系列 | 包含深度学习最新创新&#xff0c;主力高效涨点&#xff01;&#xff01;&#xff01; 一、改进点介绍 Dynamic Snake Convolution是一种针对细长微弱的局部结构特征与复杂多变的全局形态特征设计的卷积模块。 SCConv是一种即插即用的空间…...

XSS初级漏洞靶场

一、环境的搭建 可以在githb上找靶机包&#xff0c;使用小皮面板搭建在自己本机 与此文章类似&#xff08;放在www目录下&#xff09; 二、XSS漏洞简介 1、什么是xss漏洞 当用户访问被xss注入的网页&#xff0c;xss代码就会被提取出来。用户浏览器就会解析这段xss代码&…...

k8s pv与pvc理解与实践

参考文章&#xff1a; https://blog.csdn.net/qq_41337034/article/details/117220475 一、 pv/pvc简述 Pv是指PersistentVolume&#xff0c;中文含义是持久化存储卷是对底层的共享存储的一种抽象&#xff0c;Pv由管理员进行配置和创建&#xff0c;只要包含存储能力&#xff…...

Unity游戏输入系统(新版+旧版)

使用新版还是旧版 旧版 using System.Collections; using System.Collections.Generic; using UnityEngine;public class c5 : MonoBehaviour {void Start(){}void Update(){// 注意要在游戏中 点鼠标键盘进行测试// 鼠标// 0左键 1右键 2滚轮if (Input.GetMouseButtonDown(0)…...

区块链媒体:链游媒体宣发渠道9个方法分享-华媒舍

在当今的游戏市场中&#xff0c;要想让自己开发的游戏脱颖而出&#xff0c;宣传策略的选择也至关重要。链游媒体是一种有效的宣发渠道&#xff0c;通过它们可以向广大玩家推广游戏并提高知名度。下面介绍9个链游媒体宣发渠道&#xff0c;帮助你的游戏走向成功。 1. 游戏公众号 …...

LeetCode--42

42. 接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组 [0,1,0,2,1,0,1,…...

【解决】虚幻导入FBX模型不是一个整体

问题&#xff1a; 现在有一个汽车的fbx模型&#xff0c;导入虚幻引擎&#xff0c;导入后变成了很多汽车零件模型。 解决&#xff1a; 把“合并网格体”勾选上&#xff0c;解决问题。...

第四十八回 解珍解宝双越狱 孙立孙新大劫牢-Python模块和包概念与使用

吴用对宋江说&#xff0c;有个人&#xff0c;他是石勇的关系&#xff0c;与祝家庄的峦廷玉关系好&#xff0c;还是杨林、邓飞的老相识&#xff0c;他有一计.... 原来在宋江攻打祝家庄的时间段&#xff0c;山东海边登州也发生了一件事。登州山下有一家猎户&#xff0c;弟兄两个…...

【Spring连载】使用Spring Data访问 MongoDB----对象映射之属性转换器

【Spring连载】使用Spring Data访问 MongoDB----对象映射之属性转换器 一、声明式值转换器二、编程式值转换器注册三、MongoCustomConversions配置 虽然基于类型的转换已经提供了影响目标存储中某些类型的转换和表示的方法&#xff0c;但当仅考虑特定类型的某些值或属性进行转换…...

【axiox】前后端接口通讯数据交互

重要全局配置&#xff1a; axios.create(); 设置axios请求的公共配置信息。 service.interceptors.request.use((config)>{}) 请求拦截器 service.interceptors.response.use((res)>{},(err)>{}) 响应拦截器 const source axios.CancelToken.source(); 用…...

《Linux C编程实战》笔记:共享内存

共享内存是分配一块能被其他进程访问的内存。每个共享内存段在内核中维护一个内部数据结构shmid_ds(和消息队列、信号量一样)&#xff0c;该结构定义在头文件linux/shm.h中,这是我从源码里抄的 #include<linux/shm.h> struct shmid_ds {struct ipc_perm shm_perm; /* 操…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块&#xff0c;用于对本地知识库系统中的知识库进行增删改查&#xff08;CRUD&#xff09;操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 &#x1f4d8; 一、整体功能概述 该模块…...

基于鸿蒙(HarmonyOS5)的打车小程序

1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...

边缘计算网关提升水产养殖尾水处理的远程运维效率

一、项目背景 随着水产养殖行业的快速发展&#xff0c;养殖尾水的处理成为了一个亟待解决的环保问题。传统的尾水处理方式不仅效率低下&#xff0c;而且难以实现精准监控和管理。为了提升尾水处理的效果和效率&#xff0c;同时降低人力成本&#xff0c;某大型水产养殖企业决定…...