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: 12string_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 工具箱系统要求。

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

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

相关文章

LeetCode:19.删除链表倒数第N个节点

跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的! 代码随想录 LeetCode:19.删除链表倒数第N个节点 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表…

探索光耦:光耦安全标准解读——确保设备隔离与安全的重要规范

在现代科技日新月异的今天,光耦(光电耦合器)作为电子设备中不可或缺的隔离元件,其重要性不言而喻。它不仅在电源调控、工业自动化及医疗设备等关键领域大显身手,更是确保系统电气隔离与运行稳定的守护神。特别是在保障…

ubuntu+ROS推视频流至网络

目录 概述 工具 ros_rtsp 接受流 web_video_server 源码安装 二进制安装 ros接收rtsp视频流 总结 概述 ros_rtsp功能包可以将ros视频流以rtsp形式推送 web_video_server功能包可以将ros视频话题推HTTP流 rocon_rtsp_camera_relay可以接受同一网段下的rtsp视频流输出为…

如何在Python中进行数学建模?

数学建模是数据科学中使用的强大工具,通过数学方程和算法来表示真实世界的系统和现象。Python拥有丰富的库生态系统,为开发和实现数学模型提供了一个很好的平台。本文将指导您完成Python中的数学建模过程,重点关注数据科学中的应用。 数学建…

Hbase2.2.7集群部署

环境说明 准备三台服务器,分别为:bigdata141(作为Hbase主节点)、bigdata142、bigdata143确保hadoop和zookeeper集群都先启动好我这边的hadoop版本为3.2.0,zookeeper版本为3.5.8 下载安装包 下载链接:In…

【mac】终端左边太长处理,自定义显示名称(terminal路径显示特别长)

1、打开终端 2、步骤 (1)修改~/.zshrc文件 nano ~/.zshrc(2)添加或修改PS1,我是自定义了名字为“macminiPro” export PS1"macminiPro$ "(3)使用 nano: Ctrl o (字母…

(长期更新)《零基础入门 ArcGIS(ArcMap) 》实验二----网络分析(超超超详细!!!)

相信实验一大家已经完成了,对Arcgis已进一步熟悉了,现在开启第二个实验 ArcMap实验--网络分析 目录 ArcMap实验--网络分析 1.1 网络分析介绍 1.2 实验内容及目的 1.2.1 实验内容 1.2.2 实验目的 2.2 实验方案 2.3 实验流程 2.3.1 实验准备 2.3.2 空间校正…

云技术-docker

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

如何保护LabVIEW程序免遭反编译

在正常情况下,LabVIEW程序(即编译后的可执行文件或运行时文件,如 .exe 或 .llb)无法直接被反编译出源码。然而,有一些需要特别注意的点: 1. LabVIEW的编译机制 LabVIEW编译器会将源码(.vi文件&a…

C++自动化测试:GTest 与 GitLab CI/CD 的完美融合

在现代软件开发中,自动化测试是保证代码质量和稳定性的关键手段。对于C项目而言,自动化测试尤为重要,它能有效捕捉代码中的潜在缺陷,提高代码的可维护性和可靠性。本文将重点介绍如何在C项目中结合使用Google Test(GTe…

速度革命:esbuild如何改变前端构建游戏 (1)

什么是 esbuild? esbuild 是一款基于 Go 语言开发的 JavaScript 构建打包工具,以其卓越的性能著称。相比传统的构建工具(如 Webpack),esbuild 在打包速度上有着显著的优势,能够将打包速度提升 10 到 100 倍…

【逐行注释】自适应观测协方差R的AUKF(自适应无迹卡尔曼滤波,MATLAB语言编写),附下载链接

文章目录 自适应R的UKF逐行注释的说明运行结果部分代码各模块解释 自适应R的UKF 自适应无迹卡尔曼滤波(Adaptive Unscented Kalman Filter,AUKF)是一种用于状态估计的滤波算法。它是基于无迹卡尔曼滤波(Unscented Kalman Filter&…

实现 Browser 客户端下载 XML 文件功能

后端 使用 io.BytesIO 方法 创建一个字节缓冲区在不需要磁盘文件的情况下进行文件操作打包为 zip 压缩包(上图代码)in_memory_zip.seek(0) 数据写入ZIP后文件指针会停留在缓冲区的末尾将文件指针重置回开头make_response() 方法用于创建HTTP响应的函数.g…

几个bev模型部署常用的命令

#bevformer 相比bevfusion多了canbus(因为引入了时序注意力机制) ##迷你版数据集 python tools/create_data.py nuscenes --root-path ./data/nuscenes --out-dir ./data/nuscenes --extra-tag nuscenes --version v1.0-mini ##标准版 python tools/crea…

大数据新视界 -- Hive 数据分区:精细化管理的艺术与实践(上)(7/ 30)

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

web博客系统的自动化测试

目录 前言测试用例编写自动化脚本测试准备博客登录页相关测试用例登陆成功登录失败 博客首页相关测试用例登陆成功登录失败 博客详情页相关测试用例登录成功登录失败 博客编辑页相关测试用例登陆成功登录失败 编写测试文档测试类型内容 前言 本次测试是运用个人写的一个博客系…

Flink高可用配置(HA)

从Flink架构中我们可以看到,JobManager这个组件非常重要,是中心协调器,负责任务调度和资源管理。默认情况下,每个Flink集群只有一个JobManager实例。这会产生单点故障(SPOF):如果JobManager崩溃,则无法提交新程序,正在运行的程序也会失败。通过JobManager的高可用性,…

基于Springboot的流浪宠物管理系统

基于javaweb的流浪宠物管理系统 介绍 基于javaweb的流浪宠物管理系统的设计与实现,后端框架使用Springbootmybatis,前端框架使用Vuehrml,数据库使用mysql,使用B/S架构实现前台用户系统和后台管理员系统,和不同权限级别…

unity 绿幕抠图

1.硬件:Insta360 Link 2C摄像机 2.引用shader Shader "Demo/ChromaKey" { Properties { _MainTex("Texture", 2D) "white" {} _KeyColor("KeyColor", Color) (0,1,0,0) _TintColor(&q…

Linux中离线安装gcc

gcc在安装一些其他工具的经常用到,在此记录下如何安装gcc。 1.在线安装 yum -y install gcc 2.离线安装 2.1 获取安装包链接: https://pan.baidu.com/s/1oDvt64ByWs1w-evz5TXU7w?pwd9cfo mpfr-3.1.1-4.el7.x86_64.rpmlibmpc-1.0.1-3.el7.x86_64.rp…