Método de comunicación basado en ROS SocketCAN
CAN 1.0 define CAN utilizando un identificador de mensajes de 11 bits y proporciona 2048 posibles identificadores de mensajes. En CAN 2.0A, el formato del mensaje es consistente con versiones anteriores de CAN que solo usaban ID de mensaje de 11 bits. En CAN 2.0B, se permite una ID de mensaje de 29 bits válida y CAN 2.0B se puede implementar en modo pasivo o activo. CAN 1.0 y 2.0A se denominan "CAN estándar" porque ambos utilizan una ID de mensaje de 11 bits. CAN 2.0 B se llama "CAN extendido" porque utiliza un ID de mensaje extendido de 29 bits
/web/#/64/2607
Tenga en cuenta que no todos los Chou Lih -Kung Todos los dispositivos CAN a USB son compatibles con Linux, como se muestra en la tabla: Linux-gt; USB-gt; Microcontroller-gt; CAN
A diferencia de CAN a serie, las bibliotecas utilizadas son libusb y libusbcan. leen y escriben directamente datos CAN a USB
libusb es un controlador de Linux que se utiliza para operar la interfaz USB para leer y escribir dispositivos USB.
libusbcan es un controlador proporcionado por el fabricante del dispositivo CAN a USB. Define la estructura de datos del marco de datos CAN, completa el ID CAN correspondiente y los datos CAN y finalmente lee y escribe a través de USB.
Referencia de protocolo: /web/#/55/2282
Linux-gt; TCP (UDP)/IP-gt;Microcontrolador-gt; Utilice la biblioteca de sockets de Linux para leer y escribir dispositivos de red.
Linux utiliza sockets para comunicarse con dispositivos CAN a través de direcciones IP. Un paquete de trama TCP/UDP contiene varias tramas CAN consecutivas, cada trama CAN contiene varios bytes, incluidos CAN ID y datos CAN:
Tenga en cuenta que Chou-Li Kung CAN a dispositivo PCI-E (PCI-5010 -P tipo) no es compatible con Linux: /web/#/146
Linux-gt; SocketCAN-gt; Microcontroller-gt; CAN
Linux proporciona la interfaz SocketCAN. Esto hace que la comunicación por bus CAN sea similar a la comunicación Ethernet. Los dispositivos de red se direccionan por su dirección IP, mientras que los dispositivos CAN se direccionan por su ID CAN, como can0, can1...
El ID CAN se puede ver con ifconfig -a
Linux Utilice la biblioteca SocketCAN para leer y escribir el dispositivo CAN de acuerdo con el ID del dispositivo CAN. La estructura de datos CAN está definida por la estructura en Socket CAN y se completa con los datos apropiados antes del envío.
Referencia del protocolo: /web/#/77/3180
Código fuente abierto: /web/#/77/3180
socketcan_interface es un controlador para Linux Paquete de software de bajo nivel socketcan.
socketcan_bridge es el paquete de software más utilizado en rose. Se utiliza para convertir los temas recibidos en datos can y enviarlos, o convertir los datos can recibidos en temas ros.
ros_canopen es un paquete de software basado en el paquete de protocolo de aplicación canopen, que es el protocolo de capa superior.
Esta funcionalidad se proporciona en tres nodos: socketcan_bridge_node, socketcan_to_topic_node y topic_to_socketcan_node. Para recibir y enviar tramas desde el mismo dispositivo CAN, se requiere un socketcan_bridge_node para evitar que cada mensaje enviado se repita en el tema receptor.
Recibe fotogramas de un dispositivo SocketCAN y los publica en un tema, mientras escucha mensajes CAN y los envía a SocketCAN.
Publicar fotogramas recibidos desde el dispositivo SocketCAN en el tema.
Para algunos paquetes de datos maduros, o paquetes de datos más complejos, existen dos métodos de modificación para convertir el tema en datos CAN y enviarlo:
El segundo método es relativamente simple. Es rápido, pero aumentará el retraso del relé de comunicación. Sin embargo, la comunicación del nodo de ROS se basa en TCP/IP y el retraso de la comunicación del nodo local es inferior a 1 ms. Para la comunicación del nodo local, este retraso puede ser inferior a 1 ms (para placas de 100 Mbps y superiores).
Para este nodo de tránsito, debe suscribirse a dos temas y publicar dos temas.
Los tipos de mensajes del tema socketcan_bridge_node son todos tipos de mensajes integrados en ROS can_msgs/Frame:
Los datos a completar son
Normalmente, este nodo de tránsito se coloca en un archivo de inicio junto con socketcan_bridge_node.
Si el nodo socketcan_bridge_node tiene un conflicto de nombres, agregue el grupo o reasigne el nombre del tema en el archivo de inicio.
Para la comunicación CAN en ROS, se recomienda utilizar el paquete de software CANable socketcan_bridge.
Github:
Referencia de uso del paquete ROS socketcan_bridge:
/zyf_too_utopia/article/details/ 116209605
/m0_58322903/article/details /121630592
/wangrunhuan/article/details/117962857
Introducción a SocketCAN:
https://en.wikipedia.org/wiki/SocketCAN p >
Introducción a SocketCAN:
https://en.