自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

白鸟无言的博客

弃我去者,昨日之日不可留;乱我心者,今日之日多烦忧。

  • 博客(56)
  • 资源 (6)
  • 收藏
  • 关注

原创 FAST-LIO公式推导

原代码对新手似乎不是很友好,所以用Eigen重新实现了Fast-LIO的核心功能https://gitee.com/ghowoght/simple_lio本文中变量命名与Fast-LIO论文中不尽相同,比如为了便于阅读而忽略了很多上下标,如有误解之处,敬请指正。

2022-09-06 19:53:59 4243 19

原创 轨迹优化 | Minimum-jerk

使用路径规划可以得到一系列的路径点,如下图所示有5个路径点,这条路径是很曲折的,这不利于机器人的移动,试想一个机器人直接沿着这条路径进行移动,当到达一个路径点后速度减到零,原地旋转,指向下一个路径点,再继续移动,这不仅智障,而且浪费能量。于是我们就想,能不能规划出一条轨迹,使机器人能够在每一个路径点处能够平滑过渡,从而表现得机灵一点。这就是轨迹规划问题。路径规划得到的路径点轨迹优化得到的轨迹(橙色)二次规划(Quadratic Programming, QP)由于轨迹规划问题

2021-12-11 21:19:42 5038 5

原创 Mahony姿态解算算法详解

本文将介绍Mahony姿态解算算法,不涉及磁力计部分,程序源代码见:https://x-io.co.uk/open-source-imu-and-ahrs-algorithms/姿态的表示方法欧拉角物体姿态最直观的表示方法就是欧拉角,一个坐标系相对于另一个坐标系的转动,可以通过围绕三个正交轴的转动来表示,这三个转动角被称为一组欧拉角。常用的欧拉角组是横滚角(rollrollroll,ϕ\phiϕ)、俯仰角(pitchpitchpitch,θ\thetaθ)、偏航角(yawyawyaw,ψ\psiψ),

2021-11-28 17:14:00 6961 4

原创 路径规划 | 图搜索算法:JPS

JPS算法全称为Jump Point Search,也就是跳点算法,可以视为A*算法的一种改进算法,它保留了A*算法的主体框架,区别在于:A*算法是将当前节点的所有未访问邻居节点加入openlist,而JPS则是使用一些方法将有“价值”的节点加入openlist,具体方法就是本文的内容。以下面两图为例,简单说说JPS的改进效果。两图中深蓝色的点表示在openlist中的节点,淡蓝色表示已经探索过的节点。可以观察到JPS算法的openlist最多只有4个节点,而A*算法的openlist中则有非常多的节点。

2021-04-22 17:00:28 7774 7

原创 路径规划 | 随机采样算法:PRM、RRT、RRT-Connect、RRT*

基于图搜索的路径规划算法主要用于低维度空间上的路径规划问题,它在这类问题中往往具有较好的完备性,但是需要对环境进行完整的建模工作,在高维度空间中往往会出现维数灾难。为了解决这些问题,本文将介绍基于随机采样的路径规划算法。这类算法适用于高维度空间,它们以概率完备性(当时间接近无限时一定有解)来代替完备性,从而提高搜索效率。概率路图算法(Probabilistic Road Map, PRM)PRM算法首先使用随机采样的方式在环境中建立路径网络图,将连续的空间转换为离散的空间,然后在路径网络图上进行路径规划

2021-02-18 09:54:13 5754 5

原创 路径规划 | 图搜索算法:DFS、BFS、GBFS、Dijkstra、A*

地图数据常常可以用图(Graph)这类数据结构表示,那么在图结构中常用的搜索算法也可以应用到路径规划中。本文将从图搜索算法的基本流程入手,层层递进地介绍几种图搜索算法。首先是两种针对无权图的基本图搜索算法:深度优先搜索(Depth First Search, DFS)、广度优先搜索(Breadth First Search, BFS)。它们的区别在于openlist(后面介绍)所选用的数据结构类型不同,前者使用栈,后者使用队列;之后引入一种启发式搜索算法:贪婪最佳优先算法(Greedy Best Firs

2021-01-25 13:28:33 6861

原创 语音信号处理 | 傅里叶变换、短时傅里叶变换、小波变换、希尔伯特变换、希尔伯特黄变换

在信号处理领域,存在诸多变换,比如标题中的五个变换。本文将对这五个变换进行介绍和比较。在开始之前,我们需要先理清什么是平稳信号,什么是非平稳信号。我们知道,自然界中几乎所有信号都是非平稳信号,比如我们的语音信号就是典型的非平稳信号。那么何谓平稳信号和非平稳信号呢?一个通俗的理解即,平稳信号在不同时间得到的采样值的统计特性(比如期望、方差等)是相同的,非平稳信号则与之相反,其特性会随时间变化。在信号处理中,这个特性通常指频率。通常傅里叶变换只适合处理平稳信号,对于非平稳信号,由于频率特性会随时间变化,为了

2020-06-25 21:06:10 21978 16

原创 语音信号处理 | 基于卡尔曼滤波的语音增强算法

文章目录1.概述2.卡尔曼滤波原理被估计的信号离散卡尔曼滤波算法参数选择3.基于卡尔曼滤波的语音增强算法语音模型分析参数确定4.程序实现语音数据的导入、加噪与分帧卡尔曼滤波器参数初始化卡尔曼滤波过程结果可视化5.运行结果与结果分析运行结果结果分析1.概述语音增强算法可从信号输入的通道数上分为单通道的语音增强算法与多通道的语音增强算法。单通道语音系统在实际应用中较为常见,如电话,手机等。这种情况下语音与噪声同时存在一个通道中 ,语音信息与噪声信息必须从同一个信号中得出。一般这种语音系统要求噪声比较平稳,以

2020-05-09 21:24:17 12558 6

原创 Sophus使用记录

/ Sophus::SO3可以直接从旋转矩阵构造// 亦可从旋转向量构造// 或者四元数// 从旋转矩阵和平移向量构造// 从四元数构造。

2023-09-16 21:31:31 367 1

原创 UWB定位的两种解法

本文将介绍两种利用标签与基站的距离信息求解标签位置的方法,分别是线性最小二乘和非线性优化。

2023-06-19 18:47:35 971

原创 C++/Python文件读写

为了方便开发,写了一个文本读写程序,能够读写二进制/文本格式的文件,程序只由一个头文件组成,可以很方便地加入到现有程序。

2022-07-31 11:38:31 796 1

原创 Windows的C++开发环境搭建(基于vcpkg+CMake)

一直以来,作者都认为在windows中使用cmake开发C++是一件很难搞的事,windows不像linux那样能方便地对各种C++软件包进行管理,直到发现了vcpkg这个包管理器,才终于使我的windows C++开发体验好了起来。本文使用vcpkg作为包管理器,cmake作为项目的构建工具,在VS2022/VSCode等IDE或编辑器上搭建C++开发环境。.....................

2022-06-17 15:02:03 4836 4

原创 嵌入式部分BUG与解决方法记录(不定期更新)

嵌入式开发过程中遇到的一些BUG和解决方法

2022-06-01 14:20:56 300

原创 Ceres-Solver使用指南

使用Ceres求解非线性优化问题一般包含如下步骤:构建cost function构建待求解的优化问题配置求解器参数并进行求解求根求解12(10−x2)\frac{1}{2}(10-x^2)21​(10−x2)的根:#include <iostream>#include <ceres/ceres.h>/* 1.构建代价函数 */class CostFunc{public: CostFunc()=default; template<type

2022-05-22 20:41:55 1355 2

原创 FRP + NoMachine远程桌面开发指南

在FRP内网穿透(远程ssh终端+rdp桌面配置)中介绍了如何远程使用FRP+RDP进行外网远程桌面访问,但是实测很卡(在两台Ubuntu主机上进行了测试,云服务器有8M带宽),所以对这种远程桌面访问方法不是很满意。最近接触到一个新的远程桌面软件,相较于之前使用的方法简直不要好太多。NoMachine也是一个桌面共享软件,支持Linux/Windows/MacOS/Android等系统,对于嵌入式平台,如Jetson Nano/树莓派等都有很好的支持。实测在局域网下能够非常流程的远程显示,同时操作非常便捷

2022-04-16 11:01:48 5629 2

原创 KD-Tree详解: 从原理到编程实现

在点云操作中,常常需要从大量点云中找到距离输入点最近的点,如果使用线性搜索,逐个判断与输入点的距离,那么搜寻耗时将会与点云规模呈线性上升趋势,时间复杂度为O(N)O(N)O(N)。显然这不是我们想看到的,在数据结构与算法中,对一维数据常用的搜索方法是二分查找,时间复杂度为O(logN)O(logN)O(logN),它本质上是构建一棵二叉搜索树,以空间换取时间。而KD-Tree(K-Dimension Tree),也就做K维树,则可以看做是二叉树在K维空间的扩展,它的搜索效率也能近似达到O(logN)O(lo

2022-04-08 20:12:14 5539 1

原创 FTP实现Ubuntu与Windows文件互传

FTP实现window与ubuntu文件互传本文将介绍如何使用FTP实现Ubuntu和Windows间的文件互传,基本方法是在Ubuntu主机上安装FTP服务端,在其他设备(Windows)上安装FTP客户端。以下是详细内容在Ubuntu上安装FTP Server参考:https://ubuntu.com/server/docs/service-ftp安装vsftpdsudo apt install vsftpd编辑/etc/vsftpd.conf来对FTP Server进行配置:sudo

2022-03-03 14:58:18 1725

原创 FRP内网穿透(远程ssh终端+rdp桌面配置)

硬件配置内网主机:ubuntu20.04 LTS 桌面版外网设备:windows笔记本云服务器:ubuntu20.04 serverFRP内网穿透(远程ssh终端+rdp桌面配置)使用FRP实现内网穿透的流程很简单,就是位于内网的主机将远程ssh终端和远程rdp桌面的端口映射到云服务器的端口,在外网设备上使用云服务器的公网IP+映射的端口即可访问内网的台式主机,如下图:#mermaid-svg-fedxd4bls7sggg63 {font-family:"trebuchet ms",verd

2022-02-24 20:27:14 4061

原创 使用Python调用C++库(基于pybind11)

本文将用C++编写一个简单的向量运算库,然后使用pybind11将其封装为python包,再使用python调用。C++程序使用CMake构建。使用C++调用Python模块见:另一篇博客安装pybind11使用pybind11可以将使用C++11以上标准编写的函数、类或者lambda表达式封装为python包。安装pytestpip3 install pytest下载pybind11git clone https://github.com/pybind/pybind11.git编译安装

2022-01-28 13:12:24 4354 4

原创 信号处理 | AR模型与Levinson-Durbin递推

模型形式由高斯白噪声驱动的全极点模型表示如下:e(n)=a0x(n)+a1x(n−1)+⋯+apx(n−p)=∑k=0pakx(n−k)\begin{aligned}e(n)&=a_0x(n)+a_1x(n-1)+\cdots+a_px(n-p)\\&=\sum_{k=0}^pa_kx(n-k)\end{aligned}e(n)​=a0​x(n)+a1​x(n−1)+⋯+ap​x(n−p)=k=0∑p​ak​x(n−k)​其中:e(n)e(n)e(n)为高斯白噪声,噪声方差为

2022-01-11 11:18:36 1874 2

原创 信号处理 | 维纳滤波推导

首先给出互相关函数定义:rsx(m)=E[s(n)x(n−m)]r_{sx}(m)=E[s(n)x(n-m)]rsx​(m)=E[s(n)x(n−m)]以及自相关矩阵定义:Rxx(i,j)=E[x(n−i)x(n−j)]R_{xx}(i,j)=E[x(n-i)x(n-j)]Rxx​(i,j)=E[x(n−i)x(n−j)]开始推,令信号模型为:s^(n)=h(n)∗(s(n)+v(n))=h(n)∗x(n)=∑i=0Mh(i)x(n−i)\begin{aligned}\hat s(n)

2021-12-25 22:01:54 1797

原创 ROS开机自启设置

使用robot_upstart功能包即可实现节点的开机自启安装功能包安装robot_upstart功能包,本文使用的Ubuntu20对应的ROS版本为noeticsudo apt-get install ros-noetic-robot-upstart如果使用的是Ubuntu18,则还需要安装setprivsudo apt-get install setpriv自启动设置设置自启,以下命令即可设置<package_name>功能包下的<launch_file>.la

2021-10-02 17:07:33 1205 1

原创 使用C++调用Python模块(Linux)

工程配置本文使用的项目构建工具为CMake,使用FindPython工具在CMake工程中找到Python库,注意CMake最低版本为3.12,参考:https://cmake.org/cmake/help/latest/module/FindPython.html创建call_python.cpp文件,程序内容在下节详细说明。CMakeLists.txt文件如下:cmake_minimum_required(VERSION 3.12)project(CallPython)find_packag

2021-09-30 11:36:44 3438 5

原创 机器人自主导航 | ROS与移动底盘通信

本实验是实现机器人自主导航的重要步骤,对于轮式机器人,可以通过在底盘加装轮式里程计的方式来获得机器人的速度数据,这些数据可以用来辅助机器人实现自主定位,同时机器人还需要将控制指令发送给移动底盘,实现自主控制,本实验就将实现ROS与移动底盘的通信。实验环境软件环境:Ubuntu18.04 + ROS melodic、Windows + Keil 5、VSCode硬件环境:Jetson Nano(以下称为ROS端)、小车(以下称为STM32端)实验内容ROS与STM32的通信流程如图所示主要

2021-07-08 11:11:48 3931 3

原创 ROS话题发布和订阅节点的C++&Python实现

本文将分别使用C++和Python来实现话题发布者和订阅者,首先创建一个功能包,命名为topic_pub_sub,添加roscpp,rospy等依赖项。C++实现创建话题发布者在该功能包的src目录下创建publisher.cpp文件,添加如下程序:#include <iostream>#include <sstream>#include <ros/ros.h> // 该文件包含了ROS系统中大部分常用的头文件#include <std_msg

2021-07-02 17:11:48 4402 3

原创 使用VSCode进行远程C++开发

首先在VSCode中安装Remote - WSL插件,重启VSCode,如下图所示,连接WSL如下图所示即为连接成功,这时工作区里没有任何内容,可以选择打开一个文件夹作为工作区此时会弹出对话框,找到要打开的文件夹,点击确定即可(注:图中/mnt/c即表示Windows中的C盘路径)下面用一个简单的CMake工程作为示例,演示VSCode的开发流程。在开始之前,要继续给VSCode安装一些插件,如图首先在src路径下新建一个helloworld.cpp文件,内容如下:#include

2021-07-02 12:54:09 2211 4

原创 Ubuntu20安装ROS noetic

Ubuntu20对应的ROS版本为ROS noetic1. 打开Software&Updates,勾选main、universe、restricted、multiverse这四项。2. 添加ROS软件源,打开终端,执行以下指令:sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'3. 添加

2021-06-13 18:07:18 824

原创 路径规划 | 随机采样算法:Informed-RRT*

在文章路径规划 | 随机采样算法:PRM、RRT、RRT-Connect、RRT*中,介绍了具备渐近最优性的RRT*算法。随着采样点数的增多,RRT*算法的规划结果会逐渐收敛到最优。但是可以观察到,RRT*算法是对自由空间进行均匀采样,搜索树上会生成很多冗余的分支,我们可以对RRT*算法的采样过程进行改进。Informed-RRT*算法就是对RRT*的采样过程进行优化得到的算法,它采用一个椭圆采样方式来代替全局均匀采样,如图:接下来介绍椭圆采样区域的表示方式标准椭圆方程为:x2a2+y2b2=

2021-05-14 16:05:48 6886

原创 ROS多机通信

配置主从机IP地址分别使用sudo vi /etc/hosts在主从机的/etc/hosts文件中添加下面的代码,其中pi是从机的用户名,esdc是主机的用户名。ip要相应的进行更改,可以使用ifconfig命令查看192.168.0.100 pi192.168.0.101 esdc编辑ROS_HOSTNAME和ROS_MASTER_URI分别编辑主从机的~/.bashrc文件vi ~/.bashrc从机(机器人端):export ROS_HOSTNAME=piexport R

2021-03-27 09:53:02 471 1

原创 移动机器人中地图的表示

在学习算法之前,首先要做的是理解数据,所以本专栏在开始介绍运动规划算法前,首先介绍一下地图的数据形式。地图有很多种表示形式,在移动机器人中比较常用的是尺度地图、拓扑地图、语义地图尺度地图:具有真实的物理尺度,如栅格地图、点云地图,常用于SLAM、小场景路径规划拓扑地图:只包含不同位置的连通关系和距离,不具备真实的物理尺度,常用于大规模的机器人路径规划语义地图:在尺度地图上添加标签,常用于人机交互我们平时接触比较多的应该是语义地图,对于人类来说,根据语义地图移动到目的地是轻而易举的,但是对机器

2021-01-25 13:38:49 1491

原创 搭建STM32开发环境

安装keil点击这里下载安装最新版的keil破解以管理员身份运行keil,打开File -> License Management复制CID,如下:运行keygen2032.exe,修改CID、Target,点击Generate,复制生成的License ID Code(LIC),如下:返回之前的许可证管理界面,粘贴上一步生成的LIC,点击Add LIC即可安装相关芯片的软件包打开Pack Installer打开之后它会先加载一段时间,当右下角加载

2021-01-04 17:46:38 1223

原创 Ubuntu18.04安装Neo4j

之前搞比赛有用到Neo4j,随手做了些记录,在这里分享一下安装JDK我使用的Nej4j要求JDK11以上,不然会报错:ERROR! Neo4j cannot be started using java version 1.8.0_261. * Please use Oracle(R) Java(TM) 11, OpenJDK(TM) 11 to run Neo4j.* Please see https://neo4j.com/docs/ for Neo4j installation instruc

2020-12-28 18:52:48 927

原创 Git操作详解以及在VScode中的使用

我们先理清Git和Github的区别,Git是个版本控制的工具,用来管理本地的代码工程,它可以记录代码内容的变更;而Github是一个代码托管平台,我们可以使用Git将本地代码上传到Github。那为什么要学Git,上面说到Git是一个版本控制工具,它可以记录代码内容的变更,方便我们对项目的管理,它主要有以下的用途:代码备份举一个简单的例子,写好一个程序后,想要再加一个新功能,添加这个新功能需要对很多个文件进行改动。但是添加完这个功能后发现,这个新功能是个坑,然后就会想着回退到上一个版本,这时候如

2020-11-06 20:35:42 7883

原创 语音信号处理 | Python实现端点检测

由于项目需要,我要使用Python对语音进行端点检测,在之前的博客使用短时能量和谱质心特征进行端点检测中,我使用MATLAB实现了一个语音端点检测算法,下面我将使用Python重新实现这个这个算法,并将其封装到VAD类中,如下是运行结果:软件环境Python3.8、scipy、pyaudio、matplotlib程序matlab程序转换到python还是挺容易的,VAD.py程序如下:#!/usr/bin/python3# -*- coding: utf-8 -*-import numpy

2020-10-28 15:45:04 4215 14

原创 STM32部分BUG及解决方法记录(不定期更新)

编译使用CubeMX生成的代码时报错:Error: L6218E: Undefined symbol HAL_PWREx_DisableUCPDDeadBattery (referred from stm32g4xx_hal_msp.o).解决方法:将HAL_PWREx_DisableUCPDDeadBattery改为HAL_PWREx_DisableUSBDeadBatteryPD使用LL库生成的SPI代码时,程序卡死在while(LL_SPI_IsActiveFlag_RXNE(ICM20.

2020-09-18 18:24:55 3368 3

原创 TCP实时图像传输

之前尝试过使用UDP进行图像传输,而UDP协议要求包小于64K,对于较大的图像,需要使用分片压缩的方式进行传输,操作较复杂,同时不能保证图片的每一部分都能够正确传输。详见:UDP实时图像传输,UDP实时图像传输进阶篇——1080P视频传输TCP对于传输的数据大小没有限制,同时TCP在发送失败时还有重传机制,可以保证传输的可靠性,所以本文将使用TCP协议来进行图像的实时传输。基本流程TCP连接过程见后面的程序,一般服务端创建一个套接字,绑定本地IP,开启监听,然后客户端也创建一个套接字,连接服务端就可以

2020-08-28 14:55:22 20006 11

原创 ROS与STM32通信

ROS与STM32通信2020.8.1主要内容制作ROS包,将控制命令传给STM32,并将接收到的数据作为话题进行发布STM32接收数据并将姿态数据传回给ROS接收:期望角速度、期望线速度返回:实际角速度、实际线速度STM32端ROS端之前运行的ROS项目都是在终端编译,用vim或者gedit修改代码,很不方便,函数跳转查看都没办法实现。所以今天先安装一个IDE试试ROS官网上有一个不同IDE的对比文章,网址我选择VScode...

2020-08-03 22:51:23 9978 8

原创 使用VScode搭建ROS开发环境

俗话说"工欲善其事必先利其器",之前在Ubuntu上运行的ROS项目都是用vim或者gedit编写和修改代码,然后在终端编译运行,很不方便,函数跳转查看都没办法实现。所以今天我决定找一个方便的开发工具,也就是找一个像Windows上的VS那样的集成开发工具(IDE),ROS官网上有一个不同IDE的对比文章,网址在这里我选择使用VScode.下载安装好VScode后,在扩展栏安装C/C++,CMake,CMake Tools,Code Runner,ROS(deprecated),Chinese 这些插件.

2020-08-02 20:39:36 23541 24

原创 ROS报错记录及解决方法(不定期更新)

ROS常见报错和解决方法记录

2020-07-31 20:40:02 5157 2

原创 视觉SLAM | 在ROS上运行ORB-SLAM2

本文直接使用的github上的orb_slam_2_ros实现在ROS上运行ORB-SLAM2,这个ros包能够得到相机的位姿以及稀疏点云,而且删掉了对Pangolin的依赖,进行可视化时要用RViz。运行环境硬件环境:Intel Up2、Realsense D435i软件环境:Ubuntu18.04、ROS melodic、librealsense2.29、realsense-ros2.2.9安装依赖项安装Eigen3这是矩阵运算用到的库,下载地址: http://eigen.tuxfam

2020-07-31 20:25:42 6707 10

UDP实时图像传输Plus.zip

本资源是 https://download.csdn.net/download/qq_42688495/11872026 的Plus版,实现了1080P视频的传输,包含两个C#窗体项目,一个是图像发送端,一个是图像接收端,具体说明见博客 https://blog.csdn.net/qq_42688495/article/details/106110338

2020-05-13

KalmanFilter.zip

基于卡尔曼滤波的语音增强算法的MATLAB程序,内含程序、语音数据、噪声数据, 具体说明见 https://blog.csdn.net/qq_42688495/article/details/106027847

2020-05-12

基于积分法和欧拉恒等式法的圆周率计算C++程序.zip

多核课程的一次小作业,要求分别用积分法和欧拉恒等式法实现圆周率的计算,并用OMP进行加速,本资源中有两个.cpp文件,积分法采用C++自带的数据类型进行计算,计算精度可以达到小数点后10位(运行时间在可以接受的范围内),欧拉恒等式法采用数组保存结果的每一位数字,精度可以达到数百位或者上千位。

2020-04-01

StudentsManageSystem.zip

这是一次多核课程小作业的解决方案 问题描述:编写一个多线程注册验证程序,要求通过对话框输入若干人的学号和姓名,并存入列表中作为注册记录。然后用户输入一个学号,程序能通过多线程的方式与注册记录比对来验证其是否已注册,并弹出提示框。

2020-03-24

UDP实时图像传输.zip

本资源内有两个C#窗体项目,一个是图像发送端,一个是图像接收端。发送端使用EmguCV读取摄像头图像,压缩为JPEG格式后使用UDP发送至接收端,接收端接收图像并进行显示。注释丰富,另外还有详细的介绍博客

2019-10-17

2013年国赛简易旋转倒立摆装置源代码

这是今年寒假电赛培训时做的倒立摆控制代码,使用CubeMX生成配置工程,控制核心是stm32f401,主要控制代码在control.c文件中,机械结构参考平衡小车之家的倒立摆套件

2019-01-28

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除