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. 控制量到车身是理想控制?

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

<think>我们正在安装Autoware的过程中,用户询问两个命令的具体作用: 1. `wget -O autoware.ai.repos "https://raw.githubusercontent.com/Autoware-AI/autoware.ai/master/autoware.ai.repos"` 2. `vcs import src < autoware.ai.repos` 这两个命令是Autoware安装过程中用于获取和配置源代码的关键步骤。 ### 解释第个命令:`wget -O autoware.ai.repos ...` - **wget**:是个用于从网络下载文件的命令行工具。 - **-O autoware.ai.repos**:指定将下载的内容保存到名为`autoware.ai.repos`的本地文件中。`-O`选项用于设置输出文件名。 - 下载的URL是:`https://raw.githubusercontent.com/Autoware-AI/autoware.ai/master/autoware.ai.repos` - 这个文件是Autoware项目的仓库配置文件(通常称为`.repos`文件),它定义了构建Autoware所需的所有子模块(子仓库)及其版本信息。 该命令的作用:将Autoware的仓库配置文件下载到当前目录下的`autoware.ai.repos`文件中。 ### 解释第二个命令:`vcs import src < autoware.ai.repos` - **vcs**:是个版本控制系统工具,通常用于管理多个Git仓库(类似于`repo`工具)。在ROS生态中,`vcs`(Version Control System)工具用于处理多仓库项目。 - **import**:是`vcs`的个子命令,用于根据配置文件导入(克隆)多个仓库。 - **src**:指定这些仓库将被克隆到当前目录下的`src`子目录中。 - **< autoware.ai.repos**:将之前下载的`autoware.ai.repos`文件作为输入提供给`vcs`命令。 该命令的作用:读取`autoware.ai.repos`配置文件,然后自动克隆配置文件中列出的所有仓库到`src`目录下。这样,所有的子模块(如autoware.core, autoware.universe等)都会被正确下载。 ### 补充说明 - **为什么需要这两个命令?** Autoware项目由多个独立的Git仓库组成(模块化设计),这些仓库必须起编译才能构建完整的系统。通过个`.repos`文件统管理这些仓库的地址和版本,可以确保下载的仓库版本兼容。 - **替代方法**:用户也可以使用`git clone`直接克隆整个项目(如引用[2]中提到的`git clone https://github.com/CPFL/Autoware.git --recurse-submodules`),但使用`.repos`文件的方式更灵活,特别是当需要特定版本或自定义某些仓库时。 ### 示例`.repos`文件内容 个典型的`.repos`文件(如`autoware.ai.repos`)内容如下(示例): ```yaml repositories: autoware/core: type: git url: https://github.com/autowarefoundation/autoware.core.git version: master autoware/universe: type: git url: https://github.com/autowarefoundation/autoware.universe.git version: master ... # 其他仓库 ``` `vcs import`命令会解析这个文件,并依次克隆每个仓库到指定的路径(如`src/autoware/core`,`src/autoware/universe`等)。 ### 总结 这两个命令是Autoware安装过程中获取源代码的标准流程: 1. 下载仓库配置文件(定义所有子仓库) 2. 使用vcs工具根据配置文件批量克隆仓库 这样确保了所有依赖的仓库都被正确下载,为后续的编译做好准备[^1][^2]。 §§相关问题§§ 1. 如何修改`.repos`文件以使用自定义的分支或仓库? 2. 除了vcs,还有其他工具可以管理多个Git仓库吗? 3. 在下载过程中遇到网络问题如何解决?</think>### 解释 Autoware 安装中的两条关键命令 #### 1. `wget -O autoware.ai.repos "https://raw.githubusercontent.com/..."` **作用:下载 Autoware 的仓库配置文件** - `wget`:Linux 下载工具 - `-O autoware.ai.repos`:将下载内容保存为指定文件名 - URL 地址:包含 Autoware 所有子仓库的定义文件(`.repos` 文件) **文件内容示例**(YAML 格式): ```yaml repositories: autoware/core: type: git url: https://github.com/autowarefoundation/autoware.core.git version: master autoware/common: type: git url: https://github.com/autowarefoundation/autoware.common.git version: master ... # 其他子仓库定义 ``` **核心功能**:该文件是 Autoware 的"仓库地图",定义了: - 所有必需子仓库(core, universe, common 等) - 每个仓库的 Git 地址 - 指定版本/分支信息 - 仓库之间的依赖关系[^1][^2] --- #### 2. `vcs import src < autoware.ai.repos` **作用:批量克隆所有子仓库** - `vcs`:ROS 的版本控制工具(替代 `git submodule`) - `import src`:将仓库克隆到当前目录的 `src/` 子文件夹 - `< autoware.ai.repos`:使用上步下载的配置文件作为输入 **执行过程**: 1. 解析 `.repos` 文件中的仓库定义 2. 自动创建 `src/` 目录结构: ``` src/ ├── autoware/ │ ├── core/ │ ├── universe/ │ └── common/ └── other_modules/ ``` 3. 按依赖顺序克隆所有仓库 4. 自动切换到配置文件中指定的版本/分支 **技术意义**: - 解决多仓库协同:Autoware 由 50+ 子仓库组成 - 确保版本兼容性:所有组件使用相互兼容的版本 - 替代手动 `git clone`:简化复杂项目的初始化流程[^1][^3] --- ### 典型工作流示例 ```bash # 1. 下载仓库定义 wget -O autoware.repos "https://raw.githubusercontent.com/.../autoware.ai.repos" # 2. 批量克隆仓库到src目录 vcs import src < autoware.repos # 结果:生成完整的源码树 ls src/ # autoware.core autoware.universe perception planning ... ``` > **重要提示**:这两个命令是 Autoware 多仓库架构的核心管理机制,确保所有组件版本致性和依赖完整性[^2][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值