Autoware.u学习历程(二)

Autoware.u学习之车辆定位测试

一 内容概括


本章的内容是完成车辆的定位信息和车道线/障碍物信息测试。
 

二 车辆定位


车辆的定位输出信息分为好多种,经纬度,地图坐标等。之前用gazebo尝试过向模型添加虚拟GPS,IMU(类似于carsim和prescan这种添加真值传感器,专注于PnC的算法调试),但是找了一圈资料都没有关于AutoWare如何实现添加虚拟各种传感器的,问GPT的解释是AutoWare并不是一个仿真软件,而是一个自动驾驶开源软件;如果想达到完整的仿真链路,需要借助Carla或者Autoware自己研发的AWSim来进行操作,如果有知道如何不依赖Carla等软件进行虚拟传感器配置的大佬可以请教一下。

由于缺乏GPS传感器信息,无法使用gnss给出的信号,在仿真中可用的定位topic为 /localization/kinematic_state,文档中说明此信号为map坐标系下的车辆位置

在仿真界面指定车辆位置:

在终端输入:

ros2 topic echo --once /localization/kinematic_state

输出为:

header:
  stamp:
    sec: 1746284535
    nanosec: 882871433
  frame_id: map
child_frame_id: base_link
pose:
  pose:
    position:
      x: 3689.26025390625
      y: 73756.3125
      z: 19.136
    orientation:
      x: -0.00010767875107617374
      y: 0.0004308663327187301
      z: 0.24245542630812889
      w: 0.9701624446520456
...

继续摆放车辆,然后输出位置:

 

header:
  stamp:
    sec: 1746284704
    nanosec: 82771956
  frame_id: map
child_frame_id: base_link
pose:
  pose:
    position:
      x: 3737.746826171875
      y: 73778.265625
      z: 19.153
    orientation:
      x: 6.651958613775299e-05
      y: -0.00021915722005075246
      z: 0.2904404812315374
      w: 0.9568930318521766
...


 

header:
  stamp:
    sec: 1746284779
    nanosec: 432732456
  frame_id: map
child_frame_id: base_link
pose:
  pose:
    position:
      x: 3761.676025390625
      y: 73747.484375
      z: 19.294
    orientation:
      x: -0.003388168096615101
      y: -0.005649922382935947
      z: -0.5142853167919871
      w: 0.857593850039855
...


 

header:
  stamp:
    sec: 1746284869
    nanosec: 7800724
  frame_id: map
child_frame_id: base_link
pose:
  pose:
    position:
      x: 3714.81494140625
      y: 73719.5703125
      z: 19.3398
    orientation:
      x: 0.0004987544309335415
      y: 0.0001492396517919181
      z: -0.958030339037751
      w: 0.2866663538937835
...

用python画出这四个点的位置和heading,代码在图下,用四元数计算heading

 

import matplotlib.pyplot as plt
from scipy.spatial.transform import Rotation as R
import numpy as np


poses = [
    {
        "position": (3689.2603, 73756.3125),
        "orientation": (-0.0001076788, 0.0004308663, 0.2424554263, 0.9701624447),
    },
    {
        "position": (3737.7468, 73778.2656),
        "orientation": (6.6519586e-05, -0.0002191572, 0.2904404812, 0.9568930319),
    },
    {
        "position": (3761.6760, 73747.4844),
        "orientation": (-0.0033881681, -0.0056499224, -0.5142853168, 0.8575938500),
    },
    {
        "position": (3714.8149, 73719.5703),
        "orientation": (0.0004987544, 0.0001492397, -0.9580303390, 0.2866663539),
    },
]


x_list = [p["position"][0] for p in poses]
y_list = [p["position"][1] for p in poses]


plt.figure(figsize=(8, 8))
plt.plot(x_list, y_list, "k--", label="Trajectory")  

for i, pose in enumerate(poses):
    x, y = pose["position"]
    quat = pose["orientation"]
    yaw = R.from_quat(quat).as_euler("xyz")[2]  

    dx = np.cos(yaw) * 5
    dy = np.sin(yaw) * 5

    plt.plot(x, y, "ko")
    plt.arrow(x, y, dx, dy, head_width=1, head_length=2, fc="blue", ec="blue")
    plt.text(x, y, f"P{i+1}", fontsize=9, ha="right")

plt.axis("equal")
plt.grid(True)
plt.title("Vehicle Trajectory with Heading")
plt.xlabel("X")
plt.ylabel("Y")
plt.legend()
plt.show()


定位测试完成,能拿到自车的位置信息了,但是按理来说应该是经纬度的。这个后续看看再调一调,理想情况是可以的,因为现在拿到了地图坐标系下的坐标,而且我们有地图的信息,是可以推算出来的。


三 车道线/障碍物信息
 


一开始想着AutoWare会有虚拟的传感器或者就是topic来完成这个工作(对标PreScan的车道线传感器),但是很不幸,没有。查看了下demo的算法流程,是根据定位信息在地图中查找所在车道进而实现车道保持的。。。

(未完待续)

### Autoware.AI 与 Autoware.Universe 的区别 Autoware 是一个开源的自动驾驶软件栈,旨在为自动驾驶车辆提供完整的解决方案。Autoware 项目分为两个主要分支:**Autoware.AI** 和 **Autoware.Universe**。这两个版本在架构设计、功能模块、支持的平台以及开发目标等方面存在显著差异。 #### 架构设计 Autoware.AI 基于 **ROS 1**(Robot Operating System 1)构建,采用传统的节点通信模型,适用于早期的自动驾驶研究和开发场景。由于 ROS 1 的生命周期管理较为有限,Autoware.AI 的架构更偏向于静态部署,节点之间的通信依赖于固定的拓扑结构 [^1]。 Autoware.Universe 则基于 **ROS 2** 开发,充分利用了 ROS 2 的分布式架构、实时通信、安全机制以及生命周期管理功能。Autoware.Universe 的模块化设计更加灵活,支持动态节点加载、组件化部署以及多机器人系统协同,适用于更复杂的自动驾驶系统 [^1]。 #### 功能模块与性能优化 Autoware.AI 的功能模块较为成熟,涵盖了感知、规划、控制、定位等核心模块。然而,由于 ROS 1 的限制,其在实时性和安全性方面存在瓶颈,尤其是在高并发、低延迟的自动驾驶场景中表现受限 [^1]。 Autoware.Universe 在功能模块上进行了大量优化,引入了更高效的感知算法、路径规划策略以及控制逻辑。同时,Autoware.Universe 支持多种传感器接口(如激光雷达、摄像头、毫米波雷达等),并提供了更强大的仿真环境(如基于 CARLA 的集成方案),以提升系统测试与验证能力 [^1]。 #### 开发与社区支持 Autoware.AI 的开发主要集中在早期的自动驾驶研究阶段,社区活跃度较高,但随着 ROS 1 的逐步退出,其维护和支持也逐渐减少 [^1]。 Autoware.Universe 是当前 Autoware 社区的主要开发方向,得到了更广泛的行业支持。Autoware.Universe 的代码库结构更加清晰,模块之间耦合度更低,便于开发者进行定制化开发和系统集成 [^1]。 #### 应用场景 Autoware.AI 更适合用于学术研究、原型验证以及对实时性要求不高的自动驾驶项目 [^1]。 Autoware.Universe 则面向更广泛的工业级应用,包括自动驾驶出租车、智能物流、园区无人车等场景。其对 ROS 2 的深度集成也使其更适用于需要高可靠性和高安全性的自动驾驶系统 [^1]。 #### 示例代码:Autoware.Universe 中的感知模块 以下是一个基于 Autoware.Universe 的感知模块配置示例: ```yaml perception: lidar_e2e: module_name: "lidar_e2e" node_name: "lidar_e2e_node" parameters: input_topic: "/point_cloud" output_topic: "/detected_objects" model_path: "/opt/autoware/data/models/lidar_e2e.onnx" confidence_threshold: 0.7 ``` 该配置文件定义了一个基于激光雷达的端到端感知模块,使用 ONNX 模型进行目标检测,并通过 ROS 2 的话题机制进行数据传输。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值