ego-planner开源代码之simulator.xml介绍分析
ego-planner开源代码之simulator.xml介绍&分析
- 1. 源由
- 2. simulator配置
- 2.1 配置入参
- 2.2 mockamap_node 地图生成节点
- 2.3 quadrotor_simulator_so3 四旋翼仿真节点
- 2.4 Nodelet机制 四旋翼控制节点
- 2.5 odom_visualization 里程计数据
- 2.6 pcl_render_node 本地感知
- 3. 总结
1. 源由
ego-planner开源代码之数据流分析工作的延续。
- 对于算法逻辑的数据流,在前面已经初步做了整理,部分主要模块已经有比较清晰的认识。
- 从数据流的角度,理解模块的工作逻辑,还是非常直观、简洁的。
如何从系统的角度,思考问题,尤其是一个系统由众多模块组成的复杂体系,要能够整体的理解,反而并不能一下子上手。
反之,若能够将整个系统作为一个模块
来理解,入参和出参分别如何对应和理解呢?
2. simulator配置
- simulator.xml
2.1 配置入参
<arg name="init_x" value="-18.0"/><arg name="init_y" value="0.0"/><arg name="init_z" value="0.0"/> <arg name="obj_num" value="1" /><arg name="map_size_x_"/><arg name="map_size_y_"/><arg name="map_size_z_"/><arg name="c_num"/><arg name="p_num"/><arg name="min_dist"/><arg name="odometry_topic"/>
在启动文件中传递参数值给节点。每个 arg
标签定义了一个参数名和一个默认值(如果有的话),并且这些参数可以在启动节点时被传递和使用。
-
<arg name="init_x" value="-18.0"/>
- 含义: 初始位置的 x 坐标,值为 -18.0。
-
<arg name="init_y" value="0.0"/>
- 含义: 初始位置的 y 坐标,值为 0.0。
-
<arg name="init_z" value="0.0"/>
- 含义: 初始位置的 z 坐标,值为 0.0。
-
<arg name="obj_num" value="1" />
- 含义: 对象的数量,值为 1。
-
<arg name="map_size_x_"/>
- 含义: 地图在 x 方向上的大小。这里没有指定默认值,实际值需要在运行时传递。
-
<arg name="map_size_y_"/>
- 含义: 地图在 y 方向上的大小。这里没有指定默认值,实际值需要在运行时传递。
-
<arg name="map_size_z_"/>
- 含义: 地图在 z 方向上的大小。这里没有指定默认值,实际值需要在运行时传递。
-
<arg name="c_num"/>
- 含义: 参数 c 的数量。这里没有指定默认值,实际值需要在运行时传递。
-
<arg name="p_num"/>
- 含义: 参数 p 的数量。这里没有指定默认值,实际值需要在运行时传递。
-
<arg name="min_dist"/>
- 含义: 最小距离值。这里没有指定默认值,实际值需要在运行时传递。
-
<arg name="odometry_topic"/>
- 含义: 里程计数据的 ROS 话题名称。这里没有指定默认值,实际值需要在运行时传递。
在 simple_run.launch 中相关的覆盖值定义是:
<arg name="map_size_x" value="40.0"/><arg name="map_size_y" value="40.0"/><arg name="map_size_z" value=" 3.0"/><!-- topic of your odometry such as VIO or LIO --><arg name="odom_topic" value="/visual_slam/odom" /><!-- use simulator --><include file="$(find ego_planner)/launch/simulator.xml"><arg name="map_size_x_" value="$(arg map_size_x)"/><arg name="map_size_y_" value="$(arg map_size_y)"/><arg name="map_size_z_" value="$(arg map_size_z)"/><arg name="c_num" value="200"/><arg name="p_num" value="200"/><arg name="min_dist" value="1.2"/><arg name="odometry_topic" value="$(arg odom_topic)" /></include>
2.2 mockamap_node 地图生成节点
<node pkg="mockamap" type="mockamap_node" name="mockamap_node" output="screen"> <remap from="/mock_map" to="/map_generator/global_cloud"/><param name="seed" type="int" value="127"/><param name="update_freq" type="double" value="0.5"/><!-- box edge length, unit meter--><param name="resolution" type="double" value="0.1"/><!-- map size unit meter--><param name="x_length" value="$(arg map_size_x_)"/><param name="y_length" value="$(arg map_size_y_)"/><param name="z_length" value="$(arg map_size_z_)"/><param name="type" type="int" value="1"/><!-- 1 perlin noise parameters --><!-- complexity: base noise frequency,large value will be complextypical 0.0 ~ 0.5 --><!-- fill: infill persentagetypical: 0.4 ~ 0.0 --><!-- fractal: large value will have more detail--><!-- attenuation: for fractal attenuationtypical: 0.0 ~ 0.5 --><param name="complexity" type="double" value="0.05"/><param name="fill" type="double" value="0.12"/><param name="fractal" type="int" value="1"/><param name="attenuation" type="double" value="0.1"/></node>
定义了一个基于噪声的地图生成节点,可以通过指定分辨率、地图大小以及噪声的复杂度等参数生成复杂的三维地图。
-
<node pkg="mockamap" type="mockamap_node" name="mockamap_node" output="screen">
- pkg=“mockamap”: 表示该节点属于
mockamap
包。 - type=“mockamap_node”: 节点的可执行文件名称为
mockamap_node
。 - name=“mockamap_node”: 设置该节点的名称为
mockamap_node
。 - output=“screen”: 输出将显示在终端(屏幕)上。
- pkg=“mockamap”: 表示该节点属于
-
<remap from="/mock_map" to="/map_generator/global_cloud"/>
- from=“/mock_map”: 将节点中的话题
/mock_map
重新映射到其他话题。 - to=“/map_generator/global_cloud”: 重映射的目标是
/map_generator/global_cloud
,即节点会将原本发布在/mock_map
上的数据发布到/map_generator/global_cloud
上。
- from=“/mock_map”: 将节点中的话题
-
<param name="seed" type="int" value="127"/>
- seed: 设置随机种子,类型为整数,值为
127
,用于生成一致的伪随机地图。
- seed: 设置随机种子,类型为整数,值为
-
<param name="update_freq" type="double" value="0.5"/>
- update_freq: 设置地图更新的频率,类型为双精度浮点数,值为
0.5
,即每秒更新0.5次(2秒更新一次)。
- update_freq: 设置地图更新的频率,类型为双精度浮点数,值为
-
<param name="resolution" type="double" value="0.1"/>
- resolution: 地图的分辨率,类型为双精度浮点数,值为
0.1
米,即每个网格的边长为0.1米。
- resolution: 地图的分辨率,类型为双精度浮点数,值为
-
<param name="x_length" value="$(arg map_size_x_)"/>
,<param name="y_length" value="$(arg map_size_y_)"/>
,<param name="z_length" value="$(arg map_size_z_)"/>
- x_length/y_length/z_length: 地图在
x
、y
和z
方向上的长度,单位为米,分别从外部传入参数map_size_x_
、map_size_y_
和map_size_z_
来设置。
- x_length/y_length/z_length: 地图在
-
<param name="type" type="int" value="1"/>
- type: 地图生成的类型,值为
1
,通常与特定的生成算法相关联(例如噪声生成类型)。
- type: 地图生成的类型,值为
-
噪声生成的具体参数:
- complexity: 基础噪声的频率,值为
0.05
,表示噪声的复杂度。值越大,噪声越复杂,典型值为0.0 ~ 0.5
。 - fill: 填充百分比,值为
0.12
,表示生成地图时的填充率,典型值为0.4 ~ 0.0
。 - fractal: 分形的级数,值为
1
,值越大,细节越丰富。 - attenuation: 分形的衰减系数,值为
0.1
,表示分形噪声的衰减,典型值为0.0 ~ 0.5
。
- complexity: 基础噪声的频率,值为
2.3 quadrotor_simulator_so3 四旋翼仿真节点
<node pkg="so3_quadrotor_simulator" type="quadrotor_simulator_so3" name="quadrotor_simulator_so3" output="screen"><param name="rate/odom" value="200.0"/><param name="simulator/init_state_x" value="$(arg init_x)"/><param name="simulator/init_state_y" value="$(arg init_y)"/><param name="simulator/init_state_z" value="$(arg init_z)"/><remap from="~odom" to="/visual_slam/odom"/><remap from="~cmd" to="so3_cmd"/><remap from="~force_disturbance" to="force_disturbance"/> <remap from="~moment_disturbance" to="moment_disturbance"/> </node>
启动了一个四旋翼仿真节点,属于so3_quadrotor_simulator
包,节点名称为quadrotor_simulator_so3
,初始状态由外部参数指定,频率高达200Hz的里程计信息用于其他系统(如SLAM)。仿真还支持控制指令的重映射,以及力和力矩的干扰处理。
-
<node pkg="so3_quadrotor_simulator" type="quadrotor_simulator_so3" name="quadrotor_simulator_so3" output="screen">
- pkg=“so3_quadrotor_simulator”: 节点属于
so3_quadrotor_simulator
包。 - type=“quadrotor_simulator_so3”: 启动的可执行文件为
quadrotor_simulator_so3
,这是四旋翼仿真器的SO3版本。 - name=“quadrotor_simulator_so3”: 节点名称为
quadrotor_simulator_so3
。 - output=“screen”: 输出显示在终端(屏幕)上。
- pkg=“so3_quadrotor_simulator”: 节点属于
-
<param name="rate/odom" value="200.0"/>
- rate/odom: 发布里程计(
odom
)数据的频率,值为200.0
Hz,表示每秒发布200次里程计数据,提供高精度的位置和速度信息。
- rate/odom: 发布里程计(
-
<param name="simulator/init_state_x" value="$(arg init_x)"/>
<param name="simulator/init_state_y" value="$(arg init_y)"/>
<param name="simulator/init_state_z" value="$(arg init_z)"/>
- simulator/init_state_x, init_state_y, init_state_z: 设置四旋翼仿真器的初始状态,分别是
x
、y
、z
三个方向的初始位置。参数init_x
、init_y
和init_z
是通过外部传入的ROS参数。这些值通常用于设置四旋翼在仿真中的起始位置。
- simulator/init_state_x, init_state_y, init_state_z: 设置四旋翼仿真器的初始状态,分别是
-
<remap from="~odom" to="/visual_slam/odom"/>
- ~odom: 仿真器发布的局部
odom
话题被重映射到全局的/visual_slam/odom
话题。通常,这是为了与视觉SLAM系统共享里程计数据。
- ~odom: 仿真器发布的局部
-
<remap from="~cmd" to="so3_cmd"/>
- ~cmd: 仿真器接收的控制指令话题
~cmd
被重映射到so3_cmd
话题。这里的so3_cmd
通常表示四旋翼姿态控制的SO(3)指令,用于控制仿真器的姿态。
- ~cmd: 仿真器接收的控制指令话题
-
<remap from="~force_disturbance" to="force_disturbance"/>
- ~force_disturbance: 仿真器中影响四旋翼的力干扰(force disturbance)话题。此话题被直接映射,没有更改话题名称。
-
<remap from="~moment_disturbance" to="moment_disturbance"/>
- ~moment_disturbance: 仿真器中影响四旋翼的力矩干扰(moment disturbance)话题,也保持话题名称不变。
2.4 Nodelet机制 四旋翼控制节点
<node pkg="nodelet" type="nodelet" args="standalone so3_control/SO3ControlNodelet" name="so3_control" required="true" output="screen"><param name="so3_control/init_state_x" value="$(arg init_x)"/><param name="so3_control/init_state_y" value="$(arg init_y)"/><param name="so3_control/init_state_z" value="$(arg init_z)"/><remap from="~odom" to="/visual_slam/odom"/><remap from="~position_cmd" to="/planning/pos_cmd"/><remap from="~motors" to="motors"/><remap from="~corrections" to="corrections"/><remap from="~so3_cmd" to="so3_cmd"/><rosparam file="$(find so3_control)/config/gains_hummingbird.yaml"/><rosparam file="$(find so3_control)/config/corrections_hummingbird.yaml"/><param name="mass" value="0.98"/><param name="use_angle_corrections " value="false"/><param name="use_external_yaw " value="false"/><param name="gains/rot/z" value="1.0"/> <param name="gains/ang/z" value="0.1"/> </node>
配置启动了一个使用Nodelet机制的四旋翼控制节点,属于so3_control
包,节点名为so3_control
,使用SO(3)控制算法。节点重映射了多个话题用于接收视觉SLAM、规划模块的指令,并发布电机指令等。该控制器的增益和校正参数从外部YAML文件载入,并允许自定义质量和校正选项。
-
<node pkg="nodelet" type="nodelet" args="standalone so3_control/SO3ControlNodelet" name="so3_control" required="true" output="screen">
- pkg=“nodelet”: 使用
nodelet
包,这意味着这是一个Nodelet节点,Nodelet可以将多个节点加载到同一进程中,以减少进程间通信的开销。 - type=“nodelet” args=“standalone so3_control/SO3ControlNodelet”: 启动一个独立的Nodelet实例(
standalone
),加载so3_control
包中的SO3ControlNodelet
。 - name=“so3_control”: 节点名称为
so3_control
。 - required=“true”: 表示这个节点是必需的,若它崩溃,则会终止整个ROS系统。
- output=“screen”: 输出信息显示在终端上。
- pkg=“nodelet”: 使用
-
<param name="so3_control/init_state_x" value="$(arg init_x)"/>
<param name="so3_control/init_state_y" value="$(arg init_y)"/>
<param name="so3_control/init_state_z" value="$(arg init_z)"/>
- so3_control/init_state_x, init_state_y, init_state_z: 初始化控制节点中四旋翼的位置,分别是
x
、y
、z
三个方向的初始位置。这些值通过外部参数传入(init_x
,init_y
,init_z
)。
- so3_control/init_state_x, init_state_y, init_state_z: 初始化控制节点中四旋翼的位置,分别是
-
<remap from="~odom" to="/visual_slam/odom"/>
- ~odom: 里程计话题
~odom
重映射到/visual_slam/odom
,用于从视觉SLAM系统接收里程计数据。
- ~odom: 里程计话题
-
<remap from="~position_cmd" to="/planning/pos_cmd"/>
- ~position_cmd: 重映射控制节点的位置信息指令
~position_cmd
到/planning/pos_cmd
,用于从规划模块接收位置指令。
- ~position_cmd: 重映射控制节点的位置信息指令
-
<remap from="~motors" to="motors"/>
- ~motors: 电机控制指令
~motors
被重映射到话题motors
。
- ~motors: 电机控制指令
-
<remap from="~corrections" to="corrections"/>
- ~corrections: 纠正信息话题
~corrections
,通常用于从外部传感器或模块获取姿态或其他校正数据。
- ~corrections: 纠正信息话题
-
<remap from="~so3_cmd" to="so3_cmd"/>
- ~so3_cmd: SO(3)控制指令话题
~so3_cmd
,用于控制四旋翼的姿态。
- ~so3_cmd: SO(3)控制指令话题
-
<rosparam file="$(find so3_control)/config/gains_hummingbird.yaml"/>
- gains_hummingbird.yaml: 载入
so3_control
包中的gains_hummingbird.yaml
文件,用于配置控制器的增益参数,尤其是姿态控制的增益。
- gains_hummingbird.yaml: 载入
-
<rosparam file="$(find so3_control)/config/corrections_hummingbird.yaml"/>
- corrections_hummingbird.yaml: 载入
corrections_hummingbird.yaml
,该文件包含姿态校正相关的参数。
- corrections_hummingbird.yaml: 载入
-
<param name="mass" value="0.98"/>
- mass: 设置四旋翼的质量为
0.98
公斤,控制算法会根据这个质量进行动态计算。
- mass: 设置四旋翼的质量为
-
<param name="use_angle_corrections" value="false"/>
- use_angle_corrections: 是否使用角度校正,设置为
false
,表示当前不启用角度校正。
- use_angle_corrections: 是否使用角度校正,设置为
-
<param name="use_external_yaw" value="false"/>
- use_external_yaw: 是否使用外部的偏航角校正,设置为
false
,即不使用外部的偏航控制。
- use_external_yaw: 是否使用外部的偏航角校正,设置为
-
<param name="gains/rot/z" value="1.0"/>
- gains/rot/z: 设置
z
轴上的旋转增益,值为1.0
,用于控制四旋翼在z
轴上的姿态响应。
- gains/rot/z: 设置
-
<param name="gains/ang/z" value="0.1"/>
- gains/ang/z: 设置
z
轴上的角度增益,值为0.1
,用于姿态控制中的角度调整。
- gains/ang/z: 设置
2.5 odom_visualization 里程计数据
<node pkg="odom_visualization" name="odom_visualization" type="odom_visualization" output="screen"><remap from="~odom" to="/visual_slam/odom"/><param name="color/a" value="1.0"/> <param name="color/r" value="0.0"/> <param name="color/g" value="0.0"/> <param name="color/b" value="0.0"/> <param name="covariance_scale" value="100.0"/> <param name="robot_scale" value="1.0"/><param name="tf45" value="true"/></node>
配置启动了一个名为odom_visualization
的节点,用于可视化视觉SLAM系统中的里程计数据,并配置了颜色、缩放、以及其他可视化相关的参数。
-
<node pkg="odom_visualization" name="odom_visualization" type="odom_visualization" output="screen">
- pkg=“odom_visualization”: 该节点属于
odom_visualization
包,用于可视化里程计数据。 - name=“odom_visualization”: 节点名称为
odom_visualization
。 - type=“odom_visualization”: 启动可执行文件名称为
odom_visualization
。 - output=“screen”: 输出显示在终端(屏幕)上。
- pkg=“odom_visualization”: 该节点属于
-
<remap from="~odom" to="/visual_slam/odom"/>
- ~odom: 节点接收的本地
odom
话题重映射到/visual_slam/odom
,该话题通常是视觉SLAM系统发布的里程计数据。
- ~odom: 节点接收的本地
-
<param name="color/a" value="1.0"/>
,<param name="color/r" value="0.0"/>
,<param name="color/g" value="0.0"/>
,<param name="color/b" value="0.0"/>
- color/a: 设置里程计可视化中颜色的透明度,值为
1.0
,表示完全不透明。 - color/r, color/g, color/b: 设置颜色的RGB值,分别为红(
r
)、绿(g
)、蓝(b
)。此处RGB值为(0, 0, 0),表示可视化物体为黑色。
- color/a: 设置里程计可视化中颜色的透明度,值为
-
<param name="covariance_scale" value="100.0"/>
- covariance_scale: 设置协方差的可视化比例,值为
100.0
,表示将协方差矩阵在可视化中按此比例放大。
- covariance_scale: 设置协方差的可视化比例,值为
-
<param name="robot_scale" value="1.0"/>
- robot_scale: 设置机器人模型的可视化缩放比例,值为
1.0
,即保持与实际尺寸相同。
- robot_scale: 设置机器人模型的可视化缩放比例,值为
-
<param name="tf45" value="true"/>
- tf45: 此参数设置为
true
,具体含义依赖于节点的实现,通常用于处理坐标变换或指定某些特殊的可视化模式。可能与坐标系变换TF
相关,比如应用一个45度的变换矩阵。
- tf45: 此参数设置为
2.6 pcl_render_node 本地感知
<node pkg="local_sensing_node" type="pcl_render_node" name="pcl_render_node" output="screen"><rosparam command="load" file="$(find local_sensing_node)/params/camera.yaml" /><param name="sensing_horizon" value="5.0" /><param name="sensing_rate" value="30.0"/><param name="estimation_rate" value="30.0"/><param name="map/x_size" value="$(arg map_size_x_)"/><param name="map/y_size" value="$(arg map_size_y_)"/><param name="map/z_size" value="$(arg map_size_z_)"/><remap from="~global_map" to="/map_generator/global_cloud"/><remap from="~odometry" to="$(arg odometry_topic)"/></node>
配置启动了一个名为pcl_render_node
的节点,属于local_sensing_node
包,主要用于本地感知,并处理从相机和里程计等传感器获得的数据,感知范围为5米,传感和估计的频率为30Hz。节点还加载了相机的配置文件,使用了重映射来处理全局地图和里程计数据。
-
<node pkg="local_sensing_node" type="pcl_render_node" name="pcl_render_node" output="screen">
- pkg=“local_sensing_node”: 该节点属于
local_sensing_node
包,通常用于本地感知和处理点云(PCL)。 - type=“pcl_render_node”: 启动可执行文件为
pcl_render_node
,用于渲染点云或进行相关的传感任务。 - name=“pcl_render_node”: 节点名称为
pcl_render_node
。 - output=“screen”: 输出信息显示在终端(屏幕)上。
- pkg=“local_sensing_node”: 该节点属于
-
<rosparam command="load" file="$(find local_sensing_node)/params/camera.yaml" />
- command=“load”: 加载指定的参数文件。
- file=“$(find local_sensing_node)/params/camera.yaml”: 从
local_sensing_node
包中的params
文件夹中加载camera.yaml
文件。这通常是相机相关的参数配置文件,如视角、分辨率等。
-
<param name="sensing_horizon" value="5.0" />
- sensing_horizon: 设置感知范围为
5.0
米,即传感器能感知的最大距离为5米。
- sensing_horizon: 设置感知范围为
-
<param name="sensing_rate" value="30.0"/>
- sensing_rate: 设置传感的频率为
30.0
Hz,表示传感器每秒采集30次数据。
- sensing_rate: 设置传感的频率为
-
<param name="estimation_rate" value="30.0"/>
- estimation_rate: 设置估计频率为
30.0
Hz,表示估计模块每秒处理30次数据(如位置、姿态估计)。
- estimation_rate: 设置估计频率为
-
<param name="map/x_size" value="$(arg map_size_x_)"/>
<param name="map/y_size" value="$(arg map_size_y_)"/>
<param name="map/z_size" value="$(arg map_size_z_)"/>
- map/x_size, map/y_size, map/z_size: 设置地图的尺寸,
x_size
、y_size
、z_size
分别表示地图在x
、y
、z
方向上的大小。这些参数通过外部传入(map_size_x_
,map_size_y_
,map_size_z_
)。
- map/x_size, map/y_size, map/z_size: 设置地图的尺寸,
-
<remap from="~global_map" to="/map_generator/global_cloud"/>
- ~global_map: 节点接收的本地
global_map
话题重映射为/map_generator/global_cloud
,通常这是一个全局的点云地图,用于本地传感器进行匹配或融合。
- ~global_map: 节点接收的本地
-
<remap from="~odometry" to="$(arg odometry_topic)"/>
- ~odometry: 节点接收的
odometry
(里程计)话题重映射为外部参数odometry_topic
指定的话题。这允许从不同的来源获取里程计数据,例如从视觉SLAM或IMU等模块。
- ~odometry: 节点接收的
3. 总结
- 经过topic整理,对于这么多节点在一起干了什么就清楚了很多,同时对于实飞情况下,应该注意哪些消息主题也就更加清楚了。
仿真消息主题:
- “/map_generator/global_cloud”
- “/visual_slam/odom”
- “/planning/pos_cmd”
四旋翼仿真消息主题:
- “so3_cmd”
- “force_disturbance”
- “moment_disturbance”
- “motors”
- “corrections”
- 仿真环境内部配置文件
so3_control:
- “config/gains_hummingbird.yaml”
- “config/corrections_hummingbird.yaml”
# Vision Gain for Hummingbird
gains:pos: {x: 2.0, y: 2.0, z: 3.5}vel: {x: 1.8, y: 1.8, z: 2.0}rot: {x: 1.0, y: 1.0, z: 0.3}ang: {x: 0.07, y: 0.07, z: 0.02}
corrections:z: 0.0r: 0.0p: 0.0
local_sensing_node:
- “params/camera.yaml”
cam_width: 640
cam_height: 480
cam_fx: 387.229248046875
cam_fy: 387.229248046875
cam_cx: 321.04638671875
cam_cy: 243.44969177246094
总的来说,如果不是研究模拟器的朋友,知道就可以,并不需要太过纠结!
相关文章:
ego-planner开源代码之simulator.xml介绍分析
ego-planner开源代码之simulator.xml介绍&分析 1. 源由2. simulator配置2.1 配置入参2.2 mockamap_node 地图生成节点2.3 quadrotor_simulator_so3 四旋翼仿真节点2.4 Nodelet机制 四旋翼控制节点2.5 odom_visualization 里程计数据2.6 pcl_render_node 本地感知 3. 总结 1…...
论文阅读笔记 --- 图模互补:知识图谱与大模型融合综述 --- 按参考文献整理
Large Language Models’ Understanding of Math: Source Criticism and Extrapolation Submitted on 12 Nov 2023大模型在处理结构化推理方面(如解决数学问题[99])表现不佳 Tree of Thoughts: Deliberate Problem Solving with Large Language Models S…...

Cpp类和对象(上)(3)
文章目录 前言一、面向过程与面向对象初步认识二、类的引入三、类的定义四、类的访问限定符及类的封装类的访问限定符类的封装 五、类的作用域(类域)六、类的实例化七、类对象模型如何计算类对象的大小类对象的存储方式猜测 八、this指针this指针的引出this指针的特性 九、C语言…...
【微信小程序】连续拍照功能实现
前言: 最近在使用uniapp开发微信小程序,遇到这样一个需求,用户想要连续拍照,拍完之后可以删除照片,保留自己想要的照片,然后上传到服务器上。由于原生的方法只能一个个拍照上传,所以只能自己通过…...
JavaSE:11、内部类
学习 资源1 学习资源 2 1、成员内部类 import com.test.*;public class Main {public static void main(String [] argv){Person personnew Person();//Person构造函数Person.Woman womanperson.new Woman();//woman构造函数} }package com.test;public class Person {publ…...

VTD激光雷达(7)——07_OptiX_Variables_Advanced
文章目录 前言一、总结 前言 一、 1 和上图蓝绿的区别在于 总结...
运维工程师面试整理-自动化运维
自动化运维是现代运维工作中不可或缺的一部分,它可以大幅提升效率,减少人为错误,并使得大规模环境管理变得可行。在面试中,面试官通常会通过自动化运维相关的问题来评估你在自动化工具使用、脚本编写、CI/CD 实践以及系统监控等方面的能力。以下是关于自动化运维的详细内容…...

【JAVA基础】实现Tomcat基本功能
文章目录 TCP/IP协议Socket编程ServletTomcat 在搜索了两三天之后,也是大概弄懂了Tomcat是个什么东西,我们在说Tomcat之前,先来了解一下下面这三个东西: TCP/IP协议 TCP/IP 是互联网通信的基础协议。TCP(传输控制协议…...

风力发电叶片缺陷检测数据集
风力发电叶片缺陷检测数据集】nc: 4 names: [Burn Mark, Coating_defects, Crack, EROSION ] 名称:【烧伤痕迹, 涂层缺陷, 裂缝,侵蚀】共1095张,8:1:1比例划分,(train;876张,val:109张ÿ…...
数据类型自动转换的解决方案
数据类型自动转换的解决方案 java8、jdk8背景 为方便测试框架数据处理以及方便查看一些数据,弄了一个工具类,部分要点简要说明。 主要涉及到字符串与其他类型的相互转换,无其他类型之间的相互转换。 轻量测试框架实现与使用的总篇可见此文…...
大厂校招:唯品会Java面试题及参考答案
SortedSet 的原理 SortedSet 是一个有序的集合接口,它继承自 Set 接口。在 Java 中,常见的实现类有 TreeSet。 TreeSet 实现了 SortedSet 接口,它使用红黑树来维护集合中元素的有序性。红黑树是一种自平衡的二叉搜索树,具有以下特点: 每个节点要么是红色,要么是黑色。根节…...

Qt常用控件——QLCDNumber
文章目录 QLCDNumber核心属性倒计时小程序倒计时小程序相关问题 QLCDNumber核心属性 QLCDNumber是专门用来显示数字的控件,类似于这样: 属性说明intValue获取的数字值(int).value获取的数字值(double)和intValue是联动的例如value设为1.5,in…...

专业学习|GERT网络概览(学习资源、原理介绍、变体介绍)
一、GERT 网络概览 GERT(Graphical Evaluation Review Technique,图示评审技术)是一种结合流线图理论(Flow Graphical Theory)、矩母函数(Moment Generating Function)、计划评审技术(Program Evaluation Review Technique)解决随机网络问题的方法,描述各…...

搭建一个基于角色的权限验证框架
说明:基于角色的权限验证(Role-Based Access Control,RBAC)框架,是目前大多数服务端的登录校验框架。本文介绍如何快速搭建一个这样的框架,不用Shiro、Spring Security、Sa-Token这样的“大框架”实现。 R…...

下载chromedriver驱动
首先进入关于ChromeDriver最新下载地址:Chrome for Testing availability 进入之后找到与自己所匹配的,在浏览器中查看版本号,下载版本号需要一致。 下载即可,解压,找到 直接放在pycharm下即可 因为在环境变量中早已配…...

在STM32工程中使用Mavlink与飞控通信
本文讲述如何在STM32工程中使用Mavlink协议与飞控通信,特别适合自制飞控外设模块的项目。 需求来源: 1、增稳云台里的STM32单片机需要通过串口接收飞控传来的云台俯仰、横滚控制指令和相机拍照控制指令; 2、自制的有害气体采集器需要接收飞…...

【Elasticsearch】-7.17.24版本接入
官网 https://www.elastic.co/cn/downloads/elasticsearch 本项目基于windows环境下,其他环境操作类似 1、初始化配置 打开config/elasticsearch.yaml 添加如下配置 cluster.name: dams_clusternetwork.host: 127.0.0.1 http.port: 9200# 不开启geo数据库 inge…...

ShouldSniffAttr在自动化测试中具体是如何应用?
在自动化测试中,ShouldSniffAttr 这样的函数名通常暗示它是一个用于断言(assertions)的工具,用于检查某个元素或属性是否符合预期的条件。 虽然这不是一个标准的函数名,但我们可以根据命名推测其用途。 例如…...

前端vue3打印,多页打印,不使用插件(工作中让我写一个打印功能)
说下总体思路,创建一个组件,里面放多个span字段,然后根据父组件传入的参数,生成子组件,最好我们打印子组件的信息即可。通过我多次ai,探索最后成功了。 子组件代码 media print 这个我要讲一下ÿ…...
传感技术是如何实现实时监测和控制的呢
传感技术在力士乐拧紧系统中实现实时监测和控制的方式主要通过以下几个步骤进行: 一、传感器数据采集 1. 传感器种类: 力士乐拧紧系统中可能包含多种传感器,如力矩传感器、角度传感器和转速传感器等。这些传感器各自负责检测拧紧过程中的不…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...

汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...

【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...

有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...
LangFlow技术架构分析
🔧 LangFlow 的可视化技术栈 前端节点编辑器 底层框架:基于 (一个现代化的 React 节点绘图库) 功能: 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...
git: early EOF
macOS报错: Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...