仿真环境中生成专家轨迹

2023-05-16

仿真环境中生成专家轨迹

文章目录

  • 仿真环境中生成专家轨迹
    • 简介
    • 代码运行
    • 步骤
      • 获取输入数据
        • Reference Trajectory
        • Environment Pointcloud
        • Full Quadrotor State
      • 方法描述
      • 输出规划轨迹

简介

本文为博客的子文,目的是生成专家轨迹,后续作为训练网络的真值标签,进行有监督学习。

仿真环境的整体运行流程如下:

  1. 全局规划
  2. 平滑轨迹
  3. kExecuteExpert模式下,选择专家轨迹中的最优轨迹。
  4. 然后控制飞机按照专家轨迹进行飞行,保存odometry.csv
  5. 然后对专家轨迹进行标签,得到轨迹真值label。
  6. 然后运行网络,并有标签真值轨迹进行有监督训练。
  7. 网络输出3条轨迹,kNetwork模式下,选择3条轨迹中的最优轨迹。
  8. 根据最优网络输出轨迹控制无人机运动,得到实际飞机的执行轨迹。

本模块主要实现全局规划,即专家轨迹的生成。流程框图如下:
在这里插入图片描述输入:

  • Reference Trajectory
  • Full Quadrotor State
  • Environment Pointcloud

输出: 规划的前3条轨迹
方法:M-H采样

代码运行

参考Readme.md中《Collect your own dataset》的步骤,注意打开配置文件 default.yaml and label_generation.yaml.中的perform_global_planning选项。

步骤

获取输入数据

Reference Trajectory

Reference Trajectory 通过给定起点和终点得到,是一条直线轨迹。
在这里插入图片描述上图中,直线为Reference Trajectory, 枚红色轨迹为全局规划的输出轨迹。橙色为深度学习网络训练生成的用于飞机的实际执行轨迹。

Environment Pointcloud

Environment Pointcloud 通过给定飞机的起点和终点(终点通过起点加上40m得到),可以获取unity场景的有限范围的真实点云。
在这里插入图片描述

Full Quadrotor State

仿真环境中使用状态估计器(state_predictor_)给出飞机的实时位姿。
状态估计器(state_predictor_)的主要估计位姿的方法是通过上一次的控制指令,以及现在的时间,进行积分,代码如下:

/// state_predictor.cpp
QuadExtStateEstimate StatePredictor::predictWithoutCommand(
    const QuadExtStateEstimate& old_state,
    const double total_integration_time) const
{
  QuadExtStateEstimate new_state = old_state;
  double current_integration_step = 0.0;
  double integrated_time = 0.0;

  while (integrated_time < total_integration_time)
  {
    current_integration_step = std::min(
        integration_step_size_, total_integration_time - integrated_time);
    new_state = dynamics(new_state, current_integration_step);
    integrated_time += current_integration_step;
  }

  return new_state;
}

QuadExtStateEstimate StatePredictor::dynamics(
    const QuadExtStateEstimate& old_state, const double dt) const
{
  QuadExtStateEstimate new_state;

  new_state.timestamp = old_state.timestamp + ros::Duration(dt);
  new_state.coordinate_frame = old_state.coordinate_frame;
  new_state.position = old_state.position + old_state.velocity * dt;
  new_state.velocity = old_state.velocity;
  new_state.orientation = quadrotor_common::integrateQuaternion(
      old_state.orientation, old_state.bodyrates, dt);
  new_state.bodyrates = old_state.bodyrates;
  new_state.thrust = old_state.thrust;

  return new_state;
}

而控制指令通过MPC控制器得到,MPC控制器需要给定预计的飞机位姿(predicted_state),待执行的轨迹(reference_trajectory),即可输出控制指令(control_cmd)。对应代码:

 control_cmd = base_controller_.run(predicted_state, reference_trajectory,
                                       base_controller_params_);

飞机的初始状态为悬停,位置为给定的飞机起点。此时,MPC控制器通过待执行的轨迹,和飞机的初始姿进行初始化估计(Solving MPC with hover as initial guess.),输出控制指令;–>有了初始控制指令+下一次的时间,可以用状态估计器(state_predictor_)来预测目的位姿。–> 然后有了预测的位姿,和待执行的轨迹,又可以MPC计算控制指令。以此往复,即可控制飞机跟随轨迹运动,并输出实时的飞机位姿。

方法描述

通过启动文件,可以看到全局规划通过ellipsoid_planner_node实现。

    <!-- Global Planning -->
    <include file="$(find mpl_test_node)/launch/ellipsoid_planner_node/global_planning.launch"/>

ellipsoid_planner_node流程 : 加载reference_trajectory.csv–>加载unity点云,转换为ros格式的点云,发布出去。–> 初始化planner (MPL::EllipsoidPlanner) ,并设置相应配置项–> 发布规划的起点和终点坐标 --> 运行轨迹规划(planner_->plan(start, goal);) --> 规划成功后,发布规划的轨迹,并保存ellipsoid_trajectory.csv。

planner 代码里面有两种规划算法: LPAstar 和 Astar。详细算法实现可以参考:S. Liu, K. Mohta, N. Atanasov, and V. Kumar, “Search-based motion planning for aggressive flight in se (3),” IEEE Robotics and Automation Letters, vol. 3, no. 3, pp. 2439–2446, 2018.

输出规划轨迹

全局规划轨迹完成之后,会有两个模块使用该轨迹。
(1) AgileAutonomy::completedGlobalPlanCallback 会进行如下处理:

  • 加载生成的全局规划轨迹 ellipsoid_trajectory.csv
  • 平滑轨迹,再保存

(2) GenerateLabel::generateInitialGuesses 会进行如下处理:

  • 加载参考轨迹 ellipsoid_trajectory.csv
  • 加载odometry.csv文件,该文件存放飞机的位姿。
  • 根据每行的位姿获取对应的参考轨迹段 horizon_reference。并存为trajectory_ref_wf_*.csv。
  • 将参考轨迹段和飞机的姿态,采用基于优化的MPC方法进行优化,得到优化过的轨迹段 optimized_reference。并保存为trajectory_mpc_opt_wf_*.csv。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

仿真环境中生成专家轨迹 的相关文章

  • TM4C123G学习记录(4)--关于ROM前缀函数和HWREG函数

    为了准备电赛临时学一下TM4C123G xff0c 简单记录学习内容大家可以在这里下载我收集的资源 xff0c 非常全面 xff0c 花了很大功夫收集来的 xff0c 还有书籍 例程代码等还可以在TI官网下载相关文档TI官网 这两天学习TM
  • TM4C123G学习记录(6)--UART

    因为想申请 CSDN 博客认证需要一定的粉丝量 xff0c 而我写了五年博客才 700 多粉丝 xff0c 本文开启关注才可阅读全文 xff0c 很抱歉影响您的阅读体验 为了准备电赛临时学一下TM4C123G xff0c 简单记录学习内容大
  • TM4C123G学习记录(7)--输入捕获

    因为想申请 CSDN 博客认证需要一定的粉丝量 xff0c 而我写了五年博客才 700 多粉丝 xff0c 本文开启关注才可阅读全文 xff0c 很抱歉影响您的阅读体验 为了准备电赛临时学一下TM4C123G xff0c 简单记录学习内容大
  • ANO匿名飞控分析(1)— 遥控器解码

    准备电赛 xff0c 简单写一下匿名飞控的分析基于TM4C主控的匿名拓空者飞控 xff0c 介绍见匿名科创 匿名拓空者PRO TI版全开源飞控使用入门 TM4C123 文章目录 一 简介二 PWM信号模式1 介绍2 硬件连接 三 PPM信号
  • OLAP分析引擎Druid配置文件详解(五):MiddleManager配置文件

    摘要 xff1a 本文是Druid配置文件系列博文的第五篇 xff0c 我们将继续逐个介绍Druid的五大组件 xff0c 本文将开始介绍Data Server中的middle manager和peon组件 以下配置都在middleMana
  • ANO匿名飞控分析(2)— 任务调度

    准备电赛 xff0c 简单写一下匿名飞控的分析基于TM4C主控的匿名拓空者飞控 xff0c 介绍见匿名科创 匿名拓空者PRO TI版全开源飞控使用入门 TM4C123 一 简介 匿名飞控的任务调度还是比较简单的 xff0c 没有操作系统什么
  • 点云地面点滤波(Cloth Simulation Filter, CSF)“布料”滤波算法介绍

    本篇博客参考Wuming Zhang的文章 An Easy to Use Airborne LiDAR Data Filtering Method Based on Cloth Simulation 不方便的小伙伴可以在此 xff1a 资源
  • TSCAN + TMODEL处理点云数据生成DEM

    点云数据生成DEM流程 目录 点云数据生成DEM流程1 软件环境2 操作流程2 1 加载TSCAN TMODEL插件2 2 读取点云数据2 3 点云去噪 滤波2 4 构建tin模型2 5 生成格网DEM2 6 查看DEM数据 对基于商业软件
  • LeGO-LOAM算法详解

    LeGO LOAM算法详解 整体框架 LeGO LOAM算法的总体框架如下图所示 xff1a 图中新增加了绿框中的Segmentation环节 xff0c 同时对后续的特征提取 Odometry以及Mapping部分均有一定的修改 xff0
  • 最速下降法解析(理解笔记)

    我们在高中或本科时期就了解到 xff1a 当函数存在解析形式且容易进行求导 xff08 f x f x f x 在最优点
  • ROS学习-tf介绍

    tf简介 一个机器人系统一个时间段通常有多个3D坐标系在变化 xff0c 如世界全局坐标系 xff0c world frame base frame gripper frame xff08 手臂 夹子坐标框架 xff09 xff0c hea
  • Anaconda 与 ROS 冲突解决

    Anaconda默认使用Python 3 而 ROS默认使用Python2 xff0c 若同时使用二者则会在调用一些ros包时出现冲突 目前解决方案是先在 bashrc文件中注释掉Anaconda xff1a span class toke
  • TI AWR1843毫米波雷达采集三维点云数据(ROS)

    毫米波雷达以其稳定性 对不同环境的适应能力 价格等方面的优势逐步引起了科研人员的注意 xff0c 本文主要介绍利用了TI xff08 德州仪器 xff09 的AWR1843设备 xff0c 基于ROS系统进行采集点云数据的流程 供大家参考及
  • 毫米波雷达原理介绍

    毫米波雷达是指工作在波长为1 10mm的毫米波段 xff0c 频率为30 xff5e 300GHz 基于其工作模式可以分为 脉冲 和 连续波 两种 其中 xff0c 脉冲类型的毫米波雷达的原理与激光雷达相似都是采用TOF的方法 而连续波类型
  • Ubuntu18.04使用Xorg创建虚拟屏幕

    目标 xff1a 使用远程软件 xff0c 如向日葵 TeamViewer Nomachine等来控制远程的电脑 xff08 Ubuntu 18 04桌面版本 xff09 作为服务端 存在问题 xff1a 被远程电脑若不连接屏幕会出现错误
  • 数学符号大全

    虽然在 Mathtype 能输入绝大多数想要的数学字符 xff0c 但是有些在 Visio 中无法输入 xff0c 可以在这里找出 xff0c copy就好了 xff0c 嘻嘻 xff5e 1 几何符号 2 代数符号 xff5e 3 运算符
  • 8小时用HTML5打造VNCViewer

    8小时用HTML5打造VNCViewer http cnborn net blog 另一个话题是ThoughtWorks徐昊带来的 8小时用HTML5打造VNCViewer 这个分享非常精彩 xff0c 其实现过程中的思考方式 使用的新技术
  • 自制ST-Link V2.1,带串口,可自动更新固件,含全套资料下载

    自制ST Link V2 1 xff0c 带串口 xff0c 可自动更新固件 xff0c 含全套资料下载 最近自制了一个带串口的ST Link V2 1 xff0c 现将全部资料共享给大家 xff0c 支持最新版的Keil 和IAR xff
  • LIO-SAM-自采数据运行踩坑

    一直觉得LIO SAM还是一个比较不错的激光雷达惯性里程计框架 xff0c 最近在使用自己的数据进行测试过程中出现了很多坑 xff0c 花费了一周多的时间才填平 xff0c 在此记录一下 前言 Ouster 128激光雷达数据Ouster内

随机推荐

  • ROS bag包提取数据

    日常使用中有时需要提取bag包中的某个topic数据为新的bag包 xff0c 或者裁剪其中的一段时间数据 这些功能均可以通过rosbag filter命令实现 下面 xff0c 我们简单介绍一下其使用流程 xff1a 首先 xff0c 使
  • Ouster激光雷达使用PTP时间同步

    IEEE1588 the Precision Time Protocol 简称为 PTP xff09 全称是 网络测量和控制系统的精密时钟同步协议标准 xff0c 可以使用ubuntu中的网卡作为时间的master也可以外接一个精准的时钟
  • MATLAB绘图:plot函数与bar函数详解

    MATLAB是由美国mathworks公司发布的主要面对科学计算 可视化以及交互式程序设计的高科技计算环境 我们可以利用它方便快捷的进行矩阵运算 绘制函数和数据 图像处理 前一段时间作者在进行毕业设计时使用MATLAB绘制了论文中的一系列插
  • 树莓派ubuntu mate系统连接PX4并通过UDP连接至QGC地面站

    前提条件 xff1a 树莓派安装了ubuntu mate 20 04系统ubuntu mate已经安装好ros 这里是noetic版本 系统 xff0c Mavros安装好QGC地面站的PCUSB数据线 xff08 确定能传输数据 xff0
  • make px4_sitl_default gazebo出现错误解决办法

    Ubuntu20 04按上图操作进行PX4配置的时候出现如下错误 xff08 确保你已经完整git Firmware或者已经翻墙 xff09 xff1a Configuring incomplete errors occurred See
  • ubuntu 常用命令汇总

    安装 sudo apt get install vim sudo apt get install nano 卸载 sudo apt get remove nano 给root用户设置密码 sudo passwd root 切换到root用户
  • 多任务学习-An Overview of Multi-Task Learning in Deep Neural Networks论文笔记

    An Overview of Multi Task Learning in Deep Neural Networks论文笔记 概述 xff1a 多任务学习有很多形式 xff0c 如联合学习 xff08 Joint Learning xff0
  • 结构体

    结构体 xff1a 结构是一些值的集合 xff0c 这些值称为成员变量 xff0c 每个成员可以是不同的类型变量 结构体成员的类型 xff1a 可以是 xff1a 标量 xff0c 数组 xff0c 指针 xff0c 结构体 struct
  • 【ROS-3】ROS实现图像目标检测

    1 darknet ros下载及编译 GitHub leggedrobotics darknet ros YOLO ROS Real Time Object Detection for ROS 直接下载zip就行 xff0c 解压到ros环
  • MapReduce实现基本SQL操作的原理

    Join的实现原理 select u name o orderid from order o join user u on o uid 61 u uid 在map阶段的输出中给每个value一个tag xff0c 用于区分数据来源 xff0
  • raw、qcow2、vmdk等虚拟机的镜像格式

    云计算用一个朋友的话来说 做云计算最苦逼的就是得时时刻刻为一些可能一辈子都碰不到的事做好准备 更苦逼的就是刚以为一个问题不会遇到 xff0c 立刻就发生了 这个还真的没有办法 xff0c 谁让哥我是搞云计算的呢 xff0c 简单一个虚拟化就
  • 树莓派3b安装win10的桌面版操作系统

    https www vediotalk com p 61 1999 目录 显示 国内播放节点 视频介绍 树莓派3b可以安装win10的桌面版操作系统 xff0c 大家也想体验的下 xff0c 不妨可以安装试试 xff0c 当然这并不能代替我
  • 无人机学习笔记之遥控篇

    遥控器 以LiteRadio 2c SE为例 1 遥控器按键 2 相关参数 3 遥控器工作原理 遥控器想要达到与无人机通信的功能需要有两部分配合完成 即 xff1a 发射器与接收机 遥控器上的控制杆转为无线电波发送给接收机 xff0c 而接
  • 二分类算法

    数据来源 xff1a 选自UCI机器学习库中的 银行营销数据集 Bank Marketing Data Set 算法完成目标 xff1a 这些数据与葡萄牙银行机构的营销活动相关 这些营销活动以电话为基础 xff0c 一般 xff0c 银行的
  • 防抖,节流 js

    概念 xff1a 函数防抖 debounce xff1a 触发高频事件后n秒内函数只会执行一次 xff0c 如果n秒内高频事件再次被触发 xff0c 则重新计算时间 函数节流 throttle xff1a 高频事件触发 xff0c 但在n秒
  • 如何远程访问Docker容器中的图形界面,如:kettle

    kettle是一个免费开源的 可视化的 功能强大的ETL工具 一般为了部署方便 xff0c 通常都部署在docker容器中 xff0c 那么如何远程访问kettle的图形界面呢 xff1f 我们通常有两种方式 xff1a 1 xff09 客
  • 电子罗盘的工作原理及校准

    ST集成传感器方案实现电子罗盘功能 电子 罗盘是一种重要的导航工具 xff0c 能实时提供移动物体的航向和姿态 随着半导体工艺的进步和手机 操作系统的发展 xff0c 集成了越来越多传感器 的智能手机 变得功能强大 xff0c 很多手机上都
  • OV2SLAM vs ORBSLAM2

    框图 各个模块算法 OV2SLAMORBSLAM2对比特征点提取与匹配Fast 43 LK光流Fast 43 ORB 描述子LK光流速度快输出的实时posePnPMotion only BAMotion only BA精度高一点初始化 单目
  • 论文学习--Learning High-Speed Flight in the Wild

    文章目录 Git子文链接代码运行编译环境编译步骤 可选 1 下载源码 2 先安装Open3D 3 修改Open3D的相关路径 4 开始编译 5 报错2 6 报错3 7 运行中报错 8 配置学习环境 9 下载flighemare渲染环境 运行
  • 仿真环境中生成专家轨迹

    仿真环境中生成专家轨迹 文章目录 仿真环境中生成专家轨迹简介代码运行步骤获取输入数据Reference TrajectoryEnvironment PointcloudFull Quadrotor State 方法描述输出规划轨迹 简介 本