Desarrollo profundo de Gimbal con C
Hay tres enfoques para desarrollar para reCamera Gimbal:
- Desarrollo de lógica de aplicación usando nodos Node-RED
- Scripting Bash usando herramientas can-utils a través de comandos de terminal
- Programación en C que requiere configuración de entorno de compilación cruzada y compilación de binarios
Este documento proporcionará una guía completa sobre cómo desarrollar para reCamera Gimbal usando programación en C.
Para desarrollo basado en Node-RED, consulte:
Documentación de desarrollo Node-RED
Antes de desarrollar, necesita instalar el entorno de compilación cruzada en su entorno de desarrollo.
Linux:
sudo apt-get update
sudo apt-get install can-utils
mkdir recamera && cd recamera
wget https://github.com/Seeed-Studio/reCamera-OS/releases/download/0.2.0/reCameraOS_sdk_v0.2.0.tar.gz
tar -xzvf reCameraOS_sdk_v0.2.0.tar.gz
git clone https://github.com/sophgo/host-tools.git
git clone https://github.com/Seeed-Studio/sscma-example-sg200x.git
export SG200X_SDK_PATH=$HOME/recamera/sg2002_recamera_emmc/
export PATH=$HOME/recamera/host-tools/gcc/riscv64-linux-musl-x86_64/bin:$PATH
Descargar el programa de ejemplo
sudo apt-get install unzip
wget https://files.seeedstudio.com/wiki/reCamera/Gimbal/CAN.zip
unzip CAN.zip
La estructura de directorios se muestra de la siguiente manera:

Necesita modificar el Makefile para reemplazar la variable CC con su propia cadena de herramientas de compilación cruzada.
CC = $HOME/recamera/host-tools/gcc/riscv64-linux-musl-x86_64/bin/riscv64-unknown-linux-musl-gcc
Compilar el programa
cd CAN/can_send
mkdir build && cd build
cmake ../
make
Subir el binario compilado a reCamera
scp can_send recamera@ip_address:/home/recamera
Use candump can0
para ver los datos del bus CAN
Use sudo ./can_send
para probar el script


Análisis del programa
Estos comandos se usan para configurar la velocidad del bus CAN y el estado de la interfaz, que solo necesitan ser inicializados una vez en la aplicación.
"sudo ip link set can0 type can bitrate 100000"
"sudo ifconfig can0 up"
Como se muestra, en el archivo can_send.c, los comandos anteriores se llaman usando la función system.

Necesita definir una estructura de trama CAN para almacenar el ID de la trama CAN, la longitud de datos y los datos. Y usar la función memset para limpiar la estructura de trama CAN a cero.
struct can_frame frame;
memset(&frame, 0, sizeof(struct can_frame));
Puede configurar can_id y can_dlc para configurar el ID de la trama CAN y la longitud de datos.
Este es el formato de datos de trama CAN estándar.
Usando nbytes = write(s, &frame, sizeof(frame));
para enviar la trama CAN al bus CAN, devuelve el número de bytes enviados. Puede comparar el valor devuelto con el número esperado de bytes para determinar si la trama CAN se envió exitosamente.
//5.Set send data
frame.can_id = 0x141;
frame.can_dlc = 8;
frame.data[0] = 0x80;
frame.data[1] = 0x00;
frame.data[2] = 0x00;
frame.data[3] = 0x00;
frame.data[4] = 0x00;
frame.data[5] = 0x00;;
frame.data[6] = 0x00;
frame.data[7] = 0x00
Puede consultar más programas en C en nuestro repositorio de Github.
Tenga en cuenta que los programas relacionados con Gimbal se desarrollan basándose en componentes Node-RED. Solo mantendremos programas Node-RED en el futuro, por lo que puede referenciar y desarrollar directamente en Node-RED.
Dado que los programas en C no se mantienen, pueden volverse inválidos a medida que se actualiza el firmware del motor. Use nuestro manual de motor más reciente para encapsular los comandos correctos para el desarrollo.
Recursos
Soporte técnico y discusión de productos
¡Gracias por elegir nuestros productos! Estamos aquí para brindarle diferentes tipos de soporte para asegurar que su experiencia con nuestros productos sea lo más fluida posible. Ofrecemos varios canales de comunicación para atender diferentes preferencias y necesidades.