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

2023-05-16

关键是这个uORB

摘自:https://blog.csdn.net/msq19895070/article/details/52012190?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159684289919195264534597%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=159684289919195264534597&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_v1~rank_blog_v1-1-52012190.pc_v1_rank_blog_v1&utm_term=uorb&spm=1018.2118.3001.4187

图片摘自:https://blog.csdn.net/Gen_Ye/article/details/53423823?utm_source=blogxgwz9

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

 

阿木实验室 2016-07-24 07:53:41 6529 收藏 11

分类专栏: APM/PIX调试

版权

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

1 接口选择

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

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

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

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的发布和订阅功能呢,我们下一篇文章在细说!
阿木社区:玩也要玩的专业!
转载著名出处 潇齐

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PIXHAWK源码分析之三---通过串口方式添加一个自定义传感器 的相关文章

  • pixhawk飞控接口含义

    官方文档 xff1a https docs px4 io v1 9 0 en flight controller pixhawk html 1 spektrum DSM receiver2 xff0c 3 远程通信口 xff0c 接数传4
  • pixhawk使用WiFi模块

    pixhawk使用WiFi 前期准备刷固件安装刷固件软件进入刷固件模式下载固件刷固件 使用接线飞控参数更改使用方法 在使用pixhawk的时候有时候在无人机上不方便搭载处理器 xff0c 这个时候进行外部控制 或者QGC有线方式连接无人机不
  • PIXHAWK飞行模式

    PIXHAWK飞行模式 从mission planner中设置pixhawk的飞行模式时 xff0c 一共给出了多种飞行模式 xff0c 分别为 xff1a MANUAL STABILIZED ACRO RATTITUDE ALTCTL P
  • PX4/Pixhawk---uORB深入理解和应用(最新版)

    1 简介 ps 第1章简介是参考 uORB深入理解和应用 1 1 PX4 Pixhawk的软件体系结构 PX4 Pixhawk的软件体系结构主要被分为四个层次 xff0c 这可以让我们更好的理解PX4 Pixhawk的软件架构和运作 xff
  • Pixhawk无人机飞行模式详解 (PX4源码)

    我帮大家把飞行模式控制量与特点总结一下 xff0c 方便看代码 xff0c 如下所示 xff1a 辅助模式 Position Mode 位置模式 xff08 定点模式 xff09 横滚俯仰控制角度 xff0c 油门控制上下速度 xff0c
  • pixhawk无人机避障

    本人最近用树莓派结合PX4做无人机避障 xff0c 使用激光雷达 xff0c 有没有一起的小伙伴 xff0c 我们一起交流 xff01 私信我 xff0c
  • APM、PIXHAWK、PX4的关系

    摘自 xff1a https bbs amovlab com forum php mod 61 viewthread amp tid 61 1202 amp extra 61 page 3D1 Pixhawk PX4 APM傻傻分不清 xf
  • pixhawk的日志分析似乎是用flightplot

    https blog csdn net sinat 39342174 article details 79982138 http blog sina com cn s blog 643af4310102wx3n html 我准备把今天飞的P
  • PIXHAWK添加自定义消息存储到SD卡

    四旋翼调试阶段总会出现很多难以预见的现象 xff0c 这时为了找到所出问题的原因 xff0c 就需要获得原始相关数据进行分析 xff0c pixhawk代码提供了记录飞行日志的功能 xff0c 能够将飞行中的重要数据存入SD卡中 xff0c
  • pixhawk日志ulg格式转matlab数据csv格式

    1 windows下打开Anconda Prompt xff0c 执行pip install pyulog安装pyulog包 2 在日志文件所在文件夹下执行ulog2csv 文件名 ulg即可生成相关的csv文件
  • PX4/Pixhawk---高速成为开发人员(Windows)

    1 高速成为开发人员新手教程 xff08 翻译 xff09 官方 1 1 编译环境之版本号控制系统 xff08 1 xff09 安装 MSysGIT 安装完毕后 xff0c 配置GIT 安装注意 安装过程中除了以下一步外 xff0c 其它的
  • 使用者——初见Pixhawk

    是什么 Pixhawk简单介绍 直接使用二次开发 Pixhawk总体概述怎么用 Pixhawk初次使用 搭建调试环境初始化配置测试试飞调整参数提高性能 xff08 是什么 Pixhawk简单介绍 PixHawk是著名飞控厂商3DR推出的新一
  • pixhawk position_estimator_inav.cpp思路整理及数据流

    写在前面 xff1a 这篇blog主要参考pixhawk的高度解算算法解读 xff0c 并且加以扩展 xff0c 扩展到其他传感器 xff0c 其实里面处理好多只是记录了流程 xff0c 至于里面实际物理意义并不是很清楚 xff0c 也希望
  • pixhawk commander.cpp的飞行模式切换解读

    commander cpp逻辑性太强了 xff0c 涉及整个系统的运作 xff0c 所以分别拆分成小块看 另此篇blog大部分是参考 xff08 Pixhawk原生固件解读 xff09 飞行模式 xff0c 控制模式的思路 xff0c 笔者
  • Pixhawk之姿态控制篇

    一 开篇 姿态控制篇终于来了 来了 来了 心情爽不爽 xff1f 愉悦不愉悦 xff1f 开心不开心 xff1f 喜欢的话就请我吃顿饭吧 xff0c 哈哈 其实这篇blog一周前就应该写的 xff0c 可惜被上一篇blog霸占了 但是也不算
  • pixhawk PX4FMU和PX4IO最底层启动过程分析

    首先 xff0c 大体了解PX4IO 与PX4FMU各自的任务 PX4IO STM32F100 为PIXHAWK 中专用于处理输入输出的部分 输入为支持的各类遥控器 PPM SPKT DSM SBUS 输出为电调的PWM 驱动信号 它与PX
  • pixhawk position_estimator_inav.cpp思路整理及数据流

    写在前面 xff1a 这篇blog主要参考pixhawk的高度解算算法解读 xff0c 并且加以扩展 xff0c 扩展到其他传感器 xff0c 其实里面处理好多只是记录了流程 xff0c 至于里面实际物理意义并不是很清楚 xff0c 也希望
  • F450机架 Pixhawk飞控实现自动避障(2019.11.29)

    之前进行无人机项目 xff0c 实现避障 巡航 定点 航拍等功能 xff0c 项目结束 xff0c 在这里进行分享经验 xff0c 项目所用器件为自己使用的 xff0c 仅供参考 xff0c 实际实现须结合自己实际情况 1 传感器选择 权盛
  • Pixhawk-信息流浅解析

    根深方能叶茂 在等待的日子里 xff0c 刻苦读书 xff0c 谦卑做人 xff0c 养得深根 xff0c 日后才能枝叶茂盛 Better 根爷 之前我们已经谈到系统框架 xff0c 之前谈到了定制自己功能的两部 xff1a 添加模块和修改
  • pixhawk之NSH调试

    一 ardupilot固件 windows环境 前期准备 1 xff1a pix烧录程序 xff0c Arducopter或者library中的example都可以实现 2 xff1a 拔掉SD卡 xff08 脚本中提到的没有SD卡进入ns

随机推荐