Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Evitación de obstáculos utilizando inteligencia artificial

Componentes y suministros

SparkFun Arduino Pro Mini 328 - 5V / 16MHz
× 1
Sensor ultrasónico - HC-SR04 (genérico)
× 1
Controladores de motor SparkFun Dual H-Bridge L298
× 1
Motor de CC (genérico)
MOTORES DC 60 RPM
× 2
ruedas
× 4
Cables de puente (genéricos)
× 1
Placa de pruebas SparkFun soldable - Mini
× 1
Batería recargable, iones de litio
Batería de iones de litio de 7,2 voltios
× 1
batería de 9V (genérica)
× 1
Clip de batería de 9V
× 1
PCBWay Custom PCB
× 1
C&K Switches Interruptor de la serie JS
× 1

Herramientas y máquinas necesarias

Soldador (genérico)
Alambre de soldadura, sin plomo
Fundente de soldadura, soldadura
Bomba para desoldar, Deluxe SOLDAPULLT®
Pelacables y cortador, 18-10 AWG / 0,75-4 mm² Cables de capacidad
Pistola de pegamento caliente (genérica)
Cinta de doble cara

Aplicaciones y servicios en línea

Arduino IDE

Acerca de este proyecto

ROBOT PARA EVITAR OBSTÁCULOS UTILIZANDO IA / APRENDIZAJE DE REFUERZO

Declaración del problema: El objetivo principal es aprender a evitar obstáculos en “N” Episodios y conocer la acción óptima. En este caso, supongamos que necesitamos que nuestro Robot aprenda la acción óptima como 'Correcta'.

Algoritmo de refuerzo utilizado: Q aprendizaje

Cómo el L298N impulsa dos motores de CC:

Cómo calcula la distancia el sensor HC-SR04:

Términos importantes del aprendizaje por refuerzo:

1. ESTADO: Esta es la situación en la que se encuentra el Robot. Aquí, para un robot básico para evitar obstáculos, hay en total 2 estados ... el primer estado es cuando no hay ningún obstáculo cerca y el segundo estado en el que hay un obstáculo frente a él (cuando escribí el código, asumí 10 diferentes Los estados pueden estar en los que se esperaba la misma acción. La razón por la que hice esto para ilustrar un entorno más complejo.)

2. ACCIÓN: En un estado particular, el robot realiza una acción particular. Hay 4 acciones que el robot puede realizar en el segundo estado: “ADELANTE”, “ATRÁS”, “IZQUIERDA”, “DETENER”. En el 1er estado, el robot puede realizar 4 acciones, pero para facilitar las cosas, asumí que el robot solo puede realizar una acción que es "ADELANTE" ( Esto se debe a que es poco convincente considerar acciones como IZQUIERDA o HACIA ATRÁS cuando no hay obstáculos cerca.

  int ACTIONS =[0,1,2,3] 

/ * AQUÍ:
0 =ADELANTE
1 =ATRÁS
2 =DETENER
3 =DERECHA * /

3. PRÓXIMO ESTADO: Este es el estado en el que entra el robot cuando realiza una "ACCIÓN" en particular. en su "ESTADO" actual. En caso de evitar obstáculos en la caja del robot, el ESTADO SIGUIENTE puede ser un "CRASHED" estado o un "SOBREVIVIDO" Expresar. (Aquí el estado SUPERVIVIR es el mismo que el estado inicial en el que se encuentra el robot cuando comienza su episodio).

  / * DESPUÉS DE REALIZAR UNA ACCIÓN, EL ROBOT PASA AL SIGUIENTE ESTADO EN ESTE CASO DE OBSTÁCULO 
EVITANDO EL ROBOT * /

int NEXT_STATE;
int STATE =0;
NEXT_STATE =STATE + 1;

4. TABLA Q / MATRIZ Q: Esta tabla está formada por Número de “ESTADOS” y Número de “ACCIONES”. En el caso del robot para evitar obstáculos, esta tabla viene dada por:

  float Q [N_STATES] [NUMBER_OF_ACTIONS] ={{0.0,0.0,0.0,0.0}, 
{0.0,0.0,0.0,0.0},
{0.0,0.0,0.0 , 0.0},
{0.0,0.0,0.0,0.0},
{0.0,0.0,0.0,0.0},
{0.0,0.0,0.0,0.0},
{0.0,0.0,0.0,0.0},
{0.0,0.0,0.0,0.0},
{0.0,0.0,0.0,0.0},
{0.0,0.0,0.0,0.0 }};

Aquí N_STATES =10 AND N_ACTIONS =4. aquí "0.0" indica que se puede realizar cualquier acción desde cualquiera de las 4 acciones posibles. si, sin embargo, desea eliminar una partícula acción en un estado simplemente reemplace "0.0" con "-1.0" en la matriz. "-1.0" indica que la acción no se puede realizar en ese estado. aquí se supone que tenemos 10 estados diferentes y cada estado espera la misma acción. si desea que su robot aprenda acciones que son diferentes en cada estado, cambie las recompensas de la matriz de recompensas en el código

5. ESTADO TERMINAL: Este es el último estado en el que puede estar el robot. Para el robot que evita obstáculos, este estado no existe ya que no tenemos ningún estado terminal y queremos que nuestro robot siga aprendiendo para siempre.

6. MATRIZ DE RECOMPENSAS: Esta tabla o matriz se utiliza para recompensar al robot por determinadas acciones. La recompensa es positiva o negativa según la calidad de la acción.

  int RECOMPENSAS [ESTADOS] [NÚMERO_DE_ACCIONES] ={{-10, -2, -1,10}, 
{-10, -2, -1,10},
{-10, -2, -1,10},
{-10, -2, -1,10},
{-10, -2, -1,10},
{-10, -2, -1,10},
{-10, -2, -1,10},
{-10, -2, -1,10},
{-10, -2, -1,10},
{-10, -2, -1,10}};

7. MEDIO AMBIENTE: Esto también se puede asumir o considerar como el mundo del Robot. Por ejemplo, los seres humanos vivimos en la tierra, así que básicamente la tierra es nuestro medio ambiente.

Hiperparámetros en el aprendizaje por refuerzo:

1. TASA DE APRENDIZAJE (ALFA): La velocidad de aprendizaje o el tamaño del paso determina hasta qué punto la información recién adquirida prevalece sobre la información anterior. Un factor de 0 hace que el agente no aprenda nada (explotando exclusivamente el conocimiento previo), mientras que un factor de 1 hace que el agente considere solo la información más reciente (ignorando el conocimiento previo para explorar posibilidades). En entornos completamente deterministas, una tasa de aprendizaje de ALPHA =1.0 es óptima. Cuando el problema es estocástico, el algoritmo converge bajo algunas condiciones técnicas en la tasa de aprendizaje que requieren que disminuya a cero. En la práctica, a menudo se usa una tasa de aprendizaje constante, como ALPHA =0.1 para todos los escenarios.

  float ALPHA =0.2;  

2. FACTOR DE DESCUENTO (GAMMA): El factor de descuento de 0 determina la importancia de las recompensas futuras. Un factor de 0 hará que el agente sea "miope" (o miope) al considerar únicamente las recompensas actuales, mientras que un factor cercano a 1 hará que se esfuerce por obtener una recompensa alta a largo plazo. Si el factor de descuento alcanza o excede 1, los valores de acción pueden divergir. Para GAMMA =1.0, sin un estado terminal, o si el agente nunca llega a uno, todas las historias ambientales se vuelven infinitamente largas y las utilidades con recompensas aditivas y sin descuento generalmente se vuelven infinitas. Incluso con un factor de descuento solo ligeramente inferior a 1, Q el aprendizaje de funciones conduce a la propagación de errores e inestabilidades cuando la función de valor se aproxima con una red neuronal artificial. En ese caso, comenzar con un factor de descuento más bajo y aumentarlo hacia su valor final acelera el aprendizaje.

  float GAMMA =0.9;  

3. TASA DE EXPLORACIÓN (EPSILON): Este parámetro decide hasta qué punto el robot debe explorar el entorno. Explorar el entorno significa realizar acciones aleatorias y analizar los resultados a través de Q Values. Por lo general, en Q Learning (a diferencia de SARSA), eventualmente nos deshacemos de este parámetro a medida que Robot sigue aprendiendo más y más. Pero en este proyecto, no vamos a deshacernos de Epsilon ya que no tenemos ningún estado terminal. Epsilon en este caso se reducirá hasta cierto punto y luego se reiniciará nuevamente cuando esté por debajo de un valor de umbral. Esto asegurará que el robot siga explorando hasta su vida, tal como lo hacemos los humanos.

  float EPSILON =0.75;  

ALGORITMO DE APRENDIZAJE Q:

  • Inicialice la tabla de valores Q, Q (s, a) . Inicialicé estos valores en 0.0.
  • Observe el estado actual, s .
  • Elija una acción, a , para ese estado según una de las políticas de selección de acciones explicadas aquí en la página anterior (📷-suave, 📷-codicioso o softmax).
  ////////////////////////// Política codiciosa de Epsilon /////////////// /////////////// 

PROB =RANDOM (EPSILON);
if (PROB <=EPSILON) // EXPLORE LAS ACCIONES
{
ACCIÓN =aleatorio (0,4);
BANDERA =2;
}
else // EXPLOTAR LAS ACCIONES DE Q TABLE
{
ACCIÓN =ARGMAX (Q, ESTADO);
BANDERA =2;
}
  • Realice la acción y observe la recompensa, r , así como el nuevo estado, s ' .
  • Actualice el valor Q para el estado utilizando la recompensa observada y la recompensa máxima posible para el siguiente estado. La actualización se realiza de acuerdo con la fórmula y los parámetros descritos anteriormente.
  • Establezca el estado en el nuevo estado y repita el proceso hasta que se alcance un estado terminal.
  • Para comprender Q-learning mejor visite este enlace:https://towardsdatascience.com/a-beginners-guide-to-q-learning-c3e2a30a653c
  ///////////////////// Implementación de Q_Learning Formula /////////////////////// //// 

Q_OLD =Q_TABLE [S] [A];
Q_MAX =MAX (Q_TABLE, NEXT_S);
Q_NEW =(1-LEARNING_RATE) * Q_OLD + LEARNING_RATE * (R + DISCOUNT_FACTOR * Q_MAX);
Serial.print ("Q VALOR:");
Serial.println (Q_NEW);
Q_TABLE [S] [A] =Q_NEW;

Video de trabajo:no olvide ver el video de trabajo de AI Robot :)


Código

  • Robot para evitar obstáculos con Q-LEARNING
Robot para evitar obstáculos con Q-LEARNING C / C ++
ESTE ES UN CÓDIGO PRINCIPAL DE UN ROBOT PARA EVITAR OBSTÁCULOS BASADO EN INTELIGENCIA ARTIFICIAL.
 / * Este es un Robot para Evitar Obstáculos usando el Aprendizaje por Refuerzo / IA Autor de este Proyecto:Varun Walimbe Algoritmo usado en este proyecto:Q learning ¿Cómo Funciona Evitar Obstáculos? 1.Ultrasonic El sensor se usa para medir la distancia desde el obstáculo usando sus pines de eco y gatillo.2.Cuando se mide la distancia y si es menor de 20 cm, entonces hay un obstáculo cerca; de lo contrario, el robot está seguro y continúa hacia adelante.3.Si se detecta un obstáculo, el robot toma giro a la izquierda o a la derecha dependiendo de la situación ¿Cómo funciona la evitación de obstáculos basada en IA? (aprendizaje Q) 1.Aquí el primer paso del artículo superior sigue siendo el mismo.Sin embargo, el segundo paso es diferente.2.Una lista de acciones del robot son inicializado primero. Por ejemplo, en este caso, las acciones de Robot son:Izquierda, Adelante, Atrás, Detener. Cuando el Robot se acerca a un obstáculo, es necesario que realice una acción. Sin embargo, tenga en cuenta que, en este caso, el Robot no sabe qué acción tomar, ya que no está preprogramado y aprenderá por sí solo para evitar obstáculos. 0 Cuando el robot se detiene y retrocede, recibe una recompensa de -5 Cuando el robot continúa avanzando ignorando los obstáculos, recibe una recompensa de -10 Cuando el robot se mueve hacia la izquierda tan pronto como se detecta un obstáculo, obtiene una recompensa de + 105. aprende por sí solo a evitar obstáculos mediante el mecanismo de recompensa. * /////////// PARÁMETROS DE HARDWARE DEL ROBOT ////////////////////// int TRIG_PIN =7; int ECHO_PIN =8; int duración; distancia de flotación; int M1 =13; int M2 =12; int M3 =11; int M4 =10; bool Obstacle =false; int FLAG; ////////// ///////////////FIN////////////////////////////////// //////////////////////////////// Q PARÁMETROS DE APRENDIZAJE /////////////// //////////////////////////// flotar ALPHA =0.1; // TASA DE APRENDIZAJEfloat GAMMA =0.5; // FACTOR DE DESCUENTOfloat EPSILON =0.90; // PARÁMETRO DE EXPLORACIÓNint RECOMPENSA; // RECOMPENSA POR REALIZAR UNA ACCIÓNint EPISODES =100; int STATE; // ESTADO ACTUAL DEL ROBOTint ACTION =0; // ACCIÓN REALIZADA POR EL ROBOT (0:HACIA ADELANTE, 1:HACIA ATRÁS, 2; PARAR, 3:IZQUIERDA) float PROB; // UTILIZADO PARA EPSILON DECAY bool ACTION_TAKEN =false; // ESTA VARIABLES NOS DICE SI SE TOMA UNA ACCION O NO EN SIGUIENTE_ESTADO; // SIGUIENTE ESTADO DEL ROBOTconst int ESTADOS =10; // NÚMERO DE ESTADOS EN EL MEDIO AMBIENTE int ACTIONS [4] ={1,2,3,4}; const int NUMBER_OF_ACTIONS =4; // TOTAL TENEMOS 4 ACCIONES HACIA ADELANTE, HACIA ATRÁS, IZQUIERDA Y PARADA / * ESTA ES LA Q MATRIX O Q TABLE. ESTE ES BÁSICAMENTE EL DIARIO QUE BUSCARÁ EL ROBOT ANTES DE REALIZAR UNA ACCIÓN. BASADO EN LA ACCIÓN, EL ROBOT GANARÁ UNA RECOMPENSA Y EL VALOR Q SE ACTUALIZARÁ EN ESTA Q TABLA. AQUÍ HE CONISDIDO 10 ESTADOS. HE ASUMIDO QUE TODOS LOS ESTADOS SON DIFERENTES AUNQUE SON MISMOS. BÁSICAMENTE EL ROBOT PARA EVITAR OBSTÁCULOS CONTIENE SOLO DOS ESTADOS, es decir:1:CUANDO ESTÁ LEJOS DEL OBSTÁCULO 2:CUANDO ESTÁ CERCA DEL OBSTÁCULO, PERO AQUÍ PARA ILUSTRAR MÁS QUE EL COMPLEJO HE ASUMIDO ENTORNO 10 ESTADOS DIFERENTES AQUÍ ESPERAN LA MISMA / DIFERENTE ACCIÓN. * / Float Q [ESTADOS] [NUMBER_OF_ACTIONS] ={{0.0,0.0,0.0,0.0}, // LO MÁS IMPORTANTE DE TODOS ES LA TABLA Q. {0.0,0.0,0.0,0.0}, // ESTÁ FORMADO POR ESTADOS COMO SUS FILAS {0.0,0.0,0.0,0.0}, // Y COLUMNAS COMO SU NÚMERO DE ACCIONES {0.0,0.0,0.0,0.0}, / / INICIALIZADO A CERO EN EL INICIO {0.0,0.0,0.0,0.0}, // ESTO SE ACTUALIZARÁ EN EL FUTURO. {0.0,0.0,0.0,0.0}, {0.0,0.0,0.0,0.0}, {0.0,0.0,0.0,0.0}, {0.0,0.0,0.0,0.0}, {0.0,0.0,0.0,0.0}}; / * ESTA ES UNA MATRIZ DE RECOMPENSAS O TABLA DE RECOMPENSAS. ESTE ES RESPONSABLE DE DAR RECOMPENSA AL ROBOT POR REALIZAR UNA ACCIÓN DETERMINADA. ALMACENA LA RECOMPENSA POR CADA ACCIÓN TOMADA EN EL ESTADO. LA RECOMPENSA SERÁ POSITIVA SI LA ACCIÓN REALIZADA ES BUENA Y NEGATIVA SI LA ACCIÓN PRODUCE MALOS RESULTADOS. * / Int REWARDS [ESTADOS] [NUMBER_OF_ACTIONS] ={{-10, -2, -1,10}, {-10, -2 , -1,10}, {-10, -2, -1,10}, {-10, -2, -1,10}, {-10, -2, -1,10}, {-10, -2, -1,10}, {-10, -2, -1,10}, {-10, -2, -1,10}, {-10, -2, -1,10}, {- 10, -2, -1,10}}; ////////////////////////////////////////////FIN///// //////////////////////////////////////////////////// //////////// PARÁMETROS DE ACTUALIZACIÓN DE APRENDIZAJE Q //////////// float Q_OLD; float Q_NEW; float Q_MAX; ///////////// ///////////// FIN ////////////////////////// configuración vacía () {Serial.begin (9600 ); pinMode (TRIG_PIN, SALIDA); pinMode (ECHO_PIN, ENTRADA); pinMode (M1, SALIDA); pinMode (M2, SALIDA); pinMode (M3, SALIDA); pinMode (M4, SALIDA); randomSeed (analogRead (A0)); ESTADO =0; Serial.println ("EL ENTRENAMIENTO COMENZARÁ EN 5 SEGUNDOS:"); delay (5000);} //////////////////////////// FUNCIONES DEL ROBOT ////////////// /////////////////// void Forward () {digitalWrite (M1, LOW); escritura digital (M2, ALTA); escritura digital (M3, BAJA); escritura digital (M4, ALTA); } void Backward () {digitalWrite (M1, HIGH); escritura digital (M2, BAJA); escritura digital (M3, ALTA); escritura digital (M4, BAJA);} void Izquierda () {escritura digital (M1, ALTA); escritura digital (M2, BAJA); escritura digital (M3, BAJA); escritura digital (M4, ALTA);} void Derecha () {escritura digital (M1, BAJA); escritura digital (M2, ALTA); escritura digital (M3, ALTA); digitalWrite (M4, LOW);} void Stop () {digitalWrite (M1, LOW); escritura digital (M2, BAJA); escritura digital (M3, BAJA); digitalWrite (M4, LOW);} bool Obstacle_Avoider () {digitalWrite (TRIG_PIN, HIGH); delayMicroseconds (10); digitalWrite (TRIG_PIN, BAJO); duración =pulseIn (ECHO_PIN, HIGH); distancia =(duración / 2) /29.1; if (distancia <15) {Obstáculo =verdadero; } if (distancia> 15) {Obstáculo =falso; } retraso (10); Obstáculo de retorno;} ////////////////////////////////////////////// FIN / //////////////////////////////////////////////////// //////////////////////////// FUNCIONES DE APRENDIZAJE Q DEL ROBOT //////////////////// ////////////////// float RANDOM (float EXPLORATION_PARAMETER) {/ * ESTA FUNCIÓN ENCUENTRA EL NÚMERO ALEATORIO QUE DECIDE SI UNA ACCIÓN A TOMAR ES ALEATORIA O DE Q_TABLE * / float RANDOM_VARIABLE; PROBABILIDAD de flotar; RANDOM_VARIABLE =aleatorio (0,100); PROBABILIDAD =RANDOM_VARIABLE / 100; return PROBABILITY;} float DECAY (float PARAMETER) {/ * ESTA FUNCIÓN SE UTILIZA PARA REDUCIR EPSILON (PARAMETRO DE EXPLORACION) CON EL TIEMPO. FINALMENTE AL FINALIZARTE EPSILON Y EL ROBOT APRENDE A EVITAR OBSTÁCULOS EN SU PROPIO * / PARAMETER =PARAMETER * 0,98; // PARÁMETRO AQUÍ ESTÁ EL PARÁMETRO de retorno de EPSILON;} int GET_STATE () {int STATE_NUMBER; STATE_NUMBER =aleatorio (0,10); return STATE_NUMBER;} float MAX (float Q_Table [] [4], int NEXT_S) {/ * ESTA FUNCIÓN ENCUENTRA EL NÚMERO MÁS GRANDE EN Q_TABLE [NEXT_STATE]. EL PAPEL PRINCIPAL DE ESTA FUNCIÓN ES ENCONTRAR Q_MAX PARAMETER * / float LIST [4]; flotador N1; flotar N2; flotador MAX_VALUE =0.0; flotar DIFF; para (int b =0; b <=3; b ++) {LIST [b] =Q [NEXT_S] [b]; } for (int j =0; j <=2; j ++) {if (MAX_VALUE> LIST [j]) {N1 =MAX_VALUE; } más {N1 =LISTA [j]; } N2 =LISTA [j + 1]; DIFF =N1-N2; si (DIFF> 0) {MAX_VALUE =N1; } más {MAX_VALUE =N2; }} return MAX_VALUE;} int ARGMAX (float Q_Table [] [4], int S) {/ * ESTA FUNCIÓN ENCUENTRA EL ÍNDICE DEL VALOR Q MÁS GRANDE EN Q TABLE [ESTADO] * / float ARRAY [4]; flotador N1; flotar N2; flotador MAX_VALUE =0.0; flotar DIFF; número flotante; int MAX_INDEX; para (int u =0; u <=3; u ++) {ARRAY [u] =Q_Table [S] [u]; } para (int p =0; p <=2; p ++) {if (MAX_VALUE> ARRAY [p]) {N1 =MAX_VALUE; } más {N1 =ARRAY [p]; } N2 =ARRAY [p + 1]; DIFF =N1-N2; si (DIFF> 0) {MAX_VALUE =N1; } más {MAX_VALUE =N2; }} para (int r =0; r <=3; r ++) {NUMBER =ARRAY [r]; si (NÚMERO ==VALOR_MÁX) {INDEX_MÁX =r; descanso; }} return MAX_INDEX;} void Update (float Q_TABLE [] [4], int S, int NEXT_S, int A, int ACTIONS [], int R, float LEARNING_RATE, float DISCOUNT_FACTOR) {/ * ESTA FUNCIÓN ACTUALIZA LA TABLA Q Y VALORES Q. ESTA ACTUALIZACIÓN SIGUE SUCEDIENDO HASTA QUE TERMINE EL BUCLE PRINCIPAL. AL FINAL DE LOS EPISODIOS, LA TABLA Q ESTÁ LLENA DE VARIOS VALORES. A MAYORES VALORES, MAYOR IMPORTANCIA TIENE LA ACCIÓN EN ESE ESTADO EN PARTICULAR. "Q_OLD" ES EL VALOR ANTIGUO QUE TIENE LA MATRIZ Q. ESTE ES EL VALOR QUE SE ACTUALIZA EVENTUALMENTE. Q_NEW ES EL NUEVO Q_VALUE QUE ES CALCULADO POR LA FÓRMULA DE APRENDIZAJE DE Q. LA FÓRMULA DE APRENDIZAJE Q UTILIZADA AQUÍ SE BASA EN LA ECUACIÓN DE BELLMAN UTILIZA UN ENFOQUE DE APRENDIZAJE DE DIFERENCIA TEMPORAL (EL ENFOQUE DE MONTE CARLO NO FUNCIONARÁ EN ESTE CASO DE ROBOT PARA EVITAR OBSTÁCULOS. * / Q_OLD =Q_TABLE [S] [A]; Q_MAX =MAX (Q_TABLE, NEXT_S); Q_NEW =(1-LEARNING_RATE) * Q_OLD + LEARNING_RATE * (R + DISCOUNT_FACTOR * Q_MAX); Serial.print ("Q VALUE:"); Serial.println (Q_NEW); Q_TABLE [S] [A] =Q_NEW;} ////////////////////////////////////////////////// ///////////FIN////////////////////////////////////// //////////////////////////////////////////////////// //////////////// INICIO DEL BUCLE PRINCIPAL //////////////////////////////// /////////////////// bucle vacío () {//////////////////////////// ///////////////CAPACITACIÓN////////////////////////////////// ////////// for (int I =0; I   

Esquemas

obstacle_avoiding_robot_using_ai_DcoMCWIOFm.fzz

Proceso de manufactura

  1. Arrow Electronics anuncia el Tour de experiencias de inteligencia artificial
  2. Un robot móvil con evitación de obstáculos basada en la visión
  3. Bosch agrega inteligencia artificial a la industria 4.0
  4. ¿La inteligencia artificial es ficción o moda?
  5. La inteligencia artificial recibe un enorme impulso de Kubernetes
  6. La inteligencia artificial juega un papel importante en el IoT
  7. Es temprano para la inteligencia artificial en la ciberseguridad de ICS
  8. La inteligencia artificial predice el comportamiento de los sistemas cuánticos
  9. Uso de inteligencia artificial para rastrear la deforestación
  10. Robots de inteligencia artificial
  11. La inteligencia artificial no es una aplicación; Es una Metodología