ROS2笔记1

1 ROS2概述与环境搭建

1.1 概念

ROS是机器人操作系统(Robot Operating System)的英文缩写,是用于构建机器人应用程序的软件开发工具包。ROS是一套软件库和工具,可帮助你构建机器人应用程序。从驱动程序到最先进的算法,再加上强大的开发者工具,ROS 能满足你下一个机器人项目的所有需求。而且它完全是开源的。

1.2 ROS的优势

It’s the fastest way to build a robot!

ROS是一款面向机器人应用的开源软件开发工具包。它为各行业的开发者提供了一个标准化的软件平台,助力开发者从研究和原型设计阶段,一直推进到部署与量产阶段。

不要重复造轮子。基于 ROS 进行开发,创造新事物,并且做得更快、更好!

1.2.1 全球社区(Global Community)

十多年来,机器人操作系统(ROS)项目通过培育一个拥有数百万开发者和用户的全球社区,打造了庞大的机器人软件生态系统,这些成员为该软件做出贡献并推动其不断完善。ROS 由这个社区开发并服务于该社区,未来也将由他们作为守护者。

1.2.2 经实践验证(Proven in Use)

ROS 被整个机器人行业所依赖。它是机器人教学的标准配置。从学生个人项目到多机构合作以及大型竞赛,它是大多数机器人研究的基础。如今,它也应用于全球各地正在量产的机器人中。仅在自主移动机器人(AMR)领域,ROS 就已创造了数十亿美元的价值。

1.2.3 缩短上市时间(Shorten Time to Market)

ROS 提供了开发机器人应用所需的工具、库和功能,让你能将更多时间投入到对业务至关重要的工作中。由于它是开源的,你可以灵活决定在何处以及如何使用 ROS,也可以根据自身需求对其进行定制。此外,ROS 并非专属工具,你无需在 ROS 与其他软件栈之间做出选择;ROS 可轻松与你现有的软件集成,将其工具应用到你的实际问题中。

1.2.4 多领域适配(Multi-domain)

ROS 已可广泛应用于各类机器人技术场景,涵盖室内外、家居到汽车、水下至太空,以及消费级与工业级等领域。

1.2.5 多平台(Multi-platform)

ROS 2 在 Linux、Windows、macOS 以及各类嵌入式平台(通过 micro-ROS)上均得到支持并完成测试,可实现机器人自主功能、后端管理与用户界面的无缝开发与部署。分层支持机制使得新平台(如实时操作系统和嵌入式操作系统)的移植工作能够在获得关注和投入后被引入并逐步推广。

1.2.6 100% 开源(100% Open-source)

ROS 现在是、也永远会是开源的,这确保我们的全球社区能够免费且无限制地获取一款高品质、顶尖级、功能齐全的机器人软件开发工具包。我们基于其他开源项目构建 ROS,并尽可能利用并遵循开放标准(例如 OMG 的数据分发服务)。

1.2.7 商业友好(Commercial Friendly)

官方诚挚地鼓励用户社区为ROS贡献开源代码,但从未对此提出强制要求。在宽松的开源许可协议下发布ROS,其中Apache 2.0是默认协议。你可以自由修改ROS,将其与自身及他人的非开源软件结合,并将成果发布在你的专有产品中,甚至无需告知。

1.2.8 行业支持(Industry Support)

全球各地的大小企业都在投入资源为 ROS 2 做出开源贡献,同时还在其基础上开发产品。

1.3 ROS2组成

整个ROS生态由通信(Plumbing)、工具(Tools)、功能(Capabilities)与社区(Community)四大部分组成。

1.3.1 通信(Plumbing)

通信是整个ROS系统的核心实现,是ROS内置的一个消息传递系统。这套消息传递系统使用了“面向接口”的编程思想,可以通过清晰规范的接口,将不同模块分离,从而也将故障隔离。使得ROS系统更易于维护、扩展性更强且保证了程序的高复用性。

接口规范可以由开发者自行定义。同时在ROS中也提供了许多标准的接口,这些标准接口有着广泛应用,比如:将雷达或摄像头数据传输到可视化的用户界面或是传输到定位算法模块,都会使用到标准接口。

1.3.2 工具(Tools)

在ROS中就内置了launch、调试、可视化、绘图、录制回放等一系列工具。这些工具不光可以提高开发效率,还可以在发布产品时直接包含在产品之中。

1.3.3 功能(Capabilities)

无论开发者需要用于GPS的设备驱动程序、用于四足仿生机器人的步行和平衡控制器,还是用于移动机器人的地图系统,ROS都能满足你的需求。从驱动程序到算法,再到用户界面,ROS都提供了相关实现,开发者只需专注于自身应用程序即可。

1.3.4 社区(Community)

ROS社区规模庞大、多样且全球化,从学生和业余爱好者到跨国公司和政府机构,各行各业的人和组织都在推动着ROS项目的发展。

ROS官网:https://www.ros.org/

1.4 ROS2相比ROS1的优点

ROS2是全新一代机器人操作系统,不只是功能增强的ROS1。

1.4.1 去中心化

在ROS1中使用master节点管理调度ROS系统,这存在极大的安全隐患,一旦master节点异常退出,那么会导致整个系统的崩溃。在ROS2中采用了去中心化,各个节点之间无需通过master关联,各个节点都是等态的,可以相互发现彼此。

1.4.2 全新通信底层实现

秉着不重复发明轮子的原则,ROS2不再自实现通信底层,而是直接更换为DDS通信,这使得ROS2较之于ROS1无论是通信的实行性、可靠性还是连续性都有大幅度提升。

1.5 ROS2安装

ubuntu版本:ubuntu-22.04.5-desktop-amd64.iso

1.5.1 检查是否支持UTF-8编码
locale # 检查是否支持 UTF-8

执行上述命令后显示如下图即可

如若不同可用如下命令

sudo localectl set-locale LANG=zh_CN.UTF-8 LANGUAGE=zh_CN:zh
1.5.2 启动Ubuntu universe存储库

方法1:图形化操作

打开“软件与更新”,确保可以下载”社区维护的免费和开源软件“。

方法2:命令行操作

apt-cache policy | grep universe

执行上述命令,显示如下图即可

如果没有如上所示的输出,执行如下命令启动Ubuntu universe存储库:

sudo apt install software-properties-common sudo add-apt-repository universe
1.5.3 设置软件源
sudo apt update && sudo apt install curl gnupg lsb-release sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg

如果抛出连接raw.githubusercontent.com失败的异常信息,按照如下方法解决:

1.访问 https://www.ipaddress.com/ 并输入域名raw.githubusercontent.com,查询 ip 地址。

2.将上述查询到的任意一个ip地址配置到/etc/hosts文件即可。

sudo gedit /etc/hosts
添加ip和域名映射到hosts文件,保存并退出。

操作完毕后,终端再次运行安装指令即可正常执行。

如果连接raw.githubusercontent.com没报错,接着执行如下命令,那么本步骤就已完成。

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(source /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
1.5.4 安装ROS2
sudo apt update sudo apt upgrade #升级系统 sudo apt install ros-humble-desktop #安装ROS2桌面版
1.5.5 配置环境变量
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc source /opt/ros/humble/setup.bash

验证是否配置成功,执行以下命令,显示如图即可:

ros2

1.6 测试ros2

1.打开两个终端(使用快捷键Ctrl + Alt + T)

2.终端1中执行命令,会启动一个绘有小乌龟的窗口

ros2 run turtlesim turtlesim_node


3.终端2中执行命令,可以在此终端中通过键盘上下左右按键控制乌龟运动。注意:鼠标的光标必须放在窗口2里。

ros2 run turtlesim turtle_teleop_key

1.7 安装colcon构建工具

ROS2中便是使用colcon作为包构建工具的,但是ROS2中没有默认安装colcon,需要自行安装,命令如下:

sudo apt install python3-colcon-common-extensions

安装完colcon之后,就可以在ROS2中编写应用程序了。

1.8 ros2版hello_world

1.准备工作目录

mkdir -p zl00_helloworld/src cd zl00_helloworld colcon build #编译


![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/2b673f39964d4cb8ba81cd228ce0cbad.png
2.创建功能包

进入zl00_helloworld/src目录,使用如下命令创建一个python功能包:

ros2 pkg create pkg01_helloworld_py --build-type ament_python --dependencies rclpy --node-name helloworld

3.编辑源文件

进入pkg01_helloworld_py/pkg01_helloworld_py目录,打开目录下helloworld.py文件,修改文件内容如下:

importrclpydefmain():# 初始化 ROS2rclpy.init()# 创建节点node=rclpy.create_node("helloworld_py_node")# 输出文本node.get_logger().info("hello world!")# 释放资源rclpy.shutdown()if__name__=='__main__':main()

4.编译

colcon build

5.执行

. install/setup.bash ros2 run pkg01_helloworld_py helloworld

1.9 ROS2体系框架

1.9.1 ROS2文件系统

立足系统架构,如下图所示,ROS2可以划分为三层:

  • 操作系统层(OS Layer)

    如前所述,ROS虽然称之为机器人操作系统,但实质只是构建机器人应用程序的软件开发工具包,ROS必须依赖于传统意义的操作系统,目前ROS2可以运行在Linux、Windows、Mac或RTOS上。

  • 中间层(Middleware Layer)

    主要由数据分发服务DDS与ROS2封装的关于机器人开发的中间件组成。DDS是一种去中心化的数据通讯方式,ROS2还引入了服务质量管理 (Quality of Service)机制,借助该机制可以保证在某些较差网络环境下也可以具备良好的通讯效果。ROS2中间件则主要由客户端库、DDS抽象层与进程内通讯API构成。

  • 应用层(Application Layer)
    是指开发者构建的应用程序,在应用程序中是以功能包为核心的,在功能包中可以包含源码、数据定义、接口等内容

1.概览

功能包是ROS2应用程序的核心,但是功能包不能直接构建,必须依赖于工作空间,一个ROS2工作空间的目录结构如下:

WorkSpace --- 自定义的工作空间。 |--- build:存储中间文件的目录,该目录下会为每一个功能包创建一个单独子目录。 |--- install:安装目录,该目录下会为每一个功能包创建一个单独子目录。 |--- log:日志目录,用于存储日志文件。 |--- src:用于存储功能包源码的目录。 |-- C++功能包 |-- package.xml:包信息,比如:包名、版本、作者、依赖项。 |-- CMakeLists.txt:配置编译规则,比如源文件、依赖项、目标文件。 |-- src:C++源文件目录。 |-- include:头文件目录。 |-- msg:消息接口文件目录。 |-- srv:服务接口文件目录。 |-- action:动作接口文件目录。 |-- Python功能包 |-- package.xml:包信息,比如:包名、版本、作者、依赖项。 |-- setup.py:与C++功能包的CMakeLists.txt类似。 |-- setup.cfg:功能包基本配置文件。 |-- resource:资源目录。 |-- test:存储测试相关文件。 |-- 功能包同名目录:Python源文件目录。

另外,无论是Python功能包还是C++功能包,都可以自定义一些配置文件相关的目录。

|-- C++或Python功能包 |-- launch:存储launch文件。 |-- rviz:存储rviz2配置相关文件。 |-- urdf:存储机器人建模文件。 |-- params:存储参数文件。 |-- world:存储仿真环境相关文件。 |-- map:存储导航所需地图文件。 |-- ......
2.源文件说明

实现第一个ROS2程序时,都需要创建节点,无论是C++实现还是Python实现,都是直接实例化Node对象。

但是在ROS2中,直接实例化Node对象编码风格是不被推荐的,更推荐以继承Node的方式来创建节点对象。

C++继承Node实现示例如下:

#include "rclcpp/rclcpp.hpp" class MyNode: public rclcpp::Node{ public: MyNode():Node("node_name"){ RCLCPP_INFO(this->get_logger(),"hello world!"); } }; int main(int argc, char *argv[]) { rclcpp::init(argc,argv); auto node = std::make_shared<MyNode>(); rclcpp::shutdown(); return 0; }

Python继承Node实现示例如下:

importrclpyfromrclpy.nodeimportNodeclassMyNode(Node):def__init__(self):super().__init__("node_name_py")self.get_logger().info("hello world!")defmain():rclpy.init()node=MyNode()rclpy.shutdown()

之所以继承比直接实例化Node更被推荐,是因为继承方式可以在一个进程内组织多个节点,这对于提高节点间的通信效率是很有帮助的,但是直接实例化则与该功能不兼容。

3.配置文件说明

在ROS2功能包中,经常需要开发者编辑一些配置文件以设置功能包的构建信息,功能包类型不同,所需修改的配置文件也有所不同。C++功能包的构建信息主要包含在package.xml与CMakeLists.txt中,Python功能包的构建信息则主要包含在package.xml和setup.py中。

1.package.xml

不管是何种类型的功能包,package.xml的格式都是类似的,在该文件中包含了包名、版本、作者、依赖项的信息,package.xml可以为colcon构建工具确定功能包的编译顺序。

示例:

<?xml version="1.0"?><?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?><packageformat="3"><name>pkg01_helloworld_cpp</name><version>0.0.0</version><description>TODO: Package description</description><maintaineremail="ros2@todo.todo">ros2</maintainer><license>TODO: License declaration</license><buildtool_depend>ament_cmake</buildtool_depend><depend>rclcpp</depend><test_depend>ament_lint_auto</test_depend><test_depend>ament_lint_common</test_depend><export><build_type>ament_cmake</build_type></export></package>

1.根标签

  • :该标签为整个xml文件的根标签,format属性用来声明文件的格式版本。

2.元信息标签

  • :包名;
  • :包的版本号;
  • :包的描述信息;
  • :维护者信息;
  • :软件协议;
  • :包的介绍网址;
  • :包的作者信息。

3.依赖项

  • <buildtool_depend>:声明编译工具依赖;
  • <build_depend>:声明编译依赖;
  • <build_export_depend>:声明根据此包构建库所需依赖;
  • <exec_depend>:声明执行时依赖;
  • :相当于<build_depend>、<build_export_depend>、<exec_depend>三者的集成;
  • <test_depend>:声明测试依赖;
  • <doc_depend>:声明构建文档依赖。
2.CMakeLists.txt

C++功能包中需要配置CMakeLists.txt文件,该文件描述了如何构建C++功能包。

示例:

# 声明cmake的最低版本 cmake_minimum_required(VERSION 3.8) # 包名,需要与package.xml中的包名一致 project(pkg01_helloworld_cpp) if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") add_compile_options(-Wall -Wextra -Wpedantic) endif() # find dependencies find_package(ament_cmake REQUIRED) # 引入外部依赖包 find_package(rclcpp REQUIRED) # 映射源文件与可执行文件 add_executable(helloworld src/helloworld.cpp) # 设置目标依赖库 ament_target_dependencies( helloworld "rclcpp" ) # 定义安装规则 install(TARGETS helloworld DESTINATION lib/${PROJECT_NAME}) if(BUILD_TESTING) find_package(ament_lint_auto REQUIRED) # the following line skips the linter which checks for copyrights # comment the line when a copyright and license is added to all source files set(ament_cmake_copyright_FOUND TRUE) # the following line skips cpplint (only works in a git repo) # comment the line when this package is in a git repo and when # a copyright and license is added to all source files set(ament_cmake_cpplint_FOUND TRUE) ament_lint_auto_find_test_dependencies() endif() ament_package()
3.setup.py

Python功能包中需要配置setup.py文件,该文件描述了如何构建Python功能包。

示例:

fromsetuptoolsimportsetup package_name='pkg02_helloworld_py'setup(name=package_name,# 包名version='0.0.0',# 版本packages=[package_name],# 功能包列表data_files=[#需要被安装的文件以及安装路径('share/ament_index/resource_index/packages',['resource/'+package_name]),('share/'+package_name,['package.xml']),],install_requires=['setuptools'],# 安装依赖zip_safe=True,maintainer='ros2',# 维护者maintainer_email='ros2@todo.todo',# 维护者 emaildescription='TODO: Package description',# 包描述license='TODO: License declaration',# 软件协议tests_require=['pytest'],# 测试依赖entry_points={'console_scripts':[# 映射源文件与可执行文件'helloworld = pkg02_helloworld_py.helloworld:main'],},)
4.操作命令

ROS2的文件系统核心是功能包,我们可以通过编译指令colcon和ROS2内置的工具指令ros2来实现功能包的创建、编译、查找与执行等相关操作。

1.创建

新建功能包语法如下:

ros2 pkg create 包名 --build-type 构建类型 --dependencies 依赖列表 --node-name 可执行程序名称

格式解释:

  • –build-type:是指功能包的构建类型,有cmake、ament_cmake、ament_python三种类型可选;
  • –dependencies:所依赖的功能包列表;
  • –node-name:可执行程序的名称,会自动生成对应的源文件并生成配置文件。
2.编译

编译功能包语法如下:

colcon build

或

colcon build --packages-select 功能包列表

前者会构建工作空间下的所有功能包,后者可以构建指定功能包。

3.查找

在ros2 pkg命令下包含了多个查询功能包相关信息的参数。

ros2 pkg executables [包名] # 输出所有功能包或指定功能包下的可执行程序。 ros2 pkg list # 列出所有功能包 ros2 pkg prefix 包名 # 列出功能包路径 ros2 pkg xml # 输出功能包的package.xml内容
4.执行

执行命令语法如下:

ros2 run 功能包 可执行程序 参数
1.9.2 ROS2核心模块

通信与工具是ROS2的核心模块。

1.通信模块

通信模块是整个ROS2架构中的重中之重,比如你可能想要了解在ROS2中是如何控制机器人底盘运动的?雷达、摄像头、imu、GPS等这些传感器数据是如何传输到ROS2系统的?人机交互时调用者如何下发指令,机器人又是如何反馈数据的?导航、机械臂等系统性实现不同模块之间是如何交互数据的…等等,其实这些都离不开通信模块。

2.功能包应用

功能包的应用主要有三种方式:

1.二进制安装

ROS官方或社区提供的功能包可以很方便的通过二进制方式安装,安装命令如下:

sudo apt install ros-ROS2版本代号-功能包名称

可以调用apt search ros-ROS2版本代号-* | grep -i 关键字格式的命令,根据关键字查找所需的功能包。

2.源码安装

也可以直接下载官方、社区或其他第三方提供的源代码,一般我们会从github获取源码,下载命令如下:

git clone 仓库地址

源码下载后,需要自行编译。

3.自实现

开发者按照业务需求自己编写功能包实现。

3.分布式

ROS2是一个分布式架构,不同的ROS2设备之间可以方便的实现通信,这在多机器人设备协同中是极其重要的。

4.终端命令与rqt

在ROS2中提供了丰富的命令行工具,可以方便的调试程序、提高开发效率。

rqt是一个图形化工具,它的功能与命令行工具类似,但是图形化的交互方式更为友好。

**示例1:**使用命令行工具在turtlesim_node中生成一只新乌龟。

**示例2:**使用rqt在turtlesim_node中生成一只新乌龟。

5.launch文件

通过launch文件,可以批量的启动ROS2节点,这是在构建大型项目时启动多节点的常用方式。

**示例:**一次性启动多个turtlesim_node节点。

6.TF坐标变换

TF坐标变换可以实现机器人不同部件或不同机器人之间的相对位置关系的转换。

**示例1:**发布机器人不同部件之间的坐标系关系。


**示例2:**使用turtlesim_node模拟多机器人编队。

7.可视化

ROS2内置了三维可视化工具rviz2,它可以图形化的方式显示机器人模型或显示机器人系统中的一些抽象数据。

**示例1:**显示传感器数据。


**示例2:**显示机器人模型。

1.9.3 ROS2技术支持

ROS社区提供了多种技术支持机制,主要包括:包文档、问答、论坛、包索引以及问题跟踪,每种机制都有自己的用途,合适的选择技术支持机制可以避免问题的重复提问、减少问题解决时间并对新思想的交流很有帮助。

ROS包文档

ROS核心包的文档以及包的特定内容托管在ROS包文档上,可以查找到ROS的官方教程、文档和API文档。

ROS问答

如果在学习和工作中,遇到解决不了的问题,那么可以访问ROS问答,在ROS问答模块已经涉及到60000多个问题且大部分都给出了答案。开发者可以先搜索遇到的问题,如果该问题尚未提出,那么可以自行发布相关问题(在发布之前请先查看问题发布指南)。

ROS论坛

在ROS论坛我们可以了解ROS社区的最新动态。请注意:论坛是发布公告、新闻和讨论共同爱好的地方,请不要在此提出技术问题或提交异常报告。

ROS包索引

在ROS包索引可以查找特定功能包的信息。

问题跟踪器

当用户发现系统BUG或者想请求新功能时,可以在问题跟踪器上提交报告。如果是报告BUG,那么请务必提供问题的详细描述、问题产生的环境以及可能有助于开发人员重现问题的任何细节,最好能够提供调试回溯。

1.9.4 ROS2应用方向

许多ROS团队伴随ROS成长到今日,其规模已经发展到足以被认为是独立组织的程度了。在导航、机械臂、无人驾驶、无人机等诸多领域大放异彩,下面列出了其中的一些团队项目,这些项目对我们以后的进阶发展,也提供了指导。

NAV2

Nav2项目继承自ROS Navigation Stack。该项目旨在可以让移动机器人从A点安全的移动到B点。它也可以应用于涉及机器人导航的其他应用,例如跟随动态点。Nav2将用于实现路径规划、运动控制、动态避障和恢复行为等一系列功能。

OpenCV

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库。OpenCV旨在为计算机视觉应用程序提供通用基础架构,并加速机器感知在商业产品中的使用。OpenCV允许企业轻松地使用和修改代码。

MoveIt

MoveIt是一组ROS软件包, 主要包含运动规划、碰撞检测、运动学、3D感知、操作控制等功能。它可以用于构建机械臂的高级行为。MoveIt现在可以用于市面上的大多数机械臂,并被许多大公司使用。

The Autoware Foundation

Autoware Foundation是ROS下属的非营利组织,支持实现自动驾驶的开源项目。Autoware基金会在企业发展和学术研究之间创造协同效应,为每个人提供自动驾驶技术。

F1 Tenth

F1 Tenth是将模型车改为无人车的竞速赛事,是一个由研究人员、工程师和自主系统爱好者组成的国际社区。它最初于 2016 年在宾夕法尼亚大学成立,但后来扩展到全球许多其他机构。

microROS

在基于ROS的机器人应用中,micro-ROS正在弥合性能有限的微控制器和一般处理器之间的差距。micro-ROS在各种嵌入式硬件上运行,使ROS能直接应用于机器人硬件。

Open Robotics

Open Robotics与全球ROS社区合作,为机器人创建开放的软件和硬件平台,包括 ROS1、ROS2、Gazebo模拟器和Ignition模拟器。Open Robotics使用这些平台解决一些重要问题,并通过为各种客户组织提供软件和硬件开发服务来帮助其他人做同样的事情。

PX4

PX4是一款用于无人机和其他无人驾驶车辆的开源飞行控制软件。该项目为无人机开发人员提供了一套灵活的工具,用于共享技术并为无人机应用程序创建量身定制解决方案。

ROS-Industrial

ROS-Industrial是一个开源项目,将 ROS 软件的高级功能扩展到工业相关硬件和应用程序。

相关新闻

26 精武杯手机部分复盘

26 精武杯手机部分复盘

【简要案情】 近期&#xff0c;某市反诈部门接到多名群众报案&#xff0c;均遭遇“投资理财”类电信网络诈骗&#xff0c;指向的犯罪团伙涉案资金巨大、作案链条隐蔽。办案单位迅速成立专案组开展电子数据取证工作。经初查&#xff0c;该犯罪团伙搭建虚假投资平台&#xff0c;通…

2026/10/21 2:25:53 阅读更多 →
PHP安全漏洞修复指南:防SQL注入与XSS

PHP安全漏洞修复指南:防SQL注入与XSS

一、为什么 PHP 项目总被盯上做 PHP 开发这些年&#xff0c;我见过太多项目上线后被黑的情况。说句实话&#xff0c;大部分漏洞并不是什么高深的技术&#xff0c;翻来覆去就是 SQL 注入和 XSS 这两类。很多新手写代码的时候图省事&#xff0c;直接把用户输入拼进 SQL 语句&…

2026/10/21 2:25:53 阅读更多 →
中小企业建数据中台预算不多怎么办?先把这 5 笔成本拆开,别只问报价

中小企业建数据中台预算不多怎么办?先把这 5 笔成本拆开,别只问报价

报价单拿到手&#xff0c;最常见的第一反应是"怎么比我想的贵这么多"。而这个"我想的"&#xff0c;通常是拿一套软件的价钱估出来的。 这篇为谁写&#xff1a;中小企业里兼管数据的 IT、被老板一句"我们是不是该上中台&#xff0c;先报个价"问到…

2026/10/21 2:25:53 阅读更多 →

最新新闻

RAG效果差?问题多半出在知识库管理:清洗、分块与治理实战

RAG效果差?问题多半出在知识库管理:清洗、分块与治理实战

先说明一点&#xff1a;这个标题我深有同感。做了大半年RAG相关的东西&#xff0c;见过不少团队把精力全压在召回链路调参上&#xff0c;结果效果上不去&#xff0c;最后排查一圈&#xff0c;问题全出在知识库本身——脏数据、错分块、无版本、无评测&#xff0c;源头一乱&…

2026/10/21 3:06:07 阅读更多 →
基于MATLAB深度学习与LSTM的污水处理异常工况识别实践

基于MATLAB深度学习与LSTM的污水处理异常工况识别实践

简介&#xff1a;面向污水处理异常工况识别的MATLAB深度学习资料包&#xff0c;覆盖数据集、迁移学习网络结构、训练脚本到结果可视化全流程&#xff0c;适合环境工程与人工智能交叉领域的研究者、研究生及工程师&#xff0c;可用于异常工况建模、模型迁移与效果评估。包内共20…

2026/10/21 3:06:07 阅读更多 →
MiniMax 2.5 Function Calling 格式解析与 AI 编程工具落地实践

MiniMax 2.5 Function Calling 格式解析与 AI 编程工具落地实践

做IkunCoder这段时间&#xff0c;我最大的感受是&#xff1a;一个AI编程工具能不能真正“动手干活”&#xff0c;关键不在模型聊天多好&#xff0c;而在对function calling格式吃得透不透。最近一直在跟进MiniMax 2.5的function calling方案&#xff0c;研究它如何把“用户一句…

2026/10/21 3:06:06 阅读更多 →
火箭飞行仿真中推力曲线处理模块的设计与实践

火箭飞行仿真中推力曲线处理模块的设计与实践

1. 推力曲线为什么是仿真里最"磨人"的一块做火箭飞行仿真做过一段时间的朋友&#xff0c;应该都有一个共同感受&#xff1a;飞行力学方程、气动模型、控制律这些东西&#xff0c;理论上都有成熟套路可循&#xff0c;真正让人反复返工、调试到深夜的&#xff0c;往往是…

2026/10/21 3:06:06 阅读更多 →
Python+CNN卷积神经网络实战:土豆病害识别项目全流程解析

Python+CNN卷积神经网络实战:土豆病害识别项目全流程解析

1. 项目到底在做什么&#xff1a;别被“毕设”两个字吓住先说结论&#xff1a;基于 Python 和 CNN 卷积神经网络做土豆病害识别&#xff0c;本质上就是一个图像分类任务&#xff0c;核心目标是让程序拿到一张土豆叶子的照片&#xff0c;自动判断它属于哪种病害&#xff0c;比如…

2026/10/21 3:06:06 阅读更多 →
Nginx为何要用StatefulSet?稳定身份与持久化存储实战解析

Nginx为何要用StatefulSet?稳定身份与持久化存储实战解析

1. Nginx为什么会落到StatefulSet头上——先弄清楚值不值得先说个直觉判断&#xff1a;一听到“Nginx用StatefulSet部署”&#xff0c;大多数人第一反应是“写错了吧”。Nginx这种典型无状态的反向代理&#xff0c;常规做法就是Deployment挂ConfigMap&#xff0c;前面再套个Ser…

2026/10/21 3:05:06 阅读更多 →

日新闻

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

这段时间硬件圈和AI圈都在传一个事&#xff1a;AMD锐龙AI Max PRO 400系列把最高192GB统一内存搬进了PC形态的产品里&#xff0c;按宣传口径&#xff0c;本地跑320B参数的大家伙不再是纸面概念。我第一反应倒不是“内存真大”&#xff0c;而是这话背后的含金量——它把过去只能…

2026/10/21 0:00:11 阅读更多 →
AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

1. 从“封号重开”这个行为说起&#xff1a;用户到底在追求什么“封号重开”这四个字&#xff0c;放在任何产品语境里都带着一股决绝的味道。一个账号从零开始积累使用记录、调教偏好、沉淀工作流&#xff0c;背后是大量的时间和精力成本。正常情况下&#xff0c;没有人愿意主动…

2026/10/21 0:00:11 阅读更多 →
ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

1. 为什么在ROS里硬刚YOLOv3不是“炫技”&#xff0c;而是工程落地的必经之路我第一次在某高校机器人实验室看到那台搭载Jetson TX2的移动底盘原地打转、反复识别错垃圾桶时&#xff0c;就意识到&#xff1a;单纯跑通darknet_ros demo和真正让YOLOv3在ROS里“干活”&#xff0c…

2026/10/21 0:00:11 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →