1. Autoware环境搭建与仿真器配置
任务目标
在Ubuntu 20.04系统上完成Autoware.Universe的源码安装,配置LGSVL仿真器桥接,启动基础仿真环境并验证车辆模型在虚拟场景中正常响应控制指令。
环境依赖
- Ubuntu 20.04 LTS(x86_64)
- NVIDIA GPU驱动 ≥ 460(用于CUDA加速)
- ROS 2 Galactic(Autoware.Universe依赖版本)
- LGSVL仿真器 2021.3版本
安装步骤
首先安装ROS 2 Galactic基础环境,随后通过Autoware官方提供的自动化脚本完成依赖安装与源码编译。LGSVL仿真器作为独立进程运行,通过ROS 2桥接节点与Autoware通信。
核心实现
以下代码实现LGSVL与Autoware之间的车辆状态订阅与控制指令发布,是仿真环境运行的最小闭环:
# vehicle_bridge.py
import rclpy
from rclpy.node import Node
from autoware_auto_vehicle_msgs.msg import VehicleStateCommand, VehicleKinematicState
from geometry_msgs.msg import PoseStamped
class LGSVLBridge(Node):
def __init__(self):
super().__init__('lgsvl_bridge')
# 订阅Autoware控制指令
self.cmd_sub = self.create_subscription(
VehicleStateCommand,
'/control/vehicle_cmd',
self.cmd_callback,
10)
# 发布车辆状态给Autoware
self.state_pub = self.create_publisher(
VehicleKinematicState,
'/vehicle/kinematic_state',
10)
# LGSVL ROS2桥接话题(需在仿真器中启用)
self.lgsvl_cmd_pub = self.create_publisher(
PoseStamped,
'/lgsvl/vehicle_command',
10)
self.get_logger().info('LGSVL Bridge 已启动')
def cmd_callback(self, msg):
# 将Autoware控制指令转发至LGSVL
pose_msg = PoseStamped()
pose_msg.header.stamp = self.get_clock().now().to_msg()
pose_msg.header.frame_id = 'map'
pose_msg.pose.position.x = float(msg.longitudinal_accel_mps2)
pose_msg.pose.position.y = float(msg.lateral_accel_mps2)
pose_msg.pose.orientation.z = float(msg.steering_tire_angle_rad)
self.lgsvl_cmd_pub.publish(pose_msg)
def main(args=None):
rclpy.init(args=args)
node = LGSVLBridge()
rclpy.spin(node)
node.destroy_node()
rclpy.shutdown()
if __name__ == '__main__':
main()
运行与验证
- 启动LGSVL仿真器,加载Autoware示例地图(如San Francisco道路),选择车辆型号为Lexus RX450h
- 在LGSVL界面启用"ROS 2 Bridge"功能,设置桥接地址为本机
- 运行桥接节点:
python3 vehicle_bridge.py - 启动Autoware规划与控制模块:
ros2 launch autoware_launch planning_launch.py
通过条件
- 桥接节点启动后无报错,日志显示"LGSVL Bridge 已启动"
- 在LGSVL中手动设置目标点后,车辆模型开始沿规划路径移动
- 执行
ros2 topic echo /vehicle/kinematic_state能持续收到车辆位置与速度信息 - 执行
ros2 topic echo /lgsvl/vehicle_command能看到非零控制指令输出
满足以上全部条件即表示Autoware与LGSVL仿真器已完成基础联调,可进行后续算法开发验证。