Autoware.u学习历程(一)

Autoware.u学习:环境部署与车辆控制

一 准备过程

部署环境:Ubuntu/WSL2
安装教程: https://blog.youkuaiyun.com/qq_46101866/article/details/140473291
可以运行planning_simulator.launch.xml进行autoware自带的规划跟踪demo
 

二 开启自定义的过程

2.1 档位控制


想在autoware的环境下进行PnC自定义算法的搭建和验证,第一步首先就是要能够自己控制车辆,AutoWare和之前用过的PreScan和CarSim略有不同,具有档位的控制,更加贴近真实车辆。对控制来说,如果让车前进,档位必须在D档,先查看autoware车辆接收档位的topic,并查看topic的发送格式

ros2 topic info /control/command/gear_cmd

内容输出如下:

Type: autoware_vehicle_msgs/msg/GearCommand
Publisher count: 0
Subscription count: 2

可知topic的类型是 autoware_vehicle_msgs/msgs/GearCommand, 我们来看一下里面的内容,终端输入

ros2 interface show autoware_vehicle_msgs/msg/GearCommand

输出如下:

uint8 NONE = 0
uint8 NEUTRAL = 1
uint8 DRIVE = 2
uint8 DRIVE_2 = 3
uint8 DRIVE_3 = 4
uint8 DRIVE_4 = 5
uint8 DRIVE_5 = 6
uint8 DRIVE_6 = 7
uint8 DRIVE_7 = 8
uint8 DRIVE_8 = 9
uint8 DRIVE_9 = 10
uint8 DRIVE_10 = 11
uint8 DRIVE_11 = 12
uint8 DRIVE_12 = 13
uint8 DRIVE_13 = 14
uint8 DRIVE_14 = 15
uint8 DRIVE_15 = 16
uint8 DRIVE_16 = 17
uint8 DRIVE_17 = 18
uint8 DRIVE_18 = 19
uint8 REVERSE = 20
uint8 REVERSE_2 = 21
uint8 PARK = 22
uint8 LOW = 23
uint8 LOW_2 = 24

builtin_interfaces/Time stamp
        int32 sec
        uint32 nanosec
uint8 command

可以看到每个车有这么多档位可以选择,疑问:正常车辆不就是D、R、N、P四个档位吗,后来猜测有可能是对应手动挡的档位,问了下GPT解答如下

解释清楚后,在终端中准备发送一个换挡指令,在发送之前先看一下现在的档位,从图标可以看到是P档。

 

在终端发送档位切换命令,在指令那个图中查到2对应D档,终端输入

ros2 topic pub --once /control/command/gear_cmd autoware_vehicle_msgs/msg/GearCommand '{command: 2}'

可以看到仿真界面已经切换:

再试一次R档,对应数字为20
 

ros2 topic pub --once /control/command/gear_cmd autoware_vehicle_msgs/msg/GearCommand '{command: 20}'

查看仿真界面,已经切换。

 

2.2 横纵向控制

档位可以控制后,下一步就是控制车辆的横纵向运动,和档位一样,首先查看对应topic的type,终端输入命令

ros2 topic info /control/command/control_cmd

输出为

Type: autoware_control_msgs/msg/Control
Publisher count: 0
Subscription count: 3

我们继续查看这个类型里面的内容,终端输入:

ros2 interface show autoware_control_msgs/msg/Control

输出内容为:

# Control message with lateral and longitudinal components

# Time this message was created
builtin_interfaces/Time stamp
        int32 sec
        uint32 nanosec

# Time this configuration state is expected to be achieved in (optional)
builtin_interfaces/Time control_time
        int32 sec
        uint32 nanosec

# Lateral control command
Lateral lateral
        #
        #
        #
        builtin_interfaces/Time stamp
                int32 sec
                uint32 nanosec
        builtin_interfaces/Time control_time
                int32 sec
                uint32 nanosec
        float32 steering_tire_angle
        float32 steering_tire_rotation_rate
        bool is_defined_steering_tire_rotation_rate

# Longitudinal control command
Longitudinal longitudinal
        #
        #
        builtin_interfaces/Time stamp
                int32 sec
                uint32 nanosec
        builtin_interfaces/Time control_time
                int32 sec
                uint32 nanosec
        float32 velocity
        float32 acceleration
        float32 jerk
        bool is_defined_acceleration
        bool is_defined_jerk

可以看出,无论是横向还是纵向,Autoware都有许多种控制方法,以横向控制为例,可以选择控制方向盘转角或者方向盘角速度,那么我们先来测试一下方向盘转角控制,将横向指令的前轮转角设置为15°(0.2618rad),角速度设置为0,是否启用角速度控制设置为false,纵向控制先都不设置,查看输入指令前的车辆情况。


终端输入:

ros2 topic pub --once /control/command/control_cmd autoware_control_msgs/msg/Control '
{
  "lateral": {
    "steering_tire_angle": 0.2618,
    "steering_tire_rotation_rate": 0.0,
    "is_defined_steering_tire_rotation_rate": false
  },
  "longitudinal": {
    "velocity": 0.0,
    "acceleration": 0.0,
    "jerk": 0.0,
    "is_defined_acceleration": false,
    "is_defined_jerk": false
  }
}'

在RVIZ仿真界面可以看到,方向盘转角已经变成15°

下面先让方向盘转角归0(省略代码),然后测试一下角速度控制,横向控制参数为,方向盘转角0,方向盘角速度0.52356rad/s(30°/s),是否启用方向盘转角速度控制true,纵向设置为0,指令如下:

ros2 topic pub --once /control/command/control_cmd autoware_control_msgs/msg/Control '
{
  "lateral": {
    "steering_tire_angle": 0,
    "steering_tire_rotation_rate": 0.52356,
    "is_defined_steering_tire_rotation_rate": true
  },
  "longitudinal": {
    "velocity": 0.0,
    "acceleration": 0.0,
    "jerk": 0.0,
    "is_defined_acceleration": false,
    "is_defined_jerk": false
  }
}'

可是输入指令后车辆仿真界面方向盘转角并没有变化,怀疑这个只是一个接口,不过无关紧要,可以控制方向盘转角就足够完成横向控制了,这个问题留在以后有时间再测试。
纵向控制分为速度,加速度,冲击度这三种控制方式进行控制,先进行速度控制测试,速度:0.5m/s, 加速度 0 冲击度 0, 两个标志位都设为false,终端输入(不要忘记档位设置为D档):

ros2 topic pub --once /control/command/gear_cmd autoware_vehicle_msgs/msg/GearCommand '{command: 2}'


ros2 topic pub -r 10 /control/command/control_cmd autoware_control_msgs/msg/Control '
{
  "lateral": {
    "steering_tire_angle": 0.0,
    "steering_tire_rotation_rate": 0.0,
    "is_defined_steering_tire_rotation_rate": false
  },
  "longitudinal": {
    "velocity": 0.5,
    "acceleration": 0.0,
    "jerk": 0.0,
    "is_defined_acceleration": false,
    "is_defined_jerk": false
  }
}'

结果发现,速度不起作用。。。车依然静止,感觉和横向的角速度一样,只给个接口,或者当前车辆模型不支持速度控制,接着测试加速度控制,给一个小的加速度0.1m/s^2
车辆成功启动




总结:横向通过控制方向盘转角,纵向通过控制加速度成功控制车辆。
           后续待完成:
            1. 其他测试不起作用的控制方法不成功的原因(GPT的回答是Autoware的原因,但是我猜测和加载的车辆模型原因);
            2. 控制量到车身是理想控制?

下一章会进行定位和感知的测试。

### 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、付费专栏及课程。

余额充值