Desarrollo de algoritmos de control y movimiento de robots, mediante LabVIEW Robotics

Control de Robots con LabVIEW

Información del documento

Autor

Alejandro Alcaraz Salvago

instructor Francisco José Ortiz Zaragoza
Escuela

Universidad Politécnica de Cartagena

Especialidad Ingeniería de Telecomunicación
Tipo de documento Proyecto Fin de Carrera
Idioma Spanish
Formato | PDF
Tamaño 2.75 MB

Resumen

I.Simulación y Programación de un Robot Móvil con LabVIEW y RobotSim

Este documento describe el desarrollo de un algoritmo de navegación para un Robot Starter Kit 1.0 usando LabVIEW Robotics. Se utiliza RobotSim para la simulación 3D del código en un robot virtual, permitiendo probar el algoritmo antes de implementarlo en el hardware. El proceso implica la creación de VIs (Virtual Instruments) en LabVIEW, que incluyen un panel frontal (interfaz de usuario), un diagrama de bloques (código), y un panel de conexiones. Se detalla la configuración del hardware, incluyendo la placa sbRIO-9631 y la importancia de las librerías NI-VISA y NI-RIO para la comunicación con el robot. Se destaca el uso de funciones como Acquire Data, Initialize, y la librería VISA para adquirir datos de los sensores. La interacción con RobotSim requiere una librería específica en LabVIEW para controlar el robot virtual y testear su comportamiento.

1. Simulación con RobotSim y LabVIEW Robotics

El documento introduce el uso de RobotSim, una herramienta que, junto con LabVIEW Robotics, permite simular el código en un entorno 3D con un robot virtual. Esta simulación es crucial para probar el algoritmo de navegación antes de su implementación en el hardware real. La utilización de RobotSim dentro del flujo de trabajo de LabVIEW facilita el proceso de desarrollo y depuración, ya que permite visualizar y testear el comportamiento del robot en un entorno controlado antes de enfrentarse a las complejidades del mundo real. La integración entre RobotSim y LabVIEW se realiza mediante una librería de funciones específica de LabVIEW que facilita la interacción con el simulador. Se enfatiza que el objetivo de RobotSim es el testeo de los algoritmos de navegación; la programación a bajo nivel (FPGA) queda fuera del alcance de esta herramienta de simulación. El uso de RobotSim acelera el ciclo de desarrollo, reduce los posibles errores en el código y permite un mejor entendimiento del funcionamiento del algoritmo de navegación antes de la implementación en el robot físico. La capacidad de simular el comportamiento del robot en un entorno virtual reduce el tiempo y los costes asociados a la experimentación con el hardware real, lo que lo convierte en una herramienta invaluable en el proceso de diseño y desarrollo de algoritmos robóticos.

2. Desarrollo de VIs en LabVIEW

La metodología de trabajo se centra en la creación de programas en LabVIEW, conocidos como VIs (Virtual Instruments). Cada VI se compone de tres elementos: un panel frontal (interfaz de usuario con mandos e indicadores), un diagrama de bloques (lógica del programa), y un panel de conexiones. El panel frontal proporciona una interfaz intuitiva para la interacción con el código durante su ejecución. LabVIEW ofrece funciones específicas, accesibles a través de la paleta de herramientas 'Controls', para crear esta interfaz. La creación de VIs facilita la modularidad y la reutilización del código, lo que simplifica la creación de sistemas robóticos complejos. Se enfatiza la importancia de la programación gráfica de LabVIEW para principiantes y programadores experimentados, permitiendo desarrollar aplicaciones sin la necesidad de un profundo conocimiento de hardware. Esta metodología de programación gráfica ayuda a agilizar el desarrollo de software para robótica, pues permite la rápida prototipado e implementación de algoritmos. El uso de VIs y la naturaleza gráfica de LabVIEW permiten una rápida comprensión y modificación del código, facilitando la colaboración y la depuración del sistema.

3. Configuración del Hardware y Gestión de Archivos

El documento describe la estructura de un proyecto en LabVIEW, utilizando como base el Starter Kit y una placa sbRIO-9631. LabVIEW genera automáticamente los archivos necesarios para configurar el hardware empleado. Los VIs y los archivos necesarios para su ejecución se almacenan en el directorio de la plataforma correspondiente, junto con las dependencias en la carpeta 'Dependencies'. La gestión de archivos se simplifica para facilitar la portabilidad del proyecto. Para la gestión de los archivos del proyecto se utiliza el Robotics Wizard, al cual se accede a través del menú FileNew y seleccionando ProjectRobotics Project. Este gestor administrará de forma automática la mayoría de archivos necesarios para el funcionamiento del proyecto, incluyendo librerías, pero no gestiona subVIs creados por el usuario, recomendando la creación de subcarpetas para estos. La utilización de un gestor de proyectos facilita la organización y portabilidad del trabajo, permitiendo la reutilización de código y la colaboración entre desarrolladores. Además, se describe la necesidad de instalar los drivers NI-VISA y NI-RIO para habilitar ciertos tipos de proyectos, incluyendo el 'Robotics Starter Kit', 'CompactRIO' y 'Single-Board RIO'. Esta configuración del hardware es fundamental para la correcta ejecución del software y la interacción con el robot.

4. Adquisición de Datos y Comunicación con Sensores

La adquisición de datos se realiza mediante la función 'Acquire Data', enlazada con la función 'Initialize'. Esta función debe estar dentro de un bucle para asegurar su funcionamiento continuo. La función 'Acquire Data' toma como entrada los ángulos de barrido del sensor, con 0º en el centro y valores positivos y negativos a la derecha e izquierda respectivamente. Se utiliza un rango de (-120º, +120º) para encontrar la ruta más adecuada. El documento menciona la librería VISA (Virtual Instrument Software Architecture) para controlar instrumentos como GPIB, VXI, RS232, etc., destacando su polimorfismo y capacidad para funcionar como driver Standard o en modo cRIO-USB. Se describe una implementación simple, usando datos del LIDAR (magnitude para distancias y direction para ángulos de dirección), para obtener el ángulo con la mayor zona abierta. La correcta adquisición de datos de los sensores es fundamental para el funcionamiento del algoritmo de navegación. La función 'Initialize' permite seleccionar el protocolo de comunicación y el modo de funcionamiento (Standard o cRIO-USB), ofreciendo flexibilidad en la configuración del sistema. El uso de LIDAR es mencionado como una herramienta para obtener datos de entorno para mejorar la navegación, aunque no se implementa en el ejemplo mostrado.

5. Interacción con RobotSim Lectura y Control

Para interactuar con RobotSim, se necesita una librería específica de LabVIEW. Esto implica modificar la programación de entradas y salidas para comunicarse con el programa que controla el robot virtual. La principal utilidad de RobotSim es el testeo de algoritmos de navegación y el comportamiento del robot, dejando de lado el testeo de comunicación y control a bajo nivel (ej. programación FPGA). RobotSim permite agregar objetos físicos al entorno de simulación, ya sea de una librería o creados desde cero. Se pueden añadir robots virtuales previamente creados con RobotBuilder, cada uno con su propia IP para la comunicación con LabVIEW. Para leer o modificar las propiedades de los sensores y actuadores, se utiliza el 'Property Name'. Se describe una función de lectura para RobotSim (Figura 2.31) y se menciona la limitación de RobotBuilder para listar las referencias exactas de actuadores y sensores, requiriendo conocer las referencias de objeto. Para finalizar la comunicación se utiliza la función DeleteStarterKitRobot. Un botón 'Control Manual' permite alternar entre el modo autónomo y el control manual del robot. Se utiliza una estructura 'Case' para controlar los diferentes modos de operación del robot, ya sea autónomo o con control manual. La capacidad de simular la interacción con los sensores y actuadores facilita el desarrollo y pruebas de los algoritmos, permitiendo una mejor comprensión de su comportamiento antes de la implementación en el robot físico.

II.Algoritmo de Navegación y Planificación de Ruta con A

Un algoritmo de navegación autónoma se implementa usando el algoritmo A*. Este algoritmo, ampliamente usado en robótica y videojuegos, encuentra la ruta más eficiente entre un punto de inicio y un punto final en un mapa, considerando obstáculos. La implementación en LabVIEW utiliza un mapa de ocupación (Occupancy Grid Map) para representar el entorno. La función A Star Plan calcula la ruta, que luego se traduce en comandos para el robot, incluyendo movimientos lineales y rotaciones. Se utiliza un array 2D booleano como entrada de datos para representar el mapa, asignando costes (1 para atravesable, 100 para obstáculo). Las funciones Get Cell Reference y Get Cells in Path son cruciales para la interacción con el mapa. La odometría se utiliza para estimar la posición del robot, aunque se reconocen sus limitaciones y los errores acumulativos.

1. Implementación del Algoritmo A

El documento describe la implementación del algoritmo A* para la planificación de rutas en un robot móvil utilizando LabVIEW Robotics. El A*, un algoritmo de búsqueda best-first por grafos, encuentra el camino de menor coste entre un nodo inicial y un nodo meta en un mapa, considerando obstáculos. LabVIEW proporciona una implementación del A*, aprovechando su capacidad para la búsqueda eficiente de rutas en entornos complejos. El algoritmo calcula el coste total (f(x)) para cada nodo, que se compone del coste hasta el nodo actual (g(x)) y una heurística (h(x)). En este caso, LabVIEW utiliza la heurística de Manhattan para estimar el coste desde el nodo actual hasta el nodo meta, ignorando diagonales y obstáculos en la estimación. El proceso iterativo del A* comienza añadiendo el nodo inicial a la lista cerrada, evaluando sus nodos adyacentes y añadiendo los atravesables a la lista abierta, asignando un nodo antecesor a cada uno. La función A Star Plan es la encargada de ejecutar el algoritmo, proporcionando una referencia de ruta (Path Reference) que luego se puede usar con la función Get Cells in Path para obtener las coordenadas X e Y de la ruta calculada.

2. Representación del Mapa y Creación de la Cuadrícula de Ocupación

Para la representación del mapa, se utiliza un array bidimensional booleano. Este array se procesa convirtiendo los valores booleanos en costes: 1 para celdas atravesables y 100 para obstáculos (paredes). Este array alimenta la función Create Occupancy Grid Map, generando un mapa de ocupación en forma de cuadrícula de celdas con variables asociadas. Esta representación del mapa permite al algoritmo A* identificar de manera eficiente las zonas accesibles y los obstáculos en el entorno, facilitando el cálculo de una ruta óptima. La función Create Occupancy Grid Map es una herramienta fundamental que permite transformar los datos del mapa en una estructura de datos adecuada para la implementación del algoritmo A*. La utilización de un array 2D booleano proporciona una forma simple y eficiente de representar el mapa, y permite una fácil adaptación a diferentes tamaños y configuraciones. Una vez creado el mapa de ocupación, se especifican los nodos de inicio y fin usando la función Get Cell Reference, proporcionando las coordenadas en el mapa y obteniendo como resultado la referencia a la celda correspondiente en el mapa de ocupación.

3. Traducción de la Ruta y Algoritmo de Desplazamiento

Las coordenadas de la ruta calculada por el algoritmo A* se traducen a instrucciones de movimiento para el robot. Esto se realiza mediante dos arrays: 'Tipo Movimiento' e 'Instrucción de Movimiento'. El array 'Tipo Movimiento' indica el tipo de acción (movimiento lineal o giro), mientras que 'Instrucción de Movimiento' especifica el valor necesario para cada acción (distancia o ángulo). Una serie de estructuras 'Case' anidadas procesan esta información y actualizan los arrays. El algoritmo de desplazamiento utiliza estos arrays para controlar los motores del robot, realizando los movimientos lineales y giros necesarios para seguir la ruta planificada. La información del tipo de movimiento y las instrucciones específicas se procesan de manera secuencial para asegurar un desplazamiento preciso del robot siguiendo la ruta optima. El proceso de traducción de la ruta en instrucciones para el robot es crucial para la correcta ejecución del algoritmo de navegación, permitiendo el control preciso del movimiento.

4. Inicialización y Manejo de Obstáculos

La función de planificación de la ruta se inicializa estableciendo las variables y arrays necesarios: arrays de orientaciones, tipo y datos de movimiento, un índice para modificar los arrays y una variable para controlar la distancia en movimientos lineales. Las variables se transmiten entre iteraciones mediante registros de desplazamiento en el bucle. Se utilizan velocidades constantes de 8.4 radianes por segundo para los motores (con el motor derecho configurado en sentido contrario al izquierdo). Se maneja la inercia del robot en los giros, reduciendo la velocidad cuando se acerca al ángulo de destino para evitar errores de sobregiro, observados en pruebas anteriores. Para el manejo de obstáculos, el código se encapsula en un bucle While, inicializando variables clave (mapa, coordenadas de inicio y fin, orientación) fuera del bucle para propagar información entre iteraciones. En iteraciones posteriores, una estructura 'Case' reemplaza el código de inicialización del mapa, tomando el mapa actualizado de la iteración anterior. La detección de obstáculos, según la información del documento, se integra con la lógica del algoritmo de planificación de ruta para determinar si es necesario recalcular la ruta al encontrar un nuevo obstáculo.

III.Integración de Sensores y Actuadores

El proyecto integra sensores como un sensor de ultrasonidos para la detección de obstáculos y una brújula digital CMPS09 para la orientación. Se discuten los desafíos asociados con el uso de la brújula, incluyendo la sensibilidad a interferencias magnéticas y la necesidad de un montaje cuidadoso para minimizar errores. La programación de la FPGA (Field-Programmable Gate Array) se utiliza para el control de bajo nivel de algunos componentes. Se incluye un código de ejemplo para la actualización del sensor de ultrasonidos, con funciones como Calculate Next Angle y UpdateSonar.vi. Para comunicación inalámbrica, se integra un router WiFi al Starter Kit, permitiendo el control remoto del robot.

1. Sensor de Ultrasonidos para Detección de Obstáculos

El sistema utiliza un sensor de ultrasonidos para detectar obstáculos. La función Calculate Next Angle determina el siguiente ángulo de medición del sensor, utilizando la función UpdateSonar.vi del Starter Kit. Esta función requiere el RobotPtr para establecer la comunicación y devuelve la distancia al obstáculo en el ángulo especificado. Las funciones relacionadas con el sensor de ultrasonidos se identifican en los diagramas de bloques por el fondo verde de sus iconos. Si bien esta librería de funciones es limitada, su importancia reside en su capacidad de generalización a otros robots con modificaciones menores. Las funciones incluidas están orientadas a una algoritmia básica, sirviendo como introducción a la programación basada en LabVIEW Robotics. Se menciona la función Drive Away From Nearest Obstacle que se activa si se detecta un obstáculo dentro del rango de pánico definido por el SVFH (Spatially-Varying Histogram) o si el obstáculo más cercano se encuentra a menos de 0.35 metros. El uso de un sensor de ultrasonidos ofrece una solución simple y económica para la detección básica de obstáculos, aunque se reconoce su limitada precisión para mapeo detallado.

2. Brújula Digital CMPS09 y Manejo de Interferencias Magnéticas

Se integra una brújula digital CMPS09 para obtener la orientación del robot. Sin embargo, se destaca la alta sensibilidad de este tipo de brújulas a las interferencias magnéticas. La proximidad de materiales magnéticos, como ciertos metales y motores, introduce errores significativos en las mediciones. Inicialmente, se intentó montar la brújula en una plataforma metálica, pero esto resultó en una alta distorsión del campo magnético. Finalmente, se optó por un montaje sobre un mástil de aluminio, minimizando las interferencias. Se proporciona la tabla de conexionado del módulo CMPS09 (#6 3.3-5V #44 5V), junto con un segmento de código de la FPGA que controla la brújula (Figura 3.12), donde se describe la lógica de procesamiento de la señal para actualizar la variable Heading de la FPGA. El uso de una brújula digital añade una capa de precisión en la navegación del robot; sin embargo, la correcta ubicación y aislamiento de la brújula son cruciales para evitar errores significativos en la estimación de la orientación.

3. Comunicación Inalámbrica y Control Remoto

Para facilitar el control y monitoreo del robot, se integra un router inalámbrico al Starter Kit, que se configura como punto de acceso WiFi. Esto permite la conexión remota a través de un terminal, siempre que se conozca la dirección IP. La conexión se realiza mediante el puerto Ethernet del robot. El router se alimenta de la propia batería del Starter Kit. Se describe el proceso de montaje físico del router en la parte trasera del robot, utilizando tornillos y tuercas para fijarlo a la base. La incorporación de la comunicación inalámbrica aumenta la flexibilidad y usabilidad del robot, permitiendo su control y monitoreo desde una ubicación remota. La capacidad de conectar el robot a una red inalámbrica facilita la supervisión del funcionamiento del robot, así como la transmisión de datos en tiempo real, aunque la seguridad de la red inalámbrica debería ser considerada en el diseño e implementación del sistema.

4. Control de Motores y Consideraciones de Hardware

Se destacan los interruptores MASTER y MOTOR, ubicados en la parte superior del Starter Kit. MASTER controla la alimentación principal, mientras que MOTOR permite desactivar los motores de forma independiente. Estos interruptores son fundamentales para la seguridad durante la carga, depuración y testeo del código. El correcto control de la potencia del robot es fundamental para la seguridad del sistema y de los usuarios. La posibilidad de desactivar los motores de forma independiente es una característica de seguridad importante durante la depuración del código. Se describe como una velocidad constante de los motores puede generar errores en los giros debido a la inercia, solucionando este problema reduciendo la velocidad al acercarse al ángulo de destino. Estas consideraciones de hardware, incluyendo la gestión de la potencia y la consideración de la inercia, son cruciales para la correcta operatividad y la seguridad del sistema.

IV.Pruebas y Resultados

Se realizaron pruebas del sistema completo, incluyendo la planificación de ruta y el seguimiento de la ruta calculada. Los resultados muestran que el robot logra llegar a la meta, aunque se observan pequeños errores debido a la odometría y otras limitaciones del sistema. Se discuten las posibles mejoras y extensiones futuras del proyecto, incluyendo la mejora de la precisión del mapa y la incorporación de sensores más avanzados como LIDAR.

1. Prueba del Algoritmo de Planificación de Ruta

Se realizaron pruebas del algoritmo de planificación de ruta, utilizando un mapa de dos dimensiones representado en el panel frontal del VI principal como una matriz de cuadrículas. Las casillas blancas representaban áreas atravesables, mientras que las grises representaban obstáculos. Se definió un punto de partida (3,3) en orientación norte y un punto objetivo (13,3). La planificación de la ruta se realizó previamente en un VI independiente en un PC, para luego compararla con el resultado del robot, validando así el funcionamiento del algoritmo. El algoritmo de planificación de ruta, basado en A*, se probó con éxito, encontrando una ruta efectiva desde el punto de inicio hasta el punto objetivo, esquivando los obstáculos definidos en el mapa. El resultado obtenido demostró la capacidad del algoritmo para generar rutas óptimas en un entorno simulado, demostrando la viabilidad de la implementación en el robot físico. Se indica que se puede realizar la planificación de ruta en un VI separado antes de la ejecución en el robot para verificar la ruta calculada antes de la ejecución real del algoritmo.

2. Prueba del Algoritmo de Desplazamiento y Errores de Odometría

El algoritmo de desplazamiento del robot se probó con la ruta previamente planificada. El robot comenzó en la coordenada especificada y siguió la ruta hasta llegar a la meta. Se reconoce la influencia de la odometría en la precisión del desplazamiento. Los errores observados fueron de aproximadamente 10 cm en la horizontal y 6 cm en la vertical, atribuidos a las limitaciones de la odometría y a posibles errores mínimos de la brújula digital. Estos errores son acumulativos, aumentando con la distancia y el número de giros, lo cual es una limitación inherente a la odometría. A pesar de los errores de odometría, el robot alcanza satisfactoriamente la meta, demostrando la funcionalidad del algoritmo de desplazamiento. La precisión del desplazamiento del robot está limitada por la exactitud de la odometría, así como por los errores introducidos por otros factores como la brújula. Estos errores son importantes de tener en cuenta para el diseño de sistemas de navegación con mayores requerimientos de precisión.

3. Análisis de Errores y Conclusiones

En las pruebas, el robot generalmente se detiene a unos 10 cm en la horizontal y 6 cm en la vertical de la meta. Estos errores son atribuibles a la estimación de distancias por odometría y errores mínimos de desviación de la brújula digital. Los errores aumentan proporcionalmente con la distancia recorrida y el número de giros efectuados, debido a la naturaleza acumulativa de los errores de la odometría. Se concluye que el algoritmo funciona dentro de los límites esperados, logrando el objetivo final, pero se presentan errores que deben ser considerados en futuras mejoras. Las pruebas han demostrado la funcionalidad del sistema, aunque hay margen para mejorar la precisión, especialmente en recorridos largos o con muchos giros. Se proponen posibles futuros trabajos para abordar estas limitaciones y mejorar la precisión del sistema, tales como la implementación de técnicas de fusión de sensores o la utilización de sensores más precisos.

V.Aplicaciones y Conclusiones

El Robotics Starter Kit con LabVIEW se presenta como una herramienta educativa efectiva para la enseñanza de robótica, ofreciendo una plataforma accesible para la experimentación con algoritmos de navegación y control de robots. Se destaca la facilidad de uso de LabVIEW y la posibilidad de expandir las funcionalidades del kit. Se mencionan ejemplos de cursos académicos que utilizan este kit como el Introduction to Robotics de la UNCC (Universidad de Carolina del Norte, EEUU), enfatizando su potencial como banco de pruebas para estudiantes y desarrolladores. El proyecto demuestra la capacidad de crear un robot móvil autónomo usando herramientas accesibles y un enfoque modular, usando LabVIEW Robotics, RobotSim, y algoritmos de planificación de ruta como el A*.

1. Potencial del Robotics Starter Kit como Herramienta Educativa

El documento destaca el notable potencial del Robotics Starter Kit como herramienta educativa en entornos académicos. Se enfatiza que la combinación de LabVIEW y el Starter Kit ofrece un banco de pruebas y experimentación con una curva de aprendizaje accesible, facilitando la introducción a la robótica para principiantes y expertos. El kit ofrece un hardware premontado, con la posibilidad de expandir sus funcionalidades sin mayores complicaciones, permitiendo que los usuarios se centren en la programación y el desarrollo de algoritmos. Se menciona la existencia de un curso práctico de iniciación a la robótica realizado en la UNCC (Universidad de Carolina del Norte, EEUU) en 2011, que utilizaba el Starter Kit para enseñar temas como la instalación de hardware adicional (acelerómetro), la odometría y la programación de la FPGA, culminando con el desarrollo de un algoritmo de navegación estándar. Esta plataforma permite el desarrollo de aplicaciones para el Starter Kit manteniendo la programación gráfica de alto nivel, sin la necesidad de montar el robot desde cero ni configurar su hardware.

2. Conclusiones sobre el Funcionamiento de RobotSim

RobotSim se evalúa como una herramienta satisfactoria para simular el comportamiento del robot físico en un entorno virtual, cumpliendo su propósito principal. Sin embargo, se reconocen limitaciones debido a su corto tiempo de desarrollo, principalmente la falta de variedad de sensores simulados y la carencia de utilidades para verificar la lista de actuadores y sensores directamente desde el programa. Se menciona la necesidad de implementar un VI rudimentario para suplir esta falta. A pesar de estas limitaciones, RobotSim permite un acercamiento al desarrollo de algoritmos robóticos centrándose en la programación, con la opción de acceder a la FPGA para un control a bajo nivel cuando sea necesario. La simulación en RobotSim permite probar y refinar algoritmos antes de su implementación en el robot físico, lo cual reduce tiempo y recursos, mejorando la eficiencia del proceso de desarrollo. El uso de RobotSim como herramienta de prototipado y simulación es una característica importante del proceso de desarrollo.

3. Posibles Trabajos Futuros y Aplicaciones

El documento concluye proponiendo posibles futuros trabajos y aplicaciones derivados del proyecto. Se menciona la posibilidad de extender la funcionalidad del sistema incluyendo un sensor LIDAR para un mapeo más preciso, ya que el sensor de ultrasonidos utilizado tiene limitaciones para generar mapas exactos. El alto costo de los sensores LIDAR fue la razón para no incluirlos en este proyecto. El sistema desarrollado tiene un alto potencial para ser utilizado en cursos prácticos de iniciación a la robótica, ofreciendo una experiencia práctica con un entorno de desarrollo intuitivo y una plataforma de hardware funcional. Se indica que la mejora de la precisión del mapa y la incorporación de sensores más avanzados constituyen líneas de investigación futuras. Se podrían explorar nuevas aplicaciones del sistema, aprovechando la versatilidad del Starter Kit y las capacidades de LabVIEW. El desarrollo de algoritmos más sofisticados, la integración de otros sensores y la optimización del sistema son algunas de las áreas de mejora para futuros trabajos.

Referencia de documento

  • Programación en Labview (Valery Moreno Vega y Adel Fernández Prieto)
  • Getting Started with NI LabVIEW Robotics