【Autoware规控】Lattice规划节点

2023-05-16

文章目录

    • 1. Lattice规划介绍
    • 2. 相关代码

1. Lattice规划介绍

Lattice Planner 是一种基于栅格地图的规划算法,通过搜索和优化实现路径规划的目的。Lattice Planner 的核心思想是将路径规划问题转化为一系列离散化的决策问题,通过搜索和优化得到最优路径(多条路径撒点)。

与传统的A*算法不同,Lattice Planner 能够考虑车辆的动力学约束、道路限制和障碍物等因素,生成更加平滑且安全的路径。

在 Autoware 中,Lattice Planner 主要由以下几个模块组成:

lattice_planner_core:实现 Lattice Planner 的核心逻辑,包括路径搜索、代价计算和路径优化等。

lattice_planner_node:将 Lattice Planner 和 ROS 框架相结合,实现与其他模块的数据交互。

lattice_structure:定义了路径的数据结构,包括路径上的点、速度和加速度等信息。

lattice_traj_optimizer:负责对生成的路径进行优化,得到更加平滑和自然的路径。

Lattice主要用于自主停车、避障等功能。

2. 相关代码

Lattice主要有以下节点:lattice_trajectory_gen、lattice_twist_convert、lattice_velocity_set、path_select

waypointTrajectory根据当前位姿、速度、路径点等信息生成预测轨迹:

static union Spline waypointTrajectory(union State veh, union State goal, union Spline curvature, int next_waypoint)
{
    curvature.success=TRUE;  
    bool convergence=FALSE;
    int iteration = 0;
    union State veh_next;
    double dt = step_size;
    veh.v=goal.v;

    // While loop for computing trajectory parameters
    while(convergence == FALSE && iteration<4)
    {
        // Set time horizon
        double horizon = curvature.s/veh.vdes;
        ROS_INFO_STREAM("vdes: " << veh.vdes);
        ROS_INFO_STREAM("horizon: " << horizon);

        // Run motion model
        veh_next = motionModel(veh, goal, curvature, dt, horizon, 0);
        
        // Determine convergence criteria
        convergence = checkConvergence(veh_next, goal);

        // If the motion model doesn't get us to the goal compute new parameters
        if(convergence==FALSE)
        {
            // Update parameters
            curvature = generateCorrection(veh, veh_next, goal, curvature, dt, horizon);
            iteration++;

            // Escape route for poorly conditioned Jacobian
            if(curvature.success==FALSE)
            {
                ROS_INFO_STREAM("Init State: sx "<<veh.sx<<" sy " <<veh.sy<<" theta "<<veh.theta<<" kappa "<<veh.kappa<<" v "<<veh.v);
                ROS_INFO_STREAM("Goal State: sx "<<goal.sx<<" sy " <<goal.sy<<" theta "<<goal.theta<<" kappa "<<goal.kappa<<" v"<<goal.v);
                break;
            }
        }    
    }

    if(convergence==FALSE)
    {
      ROS_INFO_STREAM("Next State: sx "<<veh_next.sx<<" sy " <<veh_next.sy<<" theta "<<veh_next.theta<<" kappa "<<veh_next.kappa<<" v "<<veh_next.v);
      ROS_INFO_STREAM("Init State: sx "<<veh.sx<<" sy " <<veh.sy<<" theta "<<veh.theta<<" kappa "<<veh.kappa);
      ROS_INFO_STREAM("Goal State: sx "<<goal.sx<<" sy " <<goal.sy<<" theta "<<goal.theta<<" kappa "<<goal.kappa);
      curvature.success= FALSE;
    }

    else
    {
        ROS_INFO_STREAM("Converged in "<<iteration<<" iterations");

        #ifdef LOG_OUTPUT
        // Set time horizon
         double horizon = curvature.s/v_0;
        // Run motion model and log data for plotting
        veh_next = motionModel(veh, goal, curvature, 0.1, horizon, 1);
        fmm_sx<<"0.0 \n";
        fmm_sy<<"0.0 \n";
        #endif
    }

    return curvature;
}

lattice_twist_convert订阅车辆状态和规划输出,并发布到twist_cmd命令:

  // Publish the following topics:
  // Commands
  ros::Publisher cmd_velocity_publisher = nh.advertise<geometry_msgs::TwistStamped>("twist_raw", 10);

  // Subscribe to the following topics:
  // Curvature parameters and state parameters
  ros::Subscriber spline_parameters = nh.subscribe("spline", 1, splineCallback);
  ros::Subscriber state_parameters = nh.subscribe("state", 1, stateCallback);

lattice_velocity_set可根据不同的路段和情况设置不同的车辆速度。

path_select用来实现换道:

#include <ros/ros.h>
#include "autoware_msgs/Lane.h"
#include <iostream>

static ros::Publisher _pub;

void callback(const autoware_msgs::Lane &msg)
{
    _pub.publish(msg);
}


int main(int argc, char **argv)
{
    ros::init(argc, argv, "path_select");

    ros::NodeHandle nh;
    ros::Subscriber twist_sub = nh.subscribe("temporal_waypoints", 1, callback);
    _pub = nh.advertise<autoware_msgs::Lane>("final_waypoints", 1000,true);

    ros::spin();

    return 0;
}

在这里插入图片描述

以上。

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

【Autoware规控】Lattice规划节点 的相关文章

  • Autoware Docker 安装

    1 Ubuntu20 04 Docker 官方教程安装 Docker 官方教程安装 2 安装 nvidia container runtime Access an NVIDIA GPU 官方参考 span class token comme
  • 激光雷达(lidar)和相机(camera)联合标定调研(基于Autoware的详细步骤)

    简单记录一下使用Autoware对lidar和cam联合标定的步骤和一些注意事项 首先 xff0c 开源的lidar和cam标定方案不多 xff0c 花了一天查资料大概有以下几个 xff1a but velodyne https githu
  • autoware.ai docker配置

    配置环境 xff1a Ubuntu18 04 显卡驱动 510 85 02 cuda 11 1 用了我一整天的时间 xff0c 累死了 先按照此博文操作 博文里的这一步骤我没有用 sudo apt key fingerprint 0EBFC
  • Autoware源码分析——astar_avoid

    概要 本文是对autoware中waypoint planner功能包的相关文件组成和具体节点的分析 由于程序比较复杂 xff0c 我认为还存在一些不完整的地方 xff0c 之后也会继续分析 xff0c 继续更新 在看代码的过程中也学习了一
  • AUTOWARE下底盘CAN通讯实现

    无人驾驶系列 autoware与底盘CAN通讯实现 本文介绍在使用autoware时 xff0c 如何将autoware发送的消息传输给底盘 xff0c 实现对线控底盘的控制 准备工作 xff1a 1 系统具备ROS和autoware 2
  • Lattice CrosslinkNx LIFCL-40应用连载5:如何使用MIPI D-PHY硬核IP

    作者 Hello Panda 一 目标 配置CMOS Sensor OV9734 并通过MIPI DPHY硬核接收数据 使用一个RISC V软核 实通过AHB总线访问I2C FIFO 通过I2C总线配置OV9734 Sensor 使用MIP
  • 具有分组回归线的叠加 xyplot 面板

    我想在晶格中的单个面板上叠加多个组 并且想要独立的回归线 通过使用条件因子获得多个面板相当容易 每个面板都有一条回归线 xyplot Petal Width Petal Length Species data iris panel func
  • 删除带有嵌套因素的条形图中每个面板未使用的因素

    前段时间我问了一个问题如何删除条形图中未使用的因素 感谢 Aaron 我为这个问题找到了一个有用的解决方案 现在 我面临着一个非常相似的问题 但我过去使用的解决方案不适用于这种情况 这是重现我正在使用的数据框的代码 set seed 17
  • 如何在格子中标记面板

    这是一个简单的问题 您肯定已经遇到过 但让我很头疼 我有一个像这样的数据框 set seed 3 mydata lt data frame var rnorm 100 20 1 temp sin sort rep c 1 10 10 sub
  • 在 ggplot2 中使用 grconvertX/grconvertY

    我想弄清楚如何在 ggplot 中使用 grconvertX grconvertX 我的最终目标是向ggplot2图 也可能是lattice with grid text and grid lines从用户坐标到设备坐标 我知道可以用 gr
  • 如何在一个ggplot中拥有两个不同大小的图例?

    想象一下我绘制这个玩具数据 lev lt c A B C D nodes lt data frame ord c 1 1 1 2 2 3 3 4 brand factor c A B C B C D B D levels lev thick
  • 带 Lattice 和 panel.bpplot 的垂直箱百分位数图

    我正在 R 中使用 box percentile panel 函数绘制 box percentile 图Hmisc panel bpplot with bwplot from lattice 我有一个数字向量 Length 并希望显示其在因
  • 更改地层图(即多面板图)的 x 轴限制

    如何手动调整地层图中每个面板的 x 轴限制 例如 这里是Stratiplot from analogue library analogue data V12 122 Depths lt as numeric rownames V12 122
  • 在 R 中的点阵图例图中包含线和点

    大家好 我正在处理格子图 一切正常 但我在图例方面遇到了一些麻烦 我在用xyplot 而且效果非常棒 我的数据框是NM I add dput 最后部分的版本 AMes A2009 A2010 A2011 A2012 A2013 A2014
  • 如果使用 source() 运行,R 包lattice将不会绘制

    我开始使用lattice图形包但我偶然遇到了一个问题 我希望有人能帮助我 我想使用相应的函数绘制直方图 这是文件foo r library lattice data lt data frame c 1 2 c 2 3 colnames da
  • 获取点阵条形图函数中分组条形的中点值

    我试图弄清楚如何确定分组条形的中点值 即每个条形中心的实际 X 位置 这在基本 R 中很容易完成barplot功能 但是我希望能够做到这一点lattice s barchart 我的目标是在相应栏的顶部显示文本列的值 只要我不使用子组 下面
  • 控制 grid.layout 中的内部图形边距

    我正在尝试在网格中绘制多个格子图 为此 我使用以下代码 plot lt xyplot 1 10 1 10 page layout lt grid layout nrow 2 ncol 1 widths unit c 1 null heigh
  • 如何更改格子图中的填充颜色?

    考虑这个例子 library tibble library lubridate library lattice library latticeExtra df lt tibble time c ymd 2019 01 01 ymd 2019
  • 更改格子图中条带上的文本

    如何更改格子图中显示的文本 例子 假设我有一个由 3 列组成的数据框测试 x 1 1 2 3 4 5 6 7 8 9 10 y 1 A A A A A B B B B B a 1 1 9952066 1 7292978 0 8789127
  • 点阵图条件填充颜色

    Problem 我有一个数据框 我想用lattice的面板点图 不是ggplot2 对其进行可视化 它包含一个变量 应有条件地使用该变量通过不同的颜色填充突出显示数据 可重现的例子 require lattice Make reproduc

随机推荐

  • 1、什么是网络前缀

    基础知识 xff1a 1 已知一个IP地址 xff0c 如何区分它是A类地址还是B类或者C类地址呢 A类地址 1 0 0 0 到126 0 0 0 0 0 0 0 和127 0 0 0保留 B 类地址 128 1 0 0到191 254 0
  • ZYNQ petalinux设置固定IP地址

    背景 xff1a zynq petalinux在开机自启动以后ifconfig设置ip xff0c 然后运行应用程序 xff1b 如果设备没有串口且程序在启动过程中用Wireshark抓取不到信息 xff0c 这时 xff0c 就要使用固定
  • 10、IEEE802.3和Ethernet II帧的区别, 0x0806 ARP协议分析

    一 IEEE802 3和Ethernet II帧的区别 概念 xff1a 1 以太网上使用两种标准帧格式 第一种是上世纪80年代提出的DIX v2格式 xff0c 即Ethernet II格式 第二种是1983年提出的IEEE 802 3格
  • W10: Warning: Changing a readonly file使用vi/vim报错问题解决(使用管理员也不能修改)

    使用vi vim编辑文件的时候出现W10 Warning Changing a readonly file报错 解决方法 xff1a 一 强制保存退出 xff1a wq 二 ll 查询文件属主 xff0c 使用属主赋予权限 chmod u
  • 使用Galileo SDK跨局域网遥控机器人

    原链接 GalileoSDK是由我们开发的机器人导航系统SDK 通过SDK用户能够方便的操控机器人 现在小强用户已经可以免费体验到SDK的功能了 SDK内部集成了物联网连接功能 设置完成后用户能够通过SDK跨局域网遥控和获取机器人状态 下面
  • zcu102网口不通

    新建工程采用的板子默认配置 xff0c 启动后执行命令 xff1b dmesg grep ethernet 1 545671 macb ff0e0000 ethernet Not enabling partial store and for
  • zcu102开发板实现 虚拟jtag

    开发板zcu102 xff1b petalinux2020 1 需要自备一个FMC转JTAG的子卡 xff1b 此篇记录自己实现的过程 xff0c 以备查询 xff1b 1 整个流程连接 xff1a https xilinx wiki at
  • 查看ubuntu系统的版本信息、内存大小及使用、磁盘大小等常用命令

    一 ubuntu系统的版本信息 xff1a 方法 步骤 xff1a 1 进入Ubuntu系统 xff0c 点击左侧图标栏中的黑框 xff0c 打开终端 xff1b 2 左侧没有终端图标的情况 xff0c 可以搜索按钮 图中左侧第一个 xff
  • CentOS7 无法进入图形界面 黑屏

    问题现象描述 xff1a CentOS有界面的系统 xff0c 开机后进入界面 xff0c 在开机界面背景为 7 的地方卡住 xff0c 然后界面就黑掉 解决办法 xff1a 1 开机后 xff0c 按下 ctrl 43 alt 43 F2
  • 重装win10提示“Windows无法安装到这个磁盘,选中的磁盘具有MBR分区表,在EFI系统上,windows只能安装...”

    背景 xff1a 因为GHOST系统会捆绑大量软件 xff0c 主页被强制修改 xff0c 并且系统还可能存在删减的可能性 xff0c 所以越来越多的用户考虑安装官方MSDN原版系统 xff0c 但是呢 xff0c 近期总是有用户称自己在安
  • 在petalinux下提示:Failed to menu config project component....

    现象 xff1a 在petalinux下配置硬件描述语言时 xff0c 提示错误 xff1a 命令 xff1a petalinux config get hw description 61 hdf path 错误提示 xff1a ERROR
  • petalinux下修改系统空间笔记

    该文档是自己记录的笔记 xff0c 方便后面自己查看 在petalinux设置系统空间中需要注意的点 xff01 1 在menuconfig界面下设置系统空间为了在内核启动输出显示 xff1b Subsystem AUTO Hardware
  • PetaLinux 去除用户登陆 (Login into target without pass word)

    PetaLinux 自动登录登陆 1 初始化 PetaLinux 运行环境 xff1a source PetaLinux安装目录 settings sh 2 更改 PetaLinux 配置 xff1a 1 cd 到项目工程目录下 xff1b
  • PetaLinux 使用外部代码 (u-boot)

    背景 xff1a 在petalinux编译工程时 xff0c 我们可能有修改u boot源码的需求 xff0c 这时就需要我们使用外部的代码进行编译 实现步骤 xff1a 在配置前 xff0c 请确认我们已经在github上把对应的uboo
  • 异常的抛出和处理

    自定义输出异常 package error import java util ArrayList public class Exception public static void main String args TODO Auto ge
  • 在ROS中使用UDP进行通信

    原链接 ROS的网络通信提供了两种方式 xff0c 一种是TCP协议 xff0c 一种是UDP协议 默认采用TCP进行通信 但是在实际的WIFI网络使用中发现用户经常反馈客户端和机器人连接中断且无法重新建立连接 在ROS wiki中官方也有
  • 网络编程TCP/IP和UDP以及HTTP协议

    OSI的七层模型和TCP IP的四层模型 TCP IP协议是从OSI的七层模型中简化出来的 四层模型的详图 什么是HTTP协议 HTTP称为 超文本传输协议 是一种基于应用层的通信协议 xff0c 它允许将超文本标记语言 HTML 文档从W
  • 网络字节序之大小端(字节序与比特序)

    引言 xff1a 最近在网上看了很多博客 xff0c 想要深入了解大小端问题 xff0c 主要是做毕设时 xff0c RTP包协议的结构体定义有两种方式 xff0c 即大端和小端 但是一些博客并没有讲到理解大小端的本质问题 xff0c 在这
  • C++的编译流程

    C C 43 43 的编译流程 编译流程分为四个阶段 xff1a 预处理 编译 汇编 链接 以Linux系统下g 43 43 编译为例 xff1a 通过g 43 43 的选项可以查看过程中的每一步 预处理 xff1a 处理一些 号定义的命令
  • 【Autoware规控】Lattice规划节点

    文章目录 1 Lattice规划介绍2 相关代码 1 Lattice规划介绍 Lattice Planner 是一种基于栅格地图的规划算法 xff0c 通过搜索和优化实现路径规划的目的 Lattice Planner 的核心思想是将路径规划