ubuntu 20.04 Kimera semantic 运行记录

Ubuntu20.04 Kimera Semantic运行记录

Kimera VIO ROS

配置

MIT Kimera-VIO-ROS 安装

mkdir -p Kimera_ws/src
cd Kimera_ws
catkin init
catkin config --cmake-args -DCMAKE_BUILD_TYPE=Release -DGTSAM_TANGENT_PREINTEGRATION=OFF
catkin config --merge-devel

cd src
git clone https://github.com/ToniRV/mesh_rviz_plugins.git	
git clone https://github.com/MIT-SPARK/Kimera-VIO-ROS.git

# 切换版本
cd Kimera-VIO-ROS
git checkout 9b8aeae

cd ..
wstool init
wstool merge Kimera-VIO-ROS/install/kimera_vio_ros_https.rosinstall
wstool update

# 更换gtsam版本
rm -rf gtsam
# zph环境
git clone -b 4.1.1 https://github.com/borglab/gtsam.git

# 更换Kimera-RPGO版本
cd Kimera-RPGO
git checkout 9e1bf93

# 更换Kimera-VIO版本
cd ../Kimera-VIO
git checkout 641576f

# 更换Kimera-VIO-ROS版本
cd ../Kimera-VIO-ROS
git checkout 9b8aeae

# 编译
catkin build

测试

roslaunch kimera_vio_ros kimera_vio_ros_euroc.launch online:=true run_stereo_dense:=true	
rviz -d $(rospack find kimera_vio_ros)/rviz/kimera_vio_euroc.rviz
rosbag play --clock MH_01_easy.bag

在这里插入图片描述

d455 运行

  1. d455_camchain.yaml
    复制一份Kimera_VIO_catkin_ws/src/Kimera-VIO-ROS/cfg/calib/euroc_camchain.yaml改为d455_camchain.yaml,并将相关参数填入
  2. kimera_vio_ros_d455.launch
    复制一份Kimera_VIO_catkin_ws/src/Kimera-VIO-ROS/launch/kimera_vio_ros_euroc.launch改为kimera_vio_ros_d455.launch,并修改:
<arg name="dataset_name" value="D455"/>
# 如果是rosbag需要注意改动
<arg name="online" default="true" />
<param name="use_sim_time" value="false"/> 
<arg name="rosbag_path" default="/home/toniht/datasets/realsense/corridor_1.bag"
    unless="$(arg online)"/>
      <rosparam file="$(find kimera_vio_ros)/cfg/calib/d455_camchain.yaml"/>

	  <remap from="raw/first/image"         to="/camera/infra1/image_rect_raw"/>
      <remap from="raw/second/image"        to="/camera/infra2/image_rect_raw"/>
      <remap from="raw/first/camera_info"   to="/camera/infra1/camera_info"/>
      <remap from="raw/second/camera_info"  to="/camera/infra2/camera_info"/>
<include file="$(find kimera_vio_ros)/launch/kimera_vio_ros_1.launch"
    pass_all_args="true"/>

添加,参数按需修改

<arg name="should_use_sim_time" value="false"/>	

   <!-- Subscribed Topics -->
  <arg name="left_cam_topic"                    default="/camera/infra1/image_rect_raw"/>
  <arg name="left_cam_info_topic"               default="/camera/infra1/camera_info"/>
  <arg name="right_cam_topic"                   default="/camera/infra2/image_rect_raw"/>
  <arg name="right_cam_info_topic"              default="/camera/infra2/camera_info"/>
  <arg name="imu_topic"                         default="/camera/imu"/>
  1. kimera_vio_d455.rviz
    复制一份Kimera_VIO_catkin_ws/src/Kimera-VIO-ROS/rviz/kimera_vio_euroc.rviz改为kimera_vio_d455.rviz
    可以在后续打开后修改保存

  2. D455相机参数
    复制一份Kimera_VIO_catkin_ws/src/Kimera-VIO/params/Euroc改为D455,在对应的LeftCameraParams.yaml、RightCameraParams.yaml、ImuParams.yaml填入相机参数

运行结果

roslaunch kimera_vio_ros kimera_vio_ros_d455.launch run_stereo_dense:=true	
rviz -d $(rospack find kimera_vio_ros)/rviz/kimera_vio_d455.rviz

在这里插入图片描述

Kimera semantic

以下基本为官方教程

sudo apt-get install python3-wstool python3-catkin-tools  protobuf-compiler autoconf
sudo apt-get install ros-noetic-cmake-modules
# Setup catkin workspace
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/
catkin init
catkin config --extend /opt/ros/noetic
catkin config --cmake-args -DCMAKE_BUILD_TYPE=Release
catkin config --merge-devel

# Add workspace to bashrc.
echo 'source ~/catkin_ws/devel/setup.bash' >> ~/.bashrc

# Clone repo
cd ~/catkin_ws/src
git clone https://github.com/MIT-SPARK/Kimera-Semantics.git

# 添加mesh
git clone https://github.com/ToniRV/mesh_rviz_plugins.git	

# Install dependencies from rosinstall file using wstool
wstool init # Use unless wstool is already initialized

# Optionally add Kimera-Semantics to the rosinstall file
# wstool scrape

# For https: 
wstool merge Kimera-Semantics/install/kimera_semantics_https.rosinstall

# Download and update all dependencies
wstool update
# Compile code
catkin build kimera_semantics_ros mesh_rviz_plugins # 见ERROR1

# Refresh workspace
source ~/catkin_ws/devel/setup.bash

测试

roslaunch kimera_vio_ros kimera_vio_ros_euroc.launch run_stereo_dense:=true
roslaunch kimera_semantics_ros kimera_semantics_euroc.launch
rviz -d $(rospack find kimera_semantics_ros)/rviz/kimera_semantics_euroc.rviz
rosbag play --clock MH_01_easy.bag

在这里插入图片描述

d455 运行

可能没记全,因为是一开始忘了,全部复现完成后才重新记录的。

  1. kimera_semantic_d455.launch
    复制一份Kimera_semantic_catkin_ws/src/Kimera-Semantics/kimera_semantics_ros/launch/kimera_semantics_euroc.launch改为kimera_semantic_d455.launch
    修改
  <param name="use_sim_time" value="false" />
  # 添加参数,传递给kimera_semantics_ros.launch
  <arg name="should_use_sim_time" value="false" />
  <arg name="left_cam_info_topic"         default="/camera/infra1/camera_info"/>
  <arg name="right_cam_info_topic"        default="/camera/infra2/camera_info"/>
  <arg name="left_cam_topic"              default="/camera/infra1/image_rect_raw"/>
  <arg name="right_cam_topic"             default="/camera/infra2/image_rect_raw"/>
# 暂时是在复现,不需要点云,订阅了VIO发布的点云/stereo_gray/dense_stereo/pointcloud
<arg name="publish_point_clouds" default="false"/>
  1. kimera_semantics_d455.rviz
    复制一份Kimera_semantic_catkin_ws/src/Kimera-Semantics/kimera_semantics_ros/rviz/kimera_semantics_euroc.rviz改为kimera_semantics_d455.rviz
    后续可以在rviz中保存

运行

roslaunch kimera_vio_ros kimera_vio_ros_d455.launch run_stereo_dense:=true
roslaunch kimera_semantics_ros kimera_semantics_d455.launch
rviz -d $(rospack find kimera_semantics_ros)/rviz/kimera_semantics_d455.rviz

有mesh出来了,但是效果很差,可能是相机参数或者程序参数设置问题,后续再调
在这里插入图片描述

语义分割

目前使用的是deeplab_ros_pytorch

虚拟环境deeplab_ros
mkdir -p deeplab_ws/src
cd deeplab_ws
catkin init
cd src
git clone https://gitee.com/lu_ting_fei/ros-pytorch-deeplabv3.git

catkin config -DPYTHON_EXECUTABLE=/home/toniht/anaconda3/envs/deeplab_ros/bin/python -DPYTHON_INCLUDE_DIR=/home/toniht/anaconda3/envs/deeplab_ros/include/python3.8m -DPYTHON_LIBRARY=/home/toniht/anaconda3/envs/deeplab_ros/lib/libpython3.8.so -DCMAKE_BUILD_TYPE=Release -DSETUPTOOLS_DEB_LAYOUT=OFF
catkin_build

修改文件
deeplab_ws/src/ros-pytorch-deeplabv3/Img_seg_ros/predict.py

开始添加
sys.path.append('/home/toniht/workspace/deeplab_ws/src/ros-pytorch-deeplabv3/Img_seg_ros')

最后修改
img_topic=
ckpt = 

并修改
# 发布语义图像到ROS
ros_frame = bridge.cv2_to_imgmsg(seg_cv_img, "bgr8")
ros_frame.header.stamp = rospy.Time.now()
ros_frame.header.frame_id = "cam0" # 新增,方便后面发布语义点云时frame id一致

需要改为mask_rcnn

conda create -n mask_rcnn_ros python=3.7
conda activate mask_rcnn_ros
pip install boost protobuf scipy scikit-image ipython 'keras==2.4.3' opencv==3.4.10.35
pip install tensorflow-gpu==2.4.0
cd ~/catkin_ws/src
git clone https://github.com/ethz-asl/mask_rcnn_ros.git
git clone https://github.com/ethz-asl/depth_segmentation.git
git clone https://github.com/ethz-asl/opencv3_catkin.git
git clone https://github.com/ethz-asl/pcl_catkin.git

catkin build 			# 见 ERROR 2-7

# 如果找不到opencv或者pcl,删除重新编译
catkin build pcl_catkin opencv3_catkin

运行报错见ERROR 8、9

测试中

conda create -n mrcnn_ros python=3.8
conda activate mrcnn_ros

empy gdal boost pyyaml catkin_pkg
pip install boost protobuf scipy scikit-image ipython
pip install opencv-python==3.4.10.35

# tensorflow 1.15 https://flashgene.com/archives/242055.html
pip install nvidia-pyindex
pip install nvidia-tensorflow
catkin config -DPYTHON_EXECUTABLE=/home/toniht/anaconda3/envs/mrcnn_ros/bin/python -DPYTHON_INCLUDE_DIR=/home/toniht/anaconda3/envs/mrcnn_ros/include/python3.8 -DPYTHON_LIBRARY=/home/toniht/anaconda3/envs/mrcnn_ros/lib/libpython3.8.so -DCMAKE_BUILD_TYPE=Release -DSETUPTOOLS_DEB_LAYOUT=OFF

# 不改变c++路径的话会报错,但是忘记复制,应该是构建失败啥的来着
export CPLUS_INCLUDE_PATH=/home/toniht/anaconda3/envs/mrcnn_ros/include/python3.8:$CPLUS_INCLUDE_PATH

catkin build 

ERROR

ERROR 1:

Errors     << kimera_semantics_ros:make /home/toniht/workspace/Kimera_semantic_catkin_ws/logs/kimera_semantics_ros/build.make.000.log
In file included from /usr/include/pcl-1.10/pcl/pcl_macros.h:77,
                 from /usr/include/pcl-1.10/pcl/point_types.h:42,
                 from /home/toniht/workspace/Kimera_semantic_catkin_ws/src/Kimera-Semantics/kimera_semantics_ros/include/kimera_semantics_ros/semantic_simulation_server.h:8,
                 from /home/toniht/workspace/Kimera_semantic_catkin_ws/src/Kimera-Semantics/kimera_semantics_ros/src/semantic_simulation_server.cpp:1:
/usr/include/pcl-1.10/pcl/pcl_config.h:7:4: error: #error PCL requires C++14 or above
    7 |   #error PCL requires C++14 or above

FIX:
把对应的CMakeLists.txt文件中c++标准改为14(应该是两个kimera_semantics_ros和mesh)

set(CMAKE_CXX_STANDARD 14)

mesh中直接将c++11改为c++14就行

ERROR 2:

 Could not find a package configuration file provided by "catkin_simple"
  with any of the following names:

    catkin_simpleConfig.cmake
    catkin_simple-config.cmake

FIX:

cd src
git clone https://github.com/catkin/catkin_simple

ERROR 3:

Errors     << pcl_catkin:cmake /home/toniht/workspace/mask_rcnn_catkin_ws/logs/pcl_catkin/build.cmake.000.log                                                                                           
CMake Error at /home/toniht/workspace/mask_rcnn_catkin_ws/src/pcl_catkin/pcl_catkin/CMakeLists.txt:15 (MESSAGE):
  CMAKE_BUILD_TYPE must not be empty!

FIX:

catkin clean -y
catkin config -DCMAKE_BUILD_TYPE=Release

ERROR 4:

/home/toniht/anaconda3/envs/mask_rcnn_ros/include/boost/python/detail/wrap_python.hpp:57:11: fatal error: pyconfig.h: 没有那个文件或目录
   57 | # include <pyconfig.h>

FIX:

export CPLUS_INCLUDE_PATH=/home/toniht/anaconda3/envs/mask_rcnn_ros/include/python3.7m:$CPLUS_INCLUDE_PATH

ERROR 5:

/home/toniht/anaconda3/envs/mask_rcnn_ros/lib/python3.7/site-packages/numpy/core/include/numpy/__multiarray_api.h:1532:151: error: return-statement with a value, in function returning ‘void’ [-fpermissive]
 1532 | #define import_array() {if (_import_array() < 0) {PyErr_Print(); PyErr_SetString(PyExc_ImportError, "numpy.core.multiarray failed to import"); return NULL; } }

FIX:
import_array()报错,返回值类型与函数类型不匹配

ERROR 6:

/home/toniht/anaconda3/envs/mask_rcnn_ros/include/boost/bind.hpp:36:1: note: in expansion of macro ‘BOOST_PRAGMA_MESSAGE’
   36 | BOOST_PRAGMA_MESSAGE(
      | ^~~~~~~~~~~~~~~~~~~~
/usr/bin/ld: 找不到 -lBoost::system
/usr/bin/ld: 找不到 -lBoost::filesystem
/usr/bin/ld: 找不到 -lBoost::thread
collect2: error: ld returned 1 exit status

FIX:
在depth_segmentation的CMakeLists.txt中添加

# 设置虚拟环境路径
set(VIRTUAL_ENV_PATH "/home/toniht/anaconda3/envs/mask_rcnn_ros")

# 设置 Boost 头文件和库的路径
set(Boost_INCLUDE_DIR "${VIRTUAL_ENV_PATH}/include")
set(Boost_LIBRARY_DIR "${VIRTUAL_ENV_PATH}/lib")

find_package(Boost COMPONENTS system filesystem thread REQUIRED)

include_directories(${Boost_INCLUDE_DIRS})

link_directories(${Boost_LIBRAYY_DIRS})

ERROR 7:

/usr/bin/ld: /home/toniht/workspace/kimera_mask_rcnn_ws/devel/lib/libkimera_semantics_ros.so: undefined reference to `cv::String::deallocate()'

FIX:
ubuntu20.04+opencv4.2.0编译kimera
在kimera_semantics_ros的CMakeLists.txt中加入

find_package(opencv3_catkin REQUIRED)
# 在最后面加
target_link_libraries(${PROJECT_NAME} ${opencv3_catkin_LIBRARIES}) 

ERROR 8:

'module' object has no attribute 'placeholder'

FIX:
tensorflow2.x和tensorflow1.x的差异
修改两个文件Kimera_semantic_catkin_ws/src/mask_rcnn_ros/src/mask_rcnn_ros/model.py和/home/toniht/anaconda3/envs/mask_rcnn_ros/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py
将其中的

import tensorflow as tf
-> import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()

ERROR 9:

  File "/home/toniht/anaconda3/envs/mask_rcnn_ros/lib/python3.7/site-packages/keras/engine/topology.py", line 3418, in load_weights_from_hdf5_group_by_name
    original_keras_version = f.attrs['keras_version'].decode('utf8')
AttributeError: 'str' object has no attribute 'decode'

FIX:

pip install 'h5py<3.0.0'

ERROR 10:

  File "/home/toniht/workspace/kimera_mask_rcnn_ws/src/mask_rcnn_ros/src/mask_rcnn_ros/utils.py", line 420, in resize_image
    image = scipy.misc.imresize(
AttributeError: module 'scipy.misc' has no attribute 'imresize'

FIX:
修改报错文件utils.py

# 添加
from skimage.transform import resize
# 修改报错语句
image = resize(
            image, (int(round(h * scale)), int(round(w * scale))))

ERROR 11:

/home/toniht/anaconda3/envs/mrcnn_ros/lib/python3.8/site-packages/numpy/core/include/numpy/__multiarray_api.h:1553:151: error: return-statement with a value, in function returning ‘void’ [-fpermissive]
 1553 | #define import_array() {if (_import_array() < 0) {PyErr_Print(); PyErr_SetString(PyExc_ImportError, "numpy.core.multiarray failed to import"); return NULL; } }

FIX:
修改"/home/toniht/anaconda3/envs/mrcnn_ros/lib/python3.8/site-packages/numpy/core/include/numpy/__multiarray_api.h"
删去对应的NULL,重新编译

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《量子十年》报告更新!IBM精研量子计算,助力行业优化转型

近日&#xff0c;IBM商业价值研究院&#xff08;IBM Institute for Business Value&#xff0c;简称IBV&#xff09;精心出版了一本引人入胜的报告&#xff0c;《量子十年》第四版。这不仅是一本值得一读的书籍&#xff0c;更是对当前行业发展状况的全面总结和重要补充。 这部由…

Linux | Ubuntu安装pylsl

PYNQ开发中使用pylsl过程记录 操作系统为 Linux pynq 5.15.19-xilinx-v2022.1 #1 SMP PREEMPT Mon Apr 11 17:52:14 UTC 2022 armv7l armv7l armv7l GNU/Linux 使用 pip install pylsl 安装后在导入包的过程中会遇到如下错误&#xff1a; RuntimeError: LSL binary library f…

如何实现跨标签页通讯

什么是跨标签页通讯 同一浏览器&#xff0c;可以打开多个标签页&#xff0c;跨标签页通讯就是&#xff0c;一个标签页能够发消息给另一标签页。 有哪些实现方案 localStorage &#xff08;window.onstorage事件监听&#xff09;BroadcastChannel&#xff08;广播&#xff09…

redis在springboot项目中的应用

一&#xff0c;将查询结果放到redis中作为缓存&#xff0c;减轻mysql的压力。 只有在数据量大的时候&#xff0c;查询速度慢的时候才有意义。 本次测试的数据量为XXX. 测试代码: 功能为根据昵称进行模糊匹配。 GetMapping("/get-by-nick")public String getNickN…

【算法专题突破】--- 位运算 --- 丢失的数字(难度⭐) 只出现一次的数字 III (难度⭐⭐) 消失的两个数字(难度⭐⭐⭐)(2)

一&#xff0c;丢失的数字 1. 题目解析 题目链接&#xff1a;268. 丢失的数字 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 首先&#xff0c;我们设定一个长度为n的数组。理想情况下&#xff0c;如果这个数组是从…

机器人路径规划:基于鳑鲏鱼优化算法(Bitterling Fish Optimization,BFO)的机器人路径规划(提供MATLAB代码)

一、机器人路径规划介绍 移动机器人&#xff08;Mobile robot&#xff0c;MR&#xff09;的路径规划是 移动机器人研究的重要分支之&#xff0c;是对其进行控制的基础。根据环境信息的已知程度不同&#xff0c;路径规划分为基于环境信息已知的全局路径规划和基于环境信息未知或…

CSDN学习笔记总索引(2024)——我的创作纪念日(1024)

从2021-05-21至2024-03-19&#xff0c;我的CSDN博文学习笔记中&#xff0c;收集并展示浏览阅读&#xff0c;点赞收藏评论等数据&#xff0c;以浏览阅读量排逆序展示。 (笔记模板由python脚本于2024年03月19日 05:49:24创建&#xff0c;本篇笔记适合熟悉Python&#xff0c;对其基…

一维数组数组名的用途

大家好&#xff1a; 衷心希望各位点赞。 您的问题请留在评论区&#xff0c;我会及时回答。 一、数组名的用途 一维数组数组名的用途&#xff1a; 1、可以统计整个数组的长度。 2、可以获取数组在内存中的首地址。 二、示例代码 #include <iostream> #include <W…

亚马逊等跨境电商平台自养号测评的五个核心因素

一、安全稳定的环境系统 尽管市场上存在大量现成的系统和软件包&#xff0c;卖个软件或设备给你&#xff0c;这种基本上都没有解决风控的能力&#xff0c;因此&#xff0c;小编推荐大家还是自己掌握相关技术&#xff0c;避免过度依赖于外部资源&#xff0c;目前&#xff0c;也…

C语言救赎之路,有些鸟儿是困不住的!(其4) (逻辑运算符+函数)

什么是运算符&#xff1f;诶~&#xff0c;其实我们一直在用运算符&#xff0c;比如我们的 &#xff0c;-&#xff0c;*&#xff0c;/ 等等都是运算符。今天我们就先来讲讲运算符。这是结合我自己的理解&#xff0c;我认为自己讲的肯定比一些教科书讲的要更清楚一些&#xff0c;…

SpringBoot整合Xxl-Job

一、下载Xxl-Job源代码并导入本地并运行 Github地址:GitHub - xuxueli/xxl-job: A distributed task scheduling framework.&#xff08;分布式任务调度平台XXL-JOB&#xff09; 中文文档地址:分布式任务调度平台XXL-JOB 1.使用Idea或Eclipse导入 2.执行sql脚本(红色标记…

nfs介绍与配置

NFS 1. nfs简介 nfs特点 NFS&#xff08;Network File System&#xff09;即网络文件系统&#xff0c;是FreeBSD支持的文件系统中的一种&#xff0c;它允许网络中的计算机之间通过TCP/IP网络共享资源在NFS的应用中&#xff0c;本地NFS的客户端应用可以透明地读写位于远端NFS服…

动态规划课堂6-----回文串问题

目录 引言&#xff1a; 例题1&#xff1a;回文子串 例题2&#xff1a;回文串分割IV 例题3&#xff1a;分割回文串II 例题4&#xff1a;最长回文子序列 例题5&#xff1a;让字符串成为回文串的最小插入次数 引言&#xff1a; 回文字符串 是正着读和倒过来读一样的字符串。…

LeetCode 面试经典150题 80.删除有序数组中的重复项II

题目&#xff1a; 给你一个有序数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使得出现次数超过两次的元素只出现两次 &#xff0c;返回删除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件…

PTA——1075 链表元素分类、1105 链表合并、1110 区块反转

1075 链表元素分类 解决代码 #include<bits/stdc.h> using namespace std; struct node{int v;int next; }; map<int,node> s; vector<vector<pair<int,int>>> ans(3); vector<pair<int,int>> w; int main(){int st,n,k;cin>>…

鸿蒙Harmony应用开发—ArkTS-转场动画(组件内转场)

组件内转场主要通过transition属性配置转场参数&#xff0c;在组件插入和删除时显示过渡动效&#xff0c;主要用于容器组件中的子组件插入和删除时&#xff0c;提升用户体验。 说明&#xff1a; 从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记…

短视频矩阵系统技术交付

短视频矩阵系统技术交付&#xff0c;短视频矩阵剪辑矩阵分发系统现在在来开发这个市场单个项目来说&#xff0c;目前基本上已经沉淀3年了&#xff0c;那么我们来就技术短视频矩阵剪辑系统开发来聊聊 短视频矩阵系统经过315大会以后&#xff0c;很多违规的技术开发肯定有筛选到了…

cuda多版本安装

主要参考文章&#xff1a; ubuntu 20.04下多版本cuda&cudnn下载与安装 在ubuntu上安装多个版本的CUDA&#xff0c;并且可以随时切换 1 环境检查 nvidia-smiCUDA Version:12.4表示最高支持cuda 12.4版本 nvcc -V如图所示表示系统目前版本为cuda 12.2 2 多版本cuda下载与…

深入解析Kafka中的动态更新模式

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 深入解析Kafka中的动态更新模式 前言动态更新模式的基础概念动态更新模式的概念&#xff1a;解决的问题和引入的原因&#xff1a; 原理解析与工作流程动态更新模式的工作原理和工作流程&#xff1a;示…

【MySQL】学习和总结使用列子查询查询员工工资信息

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-5odctDvQ0AHJJc1C {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…