¿C o C++ para un robot?
robotics (7)
Saludos,
Estoy tratando de decidir entre C y C ++ para mi robot. Soy un veterano de Visual Basic.NET de más de 5 años, sin embargo, voy con Linux (Ubuntu) en este robot, y hay un problema de compatibilidad entre Linux y .NET Framework. Quiero seguir con el idioma que elija para todos mis proyectos, por lo que quiero asegurarme de elegir el más apropiado para la tarea. Para referencia, describiré mi robot actual en progreso y lo que voy a hacer con él. Estoy en el proceso de construir un Astromech R4 de tamaño completo (sí, soy uno de esos tipos). He incorporado una placa madre para PC con un procesador Intel Core 2 2.1 GHz, 1 GB de RAM. Estaré usando una tarjeta de interfaz paralela construida a rasguño para controlar los motores de accionamiento, el motor principal, así como una tarjeta de interfaz paralela secundaria (que va a un segundo puerto paralelo) donde todos los sensores (IR, rango ultrasónico, reconocimiento visual a través de webcam, etc.) iremos a. Los comandos se darán utilizando el reconocimiento de voz (actualmente, tengo un programa de reconocimiento VB.NET creado a prueba de rasguños que me adaptaré al nuevo idioma). Dadas las especificaciones y los objetivos deseados enumerados anteriormente, ¿estaría mejor con C o C ++? Aprecio mucho cualquier sugerencia que pueda tener. ¡Gracias! Thaskalas
¿Has considerado D ? Es un lenguaje bastante nuevo, está compilado a código nativo y puede vincularse directamente a C. (La biblioteca estándar en C completa está disponible incluso en D, y los enlaces a la API de POSIX están incluidos en la biblioteca estándar). Básicamente, todo lo que necesita hacer para usar cualquier biblioteca de C desde D es compilarlo con un compilador de C y traducir los prototipos de funciones, las declaraciones de constantes, etc. en el archivo de encabezado.
D es lo suficientemente bajo como para que se escriba un núcleo experimental, pero tiene características modernas como recolección de basura (aunque la administración de memoria manual todavía está permitida), cadenas y matrices integradas, y funciones de metaprogramación de plantillas más avanzadas / fáciles de usar que C ++. La mayor desventaja es la falta de una cadena de herramientas y bibliotecas maduras para las cosas de la empresa, pero para sus propósitos eso probablemente no importa. Por cierto, si necesitas hacer un montón de manipulación de matrices y otras cosas, está el proyecto SciD , que proporciona envoltorios agradables con plantillas sobre LAPACK y BLAS.
C ++ es una bolsa de herramientas más grande; ¿Por qué no quieres eso? No necesita utilizar todas las herramientas, pero con C no tendría otra opción. Lo más importante es que con C ++ tiene la opción de utilizar bibliotecas de terceros tanto de C como de C ++.
También recomendaría C ++ y ROS . En nuestra empresa estamos emigrando a ella, porque hay mucha gente trabajando en ella, expandiéndola y agregando muchas características geniales.
Con esto, puede olvidarse de implementar la mayoría de las cosas básicas de bajo nivel y comenzar a trabajar en lo que pretende investigar.
Es realmente fácil de configurar y comenzar a desarrollar.
Utilice C ++. Tienes el espacio. Puedes usarlo "como una mejor C" para empezar.
Ya que está ejecutando Linux en él, recomendaría un enfoque dividido, en el que haga las cosas de nivel inferior (interfaz del dispositivo, donde puede necesitar un rendimiento rápido) en C (o C ++), y las cosas de nivel superior en una lenguaje moderno como C # (usando Mono) o Java, o incluso Python.
Python es especialmente expresivo, tiene un gran conjunto de bibliotecas y tiene una interfaz en C bastante sencilla.
Escribir su contenido de control de alto nivel en un lenguaje de bajo nivel como C / C ++ se volverá viejo (IMHO). ¡Los robots deberían ser divertidos!
Yo recomendaría el uso de ROS. Le permitirá comenzar con un sofisticado administrador de comunicaciones entre procesos, así como con una gran biblioteca de sofisticados códigos de robótica, que incluyen múltiples implementaciones de SLAM y otros algoritmos críticos de robótica. ROS también le permite programar en varios idiomas, incluidos C, C ++ y Python, por lo que no se queda atascado con un idioma u otro en el futuro.
¿Qué quiere decir con un problema de compatibilidad? ¿Has mirado a Mono ? Es una implementación de código abierto de las bibliotecas .NET. Está orientado a C # no a VB.NET, pero si está más cómodo en un entorno .NET, úselo. La velocidad no es realmente un problema aquí, ya que Core2Duo es bastante rápido para lo que necesita hacer.
Si Mono no funciona para ti, te recomendaría C ++. Hay muchas más bibliotecas por ahí para C ++ (o al menos, estoy familiarizado con más, por ejemplo, Boost ), que también puede usar la mayoría de las bibliotecas en C. No hay una penalización de velocidad real por usar C ++. Si bien el uso de C no sería malo en sí mismo, C ++ tiene algunos beneficios y no presenta inconvenientes, por lo que probablemente sea la mejor opción.