应用开发接口(API)

我们为Pursuit自驾仪提供开源API开发支持,候选API接口将支持C++、Python等语言。详细信息将持续更新在此部分。请注意,我们假定用户已经熟悉ROS的基本概念,未满足此前提的用户建议先通过官方教程:http://wiki.ros.org/ROS/Tutorials

Caution

我们官方支持的开发环境仅为Ubuntu 18.04和ROS Melodic。用户可以在其他主机环境中尝试使用Docker方法。

ROS API (C++)

Pursuit自动驾驶仪的ROS API在ROS包中实现,我们维护了以下几个包:

1. pursuit_driver包

(1) 订阅话题

以下话题仅用于产品发布,开发者不建议使用

  • /pursuit_outdoor_avoidance/trajectory/generated (mavros_msgs::Trajectory):

    导航模块生成的轨迹,将被发送到Pursuit自动驾驶仪。

  • /pursuit_outdoor_avoidance/avoidance_status (pursuit_msgs::AvoidanceStatus):

    使用机载激光扫描仪进行障碍物检测的避障状态

  • /pursuit_nav/smooth_cmd_vel (geometry_msgs::Twist):

    导航模块生成的平滑速度命令,将被发送到Pursuit自动驾驶仪。

(2) 发布话题

2. pursuit_msgs包

定制消息可以在 https://gitee.com/cloudkernel-tech/pursuit_msgs/tree/main/msg 查阅,它们的含义在定义中很容易理解。例如,下面是VcuBaseStatus消息的信息,它主要反映 无人车底盘的状态,包括转向角,前向速度,转向角速度等,根据不同车型有效状态是不同的

# Base type definitions
uint8 VCU_BASE_TYPE_UNDEFINED = 0
uint8 VCU_BASE_TYPE_ACKERMANN = 1
uint8 VCU_BASE_TYPE_DDRIVE_4WHEELS = 2

# Gear position definitions
uint8 VCU_GEAR_POSITION_UNDEFINED = 0   # undefined
uint8 VCU_GEAR_POSITION_P = 1   # pause/stop
uint8 VCU_GEAR_POSITION_R = 2   # recede
uint8 VCU_GEAR_POSITION_N = 3   # null
uint8 VCU_GEAR_POSITION_D = 4   # forward

# Operating mode definitions
uint8 VCU_OPERATING_MODE_AUTO = 0
uint8 VCU_OPERATING_MODE_REMOTE = 1
uint8 VCU_OPERATING_MODE_STOP = 2

std_msgs/Header         header

uint8       vcu_base_type         # vcu base type
uint8       gear_position         # current gear position
float32     speed                 # current moving speed, unit: m/s, positive value only
bool        steering_angle_valid    # valid flag for steering angle
float32     steering_angle          # steering angle in radians
bool        twist_valid
float32[3]  vel                     # velocity along body axes (m/s)
bool        heading_rate_valid
float32     heading_rate            # heading rate (rad/s)

uint8       operating_mode          # current operating mode

3. mavros包

mavros 包源自 PX4 社区( http://wiki.ros.org/mavros )。我们为 Pursuit 自动驾驶仪添加了自定义消息。大多数消息都可以在官方的 mavros wiki 页面上查阅,这里列举我们常用的部分。

(1) 订阅话题

  • ~mavros/setpoint_position/local (geometry_msgs/PoseStamped)

    发送到自驾仪的ENU坐标系目标位置值(仅在 offboard 模式下启用

  • ~mavros/setpoint_velocity/cmd_vel (geometry_msgs::TwistStamped)

    发送到自驾仪的ENU坐标系目标速度值(仅在 offboard 模式下启用

  • ~mavros/vcu_command_velocity/from_nav (geometry_msgs::Twist)

    发送到自驾仪的体坐标系下的线速度和角速度命令 (仅在 offboard 模式下启用

(2) 发布话题

  • ~mavros/state (mavros_msgs/State)

    自动驾驶仪的状态,包括解锁/上锁状态、模式、连接状态等。

  • ~mavros/global_position/global (sensor_msgs/NavSatFix)

    机器的 GPS 全球位置和卫星状态。

  • ~mavros/local_position/pose ( geometry_msgs::PoseStamped):

    当GPS 锁定后车辆定位准备就绪时,车辆在ENU坐标系下的位置和姿态。

  • ~mavros/local_position/velocity (geometry_msgs/TwistStamped)

    车辆ENU坐标系下的速度信息。

  • ~mavros/imu/data_raw (sensor_msgs/Imu)

    无方向的原始 IMU 数据,包括加速度计和陀螺仪数据。

  • ~mavros/vcu_base_status/output (pursuit_msgs::VcuBaseStatus):

    地面车辆中 VCU 底盘控制单元的状态。

  • ~mavros/vcu_command_velocity/output (geometry_msgs::Twist):

    自动驾驶仪发送到 VCU底盘控制单元的速度命令。

(3) 服务

  • ~mavros/set_mode (mavros_msgs/SetMode)

    设置自动驾驶仪的操作模式,包括在线控制模式、航路店模式和自稳手动模式。

  • ~mavros/cmd/arming (mavros_msgs/CommandBool)

    从机载计算机更改锁定状态,例如上锁/解锁切换。