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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值