ROS 节点node和包package

ROS 节点Node和包package

node:ros中最基本的程序单元

package:节点的组织形式

节点Node

在 ROS(Robot Operating System)中,节点(Node)是一个运行中的进程,它是 ROS 应用程序的基本组成单位。每个节点都执行特定的任务,例如控制机器人的一个部件、处理数据或与其他节点通信。节点之间通过 ROS 的通信系统交换信息,这包括话题(Topics)、服务(Services)和动作(Actions)。

节点的特征

  1. 单一职责:每个节点通常只负责一个功能或任务,这符合软件工程中的单一职责原则。
  2. 模块化设计:节点可以独立于其他节点运行,使得系统设计更加模块化,便于开发和维护。
  3. 通信机制:节点通过 ROS 的通信机制与其他节点交换信息,包括发布/订阅消息、请求/响应服务等。

示例

假设正在开发一个简单的移动机器人,该机器人需要能够接收指令来控制其运动,并能够提供关于其当前状态的反馈。在这个系统中,可以设计以下节点:

  1. 控制节点

    • 功能:接收来自用户或其他系统部分的控制指令,并将指令转换为机器人可以理解的信号。
    • 通信:可能订阅一个话题,如 /cmd_vel(用于接收速度指令),并向机器人硬件发送控制信号。
  2. 传感器节点

    • 功能:读取机器人的传感器(如里程计、激光雷达)数据,并将这些数据发布给其他节点。
    • 通信:可能发布话题,如 /laser_scan(激光雷达数据)或 /odom(里程计数据),供其他节点使用。
  3. 导航节点

    • 功能:处理传感器数据,执行路径规划和避障。
    • 通信:订阅 /laser_scan/odom 话题来获取必要的传感器数据,并发布 /cmd_vel 话题来控制机器人的运动。

注意事项

  • 节点命名:在一个 ROS 系统中,每个节点应有一个唯一的名字,便于识别和通信。
  • 调试和维护:由于节点是独立的,它们可以单独被开发、测试和调试。
  • 资源管理:每个节点都是一个单独的进程,因此需要合理管理系统资源,尤其是在资源有限的情况下。

通过这样的节点设计,ROS 系统可以灵活地处理各种机器人任务,同时保持了较高的可扩展性和可维护性。节点的独立性和专一性使得整个系统的开发和维护变得更加容易和高效。

包Package

在 ROS(Robot Operating System)中,包(Package)是组织软件的基本单位。一个 ROS 包包含了实现特定功能或任务的代码、数据和资源。ROS 包是模块化的,使得复用和共享代码变得容易。

包的特点

  1. 包含元素:一个 ROS 包可以包含源代码、编译配置文件(如 CMakeLists.txt),ROS 相关的配置文件(如 package.xml),还可能包含消息定义(msg 文件)、服务定义(srv 文件)、动作定义(action 文件)、配置文件、启动脚本等。
  2. 模块化和可重用性:ROS 包的设计支持模块化和可重用性,方便用户在不同项目中共享和重用代码。
  3. 依赖管理:包的配置文件(package.xml)中声明了该包的依赖项,这有助于自动化安装和管理依赖。

示例

假设你正在开发一个用于移动机器人导航的 ROS 系统,你可能会创建以下几个包:

  1. 机器人驱动包

    • 功能:包含控制机器人硬件的代码,例如驱动电机或读取传感器数据。
    • 包含:C++ 或 Python 源代码文件,CMakeLists.txt,package.xml。
  2. 传感器数据处理包

    • 功能:包含处理来自机器人传感器(如激光雷达)的数据的代码。
    • 包含:数据处理代码,可能还包括定义自定义消息类型的 .msg 文件。
  3. 路径规划包

    • 功能:包含实现路径规划算法的代码。
    • 包含:路径规划算法的实现代码,可能还包括服务定义 .srv 文件。

创建和使用包

  • 创建新包:

    catkin_create_pkg <package_name> [依赖1] [依赖2] [依赖3]
    

    这个命令会在当前目录下创建一个新的 ROS 包,并根据提供的依赖项生成基础的 package.xml 和 CMakeLists.txt 文件。

  • 构建包:
    在包含该包的工作空间中运行 catkin_make 来构建该包。

  • 使用包:
    在 ROS 节点代码中导入包中的功能或在启动文件中启动该包的节点。

注意事项

  • 遵循命名规范:给包选择一个有描述性且独特的名称,以避免与现有包冲突。
  • 维护文档:为你的包编写清晰的文档,说明它的功能和如何使用它。
  • 遵循许可协议:在 package.xml 中声明你的包的许可协议。

ROS 包是开发和分享机器人功能的基础。通过创建和使用 ROS 包,开发者可以在不同项目之间共享代码和资源,从而提高开发效率和协作性。

节点Node和包Package的关系

在 ROS(Robot Operating System)中,节点(Node)和包(Package)是构建和组织机器人应用程序的基本单位,它们之间有着紧密的关系。

节点(Node)

  • 定义:节点是 ROS 中运行的最小可执行单元。它是一个进程,执行特定的任务,如读取传感器数据、控制机器人部件或进行数据处理。
  • 通信:节点之间通过话题(Topics)、服务(Services)和动作(Actions)来进行通信。

包(Package)

  • 定义:包是 ROS 中的基本组织单位。一个包可以包含多个节点、库、数据集、配置文件等。
  • 功能:包用于组织相关功能的代码、节点和资源。它是构建、发布和分享 ROS 代码的标准方式。

节点和包的关系

  • 一个包可以包含一个或多个节点。每个节点执行包中的一个特定任务或功能。
  • 包提供了节点所需的所有文件和资源,例如启动脚本、参数文件、配置文件等。

示例

假设我们有一个名为 robot_navigation 的 ROS 包,它用于机器人的导航功能。这个包可能包含以下内容:

  1. 节点

    • path_planner:一个节点,负责计算从当前位置到目标位置的路径。
    • obstacle_avoidance:另一个节点,用于检测和避开障碍物。
  2. 其他文件

    • 启动脚本(.launch 文件):用于启动 path_plannerobstacle_avoidance 节点。
    • 配置文件(.yaml 文件):包含路径规划和避障算法的参数设置。
    • 依赖描述(package.xml 文件):列出了构建和运行这些节点所需的依赖包。

在这个示例中,robot_navigation 包提供了两个独立的节点 —— path_plannerobstacle_avoidance。每个节点都执行包内的特定任务,并可能与包内的其他节点或其他包中的节点进行通信。

通过将相关功能和资源组织到单个包中,ROS 提供了一种高度模块化和可重用的方式来构建复杂的机器人应用程序。这种结构也使得分享和维护代码变得更加容易。

创建ROS软件包Package

在 ROS(Robot Operating System)中创建一个软件包是一个相对直接的过程,涉及使用 catkin 构建系统和一些基本的命令行操作。以下是创建 ROS 软件包的详细步骤和一个示例:

步骤 1: 创建工作空间(如果尚未创建)

在创建软件包之前,你需要有一个 catkin 工作空间。如果还没有,可以按照以下步骤创建:

  1. 在终端中,创建一个新的工作空间目录:

    mkdir -p ~/catkin_ws/src
    
  2. 切换到工作空间的根目录:

    cd ~/catkin_ws
    
  3. 初始化工作空间:

    catkin_make
    

这将创建一个名为 catkin_ws 的新工作空间。

步骤 2: 创建软件包

  1. 切换到工作空间的 src 目录:

    cd ~/catkin_ws/src
    
  2. 使用 catkin_create_pkg 命令创建一个新的软件包。例如,创建一个名为 my_robot_driver 的包,依赖于 roscppstd_msgs

    catkin_create_pkg my_robot_driver roscpp std_msgs
    

    这个命令将在 src 目录下创建一个新的文件夹 my_robot_driver,包含一些基本文件,如 CMakeLists.txtpackage.xml

步骤 3: 编写软件包代码

  1. my_robot_driver 文件夹中,添加你的源代码、节点、消息定义等。

  2. 根据需要编辑 CMakeLists.txtpackage.xml 文件来包含和配置你的源代码、依赖、可执行文件等。

步骤 4: 构建软件包

返回到工作空间的根目录并运行 catkin_make 来构建你的新软件包:

cd ~/catkin_ws
catkin_make

步骤 5: 源工作空间设置文件

为了能够使用你的新包,需要源工作空间的 setup.bash 文件:

source ~/catkin_ws/devel/setup.bash

示例说明

在这个示例中,我们创建了一个名为 my_robot_driver 的 ROS 软件包,它依赖于 roscpp(ROS 的 C++ 客户端库)和 std_msgs(标准消息类型库)。这个包可以用于开发一个机器人驱动程序,例如,用于控制机器人的移动或处理传感器数据。

通过上述步骤,你可以在 ROS 中创建自己的软件包,这是开发新的 ROS 功能和程序的起点。记得在开发过程中根据需要更新 CMakeLists.txtpackage.xml 文件。

构建ROS软件包(CMake和Catkin)

在 ROS(Robot Operating System)中,CMakecatkin 是用于构建和管理 ROS 软件包的关键工具。它们使得开发者能够编译和链接 ROS 节点和库,管理依赖关系,并打包软件以便发布和共享。

CMake

  • 定义CMake 是一个跨平台的自动化构建系统,它使用 CMakeLists.txt 文件来定义构建过程。
  • 功能:在 ROS 中,CMake 被用来编译源代码、生成可执行文件和库,并自动处理项目的依赖关系。
  • 使用方法:开发者在 CMakeLists.txt 文件中指定项目名称、所需的依赖包、目标二进制文件(可执行文件和库)及其源文件等。

Catkin

  • 定义catkin 是 ROS 的官方构建系统,基于 CMake
  • 特点catkin 简化了 ROS 软件包的构建和管理过程,支持工作空间概念,允许同时构建多个相互依赖的 ROS 软件包。
  • 使用方法:在 catkin 工作空间中,每个软件包包含一个 CMakeLists.txt 文件和一个 package.xml 文件,后者描述了软件包的元信息和依赖关系。

示例

假设你正在开发一个名为 my_robot_driver 的 ROS 软件包:

  1. 创建 package.xml 文件

    • 这个文件包含包的元信息(如名称、版本、维护者、许可证)以及依赖项。
    • 示例片段:
      <package><name>my_robot_driver</name><version>0.0.1</version><description>A driver for my robot</description><depend>roscpp</depend>
      </package>
      
  2. 编写 CMakeLists.txt 文件

    • 这个文件定义了如何编译和链接你的 ROS 节点和库。
    • 示例片段:
      cmake_minimum_required(VERSION 3.0.2)
      project(my_robot_driver)find_package(catkin REQUIRED COMPONENTSroscpp
      )catkin_package()include_directories(${catkin_INCLUDE_DIRS}
      )add_executable(${PROJECT_NAME}_node src/my_robot_driver_node.cpp)target_link_libraries(${PROJECT_NAME}_node${catkin_LIBRARIES}
      )
      

在这个示例中,package.xml 定义了软件包的基本信息和它依赖的 roscpp 包,而 CMakeLists.txt 文件指定了如何编译和链接名为 my_robot_driver_node 的节点。

通过这样的结构,catkinCMake 提供了一种标准化的方法来构建和管理 ROS 软件包,使得 ROS 开发变得更加组织化和高效。

创建ROS节点Node

在 ROS(Robot Operating System)中,创建一个节点(Node)涉及编写实现特定功能的代码,并将其配置为可执行的 ROS 节点。ROS 节点是系统中的基本运行单元,负责处理数据、控制机器人部件或进行通信。

C++

步骤 1: 创建 ROS 包

在创建节点之前,你通常需要一个 ROS 包来组织你的代码和依赖。如果你还没有创建一个包,可以这样做:

  1. 进入你的 catkin 工作空间的 src 目录:

    cd ~/catkin_ws/src
    
  2. 使用 catkin_create_pkg 创建一个新包。例如,创建一个名为 my_robot 的包,依赖于 roscpp

    catkin_create_pkg my_robot roscpp
    
步骤 2: 编写节点代码

创建节点实际上就是编写执行特定任务的程序。下面是一个简单的 ROS 节点示例,它使用 C++ 编写:

  1. my_robot 包的 src 目录下创建一个新的 C++ 文件,比如 talker.cpp

  2. 编写节点代码。以下是一个基本的“talker”节点示例,它定期发布消息:

    #include "ros/ros.h"
    #include "std_msgs/String.h"
    #include <sstream>int main(int argc, char **argv) {ros::init(argc, argv, "talker");ros::NodeHandle n;ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter", 1000);ros::Rate loop_rate(10);while (ros::ok()) {std_msgs::String msg;std::stringstream ss;ss << "hello world";msg.data = ss.str();chatter_pub.publish(msg);ros::spinOnce();loop_rate.sleep();}return 0;
    }
    
步骤 3: 修改 CMakeLists.txt

为了编译这个节点,你需要修改 my_robot 包的 CMakeLists.txt 文件:

  1. 找到并取消注释或添加以下行:

    add_executable(talker src/talker.cpp)
    target_link_libraries(talker ${catkin_LIBRARIES})
    
  2. 这将创建一个名为 talker 的可执行文件,它编译了 src/talker.cpp 文件。

步骤 4: 构建和运行节点

返回到你的 catkin 工作空间并构建包:

  1. 构建工作空间:

    cd ~/catkin_ws
    catkin_make
    
  2. 运行你的节点:

    rosrun my_robot talker
    

这将启动 talker 节点,它开始定期向 chatter 话题发布消息。

注意事项
  • 依赖项:确保在 package.xml 中正确声明了所有依赖,并在 CMakeLists.txt 中正确配置。
  • 源环境:在运行节点之前,确保使用 source devel/setup.bash 命令来源你的 catkin 工作空间。
  • 话题和服务:根据节点的功能,你可能需要编写代码来发布或订阅话题,或提供或使用服务。

通过这个过程,你可以创建并运行自己的 ROS 节点,它是构建复杂机器人系统的基础。每个节点都应该执行一个特定的任务,并且能够通过 ROS 的通信机制与其他节点交互。

Python

创建一个 ROS 节点使用 Python 语言涉及几个关键步骤:设置 ROS 环境、编写 Python 脚本来定义节点的行为,以及确保脚本在 ROS 环境中正确运行。下面是详细步骤和一个简单示例:

步骤 1: 设置 ROS 环境

确保你已经安装了 ROS,并且你的环境已经配置好。这通常包括在你的 .bashrc 文件中添加 ROS 环境变量,例如:

source /opt/ros/[ros_version]/setup.bash

[ros_version] 替换成你安装的 ROS 版本,如 noetic

步骤 2: 创建一个 ROS 包

如果还没有合适的包来放置你的节点,你需要创建一个。在你的 catkin 工作空间中的 src 目录下,使用以下命令:

catkin_create_pkg my_python_package rospy

这将创建一个名为 my_python_package 的新包,其中包含对 ROS Python 客户端库 rospy 的依赖。

步骤 3: 编写 Python 脚本

my_python_package 包的目录中创建一个 Python 脚本。例如,创建一个简单的发布者节点:

  1. my_python_package/src 目录下创建一个新的 Python 文件,比如 talker.py

  2. 编写 Python 节点代码:

    #!/usr/bin/env python
    import rospy
    from std_msgs.msg import Stringdef talker():pub = rospy.Publisher('chatter', String, queue_size=10)rospy.init_node('talker', anonymous=True)rate = rospy.Rate(10) # 10hzwhile not rospy.is_shutdown():hello_str = "hello world %s" % rospy.get_time()rospy.loginfo(hello_str)pub.publish(hello_str)rate.sleep()if __name__ == '__main__':try:talker()except rospy.ROSInterruptException:pass
    

    这个脚本定义了一个名为 talker 的节点,它会每秒发布一个 “hello world” 消息到 chatter 话题。

步骤 4: 使 Python 脚本可执行

为了能够运行这个 Python 脚本,需要确保它是可执行的:

chmod +x src/talker.py
步骤 5: 构建和运行你的 ROS 包

回到你的 catkin 工作空间的根目录并运行 catkin_make

cd ~/catkin_ws
catkin_make

构建完成后,不要忘记源环境设置文件:

source devel/setup.bash

然后,你可以使用 rosrun 运行你的节点:

rosrun my_python_package talker.py

这样,你的 Python ROS 节点 talker 就会开始运行,并且每秒向 chatter 话题发布消息。

注意事项
  • 确保在 package.xml 中添加所有必要的依赖。
  • 如果修改了 CMakeLists.txtpackage.xml,需要重新运行 catkin_make
  • 使用 rospy 时,不需要显式地启动和关闭节点,因为 rospy.init_node()rospy.spin() 会处理这些。

通过上述步骤,你可以创建并运行自己的 ROS 节点,使用 Python 为 ROS 应用程序提供功能。

ROS 依赖项

在 ROS(Robot Operating System)中,依赖项指的是构建和运行 ROS 软件包所需的其他软件包或库。这些依赖项确保了软件包拥有它运行所需的所有必要组件和资源。依赖项管理是 ROS 架构的一个重要部分,它有助于维护软件包之间的清晰关系,确保软件包的可移植性和可重用性。

ROS 依赖项的类型

  1. 构建依赖(Build Dependencies):在编译和构建软件包时需要的依赖项,比如编译库和开发工具。
  2. 运行依赖(Run Dependencies):在运行软件包的节点时需要的依赖项,通常是其他 ROS 软件包或系统库。

依赖项的声明

  • 在 ROS 软件包中,依赖项通常在 package.xml 文件中声明。这个文件描述了软件包的元数据,包括它所依赖的其他包。
  • CMakeLists.txt 文件也可能包含有关依赖项的信息,特别是关于如何在构建过程中找到和使用这些依赖项的指令。

示例

假设你正在创建一个名为 my_robot_driver 的 ROS 软件包,该包用于处理机器人的驱动和控制。这个软件包可能需要以下依赖项:

  1. package.xml 中声明依赖

    <package><name>my_robot_driver</name><version>0.0.1</version><description>Robot driver package</description><depend>roscpp</depend><depend>sensor_msgs</depend><depend>geometry_msgs</depend>
    </package>
    
    • roscpp:ROS 的 C++ 客户端库,用于 ROS 的基本编程。
    • sensor_msgs:包含用于处理传感器数据的消息类型。
    • geometry_msgs:包含用于表示几何形状和位置的消息类型。
  2. CMakeLists.txt 中配置依赖

    find_package(catkin REQUIRED COMPONENTSroscppsensor_msgsgeometry_msgs
    )
    

    这个指令告诉 catkin 构建系统在构建 my_robot_driver 时需要找到并链接这些包。

管理依赖项

  • 在 ROS 中,rosdep 工具用于安装软件包的依赖项。它根据 package.xml 中的信息自动安装所需的系统和 ROS 依赖项。

注意事项

  • 正确声明依赖项:确保在 package.xmlCMakeLists.txt 中正确声明所有依赖项,以避免构建和运行时的问题。
  • 版本兼容性:注意依赖项的版本,确保兼容性和稳定性。
  • 维护依赖项清单:随着软件包的发展,定期更新依赖项清单以反映新的需求。

通过正确管理依赖项,ROS 软件包可以保持模块化和可维护性,同时确保在不同环境和系统中的可用性。

声明依赖项的作用

在 ROS(Robot Operating System)中声明依赖项是 ROS 包开发过程中的一个关键步骤。依赖项是指你的软件包为了正常运行和编译所需的其他软件包、库或系统资源。正确地声明这些依赖项确保了当你构建和运行你的 ROS 包时,所有必要的组件都是可用的。

声明依赖项的作用

  1. 确保所需库和包的可用性:声明依赖项告诉 ROS 构建系统在编译和运行你的包时需要查找和链接哪些外部库或包。
  2. 自动处理依赖关系:当你构建你的包时,ROS 构建系统(如 catkin)会根据声明的依赖项自动下载和安装缺失的包。
  3. 确保兼容性:声明依赖项帮助保证你的包与所依赖的包之间的兼容性,避免版本冲突。
  4. 简化安装过程:在将你的包共享给其他用户时,声明的依赖项使得其他用户能够轻松地构建和运行你的包,因为所有依赖都被明确指出。

实例

假设你正在开发一个 ROS 包 my_robot_navigation,该包负责处理机器人的路径规划。你的包可能依赖于 ROS 的标准消息库 std_msgs,用于接收和发送消息,以及 roscpp,ROS 的 C++ 客户端库。你还可能依赖于一个路径规划的库 nav_core

在你的 package.xml 文件中,你需要如下声明这些依赖项:

<package><name>my_robot_navigation</name><version>0.0.1</version><description>Robot Navigation Package</description><depend>roscpp</depend><depend>std_msgs</depend><depend>nav_core</depend>
</package>

同时,在 CMakeLists.txt 文件中,你需要使用 find_package() 函数来找到这些依赖,并正确链接它们:

cmake_minimum_required(VERSION 3.0.2)
project(my_robot_navigation)find_package(catkin REQUIRED COMPONENTSroscppstd_msgsnav_core
)catkin_package()include_directories(${catkin_INCLUDE_DIRS}
)# 这里添加你的可执行文件和目标链接库

通过声明这些依赖项,你确保了在构建和运行 my_robot_navigation 包时,roscppstd_msgsnav_core 都是可用的,你的包能够正确地编译和执行预期的功能。

结论

在 ROS 中正确声明依赖项对于开发可靠、可维护和可移植的 ROS 软件包至关重要。它不仅确保了构建过程的顺利进行,还有助于包的分发和重用。

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

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

相关文章

【申博分享】对自己过去一年申博的总结

大约是在23年春节后的时候有了读博的想法&#xff0c;到今天刚好一年多一点&#xff0c;之所以申博受多方面因素影响吧&#xff0c;同时自己也没觉得读博很难怎么样的&#xff0c;也还年轻感觉还学得动&#xff0c;唯一难受的就是读博时间成本太高&#xff0c;综合考虑之下还是…

华纳云:怎么限制docker容器的资源使用量?

限制Docker容器的资源使用量可以通过设置容器的资源限制参数来实现。以下是一些常用的资源限制方法&#xff1a; 1. CPU资源限制 通过--cpu参数可以限制容器对CPU的使用量。可以指定容器可以使用的CPU核心数&#xff0c;或者指定CPU配额和周期(quota and period)来限制CPU使用…

Thingsboard规则链:Switch节点详解

在物联网&#xff08;IoT&#xff09;领域&#xff0c;数据的高效处理与自动化决策是构建智能系统的核心。作为一款强大的物联网平台&#xff0c;Thingsboard通过其规则引擎为开发者提供了高度灵活的工具&#xff0c;其中Switch节点是实现消息条件路由的关键组件。本文将全方位…

【深度学习】Transformer梳理

零、前言 对于transformer&#xff0c;网上的教程使用记号、术语不一 。 最关键的一点&#xff0c;网上各种图的简化程度不一 &#xff08;画个图怎么能这么偷懒&#xff09; &#xff0c;所以我打算自己手画一次图。 看到的最和善&#xff08;但是不是那么靠谱&#xff0c;我…

Rust语言实现的去中心化AI网络节点

一、概述 去中心化和人工智能&#xff08;AI&#xff09;是两个极具潜力的发展方向。Gaia项目正是将这两者结合起来&#xff0c;创造了一个去中心化的AI网络节点。本文将深入探讨Gaia项目的技术细节&#xff0c;通过丰富的示例和详细描述&#xff0c;帮助读者全面理解并掌握该…

SRS Simple-RTMP-Server 全面介绍、教程与指南

本文全面介绍了SRS&#xff08;Simple Real-Time Media Server&#xff09;的功能、技术细节、安装部署、使用方法以及社区支持。涵盖了SRS的多种协议支持、性能优化、高级功能配置&#xff0c;以及如何在不同操作系统上搭建和使用SRS服务器。 文章目录 SRS简介SRS的定义和功能…

黑龙江某市数字孪生地下水监测系统平台项目建设经验

项目背景 地下水是一种特殊而珍贵的资源&#xff0c;它具有不可替代性&#xff0c;与经济发展及人民生活息息相关&#xff0c;针对日趋严峻的水资源危机&#xff0c;如何合理利用有限的水资源&#xff0c;保障国民经济的可持续发展是一个迫切需要解决的问题。 黑龙江某市积极…

eclipse启动时间过长的问题

项目场景&#xff1a; 由于我用eclipse比较习惯&#xff0c;虽然IDEA很好&#xff0c;但是因为收费&#xff0c;所以在个人开发学习过程中一直还是使用eclipse&#xff0c;本文不讨论eclipse与IDEA孰优孰劣问题。 开发环境&#xff1a; 操作系统&#xff1a;Windows 11 22631…

代码随想录 day21

二叉搜索树 二叉搜索树的最小绝对差 题意&#xff1a;求树中任意两不同节点值之间的最小差值 。 思路&#xff1a;这回要使用前后指针了。 使用两个指针&#xff08;前指针和后指针&#xff09;&#xff0c;对指向的结点的值进行相减&#xff0c;如果值大于maxlen就更新这个值…

【小呆的力学笔记】连续介质力学的知识点回顾一:运动和变形

文章目录 1. 运动的描述2. 拉格朗日描述下的变形2.1 线元的变化2.2 体元的变化2.3 面元的变化 1. 运动的描述 在连续介质力学中&#xff0c;存在着两种对运动的描述&#xff0c;一种为拉格朗日描述&#xff0c;即通过描述每个物质点的运动来描述整个变形体的运动&#xff0c;也…

如何将音频中的人声分离出来?

想要把一段视频中的人声跟背景音乐分离开来&#xff0c;找个好一点的音频处理软件就能把声音分离了&#xff0c;常见的有以下方法&#xff0c;一起来看看吧。 pr 打开软件&#xff0c;然后将电脑上的音频文件&#xff0c;上传到软件中&#xff0c;然后按住[ctrla]选择所有音频…

【数据结构】 排序算法 ~ 总结篇

文章目录 1. 排序几个重点概念的理解2. 排序算法的分析&#x1f427; 1. 排序几个重点概念的理解 2. 排序算法的分析&#x1f427;

Git学习篇

目录 使用命令导入项目 使用命令导入项目 1. 使用git init 命令初始化一个新的Git仓库。 git init 是 Git 命令&#xff0c;用于初始化一个新的 Git 仓库。当您想要开始跟踪一个新项目的版本控制时&#xff0c;可以运行 git init 命令来初始化一个空的 Git 仓库。 如果出现以下…

6-继承

6-继承 1、基本语法和方式2、继承的基本特点2.1 三种继承方式相同的基本点2.2 三种继承方式的差别2.3 公有继承的独有特点 3、子类的构造、析构3.1 子类的构造3.2 子类的析构3.3 子类的拷贝构造函数3.4 子类的拷贝赋值 4、多重继承4.1 内存布局4.2 类型转换4.3 名字冲突问题 5、…

10. C++异步IO处理库和使用libevent实现高性能服务器

C比较有名的异步IO处理库 libevent 这个主要使用的是epoll。libevthplibuvlibev 我们主要介绍libevent。 libevent重要函数 event_base_new 这个可以对应于epoll_create也就是创建一个实例。还可以初始化libevent所有管理相关的代码。比如说所能用到的队列&#xff0c;栈&a…

电脑重装系统的PE工具

10款PE制作工具&#xff01;一键制作U盘启动盘&#xff0c;轻松制作系统盘&#xff0c;重装系统&#xff0c;免费纯净、无捆绑。 二、资源/简介 1.微PE工具箱 非常老牌的PE工具&#xff0c;装机维护得力的助手&#xff0c;最后的救命稻草。化繁为简&#xff0c;小材大用&…

【GPT‑4o】完整教程:LORA微调LLaMA3并结合RAG和Agent技术实现Text2SQL任务

完整教程&#xff1a;LORA微调LLaMA3并结合RAG和Agent技术实现Text2SQL任务 环境准备 首先&#xff0c;安装必要的Python包&#xff1a; pip install transformers peft datasets torch faiss-cpu加载LLaMA3模型 从Hugging Face加载LLaMA3模型和对应的tokenizer&#xff1a…

算法基础之集合-Nim游戏

集合-Nim游戏 核心思想&#xff1a; 博弈论 sg函数&#xff1a;在有向图游戏中,对于每个节点x,设从x出发共有k条有向边,分别到达节点y1,y2,yk,定义SG(x)的后记节点y1,y2,,yk的SG函数值构成的集合在执行mex运算的结果,即:SG(x)mex({SG(y1),SG(y2)SG(yk)}) **特别地,**整个有向图…

Linux内核编译流程3.10

一、内核源代码编译流程 编译环境&#xff1a; cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) Linux内核版本&#xff1a; uname -r 3.10.0-693.el7.x86_64 编译内核源代码版本&#xff1a;linux-4.19.90-all-arch-master cp /boot/config-xxx到内核源…

数据库(9)——DQL基础查询

数据查询 数据查询是SQL中最复杂的&#xff0c;语法结构为 SELECT 字段列表 FROM 表名列表 WHERE 条件列表 GROUP BY 分组字段列表 HAVING 分组后字段列表 ORDER BY 排序字段列表 LIMIT 分页参数 查询多个字段 SELECT 字段1&#xff0c;字段2...FROM…