px4 avoidance笔记

2023-05-16

最近在用px4官方的avoidance代码跑硬件避障,官方介绍了只要生成符合sensor_msgs::PointCloud2点云信息就能使用,因此为了应用长基线双目,没有使用realsense的相机,但在配置过程中一定要注意有几个地方别搞错了,浪费了很多时间:

  1. 点云订阅名称不要搞错,官方代码中话题名称在avoidance.launch中,如下:
<env name="ROSCONSOLE_CONFIG_FILE" value="$(find local_planner)/resource/custom_rosconsole.conf"/>
<arg name="pointcloud_topics" default="[/camera/depth/color/points]"/>

<!-- Launch local planner -->
<node name="local_planner_node" pkg="local_planner" type="local_planner_node" output="screen" required="true" >
  <param name="goal_x_param" value="0" />
  <param name="goal_y_param" value="0"/>
  <param name="goal_z_param" value="4" />
  <rosparam param="pointcloud_topics" subst_value="True">$(arg pointcloud_topics)</rosparam>
</node>

<!-- set or toggle rqt parameters -->
<node name="rqt_param_toggle" pkg="local_planner" type="rqt_param_toggle.sh" />
所以发布 话题要与之对应/camera/depth/color/points。 2. 发布点云信息中,帧id也不要搞错,在local_planner_nodelet.cpp代码最后的 LocalPlannerNodelet::pointCloudTransformThread(int index) 函数中,如下: void LocalPlannerNodelet::pointCloudTransformThread(int index) { while (!should_exit_) { bool waiting_on_transform = false; bool waiting_on_cloud = false; { std::lock_guard camera_lock(*(cameras_[index].camera_mutex_));
  if (cameras_[index].received_) {
    tf::StampedTransform cloud_transform;
    tf::StampedTransform fcu_transform;

    if (tf_buffer_.getTransform(cameras_[index].untransformed_cloud_.header.frame_id, "local_origin",
                                pcl_conversions::fromPCL(cameras_[index].untransformed_cloud_.header.stamp),
                                cloud_transform) &&
        tf_buffer_.getTransform(cameras_[index].untransformed_cloud_.header.frame_id, "fcu",
                                pcl_conversions::fromPCL(cameras_[index].untransformed_cloud_.header.stamp),
                                fcu_transform)) {
      // remove nan padding and compute fov
      pcl::PointCloud<pcl::PointXYZ> maxima = removeNaNAndGetMaxima(cameras_[index].untransformed_cloud_);

      // update point cloud FOV
      pcl_ros::transformPointCloud(maxima, maxima, fcu_transform);
      updateFOVFromMaxima(cameras_[index].fov_fcu_frame_, maxima);

      // transform cloud to local_origin frame
      pcl_ros::transformPointCloud(cameras_[index].untransformed_cloud_, cameras_[index].transformed_cloud_,
                                   cloud_transform);
      cameras_[index].transformed_cloud_.header.frame_id = "local_origin";
      cameras_[index].transformed_cloud_.header.stamp = cameras_[index].untransformed_cloud_.header.stamp;

      cameras_[index].transformed_ = true;
      cameras_[index].received_ = false;
      waiting_on_cloud = true;
      std::lock_guard<std::mutex> lock(transformed_cloud_mutex_);
      transformed_cloud_cv_.notify_all();
    } else {
      waiting_on_transform = true;
    }
  } else {
    waiting_on_cloud = true;
  }
}

if (should_exit_) {
  break;
}

if (waiting_on_transform) {
  std::unique_lock<std::mutex> lck(buffered_transforms_mutex_);
  tf_buffer_cv_.wait_for(lck, std::chrono::milliseconds(5000));
} else if (waiting_on_cloud) {
  std::unique_lock<std::mutex> lck(*(cameras_[index].camera_mutex_));
  cameras_[index].camera_cv_->wait_for(lck, std::chrono::milliseconds(5000));
}

}
}
}
帧id为local_origin要与之对应,否则会出现以下错误,容易误导人:
在这里插入图片描述

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

px4 avoidance笔记 的相关文章

  • 用matlab处理px4日志的转换方法

    px4 v1 8 2的版本可以选择用sdlog2模块记录日志 xff0c 通过QGC地面站下载的日志格式为 ulg xff0c 将下载成功的 ulg扩展名改为 bin xff0c 然后用MP地面站 数据闪存日志 创建matlab文件 xff
  • PX4 SITL Gazebo 仿真时 libgazebo_multirotor_base_plugin 插件运行时出错

    PX4 SITL Gazebo 仿真时 libgazebo multirotor base plugin 插件运行时出错 问题描述原因分析解决办法总结 问题描述 在 Gazebo 中进行 PX4 的软件在环仿真时 xff0c 执 make
  • PX4 GAZEBO无人机添加相机并进行图像识别

    PX4 GAZEBO无人机添加摄像头并进行图像识别 在之前完成了ROS的安装和PX4的安装 xff0c 并可以通过roslaunch启动软件仿真 接下来为无人及添加相机 xff0c 并将图像用python函数读取 xff0c 用于后续操作
  • PX4无人机 - 键盘控制飞行代码

    PX4无人机 键盘控制飞行代码 仿真效果 实机效果 由于图片限制5M以内 xff0c 只能上传一小段了 xff0c 整段视频请点击链接 Pixhawk 6c 无人机 键盘控制无人机 Offboard模式 核心 xff1a 发布 mavros
  • 基于F4/F7/H7飞控硬件和px4飞控固件的廉价自主无人机系统(1)-飞控

    前言 穿越机F4 F7 H7飞控是一系列采用stm32系列F4xx和F7xx处理器的飞控的统称 xff0c 是目前穿越机爱好者非常喜欢使用的飞控硬件 xff0c 其价格也非常便宜180 xff5e 410 而px4则是一款常见的开源飞控固件
  • px4源码编译指南

    px4源码编译指南 强烈推荐大家去看官网的英文文档 xff0c 国内的博客杂七杂八 xff0c 官网的中文也很久没有更新 xff0c 这几天自己踩了很多坑 xff0c 写个教程希望能帮助到大家 xff08 本文选用平台是pixhawk1 1
  • PX4 ---- Indoor Flight

    文章目录 室内飞行ROS amp PX4Pose Data 飞机配置MAVROS 基于工训赛 VIO 飞行总结 室内飞行 ROS amp PX4 Pose Data 飞机配置 VIO 参考此处 xff0c 采用 T265 配置 相机与飞控机
  • PX4 -- EKF2

    文章目录 EKF2参数高度估计Range Finder滤波 单变量更新单变量更新对多变量的影响 EKF2 参数 EKF2 中有一类 GATE 参数 当测量值在 VAR GATE 范围内才会更新值 高度估计 四种高度控制方法 xff1a 气压
  • PX4模块设计之一:SITL & HITL模拟框架

    PX4模块设计之一 xff1a SITL amp HITL模拟框架 1 模拟框架1 1 SITL模拟框架1 2 HITL模拟框架 2 模拟器类型3 MAVLink API4 总结 基于PX4开源软件框架简明简介的框架设计 xff0c 逐步分
  • PX4模块设计之四:MAVLink简介

    PX4模块设计之四 xff1a MAVLink简介 1 MAVLink PX4 应用简介2 MAVLink v2 0新特性3 MAVLink协议版本4 MAVLink通信协议帧4 1 MAVLink v1 0 帧格式4 2 MAVLink
  • PX4模块设计之十八:Logger模块

    PX4模块设计之十八 xff1a Logger模块 1 Logger模块简介2 模块入口函数2 1 主入口logger main2 2 自定义子命令Logger custom command2 3 日志主题uORB注册 3 重要实现函数3
  • PX4模块设计之二十四:内部ADC模块

    PX4模块设计之二十四 xff1a 内部ADC模块 1 内部ADC模块简介2 模块入口函数2 1 主入口board adc main2 2 自定义子命令custom command 3 内部ADC模块重要函数3 1 task spawn3
  • PX4模块设计之三十一:ManualControl模块

    PX4模块设计之三十一 xff1a ManualControl模块 1 ManualControl模块简介2 模块入口函数2 1 主入口manual control main2 2 自定义子命令custom command 3 Manual
  • PX4模块设计之三十三:Sensors模块

    PX4模块设计之三十三 xff1a Sensors模块 1 Sensors模块简介2 模块入口函数2 1 主入口sensors main2 2 自定义子命令custom command2 3 模块状态print status 重载 3 Se
  • PX4模块设计之三十六:MulticopterPositionControl模块

    PX4模块设计之三十六 xff1a MulticopterPositionControl模块 1 MulticopterPositionControl模块简介2 模块入口函数2 1 主入口mc pos control main2 2 自定义
  • PX4模块设计之四十五:param模块

    PX4模块设计之四十五 xff1a param模块 1 param模块简介2 模块入口函数param main3 重要函数列表4 总结5 参考资料 1 param模块简介 Description Command to access and
  • PX4飞控之自主返航(RTL)控制逻辑

    本文基于PX4飞控1 5 5版本 xff0c 分析导航模块中自护返航模式的控制逻辑和算法 自主返航模式和导航中的其他模式一样 xff0c 在Navigator main函数中一旦触发case vehicle status s NAVIGAT
  • PX4——Range Finder 篇

    Range Finder 此处选用的是 Benewake 下的 Lidar 参数设置 General Configuration 除了官方的参数设置外 xff0c 我在 EKF2 中还找到了 EKF2 RNG AID 参数 xff0c 用来
  • PX4项目学习::(七)飞控栈:commander

    PX4的飞行控制程序通过模块来实现 xff0c 与飞控相关的模块主要有commander xff0c navigator xff0c pos control xff0c att control这几个 xff0c 分别可以在src modul
  • 大神浅谈无人机飞控软件设计 系统性总结

    写在前面 深感自己对飞控软件 算法的知识点过于杂乱 很久没有进行系统的总结了 因此决定写几篇文章记录一些飞控开发过程的知识点 主要是针对一些软件 算法部分进行讨论 如内容有错误 欢迎指出 1 飞控软件的基本模块 无人机能够飞行主要是依靠传感

随机推荐

  • yolo论文中IOU/AP/MAP/NMS概念详解

    之前在只看了一遍吴恩达神经网络下写了一篇Darknet yolov2的综述 xff0c 最近接着往下学时发现很多基础的概念不是很懂 xff0c 所以这篇解决一下寸疑问题 1 卷积滑动窗口 滑动窗口大家都了解的 xff0c 从图片的左上角开始
  • ANO匿名飞控STM32代码解读(一)任务调度——Ano_Scheduler.c

    我所学习的代码是匿名飞控使用STM32芯片ANO PioneerPro 20190825的版本 匿名飞控的整体代码是跑裸机的 xff0c 任务调度是用STM32F4芯片中的系统时钟计时 xff0c 做了一个任务调度系统 xff0c 举个例子
  • 地面坐标系与机体坐标系的转换和欧拉角

    大家在入门四旋翼飞行器数学模型时第一个遇到的就是坐标系的转换 这篇文章用尽量浅显的语言为大家讲解坐标系的转换的欧拉角 机体坐标系 原点O取在飞机质心处 Xb轴指向机头 Yb轴指向机身右方 Zb指向机身下方 地面坐标系 在地面上选一点Og x
  • 飞桨AIStudio基础操作

    目录 执行和调试 多文件代码编辑 上传Notebook Notebook快捷键 Notebook中使用Shell命令 查看文件夹目录 使用pip来安装自己需要的package 但不支持apt get 查看当前环境中安装的package 持久
  • VSCode与CMake搭配使用之基本配置

    1 首先安装VSCode插件CMake和CMake Tools CMake插件主要功能是CMake语法高亮 自动补全CMake Tools的功能主要是结合VSCode IDE使用CMake这个工具 xff0c 比如生成CMake项目 构建C
  • 九、设置元素等待

    转载于 xff1a http www testclass net selenium python element wait WebDriver提供了两种类型的等待 xff1a 显式等待和隐式等待 显式等待 显式等待使WebdDriver等待
  • Unity Tweak Tool使用

    这年头 xff0c 都讲究个性 Unity刚出来的时候 xff0c 就觉着新奇 xff0c 其他也没啥 xff0c 就是有些小不顺手 最开始使用的Ubuntu Tweak到后来的Gnome Tweak Tool都有点偏 xff0c ubun
  • MYSQL–my.cnf配置中文详解

    basedir 61 path 使用给定目录作为根目录 安装目录 character sets dir 61 path 给出存放着字符集的目录 datadir 61 path 从给定目录读取数据库文件 pid file 61 filenam
  • vscode中C/C++的Clang-format的使用

    一 介绍 Clang format是一个功能强大的格式化工具 在vs code通过C C 43 43 扩展后即可使用Clang format工具进行代码的格式化 其自带的排版格式主要有 xff1a LLVM Google Chromium
  • ShardingJDBC核心概念与快速实战

    目录 ShardingSphere介绍 ShardingSphere特点 ShardingSphere简述 ShardingSphere产品区分 ShardingJDBC实战 核心概念 实战 ShardingJDBC的分片算法 Shardi
  • 野火嵌入式学习笔记:第47讲 按键检测输入

    野火 第一期 Linux系列教学视频之 零基础入门 篇 xff0c 手把手教学 xff0c 从0开始 xff0c 基于野火i MX6ULL Pro MINI开发板 第47讲 检测按键输入 哔哩哔哩 bilibili 检测用户按键3 key按
  • 学习野火嵌入式笔记 第48讲:进程的由来

    野火 第二期 Linux系列教学视频之 内核编程 篇 xff0c 手把手教学 xff0c 硬件基于野火i MX6ULL Pro MINI开发板 野火 第二期 Linux系列教学视频之 内核编程 篇 xff0c 手把手教学 xff0c 硬件基
  • 学习野火嵌入式笔记:第68讲 I.MX^ULL 启动方式

    野火 第三期 Linux系列教学视频之 裸机开发 篇 xff0c 手把手教学 xff0c 基于野火i MX6ULL Pro MINI开发板 哔哩哔哩 bilibili 先了解其芯片手册以及linux开发板的原理图 全篇就在讲启动方式的引脚设
  • C语言 字符串-字符串的匹配

    字符串匹配函数 const char strstr const char str1 const char str2 搜索字符串在另一个字符串中首次出现的位置 const char p 61 strstr 34 how are you 34
  • Lambda表达式

    什么是Lambda表达式 Lambda 表达式是 Java8 新增的重要特性 xff0c Lambda 使 Java 具有了函数式编程的思想 xff0c 它的实质也是由编译器根据表达式推断最终生成原始语法的字节码方式 函数式编程思想是 强调
  • MPU6050多次发送数据,但第一次读取的数据为0

    实际现象并不是第一次数据为0 xff0c 一直读取数据 xff0c 中间也会出现数据为0的现象 xff0c 原因是 xff1a 跟采样频率有关 xff0c 如果采样频率为50Hz xff0c 那么读取数据间隔时间必须大于20ms xff0c
  • gazebo多机仿真时出现的问题解决方法

    多机仿真过程中出现的飞机不动的情况是 xff1a 下面几个步骤要严格执行 xff1a cd PX4 span class token operator span Autopilot git submodule update span cla
  • Linux c多线程与c++多线程的基础写法

    最近工作需要 xff0c 对多线程做了一点了解 xff0c 现在将多线程的创建 xff0c 函数传参做个小结 一 linux c多线程 1 头文件 xff1a include lt pthread h gt 2 创建线程 xff1a pth
  • 姿态误差问题

    前段同学问了一个关于飞机姿态误差的问题 xff0c 将飞机姿态直接做差与px4里面先z轴对齐然后将过渡矩阵的姿态量赋值给滚转俯仰姿态误差对比 xff0c 发现直接做差后在飞机做大的机动时误差量会变大 xff0c 曲线的拟合非常不好 xff0
  • px4 avoidance笔记

    最近在用px4官方的avoidance代码跑硬件避障 xff0c 官方介绍了只要生成符合sensor msgs PointCloud2点云信息就能使用 xff0c 因此为了应用长基线双目 xff0c 没有使用realsense的相机 xff