【ROS2】ROS2学习笔记二
ROS2学习笔记二一、ubuntu常用的命令终端ctrlaltt 打开mkdir test #创建名字为test的文件夹 cd test/ #切换到test目录下 pwd #查看路径 touch read.txt #创建read.txt文件 rm read.txt #删除文件read.txt cd .. #返回上一级 rm -R test/ #递归删除文件夹test sudo apt install libopencv-dev #安装功能包的命令二、ROS2的命令行打开海龟节点终端1输入ros2 run turtlesim turtlesim_node终端2输入ros2 run turtlesim turtle_teleop_key终端3输入,查看运行的节点ros2 node list想要知道某个节点的信息ros2 node info /turtlesim查看有哪些话题ros2 topic list订阅话题 /turtle1/pose ,海龟的位置信息ros2 topic echo /turtle1/poseros2 topic 发布一个话题数据–rata 1表示发布的频率为1hz发布速度控制指令/turtle1/cmd_vel指令的数据结构话题消息为geometry_msgs/msg/Twistros2 topic pub --rate 1 /turtle1/cmd_vel geometry_msgs/msg/Twist {linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}用服务启动第二个海龟,服务的名称/spawn服务的数据结构turtlesim/srv/Spawn海龟的名称name: ‘aa’这个名字不能取单独的数据否则会报错。ros2 service call /spawn turtlesim/srv/Spawn {x: 2, y: 2, theta: 0.2, name: aa}将turtle1的命令改为aa的,就可以驱动aa这个乌龟绕圆圈话题是对机器人控制的一个接口修改接口的名称就可以控制不同的的机器人ros2 topic pub --rate 1 /aa/cmd_vel geometry_msgs/msg/Twist {linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}ros的小工具可以保存机器人运动的数据可以脱机运行用ros2 bag 指令如果要录制海龟的速度指令用命令ros2 bag record /turtle1/cmd_vel终端1ros2 bag record /turtle1/cmd_vel 终端2启动海龟控制节点控制海龟运动ros2 run turtlesim turtle_teleop_key 录制结束后ctrlc结束终端1数据包保存在该终端的目录下复现运动使用命令ros2 bag play 数据包名称可以复现机器人的数据方便问题解决。ros2 bag play rosbag2_2026_07_30-10_29_32/三、安装gitsudo apt install git下载代码git clone https://gitee.com/guyuehome/ros2_21_tutorials.git四、安装VSCodehttps://code.visualstudio.com/ https://code.visualstudio.com/Download下载deb安装包安装指令sudo dpkg -i code_1.131.0-1785237861_amd64.deb回车安装五、ROS的工作空间工作空间是一个存放项目开发相关文件的文件夹是开发过程的大本营。src代码空间install安装空间build编译空间log日志空间创建工作空间mkdir -p ~/dev_ws/src cd ~/dev_ws/src自动安装依赖sudo apt install -y python3-pip sudo pip3 install rosdepc (如果报错用这个sudo pip3 install rosdepc --break-system-packages) sudo rosdepc init rosdepc update cd .. rosdepc install -i --from-path src --rosdistro humble -y #搜索工作空间没有安装的依赖并安装。humble是ros2的版本需要自己替换为自己的版本。如果是jazzy版本rosdepc install -i --from-path src --rosdistro jazzy -y编译工作空间sudo apt install python3-colcon-ros cd ~/dev_ws/ colcon build #对整个工作空间进行编译的指令设置环境变量source install/local_setup.sh echo source ~dev_ws/install/local_setup.sh~.bashrc或者手动添加home目录下快捷键ctrlh打开隐藏文件双击.bashrc文件在最后添加source ~/dew_ws/install/local_setup.sh六、创建功能包ros2 pkg create --build-type build-type package_nameros2ros2命令中pkg表示功能包相关的功能create表示创建功能包build-type表示新创建的功能包是C还是Python的如果使用C或者C那这里就跟ament_cmake如果使用Python就跟ament_pythonpackage_name新建功能包的名字。比如在终端中分别创建C和Python版本的功能包$ cd ~/dev_ws/src $ ros2 pkg create --build-type ament_cmake learning_pkg_c # C $ ros2 pkg create --build-type ament_python learning_pkg_python # Python如果是c语言os2 pkg create --build-type ament_cmake learning_pkg_c七、节点执行具体的任务独立运行的可执行文件可以使用不同的编程语言可以分布式运行在不同的主机通过阶段名称进行管理。运行节点ros2 run learning_node node_helloworld代码设计代码的步骤1、编程接口初始化2、创建节点并初始化3、实现节点功能4、销毁节点并关闭接口importrclpy# ROS2 Python接口库fromrclpy.nodeimportNode# ROS2 节点类importtimedefmain(argsNone):# ROS2节点主入口main函数rclpy.init(argsargs)# ROS2 Python接口初始化nodeNode(node_helloworld)# 创建ROS2节点对象并进行初始化whilerclpy.ok():# ROS2系统是否正常运行node.get_logger().info(Hello World)# ROS2日志输出time.sleep(0.5)# 休眠控制循环时间node.destroy_node()# 销毁节点对象rclpy.shutdown()# 关闭ROS2 Python接口注意代码修改之后需要重新编译工作空间否则新的代码不会生效识别苹果轮廓第一步第二步编译代码colcon build第三步运行节点查看节列表ros2 node list查看节点信息ros2 node info八、话题节点间传递数据的桥梁话题采用的是发布/订阅模型订阅者或者发布者可以不唯一异步通信机制数据描述格式称之为消息.msg文件定义数据格式。终端1运行发布话题ros2 run learning_topic topic_helloworld_pub终端2订阅话题ros2 run learning_topic topic_helloworld_sub发布者的代码流程1、编程接口初始化2、创建节点并初始化3、创建发布者对象4、创建并填充话题消息5、发布话题消息6、销魂节点并关闭接口importrclpy# ROS2 Python接口库fromrclpy.nodeimportNode# ROS2 节点类fromstd_msgs.msgimportString# 字符串消息类型 创建一个发布者节点 classPublisherNode(Node):def__init__(self,name):super().__init__(name)# ROS2节点父类初始化self.pubself.create_publisher(String,chatter,10)# 创建发布者对象消息类型、话题名、队列长度self.timerself.create_timer(0.5,self.timer_callback)# 创建一个定时器单位为秒的周期定时执行的回调函数deftimer_callback(self):# 创建定时器周期执行的回调函数msgString()# 创建一个String类型的消息对象msg.dataHello World# 填充消息对象中的消息数据self.pub.publish(msg)# 发布话题消息self.get_logger().info(Publishing: %s%msg.data)# 输出日志信息提示已经完成话题发布defmain(argsNone):# ROS2节点主入口main函数rclpy.init(argsargs)# ROS2 Python接口初始化nodePublisherNode(topic_helloworld_pub)# 创建ROS2节点对象并进行初始化rclpy.spin(node)# 循环等待ROS2退出node.destroy_node()# 销毁节点对象rclpy.shutdown()# 关闭ROS2 Python接口订阅者代码流程1、编程接口初始化2、创建节点并开始初始化3、创建订阅对象4、回调函数处理话题数据5、销毁节点并关闭接口importrclpy# ROS2 Python接口库fromrclpy.nodeimportNode# ROS2 节点类fromstd_msgs.msgimportString# ROS2标准定义的String消息 创建一个订阅者节点 classSubscriberNode(Node):def__init__(self,name):super().__init__(name)# ROS2节点父类初始化self.subself.create_subscription(\ String,chatter,self.listener_callback,10)# 创建订阅者对象消息类型、话题名、订阅者回调函数、队列长度deflistener_callback(self,msg):# 创建回调函数执行收到话题消息后对数据的处理self.get_logger().info(I heard: %s%msg.data)# 输出日志信息提示订阅收到的话题消息defmain(argsNone):# ROS2节点主入口main函数rclpy.init(argsargs)# ROS2 Python接口初始化nodeSubscriberNode(topic_helloworld_sub)# 创建ROS2节点对象并进行初始化rclpy.spin(node)# 循环等待ROS2退出node.destroy_node()# 销毁节点对象rclpy.shutdown()# 关闭ROS2 Python接口查看话题的带宽ros2 topic bw /image_raw查看话题的数据ros2 topic echo /image_raw查看节点的小工具rqt_graph九、服务服务是节点之间的你问我答的形式使用的是客户端/服务器(C/S)模型同步通讯机制服务器端唯一客户端可以不唯一终端1ros2 run learning_service service_adder_server终端2ros2 run learning_service service_adder_client 4 5创建服务客户端的程序流程1、编程接口初始化2、创建节点并初始化3、创建客户端对象4、创建并发送请求数据5、等待服务器端应答数据6、销毁节点并关闭接口importrclpy# ROS2 Python接口库fromrclpy.nodeimportNode# ROS2 节点类fromlearning_interface.srvimportAddTwoInts# 自定义的服务接口classadderServer(Node):def__init__(self,name):super().__init__(name)# ROS2节点父类初始化self.srvself.create_service(AddTwoInts,add_two_ints,self.adder_callback)# 创建服务器对象接口类型、服务名、服务器回调函数defadder_callback(self,request,response):# 创建回调函数执行收到请求后对数据的处理response.sumrequest.arequest.b# 完成加法求和计算将结果放到反馈的数据中self.get_logger().info(Incoming request\na: %d b: %d%(request.a,request.b))# 输出日志信息提示已经完成加法求和计算returnresponse# 反馈应答信息defmain(argsNone):# ROS2节点主入口main函数rclpy.init(argsargs)# ROS2 Python接口初始化nodeadderServer(service_adder_server)# 创建ROS2节点对象并进行初始化rclpy.spin(node)# 循环等待ROS2退出node.destroy_node()# 销毁节点对象rclpy.shutdown()# 关闭ROS2 Python接口创建服务客户端的程序流程1、编程接口初始化2、创建节点并初始化3、创建服务器端对象4、通过回调函数处理进行服务5、向客户端反反馈应答结果6、销毁节点并关闭接口importsysimportrclpy# ROS2 Python接口库fromrclpy.nodeimportNode# ROS2 节点类fromlearning_interface.srvimportAddTwoInts# 自定义的服务接口classadderClient(Node):def__init__(self,name):super().__init__(name)# ROS2节点父类初始化self.clientself.create_client(AddTwoInts,add_two_ints)# 创建服务客户端对象服务接口类型服务名whilenotself.client.wait_for_service(timeout_sec1.0):# 循环等待服务器端成功启动self.get_logger().info(service not available, waiting again...)self.requestAddTwoInts.Request()# 创建服务请求的数据对象defsend_request(self):# 创建一个发送服务请求的函数self.request.aint(sys.argv[1])self.request.bint(sys.argv[2])self.futureself.client.call_async(self.request)# 异步方式发送服务请求defmain(argsNone):rclpy.init(argsargs)# ROS2 Python接口初始化nodeadderClient(service_adder_client)# 创建ROS2节点对象并进行初始化node.send_request()# 发送服务请求whilerclpy.ok():# ROS2系统正常运行rclpy.spin_once(node)# 循环执行一次节点ifnode.future.done():# 数据是否处理完成try:responsenode.future.result()# 接收服务器端的反馈数据exceptExceptionase:node.get_logger().info(Service call failed %r%(e,))else:node.get_logger().info(# 将收到的反馈信息打印输出Result of add_two_ints: for %d %d %d%(node.request.a,node.request.b,response.sum))breaknode.destroy_node()# 销毁节点对象rclpy.shutdown()# 关闭ROS2 Python接口启动视觉相机驱动节点发布图像数据视觉识别节点订阅图像数据并且集成了一个服务器端对象随时准备提供目标位置客户端节点我们可以认为是一个机器人目标跟踪的节点当需要根据目标运动时就发送一次请求然后拿到一个当前的目标位置。启动三个终端分别运行上述三个节点$ ros2 run usb_cam usb_cam_node_exe $ ros2 run learning_service service_object_server $ ros2 run learning_service service_object_client十、通信接口ros2中消息文件定义路径/opt/ros/jazzy/share/sensor_msgs/msg服务文件的路径/opt/ros/jazzy/share/std_srvs/srv终端查看接口的指令:ros2 interface list查看接口的的信息ros2 interface show sensor_msgs/msg/Image查看功能包里面的接口接口定义ros2 interface package learning_interface然后再用show参数来查看具体的接口内容十一、动作动作采用的是客户端/服务器模型服务器端唯一客户端可以不唯一同步通信机制案例1用小海龟的例子发布动作的方法ros2 run turtlesim turtlesim_node ros2 run turtlesim turtle_teleop_key ros2 action info /turtle1/rotate_absolute ros2 action send_goal /turtle1/rotate_absolute turtlesim/action/RotateAbsolute {theta: -1.57} ros2 action send_goal /turtle1/rotate_absolute turtlesim/action/RotateAbsolute {theta: -1.57} --feedback动作的编程服务端代码learning_action/action_move_server.pyimporttimeimportrclpy# ROS2 Python接口库fromrclpy.nodeimportNode# ROS2 节点类fromrclpy.actionimportActionServer# ROS2 动作服务器类fromlearning_interface.actionimportMoveCircle# 自定义的圆周运动接口classMoveCircleActionServer(Node):def__init__(self,name):super().__init__(name)# ROS2节点父类初始化self._action_serverActionServer(# 创建动作服务器接口类型、动作名、回调函数self,MoveCircle,move_circle,self.execute_callback)defexecute_callback(self,goal_handle):# 执行收到动作目标之后的处理函数self.get_logger().info(Moving circle...)feedback_msgMoveCircle.Feedback()# 创建一个动作反馈信息的消息foriinrange(0,360,30):# 从0到360度执行圆周运动并周期反馈信息feedback_msg.statei# 创建反馈信息表示当前执行到的角度self.get_logger().info(Publishing feedback: %d%feedback_msg.state)goal_handle.publish_feedback(feedback_msg)# 发布反馈信息time.sleep(0.5)goal_handle.succeed()# 动作执行成功resultMoveCircle.Result()# 创建结果消息result.finishTruereturnresult# 反馈最终动作执行的结果defmain(argsNone):# ROS2节点主入口main函数rclpy.init(argsargs)# ROS2 Python接口初始化nodeMoveCircleActionServer(action_move_server)# 创建ROS2节点对象并进行初始化rclpy.spin(node)# 循环等待ROS2退出node.destroy_node()# 销毁节点对象rclpy.shutdown()完成代码的编写后需要设置功能包的编译选项让系统知道Python程序的入口打开功能包的setup.py文件加入如下入口点的配置entry_points{ console_scripts: [ action_move_server learning_action.action_move_server:main, ], },客户端代码learning_action/action_move_client.pyimportrclpy# ROS2 Python接口库fromrclpy.nodeimportNode# ROS2 节点类fromrclpy.actionimportActionClient# ROS2 动作客户端类fromlearning_interface.actionimportMoveCircle# 自定义的圆周运动接口classMoveCircleActionClient(Node):def__init__(self,name):super().__init__(name)# ROS2节点父类初始化self._action_clientActionClient(# 创建动作客户端接口类型、动作名self,MoveCircle,move_circle)defsend_goal(self,enable):# 创建一个发送动作目标的函数goal_msgMoveCircle.Goal()# 创建一个动作目标的消息goal_msg.enableenable# 设置动作目标为使能希望机器人开始运动self._action_client.wait_for_server()# 等待动作的服务器端启动self._send_goal_futureself._action_client.send_goal_async(# 异步方式发送动作的目标goal_msg,# 动作目标feedback_callbackself.feedback_callback)# 处理周期反馈消息的回调函数self._send_goal_future.add_done_callback(self.goal_response_callback)# 设置一个服务器收到目标之后反馈时的回调函数defgoal_response_callback(self,future):# 创建一个服务器收到目标之后反馈时的回调函数goal_handlefuture.result()# 接收动作的结果ifnotgoal_handle.accepted:# 如果动作被拒绝执行self.get_logger().info(Goal rejected :()returnself.get_logger().info(Goal accepted :))# 动作被顺利执行self._get_result_futuregoal_handle.get_result_async()# 异步获取动作最终执行的结果反馈self._get_result_future.add_done_callback(self.get_result_callback)# 设置一个收到最终结果的回调函数defget_result_callback(self,future):# 创建一个收到最终结果的回调函数resultfuture.result().result# 读取动作执行的结果self.get_logger().info(Result: {%d}%result.finish)# 日志输出执行结果deffeedback_callback(self,feedback_msg):# 创建处理周期反馈消息的回调函数feedbackfeedback_msg.feedback# 读取反馈的数据self.get_logger().info(Received feedback: {%d}%feedback.state)defmain(argsNone):# ROS2节点主入口main函数rclpy.init(argsargs)# ROS2 Python接口初始化nodeMoveCircleActionClient(action_move_client)# 创建ROS2节点对象并进行初始化node.send_goal(True)# 发送动作目标rclpy.spin(node)# 循环等待ROS2退出node.destroy_node()# 销毁节点对象rclpy.shutdown()# 关闭ROS2 Python接口完成代码的编写后需要设置功能包的编译选项让系统知道Python程序的入口打开功能包的setup.py文件加入如下入口点的配置entry_points{console_scripts:[action_move_client learning_action.action_move_client:main,action_move_server learning_action.action_move_server:main,],},动作命令的常用操作如下$ ros2 action list # 查看服务列表 $ ros2 action info action_name # 查看服务数据类型 $ ros2 action send_goal action_name action_type action_data # 发送服务请求十二、参数参数是全局字典由键与值组成案例1在小海龟的例程中仿真器也提供了不少参数我们一起来通过这个例程熟悉下参数的含义和命令行的使用方法。启动两个终端分别运行小海龟仿真器和键盘控制节点$ ros2 run turtlesim turtlesim_node $ ros2 run turtlesim turtle_teleop_key查看参数列表当前系统中有哪些参数呢我们可以启动一个终端并使用如下命令查询$ ros2 param list参数查询与修改如果想要查询或者修改某个参数的值可以在param命令后边跟get或者set子命令$ ros2 param describe turtlesim background_b # 查看某个参数的描述信息 $ ros2 param get turtlesim background_b # 查询某个参数的值 $ ros2 param set turtlesim background_b 10 # 修改某个参数的值参数文件保存与加载一个一个查询/修改参数太麻烦了不如试一试参数文件ROS中的参数文件使用yaml格式可以在param命令后边跟dump子命令将某个节点的参数都保存到文件中或者通过load命令一次性加载某个参数文件中的所有内容$ ros2 param dump turtlesim turtlesim.yaml # 将某个节点的参数保存到参数文件中 $ ros2 param load turtlesim turtlesim.yaml # 一次性加载某一个文件中的所有参数十三、分布式通信解决无法在ubuntu中输入中文的问题参考ubuntu 20.04 安装中文输入法_如何在ubuntu中安装中文输入法-腾讯云开发者社区-腾讯云 (tencent.com)问题1xzsxzs-pc:~$ sudo apt update sudo apt install locales Hit:1 http://mirror.sysu.edu.cn/ubuntu/ noble InRelease Hit:2 http://mirror.sysu.edu.cn/ubuntu/ noble-updates InRelease Hit:3 http://mirror.sysu.edu.cn/ubuntu/ noble-backports InRelease Hit:4 http://mirror.sysu.edu.cn/ubuntu/ noble-security InRelease Get:5 https://mirrors.ustc.edu.cn/ros2/ubuntu noble InRelease [4,676 B] Hit:6 https://packages.microsoft.com/repos/code stable InRelease Get:7 http://packages.ros.org/ros2/ubuntu noble InRelease [4,676 B] Err:7 http://packages.ros.org/ros2/ubuntu noble InRelease The following signatures couldnt be verified because the public key is not available: NO_PUBKEY F42ED6FBAB17C654 Reading package lists... Done W: https://mirrors.ustc.edu.cn/ros2/ubuntu/dists/noble/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details. W: GPG error: http://packages.ros.org/ros2/ubuntu noble InRelease: The following signatures couldnt be verified because the public key is not available: NO_PUBKEY F42ED6FBAB17C654 E: The repository http://packages.ros.org/ros2/ubuntu noble InRelease is not signed. N: Updating from such a repository cant be done securely, and is therefore disabled by default. N: See apt-secure(8) manpage for repository creation and user configuration details.解决方法:国内镜像地址推荐解决raw.githubusercontent.com打不开、超时sudo curl -fsSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpgros2 node info /node_object_webcam---晓凡 2026年8月15日于南宁书·········································································································································

相关新闻

C语言文件解析实战:从字节序到BMP解析的底层原理

C语言文件解析实战:从字节序到BMP解析的底层原理

1. 从“黑盒”到“白盒”:文件解析的本质是什么?刚入行那会儿,我对“文件解析”的理解,就是调用几个库函数,把文件内容读出来,然后按格式处理一下。直到有一次,我接手一个遗留项目,需…

2026/10/14 12:55:48 阅读更多 →
yfinance完整指南:5分钟搞定免费股票数据获取的终极方案

yfinance完整指南:5分钟搞定免费股票数据获取的终极方案

yfinance完整指南:5分钟搞定免费股票数据获取的终极方案 【免费下载链接】yfinance Download market data from Yahoo! Finances API 项目地址: https://gitcode.com/GitHub_Trending/yf/yfinance 你是不是经常为了拿一份股票历史数据,要么忍痛买…

2026/10/13 4:25:55 阅读更多 →
双均线策略回测优化:Python实战把收益从80%做到645%

双均线策略回测优化:Python实战把收益从80%做到645%

导读:基于 AAPL 2015-2024 十年真实日线(2515 根 K 线)跑通 backtesting.py 双均线回测与参数优化,默认收益 80.79%、优化后 644.72%,数据全部真实。含选型对比、指标解读、部署双路径与踩坑地图。 速览内容项目backte…

2026/9/26 2:48:59 阅读更多 →

最新新闻

SSM+Django混合架构在鲜花电商系统的实践与优化

SSM+Django混合架构在鲜花电商系统的实践与优化

1. 项目概述:当鲜花遇上全栈技术 这个看似传统的网上花店系统,实际上是一个融合了Java企业级开发与Python快速迭代优势的复合型项目。SSM(SpringSpringMVCMyBatis)作为后端核心框架,提供了稳定的订单处理和库存管理能力…

2026/10/14 12:55:56 阅读更多 →
智能数据分析平台有哪些?五个主流平台的数据模型与选型对比

智能数据分析平台有哪些?五个主流平台的数据模型与选型对比

摘要: 面对多样化的企业数据分析诉求,不同分析平台在底层数据组织、模型设计与分析颗粒度上存在显著差异。本文对比 GrowingIO、FineBI、Tableau、Power BI 与 Quick BI 五个平台的技术架构特征、核心计算模型、协同方式及部署要求,结合多源数…

2026/10/14 12:55:56 阅读更多 →
视觉重定位:层级场景坐标回归如何拆解分类与回归难题

视觉重定位:层级场景坐标回归如何拆解分类与回归难题

1. 视觉重定位到底在解决什么问题视觉重定位这个词,第一次接触的人容易把它和SLAM搞混。SLAM是"一边走一边建图,同时知道自己在哪里",而重定位是"我手里有一张图,或者我正站在某个位置拍了一张照片,我要…

2026/10/14 12:55:56 阅读更多 →
SR-IOV网卡虚拟化:硬件级VF分流原理与生产落地实践

SR-IOV网卡虚拟化:硬件级VF分流原理与生产落地实践

1. 项目概述:为什么一张网卡要“分身”成几十个独立网口?你有没有遇到过这种场景:一台服务器上跑着十几个虚拟机,每个都要直连物理网络,低延迟、高吞吐、零丢包——结果发现宿主机的网卡成了瓶颈?CPU软中断…

2026/10/14 12:55:56 阅读更多 →
SpringBoot+Vue党员教育管理系统开发实践

SpringBoot+Vue党员教育管理系统开发实践

1. 项目背景与核心价值 党员教育和管理系统是当前基层党组织数字化转型的重要工具。这个基于SpringBootVue的全栈项目,完美契合高校计算机专业毕业设计的选题要求,同时具备实际应用价值。我在参与某机关单位党建系统升级时,深刻体会到这类系统…

2026/10/14 12:55:56 阅读更多 →
podofo-0.9.5-vs2013-x86:老项目里PDF解析库的集成与避坑指南

podofo-0.9.5-vs2013-x86:老项目里PDF解析库的集成与避坑指南

简介:Podofo 0.9.5 在 Visual Studio 2013 下编译生成的 x86 预编译库,面向需要在 Windows 平台读写、编辑 PDF 文件的 C 开发者。Podofo 是一套开源 PDF 处理库,支持元数据读取、页面渲染、文本抽取、文档生成等常用能力,本包省去…

2026/10/14 12:54:56 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 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/13 22:01:27 阅读更多 →
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/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练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/14 7:53:34 阅读更多 →