[AAAI'18] SOMA: un marco para comprender el cambio en entornos cotidianos utilizando mapas de objetos semánticos

Resumen

Comprender los cambios asociados con la dinámica de las personas y los objetos en los entornos cotidianos es un problema desafiante, y también es un requisito clave para los robots de servicios móviles automatizados en muchas aplicaciones.
En este artículo, proponemos un nuevo marco de mapeo semántico que puede mapear la ubicación de objetos, áreas de interés y el movimiento de personas a lo largo del tiempo. Nuestros objetivos para usar este marco son dobles: (1) queremos permitir que los robots razonen sobre su entorno en términos de semántica, espacio y tiempo, y (2) queremos que los investigadores puedan investigar y estudiar en el contexto de escenarios de robots a largo plazo Problema Entorno dinámico
Los resultados experimentales demuestran la efectividad del marco, que se ha implementado en el entorno real durante varios meses.

 

Introducción

Por ejemplo, cuando se prepara una mesa para la cena, una persona saca platos, tazas, cuchillos y tenedores de los gabinetes y cajones de la cocina, y luego los coloca sobre la mesa del comedor.
Sin embargo, debido a su capacidad de percepción limitada y vista centrada en sí mismo, el robot solo puede observar parcialmente estos eventos. Mientras observa este tipo de escena, el robot móvil solo puede percibir el movimiento de una persona en el espacio y la aparición y desaparición de objetos en diferentes lugares en diferentes momentos. Dado que el robot solo percibe una instantánea de eventos potenciales, necesita razonar sobre lo que ve, cuándo y dónde inferir qué hacer a continuación.

Que vi Donde Cuando Es un problema indispensable en muchas tareas robóticas, como encontrar objetos y monitorear las actividades humanas (Galindo et al., 2008; Kostavelis y Gasteratos, 2015).
El gráfico del entorno semántico puede vincular la información semántica sobre el mundo (como objetos y personas) a la representación del espacio-tiempo, proporcionando así respuestas a estas preguntas.
Por esta razón, son un recurso importante en muchas tareas de robot. Permiten a los robots autónomos interpretar (o moler) instrucciones avanzadas de la misión; planificar y explicar cómo completar misiones en un entorno determinado; y comunicar observaciones a los humanos.
Sin embargo, la construcción, el mantenimiento y el uso de tales mapas en entornos dinámicos diarios plantea algunos desafíos: (i) las observaciones de los datos del sensor deben interpretarse a nivel semántico; (ii) la interpretación debe integrarse en un mapa coherente; ( iii) El mapa debe actualizarse constantemente para reflejar los cambios dinámicos del entorno (mucho tiempo); (iv) La consulta del mapa semántico debe proporcionar información relacionada con la tarea considerando restricciones semánticas y / o espaciotemporales.

En el pasado, muchos métodos de mapeo semántico en visión por computadora y robótica resolvieron los desafíos interpretando e integrando datos de varios sensores (i) y (ii); estos métodos suponían que el entorno era estático, por lo que el foco estaba en estructuras grandes ( Tales como habitaciones, paredes y muebles).

En este trabajo, respondemos a los desafíos (ii), (iii) y (iv). Con respecto al desafío (i), utilizamos y adaptamos el último método de percepción del robot, que proporciona una interpretación semántica intermedia a partir de los datos del sensor.
Nuestro trabajo se centra en los aspectos dinámicos del entorno diario, incluidas las diferentes posiciones de los objetos, las áreas de interés que pueden cambiar con el tiempo y el movimiento de las personas.
Con este fin, estudiamos cómo los objetos, las regiones y los movimientos
pueden indexar a las personas por tiempo y espacio para que las actualizaciones y consultas de mapas se puedan manejar de manera eficiente.

Para enfrentar estos desafíos, diseñamos, desarrollamos y evaluamos SOMA; un marco para construir, mantener y consultar gráficos de objetos semánticos. En nuestro trabajo, el gráfico de objetos semánticos modela la información semántica y espacial sobre objetos, regiones y trayectorias de agentes a lo largo del tiempo. Por lo tanto, pueden proporcionar respuestas a las siguientes preguntas: ¿qué, dónde y cuándo?

El marco propuesto permite a los robots autónomos utilizar los últimos métodos de percepción para construir y actualizar automáticamente (o modificar) mapas basados ​​en observaciones y consultarlos en el programa de control del robot.
Al mismo tiempo, los ingenieros e investigadores del conocimiento pueden editar y consultar mapas para proporcionar conocimiento del dominio y estudiar problemas de investigación a largo plazo. Es importante tener en cuenta que cuando diseñamos SOMA, consideramos estos dos grupos de usuarios diferentes: robots autónomos e investigadores. Cuando los robots pueden agregar sus propias observaciones y consultar mapas para tomar decisiones, los investigadores pueden modelar y / o analizar el entorno y extraer datos espacio-temporales recopilados por sistemas autónomos. Este último permite a los investigadores construir y aprender nuevos modelos sobre dinámicas (a largo plazo) en entornos cotidianos.

En este trabajo, nos enfocamos en mapear objetos, áreas y humanos bajo configuraciones dinámicas y de largo plazo.
La Tabla 1 resume los conceptos de alto nivel utilizados en SOMA. Desde un punto de vista abstracto, nuestro método es similar a otros trabajos porque utiliza conceptos similares para representar entidades en el entorno.
Conceptos como objetos, regiones y pistas son naturaleza y sentido común.
Sin embargo, con el tiempo, nuestro enfoque difiere enormemente en la forma de almacenamiento, indexación, vinculación y consulta, interpretación y conceptos semánticos.
Las principales contribuciones de este trabajo son las siguientes:
• Un marco de mapeo semántico de código abierto (SOMA) diseñado específicamente para escenarios dinámicos a largo plazo;
• Arquitectura de representación de conocimiento multicapa, utilizando enlaces de índice espacio-temporales para observar, explicar y conceptos semánticos;
• Utilizado para Mecanismo adaptativo para poner a tierra objetos en datos de sensores y un conjunto de interfaces (extensibles) para actualizar gráficos de objetos semánticos a lo largo del tiempo:
• Interfaz de consulta para recuperar y procesar gráficos de objetos semánticos usando restricciones semánticas y espacio-temporales. Objetos:
• Estudios de casos a largo plazo de SOMA y gráficos de objetos semánticos en entornos del mundo real.

 

 

2. Trabajo relacionado

Los investigadores propusieron un método estandarizado para representar y evaluar gráficos semánticos.
Definen el mapeo semántico como un proceso incremental que mapea información relevante del mundo (es decir, información espacial, eventos temporales, temas y acciones) a la descripción formal apoyada por el motor de inferencia.
Nuestro trabajo utiliza un método similar: mapeamos gradualmente la información espacio-temporal sobre objetos, personas y regiones, y utilizamos consultas de bases de datos estandarizadas y mecanismos de razonamiento especializados para consultar esta información.

Varios métodos de mapeo semántico se enfocan principalmente en la interpretación e integración de datos de varios sensores, incluyendo telémetros láser, cámaras estéreo y monoculares, y cámaras RGB-D.

La mayoría de estos métodos asumen que el entorno es estático, por lo que el foco está en el mapeo de grandes estructuras estáticas, como habitaciones, paredes y muebles.
Nuestro trabajo difiere de estos métodos de dos maneras. Primero, no desarrollamos métodos para interpretar datos de sensores, sino que establecemos y adaptamos los métodos de percepción de robots más avanzados (Aldoma et al., 2012; Wohlkinger et al., 2012). Segundo, nos enfocamos en el mapeo, la actualización y la dinámica Consulta gráfica semántica en el entorno.

Algunos métodos de mapeo semántico exploran este tema desde diferentes ángulos.
Se centran en el diseño de la ontología y conectan la ontología con la representación del entorno subyacente (Zender et al., 2008; Tenorth et al., 2010).
Por ejemplo, el trabajo de (Pronobis y Jensfelt 2012) muestra cómo integrar diferentes modalidades de sensores y funciones de inferencia ontológica para inferir categorías de habitaciones semánticas.
El uso de tecnología web semántica para representar mapas ambientales también permite a los robots intercambiar información con otras plataformas a través de la nube (Riazuelo et al., 2015).
Creemos que este tipo de métodos complementan nuestro trabajo porque las categorías semánticas en nuestro marco pueden integrarse y asociarse con las ontologías existentes. Por ejemplo, en (Young y otros 2017a), los supuestos relacionados con los objetos están asociados con bases de conocimiento semántico estructuradas (como DBpedia1 y WordNet) (Fellbaum 1998)

(Elfring et al., 2013) propusieron un marco para poner a tierra objetos en datos de sensores probabilísticamente. En general, nuestro marco no hace suposiciones sólidas sobre cómo los objetos observados por el robot están conectados a tierra.
En cambio, la base del objeto debe ser especificada o aprendida por el usuario en la capa de interpretación del marco (ver sección 3.3).

(Bastianelli et al., 2013) propusieron un método interactivo en línea y una evaluación de la construcción de gráficos semánticos (Gemignani et al., 2016). Del mismo modo, nuestro trabajo admite el marcado de multitud de objetos encontrados (ver sección 3.5). Sin embargo, nuestro método está fuera de línea y está diseñado para funcionar de forma asíncrona.

Nuestro trabajo es similar a (Mason y Marthi 2012) y (Herrero, Castano y Mozos 2015), ambos dedicados a la consulta semántica de mapas en entornos dinámicos.
(Herrero, Castano y Mozos, 2015) propusieron un método basado en una base de datos relacional que almacena información semántica sobre objetos, habitaciones y las relaciones necesarias para la navegación por robots móviles.
Nuestro método es similar porque también considera objetos y áreas en el espacio (pero no solo habitaciones).
Sin embargo, en nuestro método, la relación entre objetos y regiones
no tiene que modelarse explícitamente, sino que puede inferirse mediante el razonamiento espacial.
(Mason y Marthi 2012) Centrarse en la consulta semántica y la detección de cambios de objetos. En el trabajo, los objetos representan áreas ocupadas geométricamente diferentes en un plano, y sus posiciones se describen en el marco de referencia global.
En cambio, nuestro trabajo puede distinguir entre objetos desconocidos, objetos clasificados e instancias de objetos conocidos. A través de la indexación espacial, podemos asociar objetos a sistemas de referencia locales, globales y robóticos. Además, podemos asociar objetos con regiones y trayectorias humanas.

El más similar a nuestro método es el marco de mapeo semántico de (Deeken, Wiemann y Hertzberg 2018). Su marco tiene como objetivo mantener y analizar datos espaciales de modelos de entornos multimodales. Utiliza una base de datos espacial para almacenar datos métricos y los vincula a descripciones semánticas a través de anotaciones semánticas. Los datos espaciales y semánticos pueden consultarse desde el marco para utilizar la topología y la información semántica para expandir el gráfico métrico. Este diseño y función son muy similares a nuestro enfoque.
Sin embargo, nuestro método va más allá de la información espacial y semántica porque también contiene información de tiempo sobre objetos, regiones y personas. Por lo tanto, permite a los robots y usuarios inferir no solo configuraciones estáticas, sino también eventos extendidos temporalmente, como las actividades diarias.

 

3. marco de soma

La Figura 1 proporciona una descripción conceptual del marco diseñado. El marco consta de dos partes: (1) núcleo de SOMA y (2) un conjunto de extensiones (o herramientas) de SOMA.
En general, el núcleo tiene cuatro niveles. Estas tres capas horizontales están interconectadas y gestionan la información en diferentes niveles de abstracción: desde la observación (es decir, datos brutos del sensor) y su interpretación hasta conceptos semánticos. Estas tres capas son responsables de la representación en SOMA.
La capa de interfaz vertical proporciona acceso a los tres niveles. Un conjunto de extensiones (o herramientas) utiliza esta capa para visualizar, editar, consultar y extender el gráfico de objetos semánticos. Esto permite a los ingenieros de conocimiento expandirlos y analizarlos. Del mismo modo, los robots y las aplicaciones de usuario pueden acceder y administrar mapas a través de la capa de interfaz.

Ahora consideremos el proceso de almacenar nueva información en SOMA. Primero, los valores de observación del robot se almacenan en forma de datos brutos del sensor, y la indexación espacio-temporal se realiza en la capa de observación. En segundo lugar, la capa de interpretación utiliza métodos perceptuales (como segmentación, reconocimiento de objetos, clasificación de objetos y seguimiento de personas) para analizar estas observaciones, fusionar los resultados y generar una descripción coherente a nivel semántico. Finalmente, la observación, la interpretación y la descripción semántica están unidas para
permitir que el robot las consulte en varios niveles utilizando restricciones de espacio, tiempo y / o semánticas.

capa de 3,2 obseravation

El papel de la capa de observación es almacenar datos sin procesar del sensor sin procesar del robot, así como cualquier metadato que pueda ser útil cuando su sistema interpreta y procesa los datos.
Con este fin, la capa de observación almacena la entrada de los sensores del robot durante la tarea de aprendizaje.
Todas las demás capas de SOMA también acceden a estos datos almacenados.
Las vistas que almacenamos contienen datos de la percepción de movimiento de un solo robot y recopilan una serie de vistas como fragmentos.
Para nuestra tarea de aprendizaje de objetos, una vista única almacena una nube de puntos, imágenes RGB, imágenes de profundidad, la pose actual del robot y todas las transformaciones de rango.
Una serie de vistas seleccionadas por el algoritmo de planificación de la colección de fragmentos para una tarea de aprendizaje específica.
Los fragmentos y las vistas también pueden tener etiquetas de metadatos adjuntas, lo que permite que múltiples canales perceptuales diferentes (quizás todos utilizando diferentes estándares para activar, controlar e interpretar datos de tareas de aprendizaje) utilicen la misma base de datos.

 

Uno de nuestros objetivos de diseño es proporcionar un método para almacenar datos de percepción de robot sin procesar, lo que nos permitirá regenerar completamente la base de datos SOMA y realizar todos los pasos de procesamiento necesarios en este proceso. Siempre que proporcione una copia de la capa de observación del robot, se puede lograr, porque la observación original que lo acompaña se puede reproducir como una reproducción en tiempo real.
Esta es una función clave de evaluar diferentes algoritmos de percepción y tuberías por encima o por debajo del robot. Esta característica también ayuda a mejorar la tolerancia a fallas. Por ejemplo, si el robot se ejecuta durante un período de tiempo, pero se pierde un error en la capa de reconocimiento de objetos o segmentación, podemos corregir el error y regenerar completamente la base de datos desde la capa de observación y usar el nuevo El sistema corregido procesa los datos sin causar pérdida de datos.

 

3.3 Capa de explicación

La capa de interpretación toma información de la capa de observación y contiene principalmente métodos específicos de la aplicación para procesar datos.
La capa de observación se puede ver como una envoltura alrededor del sensor del robot, mientras que la capa de interpretación se considera parte del sistema para el procesamiento de datos específico de la aplicación.
En el aprendizaje de objetos, el primer paso de la interpretación es aplicar algoritmos de segmentación, como la segmentación basada en profundidad o las redes de propuestas de región, para extraer propuestas de objetos para su posterior procesamiento.
SOMA proporciona un método para construir la salida de dichos algoritmos de segmentación al proporcionar una estructura de objeto similar a un gráfico de escena.
Esto proporciona herramientas para almacenar datos sobre un solo objeto segmentado y su relación con vistas y diagramas, y permite a los desarrolladores organizar observaciones de objetos al tomar otras vistas.
La elección exacta de algoritmos para la segmentación de escenas, el seguimiento de objetos entre vistas y otros aspectos se deja a los desarrolladores como parte de su propio diseño de capa de interpretación dedicado.

Una vez que la tubería de interpretación procesa y filtra la salida del sensor sin procesar proporcionada por la capa de observación, se pueden construir objetos SOMA avanzados a partir de los datos procesados.
Tal ejemplo se muestra en la Figura 2. Los objetos avanzados representan los resultados del procesamiento, y la salida de los algoritmos de reconocimiento de objetos se puede grabar en una serie de vistas del objeto, un modelo 3D combinado construido a partir de múltiples vistas y metadatos.
Estos objetos de alto nivel están vinculados a las observaciones de bajo nivel que los componen, y los desarrolladores pueden moverse hacia adelante y hacia atrás desde el objeto combinado completo a sus componentes según sea necesario.
Estos objetos se pueden usar en otras aplicaciones creadas sobre SOMA: se pueden mostrar al usuario final en la aplicación de etiquetas, enviar por correo electrónico, publicar, visualizar en el sitio web y usar en la aplicación para encontrar los que faltan Cup, para su posterior procesamiento, o cualquier otro contenido que el desarrollador pueda desear.

La capa de explicación se siente casi terminada, ¿y qué más?

3.4 Capa semántica

La capa semántica almacena el conocimiento de alto nivel extraído de las observaciones del robot (ver Tabla 1).
El conocimiento de alto nivel puede ser las instancias de objeto identificadas recibidas de varias canalizaciones de reconocimiento / detección, o los objetos rastreados desde la canalización de segmentación / seguimiento.
Cada instancia de datos de alto nivel almacena información de espacio-tiempo, de modo que el desarrollo del conocimiento sobre cada instancia de objeto se pueda mantener y recuperar.
Además, cada objeto SOMA de alto nivel está vinculado a otras capas SOMA a través de la ID SOMA para acceder a todo el conocimiento sobre el objeto dentro del marco.

Además, la capa semántica puede almacenar otra información sobre objetos, como modelos 3D, imágenes de cámara y cualquier tipo de metadatos para construir una base de conocimiento completa. La información de alto nivel almacenada puede ayudar a los usuarios a comprender la semántica de varios entornos, permitiendo a los robots realizar razonamientos de alto nivel para completar tareas como descubrir y / o agarrar objetos.

 

3.5 Capa de interfaz y otras extensiones

La capa de interfaz sirve como la columna vertebral entre las diferentes capas de SOMA y los usuarios para el intercambio de datos. De esta manera, los robots / usuarios pueden usar extensiones SOMA y otras aplicaciones para insertar, eliminar, actualizar y consultar datos (Figura 3).

SOMAEdit permite a los usuarios crear escenas virtuales sin ningún dato percibido. Con este editor, los usuarios pueden agregar, eliminar o mover objetos y áreas en la parte superior del gráfico métrico.

SOMAQuery permite a los usuarios consultar el mapa utilizando restricciones semánticas, espaciales y / o temporales.
La consulta puede preguntar a todos los objetos de cierto tipo ("seleccionar todas las tazas").
Dichas consultas pueden verse limitadas por restricciones de espacio-tiempo ("seleccione todas las tazas en la sala de reuniones el lunes entre las 10: 00-12: 00"). Las restricciones espaciales se pueden usar para determinar si las entidades espaciales están cerca de otra entidad, dentro de una entidad (área), o si se cruzan con otra entidad. Las limitaciones de tiempo se pueden expresar utilizando puntos de tiempo o intervalos de tiempo. Para descubrir patrones de tiempo y procesos periódicos, el día del día, el día de la semana y el día del mes son particularmente importantes.

 

El artículo es muy claro, pero parece que no implica si el objeto pertenece a la misma instancia. . Además, el reconocimiento y la segmentación de los objetos siempre han sido a través de algoritmos de imagen. .

 

4. Implementación

Hemos implementado SOMA2 basado en ROS y MongoDB. La estructura general de implementación del marco se muestra en la Figura 4.
ROS se utiliza como la columna vertebral de todo el marco de trabajo de SOMA porque es la plataforma más utilizada en la comunidad de investigación en robótica.
Las diversas capas y componentes de SOMA se desarrollan como nodos ROS, por lo que cada uno de ellos puede comunicarse con cualquier otro componente ROS.
La estructura de datos utilizada para almacenar objetos SOMA es en sí misma un mensaje ROS compuesto de tipos ROS primitivos. Siempre y cuando se construyan en la pila ROS, esto proporciona una interfaz común entre sistemas.

 

5. Evaluación

Nuestro trabajo está motivado por el proyecto europeo STRANDS (Hawes et al., 2016). En STRANDS, investigamos las representaciones y actividades espacio-temporales en escenarios a largo plazo. En este proyecto, estamos interesados ​​en brindar servicios a los humanos en nuestro entorno diario. Las tareas realizadas por nuestro robot incluyen búsqueda de objetos, descubrimiento de objetos y reconocimiento de actividad y análisis de movimiento. En este caso, llevamos a cabo una serie de implementaciones de robots en un entorno de oficina real durante un período de varios meses, y evaluamos este trabajo.

SOMA se ha implementado muchas veces en dos ubicaciones diferentes en el Reino Unido (Transport System Catapult (TSC) e instalaciones pertenecientes al Grupo 4 Security (G4S)). Informaremos los detalles de estos despliegues para las tres entidades principales representadas en SOMA: objetos, áreas y trayectorias.

Como se mencionó anteriormente, aunque SOMA se ha utilizado como tecnología básica para desarrollar sistemas de percepción de robots más avanzados y potentes, también desempeña un papel clave en muchas aplicaciones de robots orientadas al usuario.
La Figura 5 muestra un pequeño conjunto de muestras aprendidas por el robot utilizando la tubería de percepción (Young y otros 2017b) en el sitio de implementación de expulsión del sistema de transporte (TSC). En particular, la imagen 2D del objeto se usa para pasar a una red neuronal convolucional (CNN) para su reconocimiento (como Young y otros 2017b; 2017a), y para el usuario final del sitio para el reconocimiento.
Etiquetas en tiempo real.
SOMA también es una plataforma de recopilación de datos: la hemos utilizado para almacenar y distribuir escenas para anotaciones sin conexión por parte de anotadores humanos en el futuro.
El desempeño de SOMA a este respecto depende del canal de percepción que le proporciona información. En general, durante el primer y segundo despliegue de TSC, el sistema almacenó 141 escenas y 341 escenas, respectivamente. El diseño de SOMA significa que estas escenas se pueden volver a procesar fuera de línea más tarde, si es necesario, se pueden usar diferentes tubos de percepción, algoritmos o filtros para extraer diferentes objetos o diferentes tipos de información de ellos. La Tabla 2 muestra la comparación entre las tuberías de aprendizaje de objetos utilizadas en el tercer año (Y3) y el cuarto año (Y4) del sitio TSC.

En el primer despliegue de TSC (Y3), SOMA se utilizó para proporcionar un informe de los objetos encontrados en la superficie predefinida del sitio (Figura 6). Cuando el robot realiza su tarea normal de aprendizaje de objetos, generará un informe y lo presentará en una interfaz de blog basada en la web para que acceda el usuario final.

En otro trabajo experimental, designamos las dos superficies en el sitio TSC como "tablas de aprendizaje", donde los trabajadores de oficina pueden traer objetos para el aprendizaje de robots. Luego, el robot visitará la mesa dos veces al día e intentará aprender e identificar cualquier objeto encontrado. Usando CNN (con 1000 categorías posibles) entrenado en una base de datos de imágenes grandes, publicará tweets sobre ellos mientras intenta identificarlos.
Internamente, el sistema se implementa a través de la función de notificación de SOMA (que permite importar nuevos objetos en el sistema), y luego la función activa el proceso de reconocimiento y liberación de objetos al pasar imágenes 2D de objetos ingresados ​​en SOMA a estas funciones.

En el último despliegue a largo plazo del sitio TSC (Y4), utilizamos una tubería de detección de objetos basada en CNN.
La tubería puede detectar 20 tipos de objetos, incluidas personas, sillas, monitores, etc., y puede usar la información de profundidad registrada para extraer vistas parciales en 3D de los objetos.
De esta manera, se puede identificar la posición del objeto y el mapa métrico global relativo al robot.
La figura 7 muestra un ejemplo de una silla detectada y una vista 3D parcial extraída. Luego, los objetos detectados se almacenan como objetos SOMA avanzados con información espacio-temporal. La Tabla 3 muestra algunas estadísticas detalladas sobre los objetos detectados usando esta tubería durante la implementación. Los resultados muestran que si el robot funciona en un entorno de oficina, los objetos detectados son, como máximo, sillas, personas y monitores (Tabla 3).

También utilizamos la interfaz SOMAQuery para analizar el aspecto temporal de la implementación de Y4 desde la perspectiva de la percepción avanzada de objetos SOMA.
La Tabla 4 muestra las estadísticas diarias de reconocimiento de objetos durante todo el proceso de implementación, excluyendo la hora del día. Como puede ver en la tabla, el robot está activo la mayor parte del tiempo los miércoles y jueves, y nunca lo ha utilizado para la percepción de objetos los fines de semana.
También se puede observar que el robot está más activo en la tarde, pero rara vez se usa durante las horas libres (después de las 17:00). Durante todo el despliegue de Y4, el robot detectó un total de 930 objetos SOMA avanzados.

 

 

 

Este grupo es realmente fuerte, soma está realmente bien. Este artículo no parece involucrar esos pocos temas: el movimiento, la apariencia y la desaparición de instancias en escenas dinámicas, es decir, su percepción es irrelevante en términos de tiempo.

 

Supongo que te gusta

Origin www.cnblogs.com/zherlock/p/12709174.html
Recomendado
Clasificación