PIXHAWK源码分析之三---通过串口方式添加一个自定义传感器(1)

原创 2016年07月24日 07:53:41

阿木社区:玩也要玩的专业! 转载请注明出处: http://www.amovauto.com/?p=978  QQ群:526221258

1 接口选择

          一直想尝试在PIXHAWK上添加超声波或者激光雷达,好在PIX提供了uORB这个数据接口(在前几篇文章里面有介绍),可以实现传感器数据的发布和订阅,我们利用uORB协议来实现把自定义的传感器数据从,串口或者IIC接口读取出来发布到系统内部,接下来如果我们想使用这些数据,我们只要写个订阅引用即可。这样理论上我们可以为PIX飞控添加很多传感器。我们这里先从PIX飞控上的串口,接口读取数据,然后发布。我们在去订阅它,看是不是接收到正确的串口数据。其实也可以用这个板子其他接口SPI,IIC,ADC等等接口通过发布和订阅的方式,把传感器数据接入飞控内部。PIX的板子想外接传感器数据还是挺容易的,我们先从简单的串口方式入手。最近PIX编译构架更新,这个和以往的文章不一样!

下面是PIX的串口接口示意图:
fef

测试使用Pixhawk板上TELEM2接口的USART2,对应的Nuttx UART设备文件尾/dev/ttyS2

20150821171601478

2 读取数据测试

步骤:

    • Firmware/src/modules中添加一个新的文件夹,命名为rw_uart
    • rw_uart文件夹中创建CMakeLists.txt文件,并输入以下内容:
      px4_add_module(
      MODULE modules__rw_uart
      MAIN rw_uart
      COMPILE_FLAGS
      -Os
      SRCS
      rw_uart.c
      DEPENDS
      platforms__common
      )
      这是CMake的编译脚本
    • rw_uart文件夹中创建rw_uart.c文件
    • 注册新添加的应用到NuttShell中。/src/Firmware/cmake/configs/nuttx_px4fmu-v2_default.cmake文件中添加如下内容:
      modules/rw_uart

上面表示把rw_uart.c编译成可以在nuttx里面运行的程序。

rw_uart.c

  

#include <stdio.h>
#include <termios.h>
#include <unistd.h>
#include <stdbool.h>
#include <errno.h>
#include <drivers/drv_hrt.h>
#include <string.h>
#include <systemlib/err.h>
#include <systemlib/systemlib.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>

__EXPORT int rw_uart_main(int argc, char *argv[]);

int set_uart_baudrate(const int fd, unsigned int baud);

int set_uart_baudrate(const int fd, unsigned int baud)
{
int speed;

switch (baud) {
case 9600:   speed = B9600;   break;
case 19200:  speed = B19200;  break;
case 38400:  speed = B38400;  break;
case 57600:  speed = B57600;  break;
case 115200: speed = B115200; break;
default:
warnx("ERR: baudrate: %d\n", baud);
return -EINVAL;
}

struct termios uart_config;

int termios_state;

/* fill the struct for the new configuration */
tcgetattr(fd, &uart_config);
/* clear ONLCR flag (which appends a CR for every LF) */
uart_config.c_oflag &= ~ONLCR;
/* no parity, one stop bit */
uart_config.c_cflag &= ~(CSTOPB | PARENB);
/* set baud rate */
if ((termios_state = cfsetispeed(&uart_config, speed)) < 0) {
warnx("ERR: %d (cfsetispeed)\n", termios_state);
return false;
}

if ((termios_state = cfsetospeed(&uart_config, speed)) < 0) {
warnx("ERR: %d (cfsetospeed)\n", termios_state);
return false;
}

if ((termios_state = tcsetattr(fd, TCSANOW, &uart_config)) < 0) {
warnx("ERR: %d (tcsetattr)\n", termios_state);
return false;
}

return true;
}

int rw_uart_main(int argc, char *argv[])
{
char data = '0';
char buffer[4] = "";

int uart_read = open("/dev/ttyS2", O_RDWR | O_NOCTTY);//打开串口设备

if (uart_read < 0) {
err(1, "failed to open port: %s", "/dev/ttyS2");
return -1;
}

if(false == set_uart_baudrate(uart_read,9600)){
printf("[YCM]set_uart_baudrate is failed\n");
return -1;
}
printf("[YCM]uart init is successful\n");

while(true){
read(uart_read,&data,1);
if(data == 'R'){
for(int i = 0;i <4;++i){
read(uart_read,&data,1);//读取串口数据
buffer[i] = data;
data = '0';
}
printf("%s\n",buffer);
}
}

return 0;
}

编译并刷固件
make clean
make px4fmu-v2_default
make up

查看app
在NSH终端中输入help,在Builtin Apps中出现rw_uart应用。
运行rw_uart应用(前提是模块与Pixhawk连接好)
在NSH终端中输入rw_uart,回车,查看串口数据的打印数据(TELEM2接口的USART2)。
以上就是简单的PIX里面的应用程序。可以从串口读取到数据到内部,可以看到避开了复杂的单片机配置过程,还是很方便的。但是以上的数据,是手动命令行启动,我们要让一些程序一上电就启动,还有飞控的主代码可以用这个传感器的数据,我们就要修改系统脚本和用到PIX的发布和订阅功能呢,我们下一篇文章在细说!
阿木社区:玩也要玩的专业!
转载著名出处 潇齐

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/msq19895070/article/details/52012190

pixhawk模块添加和修改以及经验分享

我看了apm的代码半年,px4的代码也看了一段时间,把我在这个过程遇到的问题和大家分享一下,我觉得有些人也会遇到同样的问题,给这部分人一点提示。谢谢大家。   首先还是先从apm讲起,它是由一群无人...
  • yzlicloud
  • yzlicloud
  • 2016年11月28日 19:01
  • 1619

Pixhawk原生固件PX4之串口添加读取传感器实现

假装用串口添加了传感器…… orz
  • oqqENvY12
  • oqqENvY12
  • 2017年03月01日 20:51
  • 2797

Pixhawk---通过串口方式添加一个自定义传感器(超声波为例)

Pixhawk—添加一个自定义传感器—超声波(串口方式)1 说明  首先超声波模块是通过串口方式发送(Tx)出数据,使用的模块数据发送周期为100ms,数据格式为:R0034 R0122 R0122 ...
  • FreeApe
  • FreeApe
  • 2015年08月21日 17:17
  • 8480

pixhawk 添加超声波传感器

http://copter.ardupilot.com/wiki/common-rangefinder-maxbotixi2c/    使用教程 1.打开Mission Pla...
  • qq_24815615
  • qq_24815615
  • 2016年02月26日 19:54
  • 2020

pixhawk/px4如何获取及使用传感器数据

如何pixhawk/px4获取及使用传感器数据 第一步:读取传感器数据 上一篇博文已经介绍了如何给pixhawk/px4创建一个应用程序,现在我们在上一个应用程序的基础上使用传感器数据。 应用程序为...
  • libing403
  • libing403
  • 2016年10月15日 21:32
  • 3761

pixhawk-px4之通过串口添加传感器应用

前言: 看到有博客通过串口添加自定义传感器,按照步骤做了一遍 博客:http://blog.csdn.net/msq19895070/article/details/52012190 一...
  • qq504196282
  • qq504196282
  • 2016年11月08日 20:16
  • 2053

Pixhawk---通过串口方式添加一个自定义传感器(超声波为例)

PX4/Pixhawk(10) 目录(?)[+] Pixhawk添加一个自定义传感器超声波串口方式 说明读取数据测试发布超声波的数据 1 定义主题和发布主题2 测试发布的主题订阅...
  • BBZZ2
  • BBZZ2
  • 2016年01月15日 13:50
  • 1223

APM和PIX飞控日志分析入门贴

我们在飞行中,经常会碰到各种各样的问题,经常有模友很纳闷,为什么我的飞机会这样那样的问题,为什么我的飞机会炸机,各种问题得不到答案是一件非常不爽的问题,在APM和PIX飞控中,都有记录我们整个飞行过程...
  • xazzh
  • xazzh
  • 2017年05月30日 23:37
  • 5059

APM飞控学习之路:5 串口概述与收发调试

“云中谁寄锦书来,雁字回时,月满西楼”。当无人机在空中飞翔时,从APM飞控到飞手之间有几条看不见的“风筝线”——(1)2.4GHz的遥控;(2)433/915MHz的数传;(3)5.8GHz的图传;(...
  • u010682510
  • u010682510
  • 2016年11月23日 20:11
  • 7849

Pixhawk(APM固件) ArduPilot的遥控器读取及油门转换

pixhawk(APM固件) ArduPilot的遥控器读取及油门转换
  • merlinholland
  • merlinholland
  • 2016年06月23日 16:23
  • 2625
收藏助手
不良信息举报
您举报文章:PIXHAWK源码分析之三---通过串口方式添加一个自定义传感器(1)
举报原因:
原因补充:

(最多只允许输入30个字)