pixhawk架构思想(pixhawk自定义uart的应用)

pixhawk uart串口
  • 新建一个uart.msg文件
  • 新建一个文件读取串口的数据
  • 使其在程序中传递串口数据,并进行运算

读取串口数据(坐标信息)

  1. 准备工作
  2. 准备一个uart设备,能够发送数据。这里我使用32开发板作为载体,向px4发送坐标信息,发送的数据格式为 ‘s:1234,1234,1234 ’单位为毫米。
  3. 开发px4代码
  4. 定义消息
  5. 首先在msg的文件夹下创建uart_pos.msg文件,然后在里面自定义数据类型,

uint32 id # ID of the estimator, commonly the component ID of the incoming message

int32 int_x # Z postiton in meters in the NED earth-fixed frame

int32 int_y # Z postiton in meters in the NED earth-fixed frame

int32 int_z # Z postiton in meters in the NED earth-fixed frame

  1. cmakeLists.txt中注册
  2. 在./msg/CMakeLists.txt中注册

set(msg_files ... wind_estimate.msg uart_pos.msg ) 1 2 3 4 5

  1. 读取uart数据
  2. 在./src/modules中新建文件夹read_uart 在文件夹中添加read_uart.c与CMakelists.txt
  3. read_uart.c内容主要如下:
  4. 初始化
  5. px4使用nuttx操作系统,所以我们不能直接像使用32库的方式来配置uart,nuttx 提供了uart的驱动,我们 只需要取调用就可以了:

/*初始化串口*/ int uart_read = uart_init(uart_name); if(false == uart_read)return -1; /*设置波特率*/ if(false == set_uart_baudrate(uart_read,115200)){ printf("set_uart_baudrate is failed "); return -1; } printf("uart init is successful "); 1 2 3 4 5 6 7 8 9 10

  1. uart_init(uart_name) 返回一个句柄,uart_name 可以在rcS脚本中找到,其中写着uart的具体名称:

/* * TELEM1 : /dev/ttyS1 * TELEM2 : /dev/ttyS2 * GPS : /dev/ttyS3 * NSH : /dev/ttyS5 * SERIAL4: /dev/ttyS6 * N/A : /dev/ttyS4 * IO DEBUG (RX only):/dev/ttyS0 */ 1 2 3 4 5 6 7 8 9

  1. 读取数据

while(!thread_should_exit){ read(uart_read,&data,1); read_uart(data); } 1 2 3 4 5

  1. 数据保存到data
  2. 数据处理与数据发送

int read_uart(char data) { static int i=0; static char rx_buff[48]; static char state=0; static int times = 0; times ; // int x,y,z; if(state ==0 || data == s)//数据起始位 { i=0; memset(rx_buff,0,sizeof(rx_buff)); state = 1; }else if(state == 1&&data ==:){ state = 2; }else if(state ==2 ){ if(data == )//数据结束位 { sscanf(rx_buff,"%d,%d,%d",&uart_data.int_x,&uart_data.int_y,&uart_data.int_z); if(times P0 == 0)//发送到控制台 mavlink_and_console_log_info(&mavlink_uart_pub, "[uart]ok %d %d %d",uart_data.int_x,uart_data.int_y,uart_data.int_z); state = 0; return 0; } rx_buff[i] = data; i ; } else state = 0; return 0; } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32

  1. 注册到飞控中
  2. ./src/modules/read_uart/CMakelists.txt中:
  3. 添加

px4_add_module( MODULE modules__read_uart MAIN read_uart_sensor COMPILE_FLAGS -Os SRCS read_uart.c DEPENDS platforms__common ) 1 2 3 4 5 6 7 8 9 10

  1. ./cmake/config/nuttx_px4fmu-v2_default.cmake添加

modules/sensors 1

  1. 在控制台输入

make px4fmu-v2_default upload

将生成的固件下载到pix中,然后在qgc的控制台上输入?应该能看到

pixhawk架构思想(pixhawk自定义uart的应用)(1)

这时接着输入read_uart_sensor start /dev/ttyS4(ttyS4是根据你连接的串口,

* TELEM1 : /dev/ttyS1

* TELEM2 : /dev/ttyS2

* GPS : /dev/ttyS3

* NSH : /dev/ttyS5

* SERIAL4: /dev/ttyS6

* N/A : /dev/ttyS4

* IO DEBUG (RX only):/dev/ttyS0)

pixhawk架构思想(pixhawk自定义uart的应用)(2)

这时你应该可以看到数据在通知栏和控制台上

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。