MATLAB - ROS2 ros2genmsg 生成自定义消息(msg/srv...)

系列文章目录


前言

语法

  • ros2genmsg(folderpath)
  • ros2genmsg(folderpath,Name=Value)

一、说明

        ros2genmsg(folderpath) 通过读取指定文件夹路径下的 ROS 2 自定义信息和服务定义来生成 ROS 2 自定义信息。函数文件夹必须包含一个或多个 ROS 2 软件包。这些软件包包含 .msg 文件中的消息定义、.srv 文件中的服务定义和 .action 文件中的操作定义。

        生成自定义消息后,您就可以在 MATLAB® 中发送和接收它们,就像所有其他受支持的消息一样。您可以使用 ros2message 创建这些消息,也可以在 MATLAB 命令窗口输入 ros2 msg list 查看消息列表。

        注意事项

  • 要为 ROS 2 生成自定义信息,必须构建 ROS 2 软件包。这个过程要求你有一个适用于你的平台的 C++ 编译器。有关详细信息,请参阅 ROS 工具箱系统要求。
  • 每发布一个新的 MATLAB 版本,您都必须根据 ROS 2 定义重新生成自定义报文。
  • 在 MATLAB 中生成的自定义消息现在支持 eProsima Fast DDS 和 Eclipse Cyclone DDS 中间件。有关 ROS 中间件实现的更多信息,请参阅在 ROS 中间件实现之间切换。

        ros2genmsg(folderpath,Name=Value) 使用一个或多个名值参数指定附加选项。

二、示例

2.1 从 ROS 2 软件包中创建自定义信息

        自定义信息是由你定义的信息。如果发送和接收的是受支持的消息类型,则无需使用自定义消息。要查看支持的消息类型列表,请在 MATLAB® 命令窗口中输入 ros2 msg list。有关支持的 ROS 2 消息的更多信息,请参阅使用基本 ROS 2 消息。

        如果您是第一次使用 ROS 2 自定义报文,请参阅 ROS 工具箱系统要求。

        ROS 2 自定义消息是在 ROS 2 软件包文件夹中指定的,其中包含一个名为 msg 的文件夹。msg 文件夹包含所有自定义消息类型定义。例如,自定义文件夹中的 example_b_msgs 软件包具有如下文件夹和文件结构。

        该软件包包含自定义报文类型 Standalone.msg。MATLAB 使用这些文件来生成必要的文件,以便使用软件包中包含的自定义报文。

        在本例中,您将在 MATLAB 中创建 ROS 2 自定义报文。您必须拥有一个包含所需 msg 文件的 ROS 2 软件包。

        在确保自定义信息包正确无误后,指定父文件夹的路径,并使用指定路径调用 ros2genmsg。下面的示例提供了三个具有依赖关系的消息 example_package_a、example_package_b 和 example_package_c。此示例还说明了可以使用包含多个报文的文件夹,并同时生成所有报文。

        打开一个新的 MATLAB 会话,在本地文件夹中创建一个自定义报文文件夹。

folderPath = fullfile(pwd,"custom");
copyfile("example_*_msgs",folderPath);

        指定自定义信息文件的文件夹路径,并使用 ros2genmsg 创建自定义信息。

ros2genmsg(folderPath)
Identifying message files in folder 'C:/Work/custom'.Done.
Removing previous version of Python virtual environment.Done.
Creating a Python virtual environment.Done.
Adding required Python packages to virtual environment.Done.
Copying include folders.Done.
Copying libraries.Done.
Validating message files in folder 'C:/Work/custom'.Done.
[3/3] Generating MATLAB interfaces for custom message packages... Done.
Running colcon build in folder 'C:/Work/custom/matlab_msg_gen/win64'.
Build in progress. This may take several minutes...
Build succeeded.build log

        调用 ros2 msg 列表验证新自定义信息的创建。

ros2 msg list
action_msgs/CancelGoalRequest
action_msgs/CancelGoalResponse
action_msgs/GoalInfo
action_msgs/GoalStatus
action_msgs/GoalStatusArray
actionlib_msgs/GoalID
actionlib_msgs/GoalStatus
actionlib_msgs/GoalStatusArray
builtin_interfaces/Duration
builtin_interfaces/Time
composition_interfaces/ListNodesRequest
composition_interfaces/ListNodesResponse
composition_interfaces/LoadNodeRequest
composition_interfaces/LoadNodeResponse
composition_interfaces/UnloadNodeRequest
composition_interfaces/UnloadNodeResponse
diagnostic_msgs/AddDiagnosticsRequest
diagnostic_msgs/AddDiagnosticsResponse
diagnostic_msgs/DiagnosticArray
diagnostic_msgs/DiagnosticStatus
diagnostic_msgs/KeyValue
diagnostic_msgs/SelfTestRequest
diagnostic_msgs/SelfTestResponse
example_a_msgs/DependsOnB
example_b_msgs/Standalone
example_c_msgs/DependsOnB
example_interfaces/AddTwoIntsRequest
example_interfaces/AddTwoIntsResponse
example_interfaces/Bool
example_interfaces/Byte
example_interfaces/ByteMultiArray
example_interfaces/Char
example_interfaces/Empty
example_interfaces/Float32
example_interfaces/Float32MultiArray
example_interfaces/Float64
example_interfaces/Float64MultiArray
example_interfaces/Int16
example_interfaces/Int16MultiArray
example_interfaces/Int32
example_interfaces/Int32MultiArray
example_interfaces/Int64
example_interfaces/Int64MultiArray
example_interfaces/Int8
example_interfaces/Int8MultiArray
example_interfaces/MultiArrayDimension
example_interfaces/MultiArrayLayout
example_interfaces/SetBoolRequest
example_interfaces/SetBoolResponse
example_interfaces/String
example_interfaces/TriggerRequest
example_interfaces/TriggerResponse
example_interfaces/UInt16
example_interfaces/UInt16MultiArray
example_interfaces/UInt32
example_interfaces/UInt32MultiArray
example_interfaces/UInt64
example_interfaces/UInt64MultiArray
example_interfaces/UInt8
example_interfaces/UInt8MultiArray
example_interfaces/WString
geometry_msgs/Accel
geometry_msgs/AccelStamped
geometry_msgs/AccelWithCovariance
geometry_msgs/AccelWithCovarianceStamped
geometry_msgs/Inertia
geometry_msgs/InertiaStamped
geometry_msgs/Point
geometry_msgs/Point32
geometry_msgs/PointStamped
geometry_msgs/Polygon
geometry_msgs/PolygonStamped
geometry_msgs/Pose
geometry_msgs/Pose2D
geometry_msgs/PoseArray
geometry_msgs/PoseStamped
geometry_msgs/PoseWithCovariance
geometry_msgs/PoseWithCovarianceStamped
geometry_msgs/Quaternion
geometry_msgs/QuaternionStamped
geometry_msgs/Transform
geometry_msgs/TransformStamped
geometry_msgs/Twist
geometry_msgs/TwistStamped
geometry_msgs/TwistWithCovariance
geometry_msgs/TwistWithCovarianceStamped
geometry_msgs/Vector3
geometry_msgs/Vector3Stamped
geometry_msgs/Wrench
geometry_msgs/WrenchStamped
lifecycle_msgs/ChangeStateRequest
lifecycle_msgs/ChangeStateResponse
lifecycle_msgs/GetAvailableStatesRequest
lifecycle_msgs/GetAvailableStatesResponse
lifecycle_msgs/GetAvailableTransitionsRequest
lifecycle_msgs/GetAvailableTransitionsResponse
lifecycle_msgs/GetStateRequest
lifecycle_msgs/GetStateResponse
lifecycle_msgs/State
lifecycle_msgs/Transition
lifecycle_msgs/TransitionDescription
lifecycle_msgs/TransitionEvent
logging_demo/ConfigLoggerRequest
logging_demo/ConfigLoggerResponse
map_msgs/GetMapROIRequest
map_msgs/GetMapROIResponse
map_msgs/GetPointMapROIRequest
map_msgs/GetPointMapROIResponse
map_msgs/GetPointMapRequest
map_msgs/GetPointMapResponse
map_msgs/OccupancyGridUpdate
map_msgs/PointCloud2Update
map_msgs/ProjectedMap
map_msgs/ProjectedMapInfo
map_msgs/ProjectedMapsInfoRequest
map_msgs/ProjectedMapsInfoResponse
map_msgs/SaveMapRequest
map_msgs/SaveMapResponse
map_msgs/SetMapProjectionsRequest
map_msgs/SetMapProjectionsResponse
nav_msgs/GetMapRequest
nav_msgs/GetMapResponse
nav_msgs/GetPlanRequest
nav_msgs/GetPlanResponse
nav_msgs/GridCells
nav_msgs/MapMetaData
nav_msgs/OccupancyGrid
nav_msgs/Odometry
nav_msgs/Path
nav_msgs/SetMapRequest
nav_msgs/SetMapResponse
pendulum_msgs/JointCommand
pendulum_msgs/JointState
pendulum_msgs/RttestResults
rcl_interfaces/DescribeParametersRequest
rcl_interfaces/DescribeParametersResponse
rcl_interfaces/FloatingPointRange
rcl_interfaces/GetParameterTypesRequest
rcl_interfaces/GetParameterTypesResponse
rcl_interfaces/GetParametersRequest
rcl_interfaces/GetParametersResponse
rcl_interfaces/IntegerRange
rcl_interfaces/ListParametersRequest
rcl_interfaces/ListParametersResponse
rcl_interfaces/ListParametersResult
rcl_interfaces/Log
rcl_interfaces/Parameter
rcl_interfaces/ParameterDescriptor
rcl_interfaces/ParameterEvent
rcl_interfaces/ParameterEventDescriptors
rcl_interfaces/ParameterType
rcl_interfaces/ParameterValue
rcl_interfaces/SetParametersAtomicallyRequest
rcl_interfaces/SetParametersAtomicallyResponse
rcl_interfaces/SetParametersRequest
rcl_interfaces/SetParametersResponse
rcl_interfaces/SetParametersResult
rosgraph_msgs/Clock
sensor_msgs/BatteryState
sensor_msgs/CameraInfo
sensor_msgs/ChannelFloat32
sensor_msgs/CompressedImage
sensor_msgs/FluidPressure
sensor_msgs/Illuminance
sensor_msgs/Image
sensor_msgs/Imu
sensor_msgs/JointState
sensor_msgs/Joy
sensor_msgs/JoyFeedback
sensor_msgs/JoyFeedbackArray
sensor_msgs/LaserEcho
sensor_msgs/LaserScan
sensor_msgs/MagneticField
sensor_msgs/MultiDOFJointState
sensor_msgs/MultiEchoLaserScan
sensor_msgs/NavSatFix
sensor_msgs/NavSatStatus
sensor_msgs/PointCloud
sensor_msgs/PointCloud2
sensor_msgs/PointField
sensor_msgs/Range
sensor_msgs/RegionOfInterest
sensor_msgs/RelativeHumidity
sensor_msgs/SetCameraInfoRequest
sensor_msgs/SetCameraInfoResponse
sensor_msgs/Temperature
sensor_msgs/TimeReference
shape_msgs/Mesh
shape_msgs/MeshTriangle
shape_msgs/Plane
shape_msgs/SolidPrimitive
simple_msgs/AddTwoIntsRequest
simple_msgs/AddTwoIntsResponse
simple_msgs/Num
statistics_msgs/MetricsMessage
statistics_msgs/StatisticDataPoint
statistics_msgs/StatisticDataType
std_msgs/Bool
std_msgs/Byte
std_msgs/ByteMultiArray
std_msgs/Char
std_msgs/ColorRGBA
std_msgs/Empty
std_msgs/Float32
std_msgs/Float32MultiArray
std_msgs/Float64
std_msgs/Float64MultiArray
std_msgs/Header
std_msgs/Int16
std_msgs/Int16MultiArray
std_msgs/Int32
std_msgs/Int32MultiArray
std_msgs/Int64
std_msgs/Int64MultiArray
std_msgs/Int8
std_msgs/Int8MultiArray
std_msgs/MultiArrayDimension
std_msgs/MultiArrayLayout
std_msgs/String
std_msgs/UInt16
std_msgs/UInt16MultiArray
std_msgs/UInt32
std_msgs/UInt32MultiArray
std_msgs/UInt64
std_msgs/UInt64MultiArray
std_msgs/UInt8
std_msgs/UInt8MultiArray
std_srvs/EmptyRequest
std_srvs/EmptyResponse
std_srvs/SetBoolRequest
std_srvs/SetBoolResponse
std_srvs/TriggerRequest
std_srvs/TriggerResponse
stereo_msgs/DisparityImage
test_msgs/Arrays
test_msgs/ArraysRequest
test_msgs/ArraysResponse
test_msgs/BasicTypes
test_msgs/BasicTypesRequest
test_msgs/BasicTypesResponse
test_msgs/BoundedSequences
test_msgs/Builtins
test_msgs/Constants
test_msgs/Defaults
test_msgs/Empty
test_msgs/EmptyRequest
test_msgs/EmptyResponse
test_msgs/MultiNested
test_msgs/Nested
test_msgs/Strings
test_msgs/UnboundedSequences
test_msgs/WStrings
trajectory_msgs/JointTrajectory
trajectory_msgs/JointTrajectoryPoint
trajectory_msgs/MultiDOFJointTrajectory
trajectory_msgs/MultiDOFJointTrajectoryPoint
unique_identifier_msgs/UUID
visualization_msgs/GetInteractiveMarkersRequest
visualization_msgs/GetInteractiveMarkersResponse
visualization_msgs/ImageMarker
visualization_msgs/InteractiveMarker
visualization_msgs/InteractiveMarkerControl
visualization_msgs/InteractiveMarkerFeedback
visualization_msgs/InteractiveMarkerInit
visualization_msgs/InteractiveMarkerPose
visualization_msgs/InteractiveMarkerUpdate
visualization_msgs/Marker
visualization_msgs/MarkerArray
visualization_msgs/MenuEntry
        现在您可以将上述创建的自定义信息用作标准信息。有关发送和接收信息的更多信息,请参阅与 ROS 2 发布者和订阅者交换数据。
        
        创建一个发布者来使用 example_b_msgs/Standalone 消息。
node = ros2node("/node_1");
pub = ros2publisher(node,"/example_topic","example_b_msgs/Standalone");

        创建同一主题的订阅者。

sub = ros2subscriber(node,"/example_topic");

        创建信息并发送信息。

custom_msg = ros2message("example_b_msgs/Standalone");
custom_msg.int_property = uint32(12);
custom_msg.string_property='This is ROS 2 custom message example';
send(pub,custom_msg);
pause(3) % Allow a few seconds for the message to arrive

        使用 LatestMessage 字段了解订阅者最近收到的信息。

sub.LatestMessage
ans = struct with fields:
        MessageType: 'example_b_msgs/Standalone'
       int_property: 12
    string_property: 'This is ROS 2 custom message example'

        删除已创建的 ROS 对象。

clear node pub sub

        用自定义定义替换内置报文定义

        MATLAB 提供了大量内置的 ROS 2 消息类型。你可以使用上文详述的自定义报文创建工作流程,用新定义替换这些报文类型的定义。在替换内置消息包的定义时,必须确保自定义消息包文件夹中包含相应内置消息包中所有消息类型的新定义(.msg 文件)。

2.2 创建可共享的 ROS 2 自定义信息包

        在本例中,您将在 MATLAB 中创建一个可共享的 ROS 2 自定义消息包。您必须有一个包含所需 msg 文件的 ROS 2 软件包。下图显示了一个适当的文件夹结构示例。

        准备好自定义消息包文件夹后,指定父文件夹的路径,然后使用指定路径调用 ros2genmsg。

        打开新的 MATLAB 会话,在本地文件夹中创建自定义报文数据包文件夹。在 Windows 机器上生成自定义报文时,请选择较短的文件夹路径,以避免文件夹路径中字符数的限制。例如

genDir = fullfile('C:/test/ros2CustomMessages')
genDir = fullfile(pwd,'ros2CustomMessages');
packagePath = fullfile(genDir,'simple_msgs');
mkdir(packagePath)

        在自定义信息包文件夹内创建名为 msg 的文件夹。

mkdir(packagePath,'msg')

        在 msg 文件夹中创建名为 .msg 的文件。

messageDefinition = {'int64 num'};

fileID = fopen(fullfile(packagePath,'msg', ...
               'Num.msg'),'w');
fprintf(fileID,'%s\n',messageDefinition{:});
fclose(fileID);

        在自定义信息包文件夹内创建名为 srv 的文件夹。

mkdir(packagePath,'srv')

        在 srv 文件夹中创建名为 .srv 的文件。

serviceDefinition = {'int64 a'
                     'int64 b'
                     '---'
                     'int64 sum'};
 
fileID = fopen(fullfile(packagePath,'srv', ...
               'AddTwoInts.srv'),'w');
fprintf(fileID,'%s\n',serviceDefinition{:});
fclose(fileID);

        在自定义信息包文件夹内创建名为 action 的文件夹。

mkdir(packagePath,'action')

        在 action 文件夹中创建名为 .action 的文件。

actionDefinition = {'int64 goal'
                    '---'
                    'int64 result'
                    '---'
                    'int64 feedback'};
 
fileID = fopen(fullfile(packagePath,'action', ...
               'Test.action'),'w');
fprintf(fileID,'%s\n',actionDefinition{:});
fclose(fileID);

        根据 .msg、.srv 和 .action 文件中的 ROS 2 定义生成自定义信息。使用 CreateShareableFile(创建可共享文件)参数创建可共享的自定义信息 ZIP 压缩包。

        有关如何使用该 ZIP 压缩包在其他机器上注册自定义信息的信息,请参阅 ros2RegisterMessages。

ros2genmsg(genDir,CreateShareableFile=true);
Identifying message files in folder 'C:/Users/echakrab/OneDrive - MathWorks/Documents/MATLAB/ExampleManager/echakrab.Bdoc23a.ROS2transform/ros-ex71849911/ros2CustomMessages'.Validating message files in folder 'C:/Users/echakrab/OneDrive - MathWorks/Documents/MATLAB/ExampleManager/echakrab.Bdoc23a.ROS2transform/ros-ex71849911/ros2CustomMessages'.Done.
Creating a Python virtual environment.Done.
Adding required Python packages to virtual environment.Done.
Copying include folders.Done.
Copying libraries.Done.
Done.
[1/1] Generating MATLAB interfaces for custom message packages... Done.
Running colcon build in folder 'C:/Users/echakrab/OneDrive - MathWorks/Documents/MATLAB/ExampleManager/echakrab.Bdoc23a.ROS2transform/ros-ex71849911/ros2CustomMessages/matlab_msg_gen/win64'.
Build in progress. This may take several minutes...

        在 “命令 ”窗口中输入 ros2 msg list,验证新自定义报文的创建。

2.3 输入参数

folderpath - ROS 接口文件夹的路径

        字符串标量 | 字符向量

        ROS interfaces 文件夹(ROS 消息包的父文件夹)的路径,以字符串标量或字符向量的形式指定。父文件夹必须包含软件包 .xml 和软件包文件夹。这些文件夹包括一个名为 /msg 的文件夹(内含用于定义消息的 .msg 文件)、一个名为 /srv 的文件夹(内含用于定义服务的 .srv 文件)和一个名为 /action 的文件夹(内含用于定义动作的 .action 文件)。更多信息,请参阅 “关于 ROS 2 接口”。

        示例:"C:/test/ros2CustomMessages

        数据类型:字符串

        名称-值参数

        以 Name1=Value1,...NameN=ValueN 的形式指定可选的参数对,其中 Name 是参数名,Value 是相应的值。名称-值参数必须出现在其他参数之后,但参数对的顺序并不重要。

        在 R2021a 之前,使用逗号分隔每个名称和值,并用引号括起名称。

        例如 BuildConfiguration='fasterruns'(快速运行)

BuildConfiguration - 允许在构建消息库时选择不同的编译器优化方式
        fasterbuilds“(默认) | ”fasterruns
        构建配置,以逗号分隔的一对形式指定,包括 BuildConfiguration 和包含 “fasterbuilds ”或 “fasterruns ”的字符向量或字符串标量。

        fasterbuilds"--使用编译器优化构建消息库,以缩短构建时间。

        fasterruns"--通过编译器优化构建信息库,以加快执行速度。


        示例:ROS2GENMSG('C:/test/ros2CustomMessages',BuildConfiguration='fasterruns')

数据类型:字符串

CreateShareableFile - 生成可共享 ZIP 压缩包的选项
        false 或 0(默认) | true 或 1
        创建可共享 ZIP 压缩文件的选项,指定为数字或逻辑 1(true)或 0(false)。

        如果将此参数设置为 1(true),函数将压缩 matlab_msg_gen 文件夹中的安装文件夹,创建 ZIP 压缩文件。您可以在运行于同一平台并使用相同 MATLAB 版本的另一台机器上使用此文件。

        将此参数设置为 0(false)时,函数不会创建 ZIP 压缩包。

        示例:ROS2GENMSG('C:/test/ros2CustomMessages',CreateShareableFile=true)

        数据类型:逻辑

三、限制

3.1 重启节点

        生成自定义信息后,请重启任何现有的 ROS 2 节点。

3.2 使用自定义信息生成代码

        自定义信息和服务类型可与 ROS 2 功能一起使用,为独立的 ROS 2 节点生成 C++ 代码。生成的 TGZ 档案包括自定义信息的定义,但不包括 ROS 2 自定义信息包。当函数在目标中构建生成的代码时,自定义信息包必须在 colcon 工作区中可用。将此工作区设置为当前工作目录。在构建生成的代码之前,请将自定义信息包安装或复制到系统中。

3.3 MATLAB 编译器

        MATLAB Compiler™ 软件不支持 ROS 自定义信息和 ros2genmsg 函数。

 四、提示

        在安装 Microsoft® Visual Studio® 时,请确保选择使用 C++ 工作负载进行桌面开发。这将安装 MSVC 编译器和生成自定义报文所需的所有必要依赖项。

        确保自定义报文文件夹的路径不超过 64 个字符。

        验证 python 环境配置是否正确。更多信息,请参阅 ROS 工具箱系统要求。

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

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

相关文章

使用 Elastic 和 Apple 的 OpenELM 模型构建 RAG 系统

作者:来自 Elastic Gustavo Llermaly 如何部署和测试新的 Apple 模型并使用 Elastic 构建 RAG 系统。 在本文中,我们将学习部署和测试新的 Apple 模型,并构建一个 RAG 系统来模拟 Apple Intelligence,使用 Elastic 作为向量数据库…

springboot336社区物资交易互助平台pf(论文+源码)_kaic

毕 业 设 计(论 文) 社区物资交易互助平台设计与实现 摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此&#xff…

python爬虫案例——猫眼电影数据抓取之字体解密,多套字体文件解密方法(20)

文章目录 1、任务目标2、网站分析3、代码编写1、任务目标 目标网站:猫眼电影(https://www.maoyan.com/films?showType=2) 要求:抓取该网站下,所有即将上映电影的预约人数,保证能够获取到实时更新的内容;如下: 2、网站分析 进入目标网站,打开开发者模式,经过分析,我…

Flutter 指纹识别

在这篇博客中,我们将介绍如何使用 Flutter 的 local_auth 插件在 Android 和 iOS 设备上实现指纹识别功能。通过这一步一步的实现,我们将学习如何检查设备是否支持生物识别、如何触发指纹验证,并处理可能出现的错误。 效果图(因为…

不建模,无代码,如何快速搭建VR虚拟展厅?

不建模、无代码搭建虚拟展厅,可以借助一些专业的虚拟展厅搭建平台或工具来实现。以下是一些具体的步骤和建议: 一、选择平台或工具 首先,需要选择一个适合的平台或工具来搭建虚拟展厅。这些平台通常提供预设的展厅模板、拖拽式编辑工具和丰富…

网络空间安全之一个WH的超前沿全栈技术深入学习之路(13-3)白帽必经之路——如何用Metasploit 渗透到她的心才不会让我释怀

欢迎各位彦祖与热巴畅游本人专栏与博客 你的三连是我最大的动力 以下图片仅代表专栏特色 [点击箭头指向的专栏名即可闪现] 专栏跑道一 ➡️网络空间安全——全栈前沿技术持续深入学习 专栏跑道二 ➡️ 24 Network Security -LJS ​ ​ ​ 专栏跑道三 ➡️ MYSQL REDIS Advan…

深入理解计算机系统,源码到可执行文件翻译过程:预处理、编译,汇编和链接

1.前言 从一个高级语言到可执行程序,要经过预处理、编译,汇编和链接四个过程。大家可以思考下,为什么要有这样的过程? 我们学习计算机之处,就应该了解到,计算机能够识别的只有二进制语言(这是…

linux系统清理全部python环境并重装

提问 centos系统清理全部python环境并重装,并且使用宝塔。 解答 要在CentOS系统中彻底清理Python3环境,可以遵循以下步骤: 卸载Python3 使用rpm命令卸载所有与Python3相关的包。这个命令会查询所有已安装的与python3相关的rpm包&#xf…

蓝桥杯——递归

1、用递归实现阶乘 5*4*3*2*1120 package day3;public class Demo6 {public static void main(String[] args) {int result f(5);System.out.println(result);}private static int f(int i) {if(i1) {return 1;}return i * f(i-1);}}结果:120 2、爬楼梯 有一个楼…

DAMODEL丹摩|部署FLUX.1+ComfyUI实战教程

本文仅做测评体验,非广告。 文章目录 1. FLUX.1简介2. 实战2. 1 创建资源2. 1 ComfyUI的部署操作2. 3 部署FLUX.1 3. 测试5. 释放资源4. 结语 1. FLUX.1简介 FLUX.1是由黑森林实验室(Black Forest Labs)开发的开源AI图像生成模型。它拥有12…

黑马程序员Java项目实战《苍穹外卖》Day02

苍穹外卖-day02 课程内容 新增员工员工分页查询启用禁用员工账号编辑员工导入分类模块功能代码 **功能实现:**员工管理、菜品分类管理。 员工管理效果: 菜品分类管理效果: 1. 新增员工 1.1 需求分析和设计 1.1.1 产品原型 一般在做需求…

《解锁计算机专业宝藏:核心编程语言与学习资料全解析》

在当今数字化浪潮汹涌澎湃、技术迭代日新月异的时代,计算机专业宛如一座蕴藏无尽宝藏与无限机遇的神秘殿堂🏰。对于莘莘学子而言,精准掌握核心编程语言,并手握优质学习资料,恰似寻得开启这扇殿堂大门的秘钥&#xff0c…

【Ubuntu 24.04】How to Install and Use NVM

参考 下载 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash激活 Activate NVM: Once the installation script completes, you need to either close and reopen the terminal or run the following command to use nvm immediately. exp…

【优选算法】位运算

目录 常见位运算总结1、基础位运算2、给一个数n,确定它的二进制位的第x位上是0还是13、将一个数n的二进制位的第x位改成14、将一个数n的二进制位的第x位改成05、位图的思想6、提取一个数n的二进制位中最右侧的17、将一个数n的二进制位中最右侧的1变为08、位运算的优…

systemverilog约束中:=和:/的区别

“x dist { [100:102] : 1, 200 : 2, 300 : 5}” 意味着其值等于100或101或102或200或300其中之一, 其权重比例为1:1:1:2:5 “x dist { [100:102] :/ 1, 200 : 2, 300 : 5}” 意味着等于100,101,102或200,或300其…

06_数据类型

数据类型 数据类型分类 JavaScript 语言的每一个值,都属于某一种数据类型。JavaScript 的数据类型,共有六种。(ES6 又新增了第七种 Symbol 类型的值和第八种 BigInt类型,当前课程暂不涉及) 据类型分类 原始类型(基础类型) var age = 20, var name = 尚学堂"; var le…

芯盾时代的身份安全产品体系

芯盾时代具备全栈零信任身份安全产品和服务能力: 芯盾时代IAM能够适配大企业用户复杂的应用访问需求,提供云端、互联网端、企业内网全场景的身份访问安全接入能力; 芯盾时代IAM能够理解大企业用户的身份差异,为内部用户、合作方和…

【Db First】.NET开源 ORM 框架 SqlSugar 系列

.NET开源 ORM 框架 SqlSugar 系列 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列【Code First】.NET开源 ORM 框架 SqlSugar 系列 &#x1f…

shell综合

声明! 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&#…

Ubutuns服务器搭建与维护

1.靶机搭建 首先,安装 Apache2 作为 Web 服务器: sudo apt install apache2 安装完成后,可以启动 Apache 服务并确保它开机自启: sudo systemctl start apache2 sudo systemctl enable apache2然后,你可以通过访问…