ros2+gazebo+urdf:ros2机器人使用gazebo的urdf文件中的<gazebo>部分官网资料

原文链接SDFormat extensions to URDF (the 'gazebo' tag) — Documentation

注意了ros2的gazebo部分已经跟ros1的gazebo部分不一样了:

Toggle navigation 

SDFormat

  • Specification
  • API
  • Documentation
  • Download

Back

Edit                  Version: 1.6           


Table of Contents
  • SDFormat extensions to URDF (the <gazebo> tag)
    • <gazebo> Elements For <robot>
    • <gazebo> Elements For Links
    • Special meaning for <visual>, <collision>, and <material>
      • <gazebo> Elements For Joints
      • Fixed joint lumping

SDFormat extensions to URDF (the <gazebo> tag)

When URDF files are loaded by Gazebo (both Gazebo-classic and the new Gazebo), the URDF content is first converted to SDFormat before being processed by Gazebo. Users who want to modify the resulting SDFormat output to include SDFormat specific elements may do so using the <gazebo> tag in the original URDF file. This is known as the Gazebo extension to the URDF specification (see urdf/XML/Gazebo - ROS Wiki)

The URDF to SDFormat conversion usually happens automatically without users observing the resulting SDFormat file. To diagnose any issues that might come up during the conversion, the tool

gz sdf -p <path to urdf file>

can be used to convert the URDF file to SDFormat that can be inspected by the user.

The following is the documentation of the various tags available under <gazebo> and their corresponding effect on the SDFormat output. While some of the content included here is also available in the "Using a URDF in Gazebo" tutorial of Gazebo-classic, this document should provide a more complete discussion of the extension, especially regarding fixed joint lumping.

<gazebo> Elements For <robot>

<gazebo> tag without a reference attribute applies to the SDFormat <model> that gets generated from the <robot> URDF tag. All elements in the <gazebo> tag are inserted into the SDF <model> tag for the generated SDF.

urdf文件内不带reference属性的<gazebo>转换为sdf文件内<model>标签

Example:

<?xml version='1.0' encoding='UTF-8'?>
<!--URDF-->
<robot name='no_ref_example'><link name='world'/><gazebo><static>true</static><plugin name='testPlugin' filename='testFileName'/></gazebo>
</robot>

results in:

<!--SDFormat-->
<sdf version='1.9'><model name='no_ref_example'><static>true</static><plugin name='testPlugin' filename='testFileName'/></model>
</sdf>

When using the <gazebo> extension for links, the name of the link has to be specified in the reference attribute. (gazebo标签内的reference属性需要填写joint名称例如laser或camera或base等)There are a number of special tags that modify the values of elements or attributes in the generated SDFormat file. Any tag that is not listed in the table below will be directly inserted into the corresponding <link> element in the SDFormat output. This direct insertion is sometimes referred to as blob insertion.所有不在下表中列出的标签例如<plugin>标签,都会被直接插入sdf文件,原样插入。例如urdf内<plugin>,在sdf文件内还是<plugin>,不变。当然表格里面的需要改变

Table of elements with special meaning:

NameTypeDescriptionCorresponding SDFormat element
turnGravityOffboolA value of "true" turns gravity off. Alternatively, gravity (with opposite boolean value) can be used via blob insertiongravity
dampingFactordoubleExponential velocity decay of the link velocity - takes the value and multiplies the previous link velocity by (1-dampingFactor).velocity_decay/linear and velocity_decay/angular
maxVeldoubleMaximum contact correction velocity truncation term. (See the Gazebo-classic tutorial on Constraints Parameters for more detail)collision/surface/contact/ode/max_vel
minDepthdoubleMinimum allowable depth before contact correction impulse is applied. (See the Gazebo-classic tutorial on Constraints Parameters for more detail)collision/surface/contact/ode/min_depth
mu1doubleFriction coefficients μ for the principal contact directions along the contact surface as defined by the Open Dynamics Engine (ODE) (see parameter descriptions in ODE's user guide and the Gazebo-classic tutorial on Friction Parameters for more detail)collision/surface/friction/ode/mu
mu2collision/surface/friction/ode/mu2
fdir1vector3-tuple specifying direction of mu1 in the collision local reference frame. (See the Gazebo-classic tutorial on Friction Parameters for more detail)collision/surface/friction/ode/fdir1
kpdoubleContact stiffness k_p and damping k_d for rigid body contacts as defined by ODE (ODE uses erp and cfm but there is a mapping between erp/cfm and stiffness/damping. Also see See the Gazebo-classic tutorial on Contact Parameters for more detail)collision/surface/contact/ode/kp
kdcollision/surface/contact/ode/kd
selfCollideboolIf true, the link can collide with other links in the model.self_collide
maxContactsintMaximum number of contacts allowed between two entities. This value overrides the max_contacts element defined in physics.(See the Gazebo-classic tutorial on Contact Parameters for more detail)collision/max_contacts
laserRetrodoubleIntensity value returned by laser sensor.collision/laser_retro
visualelementThe content of the element will be inserted into each visual of the SDFormat linkvisual
materialelementThe content of the element will be inserted into each material of the SDFormat linkvisual/material
collisionelementThe content of the element will be inserted into each collision of the SDFormat linkcollision

Note: The XPath used in the "Corresponding SDFormat element" column is relative to the link element.

Example:

The following shows how to set the first coefficient of friction for all <collision> elements in a link

<?xml version='1.0' encoding='UTF-8'?>
<!--URDF-->
<robot name='friction_example'><link name='base_link'><inertial><mass value='0.12' /><inertia ixx='0.01' ixy='0' ixz='0' iyy='0.01' iyz='0' izz='0.01' /></inertial><collision><geometry><sphere radius="2"/></geometry></collision><collision><geometry><cylinder radius="1" length="2"/></geometry></collision></link><gazebo reference='base_link'><mu1>0.25</mu1></gazebo>
</robot>

This creates the element //surface/friction/ode/mu in the collision element of the referenced link.

<!--SDFormat-->
<sdf version='1.9'><model name='friction_example'><link name='base_link'><inertial><pose>0 0 0 0 0 0</pose><mass>0.12</mass><inertia><ixx>0.01</ixx><ixy>0</ixy><ixz>0</ixz><iyy>0.01</iyy><iyz>0</iyz><izz>0.01</izz></inertia></inertial><collision name='base_link_collision'><pose>0 0 0 0 0 0</pose><geometry><sphere><radius>2</radius></sphere></geometry><surface><contact><ode/></contact><friction><ode><mu>0.25</mu></ode></friction></surface></collision><collision name='base_link_collision_1'><pose>0 0 0 0 0 0</pose><geometry><cylinder><length>2</length><radius>1</radius></cylinder></geometry><surface><contact><ode/></contact><friction><ode><mu>0.25</mu></ode></friction></surface></collision></link></model>
</sdf>

Special meaning for <visual><collision>, and <material>

The <visual> and <collision> are meant to update existing visuals and collisions in the URDF as they get converted to SDFormat. At the time of writing, these tags do not insert new visuals or collision elements into the referenced link. Note also that these tags affect all visuals and collisions, respectively, found in the referenced link.

Example:

Given the following URDF file with two visuals, the <gazebo> extension applies the element <transparency> to each visual in base_link.

<?xml version='1.0' encoding='UTF-8'?>
<!--URDF-->
<robot name='visual_example'><link name='base_link'><inertial><mass value='0.12' /><inertia ixx='0.01' ixy='0' ixz='0' iyy='0.01' iyz='0' izz='0.01' /></inertial><visual><geometry><sphere radius="2"/></geometry></visual><visual><origin xyz="2 0 0" rpy="0 0 0"/><geometry><cylinder length="1" radius="2"/></geometry></visual></link><gazebo reference='base_link'><visual><transparency>0.25</transparency></visual></gazebo>
</robot>

Converts to the following SDFormat

<!--SDFormat-->
<sdf version='1.9'><model name='visual_example'><link name='base_link'><inertial><pose>0 0 0 0 0 0</pose><mass>0.12</mass><inertia><ixx>0.01</ixx><ixy>0</ixy><ixz>0</ixz><iyy>0.01</iyy><iyz>0</iyz><izz>0.01</izz></inertia></inertial><visual name='base_link_visual'><pose>0 0 0 0 0 0</pose><geometry><sphere><radius>2</radius></sphere></geometry><transparency>0.25</transparency></visual><visual name='base_link_visual_1'><pose>2 0 0 0 0 0</pose><geometry><cylinder><length>1</length><radius>2</radius></cylinder></geometry><transparency>0.25</transparency></visual></link></model>
</sdf>

The <material> tag, when used directly under the <gazebo> tag, i.e //gazebo/material, accepts a string value of the name of a material defined in a Gazebo-classic's material script. Examples include colors like Gazebo/SkyBlue as well as textures such as Gazebo/WoodFloor. The <material> tag affects all visuals found in the referenced link, similar to the behavior of <visual> and <collision>

Example:

<?xml version='1.0' encoding='UTF-8'?>
<!--URDF-->
<robot name='material_example'><link name='base_link'><inertial><mass value='0.1' /><inertia ixx='0.01' ixy='0' ixz='0' iyy='0.01' iyz='0' izz='0.01' /></inertial><visual><geometry><sphere radius="2"/></geometry></visual></link><gazebo reference='base_link'><material>Gazebo/Orange</material></gazebo>
</robot>

results in:

<!--SDFormat-->
<sdf version='1.9'><model name='material_example'><link name='base_link'><inertial><pose>0 0 0 0 0 0</pose><mass>0.10000000000000001</mass><inertia><ixx>0.01</ixx><ixy>0</ixy><ixz>0</ixz><iyy>0.01</iyy><iyz>0</iyz><izz>0.01</izz></inertia></inertial><visual name='base_link_visual'><pose>0 0 0 0 0 0</pose><geometry><sphere><radius>2</radius></sphere></geometry><material><script><name>Gazebo/Orange</name><uri>file://media/materials/scripts/gazebo.material</uri></script></material></visual></link></model>
</sdf>

This tag is only relevant when using Gazebo-classic as the new version of Gazebo does not use material scripts. However, it is still possible to change the appearance of visuals that is compatible with the new Gazebo and this is by using the //gazebo/visual/material tag. Note the difference from the previous tag as the <material> tag is not directly under <gazebo>, but under <visual>. This <material> tag contains child elements as defined in the material specification.

Example:

<?xml version='1.0' encoding='UTF-8'?>
<!--URDF-->
<robot name='material_example'><link name='base_link'><inertial><mass value='0.12' /><inertia ixx='0.01' ixy='0' ixz='0' iyy='0.01' iyz='0' izz='0.01' /></inertial><visual><geometry><sphere radius="2"/></geometry></visual></link><gazebo reference='base_link'><visual><material><diffuse>0 0 1 1 </diffuse></material></visual></gazebo>
</robot>

results in:

<!--SDFormat-->
<sdf version='1.9'><model name='material_example'><link name='base_link'><inertial><pose>0 0 0 0 0 0</pose><mass>0.12</mass><inertia><ixx>0.01</ixx><ixy>0</ixy><ixz>0</ixz><iyy>0.01</iyy><iyz>0</iyz><izz>0.01</izz></inertia></inertial><visual name='base_link_visual'><pose>0 0 0 0 0 0</pose><geometry><sphere><radius>2</radius></sphere></geometry><material><diffuse>0 0 1 1</diffuse></material></visual></link></model>
</sdf>

where the <diffuse> tag has been added to the visual of base_link.

Warning: At the time of writing, there is a bug in the URDF to SDFormat converter that behaves incorrectly when <visual> and <collision> tags in the URDF file have names.

<gazebo> Elements For Joints

When using the <gazebo> extension for joints, the name of the joint has to be specified in the reference attribute. There are a number of special tags that modify the values of elements or attributes in the generated SDFormat file. Any tag that is not listed in the table below will be directly inserted into the corresponding <joint> element in the SDFormat output.

Table of elements with special meaning:

NameTypeDescriptionCorresponding SDFormat element
stopCfmdoubleJoint stop constraint force mixing (cfm) and error reduction parameter (erp) used by ODEphysics/ode/limit/cfm
stopErpphysics/ode/limit/erp
provideFeedbackboolAllows joints to publish their wrench data (force-torque) via a Gazebo pluginphysics/provide_feedback and physics/ode/provide_feedback
implicitSpringDamperboolIf this flag is set to true, ODE will use ERP and CFM to simulate damping. This is a more stable numerical method for damping than the default damping tag. The cfmDamping element is deprecated and should be changed to implicitSpringDamper.physics/ode/implicit_spring_damper
springStiffnessdoubleSpring stiffness in N/m.axis/dynamics/spring_stiffness
springReferencedoubleEquilibrium position for the spring.axis/dynamics/spring_reference
fudgeFactordoubleScale the excess for in a joint motor at joint limits. Should be between zero and one.physics/ode/fudge_factor
preserveFixedJointboolBy default, fixed joints in the URDF are "lumped", meaning that the contents of the child link are merged with the parent link with appropriate pose offsets and the joint is discarded. Setting this to true preserves the fixed joint and effectively disables fixed joint lumping.
disableFixedJointLumpingboolBy default, fixed joints in the URDF are "lumped", meaning that the contents of the child link are merged with the parent link with appropriate pose offsets and the joint is discarded. Setting this to true disables fixed joint lumping. This has a similar effect as preserveFixedJoint but, for backward compatibility reasons, replaces the fixed joint with a revolute joint with position limits set to 0. Users are encouraged to use preserveFixedJoint instead.

Note: The XPath used in the "Corresponding SDFormat element" column is relative to the joint element.

Example: The spring reference and stiffness of a joint can be set using <springReference> and <springStiffness> respectively.

<?xml version='1.0' encoding='UTF-8'?>
<!--URDF-->
<robot name='joint_example'><link name='base_link'><inertial><mass value='0.12' /><inertia ixx='0.01' ixy='0' ixz='0' iyy='0.01' iyz='0' izz='0.01' /></inertial></link><joint name='j1' type='continuous'><parent link='base_link'/><child link='end_effector'/><origin xyz='0 0 1' rpy='0 0 0'/></joint><link name='end_effector'><inertial><mass value='0.12' /><inertia ixx='0.01' ixy='0' ixz='0' iyy='0.01' iyz='0' izz='0.01' /></inertial></link><gazebo reference='j1'><springReference>0.5</springReference><springStiffness>0.25</springStiffness></gazebo>
</robot>

This creates the elements //axis/dynamics/spring_reference and //axis/dynamics//spring_stiffness in the referenced joint of the SDFormat output.

<!--SDFormat-->
<sdf version='1.9'><model name='joint_example'><link name='base_link'><inertial><pose>0 0 0 0 0 0</pose><mass>0.12</mass><inertia><ixx>0.01</ixx><ixy>0</ixy><ixz>0</ixz><iyy>0.01</iyy><iyz>0</iyz><izz>0.01</izz></inertia></inertial></link><joint name='j1' type='revolute'><pose relative_to='base_link'>0 0 1 0 0 0</pose><parent>base_link</parent><child>end_effector</child><axis><xyz>1 0 0</xyz><limit><lower>-10000000000000000</lower><upper>10000000000000000</upper></limit><dynamics><spring_reference>0.5</spring_reference><spring_stiffness>0.25</spring_stiffness></dynamics></axis><physics><ode><limit><cfm>0</cfm><erp>0.20000000000000001</erp></limit></ode></physics></joint><link name='end_effector'><pose relative_to='j1'>0 0 0 0 0 0</pose><inertial><pose>0 0 0 0 0 0</pose><mass>0.12</mass><inertia><ixx>0.01</ixx><ixy>0</ixy><ixz>0</ixz><iyy>0.01</iyy><iyz>0</iyz><izz>0.01</izz></inertia></inertial></link></model>
</sdf>

Fixed joint lumping

Fixed joint lumping (aka joint reduction), in the URDF to SDFormat conversion is the process of taking the child link of a fixed joint and merging all of its contents into the parent link. It is an optimization that benefits maximal coordinate physics engines by reducing the number of constraints needed to simulate the model. The process preserves the total mass of the two links and computes the center of mass and moment of inertia of the resultant link. All visual and collision elements present in the child link are moved to the parent link with appropriate pose offsets. The fixed joint itself is discarded and does not appear in the SDFormat output. As of libsdformat 9.9.0 frame elements that represent the discarded joint and child link are generated to preserve their pose information.

Fixed joint lumping is enabled by default, but can be disabled by setting preserveFixedJoint or disableFixedJointLumping to true. The two parameters behave similarly, but the preserveFixedJoint=true configuration results in a joint with a fixed type whereas the disableFixedJointLumping=true configuration results in a revolute joint with position limits set to 0. Note that when both preserveFixedJoint=true and disableFixedJointLumping=true are set on a joint, the preserveFixedJoint setting will take precedence and the resulting joint will have a fixed type. Fixed joint lumping can also be disabled for all joints if ParserConfig::URDFPreserveFixedJoint is true.

Warning: Disabling joint lumping should only be done when both parent and child links have positive mass and corresponding <inertial> elements.

Example: The following URDF demonstrates fixed joint lumping where the resulting SDFormat output only has one link

<?xml version='1.0' encoding='UTF-8'?>
<!--URDF-->
<robot name='fixed_joint_lumping_example'><link name='base_link'><inertial><mass value='0.25' /><inertia ixx='0.01' ixy='0' ixz='0' iyy='0.01' iyz='0' izz='0.01' /></inertial><collision><origin xyz="0 0 0" rpy="0 0 0"/><geometry><sphere radius="2"/></geometry></collision></link><joint name='j1' type='fixed'><parent link='base_link'/><child link='end_effector'/><origin xyz='0 0 1' rpy='0 0 0'/></joint><link name='end_effector'><inertial><mass value='0.25' /><inertia ixx='0.01' ixy='0' ixz='0' iyy='0.01' iyz='0' izz='0.01' /></inertial><visual><origin xyz="2 0 0" rpy="0 0 0"/><geometry><cylinder length="1" radius="2"/></geometry></visual></link>
</robot>

results in:

<!--SDFormat-->
<sdf version='1.9'><model name='fixed_joint_lumping_example'><link name='base_link'><inertial><pose>0 0 0.5 0 0 0</pose><mass>0.5</mass><inertia><ixx>0.14499999999999999</ixx><ixy>0</ixy><ixz>0</ixz><iyy>0.14499999999999999</iyy><iyz>0</iyz><izz>0.02</izz></inertia></inertial><collision name='base_link_collision'><pose>0 0 0 0 0 0</pose><geometry><sphere><radius>2</radius></sphere></geometry></collision><visual name='base_link_fixed_joint_lump__end_effector_visual'><pose>2 0 1 0 0 0</pose><geometry><cylinder><length>1</length><radius>2</radius></cylinder></geometry></visual></link><frame name='j1' attached_to='base_link'><pose>0 0 1 0 -0 0</pose></frame><frame name='end_effector' attached_to='j1'/></model>
</sdf>

Note that the mass of base_link is the sum of the masses of the original base_link and end_effector links. The visual element of end_effector has been merged into base_link with a pose value that takes into account the pose of the original end_effector link and joint j1 as well as the pose of the original visual.

Example: The same example above is repeated, but fixed joints preserved (preserveFixedJoint=true).

<?xml version='1.0' encoding='UTF-8'?>
<!--URDF-->
<robot name='preserve_fixed_joint_lumping_example'><link name='base_link'><inertial><mass value='0.25' /><inertia ixx='0.01' ixy='0' ixz='0' iyy='0.01' iyz='0' izz='0.01' /></inertial><collision><origin xyz="0 0 0" rpy="0 0 0"/><geometry><sphere radius="2"/></geometry></collision></link><joint name='j1' type='fixed'><parent link='base_link'/><child link='end_effector'/><origin xyz='0 0 1' rpy='0 0 0'/></joint><link name='end_effector'><inertial><mass value='0.25' /><inertia ixx='0.01' ixy='0' ixz='0' iyy='0.01' iyz='0' izz='0.01' /></inertial><visual><origin xyz="2 0 0" rpy="0 0 0"/><geometry><cylinder length="1" radius="2"/></geometry></visual></link><gazebo reference='j1'><preserveFixedJoint>true</preserveFixedJoint></gazebo>
</robot>

results in:

<!--SDFormat-->
<sdf version='1.9'><model name='preserve_fixed_joint_lumping_example'><link name='base_link'><inertial><pose>0 0 0 0 0 0</pose><mass>0.25</mass><inertia><ixx>0.01</ixx><ixy>0</ixy><ixz>0</ixz><iyy>0.01</iyy><iyz>0</iyz><izz>0.01</izz></inertia></inertial><collision name='base_link_collision'><pose>0 0 0 0 0 0</pose><geometry><sphere><radius>2</radius></sphere></geometry></collision></link><joint name='j1' type='fixed'><pose relative_to='base_link'>0 0 1 0 0 0</pose><parent>base_link</parent><child>end_effector</child><axis><dynamics><spring_reference>0</spring_reference><spring_stiffness>0</spring_stiffness></dynamics><xyz>0 0 1</xyz><limit><lower>-10000000000000000</lower><upper>10000000000000000</upper></limit></axis><physics><ode><limit><cfm>0</cfm><erp>0.20000000000000001</erp></limit></ode></physics></joint><link name='end_effector'><pose relative_to='j1'>0 0 0 0 0 0</pose><inertial><pose>0 0 0 0 0 0</pose><mass>0.25</mass><inertia><ixx>0.01</ixx><ixy>0</ixy><ixz>0</ixz><iyy>0.01</iyy><iyz>0</iyz><izz>0.01</izz></inertia></inertial><visual name='end_effector_visual'><pose>2 0 0 0 0 0</pose><geometry><cylinder><length>1</length><radius>2</radius></cylinder></geometry></visual></link></model>
</sdf>

Here, the link end_effector is still present in the SDFormat output with mass and inertia equal to the URDF end_effector link. The visual of end_effector is also still present in the end_effector link of the SDFormat output. The joint j1 is also still present and its type is fixed.

Example: The same example above is repeated, but with fixed joint lumping disabled (disableFixedJointLumping=true).

<?xml version='1.0' encoding='UTF-8'?>
<!--URDF-->
<robot name='disable_fixed_joint_lumping_example'><link name='base_link'><inertial><mass value='0.25' /><inertia ixx='0.01' ixy='0' ixz='0' iyy='0.01' iyz='0' izz='0.01' /></inertial><collision><origin xyz="0 0 0" rpy="0 0 0"/><geometry><sphere radius="2"/></geometry></collision></link><joint name='j1' type='fixed'><parent link='base_link'/><child link='end_effector'/><origin xyz='0 0 1' rpy='0 0 0'/></joint><link name='end_effector'><inertial><mass value='0.25' /><inertia ixx='0.01' ixy='0' ixz='0' iyy='0.01' iyz='0' izz='0.01' /></inertial><visual><origin xyz="2 0 0" rpy="0 0 0"/><geometry><cylinder length="1" radius="2"/></geometry></visual></link><gazebo reference='j1'><disableFixedJointLumping>true</disableFixedJointLumping></gazebo>
</robot>

results in:

<!--SDFormat-->
<sdf version='1.9'><model name='disable_fixed_joint_lumping_example'><link name='base_link'><inertial><pose>0 0 0 0 0 0</pose><mass>0.25</mass><inertia><ixx>0.01</ixx><ixy>0</ixy><ixz>0</ixz><iyy>0.01</iyy><iyz>0</iyz><izz>0.01</izz></inertia></inertial><collision name='base_link_collision'><pose>0 0 0 0 0 0</pose><geometry><sphere><radius>2</radius></sphere></geometry></collision></link><joint name='j1' type='revolute'><pose relative_to='base_link'>0 0 1 0 0 0</pose><parent>base_link</parent><child>end_effector</child><axis><limit><lower>0</lower><upper>0</upper></limit><dynamics><damping>0</damping><friction>0</friction><spring_reference>0</spring_reference><spring_stiffness>0</spring_stiffness></dynamics><xyz>0 0 1</xyz></axis><physics><ode><limit><cfm>0</cfm><erp>0.20000000000000001</erp></limit></ode></physics></joint><link name='end_effector'><pose relative_to='j1'>0 0 0 0 0 0</pose><inertial><pose>0 0 0 0 0 0</pose><mass>0.25</mass><inertia><ixx>0.01</ixx><ixy>0</ixy><ixz>0</ixz><iyy>0.01</iyy><iyz>0</iyz><izz>0.01</izz></inertia></inertial><visual name='end_effector_visual'><pose>2 0 0 0 0 0</pose><geometry><cylinder><length>1</length><radius>2</radius></cylinder></geometry></visual></link></model>
</sdf>

The output is the same as preserveFixedJoint=true example, execept that joint j1 has a revolute type.

©2020 Open Source Robotics Foundation

SDFormat is open-source licensed under 

Apache 2.0

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

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

相关文章

HarmonyOS的功能及场景应用

一、基本介绍 鸿蒙HarmonyOS主要应用的设备包括智慧屏、平板、手表、智能音箱、IoT设备等。具体来说&#xff0c;鸿蒙系统是一款面向全场景(移动办公、运动健康、社交通信、媒体娱乐等)的分布式操作系统&#xff0c;能够支持手机、平板、智能穿戴、智慧屏、车机等多种终端设备…

Chainlink 开发者故事:Krypton 从构思到产品的 Chainlink BUILD之旅

识别问题&#xff0c;构思解决方案&#xff0c;建立它&#xff0c;推出它&#xff0c;然后扩展它。这就是科技初创企业的操作手册。 现在&#xff0c;前Chainlink黑客马拉松获奖者&#xff0c;当前的Chainlink BUILD成员Krypton已经进行到了第四步&#xff1a;推出。Krypton团…

基于Flask、MySQL和Echarts的*市CPI和物价水平数据可视化分析

基于Flask、MySQL和Echarts的*市CPI和物价水平数据可视化分析 引言&#xff1a; 在当前社会经济背景下&#xff0c;CPI&#xff08;居民消费价格指数&#xff09;和物价水平的波动对市场和居民生活产生直接影响。本文将介绍一款基于Flask、MySQL和Echarts的数据可视化系统&…

调试备忘录-RS485 MODBUS RTU协议简述

目录--点击可快速直达 目录 写在前面先简单说下什么是MODBUS&#xff1f;参考文章 写在前面 最近在做和物联网有关的小项目&#xff0c;有一个传感器通讯用到了RS485 MODBUS RTU协议,所以就写个随笔记录下。 先简单说下什么是MODBUS&#xff1f; Modbus协议是应用于电子控…

FineBI6.0 忘记管理员密码和用户解决方法

文章目录 问题描述解决思路解决步骤需要注意 问题描述 当我们打开FineBi服务的时候&#xff0c;突然忘记密码&#xff0c;这个时候咱们无需慌张这个时候就体现了记录密码的重要性了&#xff0c;但是不要紧&#xff0c;还是可以用方法找回的。 解决思路 通过更改配置文件db.…

华为HCIA认证H12-811题库新增

801、[单选题]178/832、在系统视图下键入什么命令可以切换到用户视图? A quit B souter C system-view D user-view 试题答案&#xff1a;A 试题解析&#xff1a;在系统视图下键入quit命令退出到用户视图。因此答案选A。 802、[单选题]“网络管理员在三层交换机上创建了V…

鲜花植物企业网站建设的效果如何

从整体来看&#xff0c;似乎鲜花植物只会在线下花市或花店里购买或见到&#xff0c;但其实对鲜花植物批发商或品牌商来说&#xff0c;线上渠道同样重要&#xff0c;从本地来说&#xff0c;流量少且获取难&#xff0c;各家品牌/门店竞争激烈&#xff0c;并且无法全面展示自己的品…

Matlab-修改默认启动路径

Matlab-修改默认启动路径 第一:找到MATLAB的安装路径 第二步&#xff1a;进入到…\toolbox\local下&#xff0c;找到matlabrc.m 第三部&#xff1a;编辑matlabrc.m&#xff0c;在文本最后一行加入启动文件路径

我要正式开始《一个项目征服Java中高级体系》

在互联网上经常看到很多人说35岁危机的问题、大厂裁员、互联网寒冬这些问题。我感觉比较幸运的是&#xff0c;在之前大环境还不是很坏时候就被裁了一次&#xff0c;所以我很早就开始做持续的准备&#xff0c;现在不好说一定能怎么样&#xff0c; 至少自己在持续的探索适合自己的…

NET中使用Identity+CodeFirst+Jwt实现登录、鉴权

目录 前言 一、创建上下文类 1.自定义MyContext上下文类继承IdentityDbContext 2.在Program中添加AddDbContext服务 二、使用Migration数据迁移 1.在控制台中 依次使用add-migration 、updatebase 命令 2.如何修改表名 3.如何自定义字段 三、使用Identity实现登录、修改密码 …

2024年起重机司机(限门式起重机)证考试题库及起重机司机(限门式起重机)试题解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年起重机司机(限门式起重机)证考试题库及起重机司机(限门式起重机)试题解析是安全生产模拟考试一点通结合&#xff08;安监局&#xff09;特种作业人员操作证考试大纲和&#xff08;质检局&#xff09;特种设备作…

MATLAB - 估计滤波器(Estimation Filters)

系列文章目录 前言 本篇文章翻译自官网&#xff0c;部分下标有问题&#xff0c;请自行分辨。 一、背景介绍 1.1 估算系统 对于许多自主系统&#xff08;autonomous systems&#xff09;来说&#xff0c;了解系统状态&#xff08;system state&#xff09;是设计任何应用的先决…