// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: cmvr/msgs/agv.proto

package cmvr.msgs;

public final class Agv {
  private Agv() {}
  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistryLite registry) {
  }

  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistry registry) {
    registerAllExtensions(
        (com.google.protobuf.ExtensionRegistryLite) registry);
  }
  /**
   * <pre>
   * 地图维度请求。这里只描述上位机想要 2D、3D 还是二者都要，
   * 不用于指定厂商文件格式；厂商格式必须在 AGV 适配器内部转换。
   * </pre>
   *
   * Protobuf enum {@code cmvr.msgs.AgvMapDimension}
   */
  public enum AgvMapDimension
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     * <pre>
     * 未指定。服务端应选择最有用的默认地图，通常是当前加载地图。
     * </pre>
     *
     * <code>AGV_MAP_DIMENSION_UNSPECIFIED = 0;</code>
     */
    AGV_MAP_DIMENSION_UNSPECIFIED(0),
    /**
     * <pre>
     * 只请求统一 2D 地图。
     * </pre>
     *
     * <code>AGV_MAP_2D = 1;</code>
     */
    AGV_MAP_2D(1),
    /**
     * <pre>
     * 只请求统一 3D 地图。
     * </pre>
     *
     * <code>AGV_MAP_3D = 2;</code>
     */
    AGV_MAP_3D(2),
    /**
     * <pre>
     * 在同一个流中请求统一 2D 和统一 3D 地图。
     * </pre>
     *
     * <code>AGV_MAP_2D_AND_3D = 3;</code>
     */
    AGV_MAP_2D_AND_3D(3),
    UNRECOGNIZED(-1),
    ;

    /**
     * <pre>
     * 未指定。服务端应选择最有用的默认地图，通常是当前加载地图。
     * </pre>
     *
     * <code>AGV_MAP_DIMENSION_UNSPECIFIED = 0;</code>
     */
    public static final int AGV_MAP_DIMENSION_UNSPECIFIED_VALUE = 0;
    /**
     * <pre>
     * 只请求统一 2D 地图。
     * </pre>
     *
     * <code>AGV_MAP_2D = 1;</code>
     */
    public static final int AGV_MAP_2D_VALUE = 1;
    /**
     * <pre>
     * 只请求统一 3D 地图。
     * </pre>
     *
     * <code>AGV_MAP_3D = 2;</code>
     */
    public static final int AGV_MAP_3D_VALUE = 2;
    /**
     * <pre>
     * 在同一个流中请求统一 2D 和统一 3D 地图。
     * </pre>
     *
     * <code>AGV_MAP_2D_AND_3D = 3;</code>
     */
    public static final int AGV_MAP_2D_AND_3D_VALUE = 3;


    public final int getNumber() {
      if (this == UNRECOGNIZED) {
        throw new java.lang.IllegalArgumentException(
            "Can't get the number of an unknown enum value.");
      }
      return value;
    }

    /**
     * @param value The numeric wire value of the corresponding enum entry.
     * @return The enum associated with the given numeric wire value.
     * @deprecated Use {@link #forNumber(int)} instead.
     */
    @java.lang.Deprecated
    public static AgvMapDimension valueOf(int value) {
      return forNumber(value);
    }

    /**
     * @param value The numeric wire value of the corresponding enum entry.
     * @return The enum associated with the given numeric wire value.
     */
    public static AgvMapDimension forNumber(int value) {
      switch (value) {
        case 0: return AGV_MAP_DIMENSION_UNSPECIFIED;
        case 1: return AGV_MAP_2D;
        case 2: return AGV_MAP_3D;
        case 3: return AGV_MAP_2D_AND_3D;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<AgvMapDimension>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static final com.google.protobuf.Internal.EnumLiteMap<
        AgvMapDimension> internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<AgvMapDimension>() {
            public AgvMapDimension findValueByNumber(int number) {
              return AgvMapDimension.forNumber(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      if (this == UNRECOGNIZED) {
        throw new java.lang.IllegalStateException(
            "Can't get the descriptor of an unrecognized enum value.");
      }
      return getDescriptor().getValues().get(ordinal());
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return cmvr.msgs.Agv.getDescriptor().getEnumTypes().get(0);
    }

    private static final AgvMapDimension[] VALUES = values();

    public static AgvMapDimension valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new java.lang.IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      if (desc.getIndex() == -1) {
        return UNRECOGNIZED;
      }
      return VALUES[desc.getIndex()];
    }

    private final int value;

    private AgvMapDimension(int value) {
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:cmvr.msgs.AgvMapDimension)
  }

  /**
   * <pre>
   * 地图流更新类型。上位机应根据该字段判断是全量、增量还是缓存重置。
   * </pre>
   *
   * Protobuf enum {@code cmvr.msgs.AgvMapUpdateType}
   */
  public enum AgvMapUpdateType
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     * <pre>
     * 未指定。
     * </pre>
     *
     * <code>AGV_MAP_UPDATE_UNSPECIFIED = 0;</code>
     */
    AGV_MAP_UPDATE_UNSPECIFIED(0),
    /**
     * <pre>
     * 全量地图快照。首次请求或无法增量续传时应发送该类型。
     * </pre>
     *
     * <code>AGV_MAP_UPDATE_SNAPSHOT = 1;</code>
     */
    AGV_MAP_UPDATE_SNAPSHOT(1),
    /**
     * <pre>
     * 全量快照之后的增量更新。仅当适配器能够可靠生成差异时发送。
     * </pre>
     *
     * <code>AGV_MAP_UPDATE_INCREMENTAL = 2;</code>
     */
    AGV_MAP_UPDATE_INCREMENTAL(2),
    /**
     * <pre>
     * 上位机本地缓存已失效，应丢弃缓存并等待后续全量快照。
     * </pre>
     *
     * <code>AGV_MAP_UPDATE_RESET = 3;</code>
     */
    AGV_MAP_UPDATE_RESET(3),
    UNRECOGNIZED(-1),
    ;

    /**
     * <pre>
     * 未指定。
     * </pre>
     *
     * <code>AGV_MAP_UPDATE_UNSPECIFIED = 0;</code>
     */
    public static final int AGV_MAP_UPDATE_UNSPECIFIED_VALUE = 0;
    /**
     * <pre>
     * 全量地图快照。首次请求或无法增量续传时应发送该类型。
     * </pre>
     *
     * <code>AGV_MAP_UPDATE_SNAPSHOT = 1;</code>
     */
    public static final int AGV_MAP_UPDATE_SNAPSHOT_VALUE = 1;
    /**
     * <pre>
     * 全量快照之后的增量更新。仅当适配器能够可靠生成差异时发送。
     * </pre>
     *
     * <code>AGV_MAP_UPDATE_INCREMENTAL = 2;</code>
     */
    public static final int AGV_MAP_UPDATE_INCREMENTAL_VALUE = 2;
    /**
     * <pre>
     * 上位机本地缓存已失效，应丢弃缓存并等待后续全量快照。
     * </pre>
     *
     * <code>AGV_MAP_UPDATE_RESET = 3;</code>
     */
    public static final int AGV_MAP_UPDATE_RESET_VALUE = 3;


    public final int getNumber() {
      if (this == UNRECOGNIZED) {
        throw new java.lang.IllegalArgumentException(
            "Can't get the number of an unknown enum value.");
      }
      return value;
    }

    /**
     * @param value The numeric wire value of the corresponding enum entry.
     * @return The enum associated with the given numeric wire value.
     * @deprecated Use {@link #forNumber(int)} instead.
     */
    @java.lang.Deprecated
    public static AgvMapUpdateType valueOf(int value) {
      return forNumber(value);
    }

    /**
     * @param value The numeric wire value of the corresponding enum entry.
     * @return The enum associated with the given numeric wire value.
     */
    public static AgvMapUpdateType forNumber(int value) {
      switch (value) {
        case 0: return AGV_MAP_UPDATE_UNSPECIFIED;
        case 1: return AGV_MAP_UPDATE_SNAPSHOT;
        case 2: return AGV_MAP_UPDATE_INCREMENTAL;
        case 3: return AGV_MAP_UPDATE_RESET;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<AgvMapUpdateType>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static final com.google.protobuf.Internal.EnumLiteMap<
        AgvMapUpdateType> internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<AgvMapUpdateType>() {
            public AgvMapUpdateType findValueByNumber(int number) {
              return AgvMapUpdateType.forNumber(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      if (this == UNRECOGNIZED) {
        throw new java.lang.IllegalStateException(
            "Can't get the descriptor of an unrecognized enum value.");
      }
      return getDescriptor().getValues().get(ordinal());
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return cmvr.msgs.Agv.getDescriptor().getEnumTypes().get(1);
    }

    private static final AgvMapUpdateType[] VALUES = values();

    public static AgvMapUpdateType valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new java.lang.IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      if (desc.getIndex() == -1) {
        return UNRECOGNIZED;
      }
      return VALUES[desc.getIndex()];
    }

    private final int value;

    private AgvMapUpdateType(int value) {
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:cmvr.msgs.AgvMapUpdateType)
  }

  /**
   * <pre>
   * 2D/3D 地图共用的语义对象类型。
   * </pre>
   *
   * Protobuf enum {@code cmvr.msgs.AgvMapObjectType}
   */
  public enum AgvMapObjectType
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     * <pre>
     * 未指定。
     * </pre>
     *
     * <code>AGV_MAP_OBJECT_UNSPECIFIED = 0;</code>
     */
    AGV_MAP_OBJECT_UNSPECIFIED(0),
    /**
     * <pre>
     * 导航站点或路径点。
     * </pre>
     *
     * <code>AGV_MAP_OBJECT_STATION = 1;</code>
     */
    AGV_MAP_OBJECT_STATION(1),
    /**
     * <pre>
     * 路径线、禁行线、引导线等线对象。
     * </pre>
     *
     * <code>AGV_MAP_OBJECT_LINE = 2;</code>
     */
    AGV_MAP_OBJECT_LINE(2),
    /**
     * <pre>
     * 多边形区域，例如禁行区、限速区、作业区。
     * </pre>
     *
     * <code>AGV_MAP_OBJECT_AREA = 3;</code>
     */
    AGV_MAP_OBJECT_AREA(3),
    /**
     * <pre>
     * 二维码、天码或其他标签地标。
     * </pre>
     *
     * <code>AGV_MAP_OBJECT_QR_TAG = 4;</code>
     */
    AGV_MAP_OBJECT_QR_TAG(4),
    /**
     * <pre>
     * 反光板或反光柱地标。
     * </pre>
     *
     * <code>AGV_MAP_OBJECT_REFLECTOR = 5;</code>
     */
    AGV_MAP_OBJECT_REFLECTOR(5),
    /**
     * <pre>
     * 库位、货位或储位。
     * </pre>
     *
     * <code>AGV_MAP_OBJECT_BIN_LOCATION = 6;</code>
     */
    AGV_MAP_OBJECT_BIN_LOCATION(6),
    /**
     * <pre>
     * 门、电梯、充电桩等外部设备。
     * </pre>
     *
     * <code>AGV_MAP_OBJECT_EXTERNAL_DEVICE = 7;</code>
     */
    AGV_MAP_OBJECT_EXTERNAL_DEVICE(7),
    UNRECOGNIZED(-1),
    ;

    /**
     * <pre>
     * 未指定。
     * </pre>
     *
     * <code>AGV_MAP_OBJECT_UNSPECIFIED = 0;</code>
     */
    public static final int AGV_MAP_OBJECT_UNSPECIFIED_VALUE = 0;
    /**
     * <pre>
     * 导航站点或路径点。
     * </pre>
     *
     * <code>AGV_MAP_OBJECT_STATION = 1;</code>
     */
    public static final int AGV_MAP_OBJECT_STATION_VALUE = 1;
    /**
     * <pre>
     * 路径线、禁行线、引导线等线对象。
     * </pre>
     *
     * <code>AGV_MAP_OBJECT_LINE = 2;</code>
     */
    public static final int AGV_MAP_OBJECT_LINE_VALUE = 2;
    /**
     * <pre>
     * 多边形区域，例如禁行区、限速区、作业区。
     * </pre>
     *
     * <code>AGV_MAP_OBJECT_AREA = 3;</code>
     */
    public static final int AGV_MAP_OBJECT_AREA_VALUE = 3;
    /**
     * <pre>
     * 二维码、天码或其他标签地标。
     * </pre>
     *
     * <code>AGV_MAP_OBJECT_QR_TAG = 4;</code>
     */
    public static final int AGV_MAP_OBJECT_QR_TAG_VALUE = 4;
    /**
     * <pre>
     * 反光板或反光柱地标。
     * </pre>
     *
     * <code>AGV_MAP_OBJECT_REFLECTOR = 5;</code>
     */
    public static final int AGV_MAP_OBJECT_REFLECTOR_VALUE = 5;
    /**
     * <pre>
     * 库位、货位或储位。
     * </pre>
     *
     * <code>AGV_MAP_OBJECT_BIN_LOCATION = 6;</code>
     */
    public static final int AGV_MAP_OBJECT_BIN_LOCATION_VALUE = 6;
    /**
     * <pre>
     * 门、电梯、充电桩等外部设备。
     * </pre>
     *
     * <code>AGV_MAP_OBJECT_EXTERNAL_DEVICE = 7;</code>
     */
    public static final int AGV_MAP_OBJECT_EXTERNAL_DEVICE_VALUE = 7;


    public final int getNumber() {
      if (this == UNRECOGNIZED) {
        throw new java.lang.IllegalArgumentException(
            "Can't get the number of an unknown enum value.");
      }
      return value;
    }

    /**
     * @param value The numeric wire value of the corresponding enum entry.
     * @return The enum associated with the given numeric wire value.
     * @deprecated Use {@link #forNumber(int)} instead.
     */
    @java.lang.Deprecated
    public static AgvMapObjectType valueOf(int value) {
      return forNumber(value);
    }

    /**
     * @param value The numeric wire value of the corresponding enum entry.
     * @return The enum associated with the given numeric wire value.
     */
    public static AgvMapObjectType forNumber(int value) {
      switch (value) {
        case 0: return AGV_MAP_OBJECT_UNSPECIFIED;
        case 1: return AGV_MAP_OBJECT_STATION;
        case 2: return AGV_MAP_OBJECT_LINE;
        case 3: return AGV_MAP_OBJECT_AREA;
        case 4: return AGV_MAP_OBJECT_QR_TAG;
        case 5: return AGV_MAP_OBJECT_REFLECTOR;
        case 6: return AGV_MAP_OBJECT_BIN_LOCATION;
        case 7: return AGV_MAP_OBJECT_EXTERNAL_DEVICE;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<AgvMapObjectType>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static final com.google.protobuf.Internal.EnumLiteMap<
        AgvMapObjectType> internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<AgvMapObjectType>() {
            public AgvMapObjectType findValueByNumber(int number) {
              return AgvMapObjectType.forNumber(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      if (this == UNRECOGNIZED) {
        throw new java.lang.IllegalStateException(
            "Can't get the descriptor of an unrecognized enum value.");
      }
      return getDescriptor().getValues().get(ordinal());
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return cmvr.msgs.Agv.getDescriptor().getEnumTypes().get(2);
    }

    private static final AgvMapObjectType[] VALUES = values();

    public static AgvMapObjectType valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new java.lang.IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      if (desc.getIndex() == -1) {
        return UNRECOGNIZED;
      }
      return VALUES[desc.getIndex()];
    }

    private final int value;

    private AgvMapObjectType(int value) {
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:cmvr.msgs.AgvMapObjectType)
  }

  public interface AgvPose2dOrBuilder extends
      // @@protoc_insertion_point(interface_extends:cmvr.msgs.AgvPose2d)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * X 坐标，单位：米。
     * </pre>
     *
     * <code>double x = 1;</code>
     * @return The x.
     */
    double getX();

    /**
     * <pre>
     * Y 坐标，单位：米。
     * </pre>
     *
     * <code>double y = 2;</code>
     * @return The y.
     */
    double getY();

    /**
     * <pre>
     * 航向角，单位：弧度，逆时针为正。
     * </pre>
     *
     * <code>double theta = 3;</code>
     * @return The theta.
     */
    double getTheta();
  }
  /**
   * <pre>
   * AGV 在地图平面坐标系中的二维位姿。
   * </pre>
   *
   * Protobuf type {@code cmvr.msgs.AgvPose2d}
   */
  public static final class AgvPose2d extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:cmvr.msgs.AgvPose2d)
      AgvPose2dOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use AgvPose2d.newBuilder() to construct.
    private AgvPose2d(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private AgvPose2d() {
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new AgvPose2d();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvPose2d_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvPose2d_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              cmvr.msgs.Agv.AgvPose2d.class, cmvr.msgs.Agv.AgvPose2d.Builder.class);
    }

    public static final int X_FIELD_NUMBER = 1;
    private double x_;
    /**
     * <pre>
     * X 坐标，单位：米。
     * </pre>
     *
     * <code>double x = 1;</code>
     * @return The x.
     */
    @java.lang.Override
    public double getX() {
      return x_;
    }

    public static final int Y_FIELD_NUMBER = 2;
    private double y_;
    /**
     * <pre>
     * Y 坐标，单位：米。
     * </pre>
     *
     * <code>double y = 2;</code>
     * @return The y.
     */
    @java.lang.Override
    public double getY() {
      return y_;
    }

    public static final int THETA_FIELD_NUMBER = 3;
    private double theta_;
    /**
     * <pre>
     * 航向角，单位：弧度，逆时针为正。
     * </pre>
     *
     * <code>double theta = 3;</code>
     * @return The theta.
     */
    @java.lang.Override
    public double getTheta() {
      return theta_;
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (java.lang.Double.doubleToRawLongBits(x_) != 0) {
        output.writeDouble(1, x_);
      }
      if (java.lang.Double.doubleToRawLongBits(y_) != 0) {
        output.writeDouble(2, y_);
      }
      if (java.lang.Double.doubleToRawLongBits(theta_) != 0) {
        output.writeDouble(3, theta_);
      }
      getUnknownFields().writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (java.lang.Double.doubleToRawLongBits(x_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(1, x_);
      }
      if (java.lang.Double.doubleToRawLongBits(y_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(2, y_);
      }
      if (java.lang.Double.doubleToRawLongBits(theta_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(3, theta_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof cmvr.msgs.Agv.AgvPose2d)) {
        return super.equals(obj);
      }
      cmvr.msgs.Agv.AgvPose2d other = (cmvr.msgs.Agv.AgvPose2d) obj;

      if (java.lang.Double.doubleToLongBits(getX())
          != java.lang.Double.doubleToLongBits(
              other.getX())) return false;
      if (java.lang.Double.doubleToLongBits(getY())
          != java.lang.Double.doubleToLongBits(
              other.getY())) return false;
      if (java.lang.Double.doubleToLongBits(getTheta())
          != java.lang.Double.doubleToLongBits(
              other.getTheta())) return false;
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + X_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getX()));
      hash = (37 * hash) + Y_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getY()));
      hash = (37 * hash) + THETA_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getTheta()));
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static cmvr.msgs.Agv.AgvPose2d parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.msgs.Agv.AgvPose2d parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvPose2d parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.msgs.Agv.AgvPose2d parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvPose2d parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.msgs.Agv.AgvPose2d parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvPose2d parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cmvr.msgs.Agv.AgvPose2d parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvPose2d parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static cmvr.msgs.Agv.AgvPose2d parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvPose2d parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cmvr.msgs.Agv.AgvPose2d parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(cmvr.msgs.Agv.AgvPose2d prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * AGV 在地图平面坐标系中的二维位姿。
     * </pre>
     *
     * Protobuf type {@code cmvr.msgs.AgvPose2d}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:cmvr.msgs.AgvPose2d)
        cmvr.msgs.Agv.AgvPose2dOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvPose2d_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvPose2d_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                cmvr.msgs.Agv.AgvPose2d.class, cmvr.msgs.Agv.AgvPose2d.Builder.class);
      }

      // Construct using cmvr.msgs.Agv.AgvPose2d.newBuilder()
      private Builder() {

      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        x_ = 0D;

        y_ = 0D;

        theta_ = 0D;

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvPose2d_descriptor;
      }

      @java.lang.Override
      public cmvr.msgs.Agv.AgvPose2d getDefaultInstanceForType() {
        return cmvr.msgs.Agv.AgvPose2d.getDefaultInstance();
      }

      @java.lang.Override
      public cmvr.msgs.Agv.AgvPose2d build() {
        cmvr.msgs.Agv.AgvPose2d result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public cmvr.msgs.Agv.AgvPose2d buildPartial() {
        cmvr.msgs.Agv.AgvPose2d result = new cmvr.msgs.Agv.AgvPose2d(this);
        result.x_ = x_;
        result.y_ = y_;
        result.theta_ = theta_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof cmvr.msgs.Agv.AgvPose2d) {
          return mergeFrom((cmvr.msgs.Agv.AgvPose2d)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(cmvr.msgs.Agv.AgvPose2d other) {
        if (other == cmvr.msgs.Agv.AgvPose2d.getDefaultInstance()) return this;
        if (other.getX() != 0D) {
          setX(other.getX());
        }
        if (other.getY() != 0D) {
          setY(other.getY());
        }
        if (other.getTheta() != 0D) {
          setTheta(other.getTheta());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 9: {
                x_ = input.readDouble();

                break;
              } // case 9
              case 17: {
                y_ = input.readDouble();

                break;
              } // case 17
              case 25: {
                theta_ = input.readDouble();

                break;
              } // case 25
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }

      private double x_ ;
      /**
       * <pre>
       * X 坐标，单位：米。
       * </pre>
       *
       * <code>double x = 1;</code>
       * @return The x.
       */
      @java.lang.Override
      public double getX() {
        return x_;
      }
      /**
       * <pre>
       * X 坐标，单位：米。
       * </pre>
       *
       * <code>double x = 1;</code>
       * @param value The x to set.
       * @return This builder for chaining.
       */
      public Builder setX(double value) {
        
        x_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * X 坐标，单位：米。
       * </pre>
       *
       * <code>double x = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearX() {
        
        x_ = 0D;
        onChanged();
        return this;
      }

      private double y_ ;
      /**
       * <pre>
       * Y 坐标，单位：米。
       * </pre>
       *
       * <code>double y = 2;</code>
       * @return The y.
       */
      @java.lang.Override
      public double getY() {
        return y_;
      }
      /**
       * <pre>
       * Y 坐标，单位：米。
       * </pre>
       *
       * <code>double y = 2;</code>
       * @param value The y to set.
       * @return This builder for chaining.
       */
      public Builder setY(double value) {
        
        y_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Y 坐标，单位：米。
       * </pre>
       *
       * <code>double y = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearY() {
        
        y_ = 0D;
        onChanged();
        return this;
      }

      private double theta_ ;
      /**
       * <pre>
       * 航向角，单位：弧度，逆时针为正。
       * </pre>
       *
       * <code>double theta = 3;</code>
       * @return The theta.
       */
      @java.lang.Override
      public double getTheta() {
        return theta_;
      }
      /**
       * <pre>
       * 航向角，单位：弧度，逆时针为正。
       * </pre>
       *
       * <code>double theta = 3;</code>
       * @param value The theta to set.
       * @return This builder for chaining.
       */
      public Builder setTheta(double value) {
        
        theta_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 航向角，单位：弧度，逆时针为正。
       * </pre>
       *
       * <code>double theta = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearTheta() {
        
        theta_ = 0D;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:cmvr.msgs.AgvPose2d)
    }

    // @@protoc_insertion_point(class_scope:cmvr.msgs.AgvPose2d)
    private static final cmvr.msgs.Agv.AgvPose2d DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new cmvr.msgs.Agv.AgvPose2d();
    }

    public static cmvr.msgs.Agv.AgvPose2d getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<AgvPose2d>
        PARSER = new com.google.protobuf.AbstractParser<AgvPose2d>() {
      @java.lang.Override
      public AgvPose2d parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (com.google.protobuf.UninitializedMessageException e) {
          throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(e)
              .setUnfinishedMessage(builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

    public static com.google.protobuf.Parser<AgvPose2d> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<AgvPose2d> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public cmvr.msgs.Agv.AgvPose2d getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface AgvVelocityOrBuilder extends
      // @@protoc_insertion_point(interface_extends:cmvr.msgs.AgvVelocity)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * 车体 X 方向线速度，单位：米/秒。
     * </pre>
     *
     * <code>double vx = 1;</code>
     * @return The vx.
     */
    double getVx();

    /**
     * <pre>
     * 车体 Y 方向线速度，单位：米/秒。
     * </pre>
     *
     * <code>double vy = 2;</code>
     * @return The vy.
     */
    double getVy();

    /**
     * <pre>
     * 绕 Z 轴角速度，单位：弧度/秒。
     * </pre>
     *
     * <code>double wz = 3;</code>
     * @return The wz.
     */
    double getWz();
  }
  /**
   * <pre>
   * AGV 车体坐标系下的平面速度。
   * </pre>
   *
   * Protobuf type {@code cmvr.msgs.AgvVelocity}
   */
  public static final class AgvVelocity extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:cmvr.msgs.AgvVelocity)
      AgvVelocityOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use AgvVelocity.newBuilder() to construct.
    private AgvVelocity(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private AgvVelocity() {
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new AgvVelocity();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvVelocity_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvVelocity_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              cmvr.msgs.Agv.AgvVelocity.class, cmvr.msgs.Agv.AgvVelocity.Builder.class);
    }

    public static final int VX_FIELD_NUMBER = 1;
    private double vx_;
    /**
     * <pre>
     * 车体 X 方向线速度，单位：米/秒。
     * </pre>
     *
     * <code>double vx = 1;</code>
     * @return The vx.
     */
    @java.lang.Override
    public double getVx() {
      return vx_;
    }

    public static final int VY_FIELD_NUMBER = 2;
    private double vy_;
    /**
     * <pre>
     * 车体 Y 方向线速度，单位：米/秒。
     * </pre>
     *
     * <code>double vy = 2;</code>
     * @return The vy.
     */
    @java.lang.Override
    public double getVy() {
      return vy_;
    }

    public static final int WZ_FIELD_NUMBER = 3;
    private double wz_;
    /**
     * <pre>
     * 绕 Z 轴角速度，单位：弧度/秒。
     * </pre>
     *
     * <code>double wz = 3;</code>
     * @return The wz.
     */
    @java.lang.Override
    public double getWz() {
      return wz_;
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (java.lang.Double.doubleToRawLongBits(vx_) != 0) {
        output.writeDouble(1, vx_);
      }
      if (java.lang.Double.doubleToRawLongBits(vy_) != 0) {
        output.writeDouble(2, vy_);
      }
      if (java.lang.Double.doubleToRawLongBits(wz_) != 0) {
        output.writeDouble(3, wz_);
      }
      getUnknownFields().writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (java.lang.Double.doubleToRawLongBits(vx_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(1, vx_);
      }
      if (java.lang.Double.doubleToRawLongBits(vy_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(2, vy_);
      }
      if (java.lang.Double.doubleToRawLongBits(wz_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(3, wz_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof cmvr.msgs.Agv.AgvVelocity)) {
        return super.equals(obj);
      }
      cmvr.msgs.Agv.AgvVelocity other = (cmvr.msgs.Agv.AgvVelocity) obj;

      if (java.lang.Double.doubleToLongBits(getVx())
          != java.lang.Double.doubleToLongBits(
              other.getVx())) return false;
      if (java.lang.Double.doubleToLongBits(getVy())
          != java.lang.Double.doubleToLongBits(
              other.getVy())) return false;
      if (java.lang.Double.doubleToLongBits(getWz())
          != java.lang.Double.doubleToLongBits(
              other.getWz())) return false;
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + VX_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getVx()));
      hash = (37 * hash) + VY_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getVy()));
      hash = (37 * hash) + WZ_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getWz()));
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static cmvr.msgs.Agv.AgvVelocity parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.msgs.Agv.AgvVelocity parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvVelocity parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.msgs.Agv.AgvVelocity parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvVelocity parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.msgs.Agv.AgvVelocity parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvVelocity parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cmvr.msgs.Agv.AgvVelocity parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvVelocity parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static cmvr.msgs.Agv.AgvVelocity parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvVelocity parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cmvr.msgs.Agv.AgvVelocity parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(cmvr.msgs.Agv.AgvVelocity prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * AGV 车体坐标系下的平面速度。
     * </pre>
     *
     * Protobuf type {@code cmvr.msgs.AgvVelocity}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:cmvr.msgs.AgvVelocity)
        cmvr.msgs.Agv.AgvVelocityOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvVelocity_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvVelocity_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                cmvr.msgs.Agv.AgvVelocity.class, cmvr.msgs.Agv.AgvVelocity.Builder.class);
      }

      // Construct using cmvr.msgs.Agv.AgvVelocity.newBuilder()
      private Builder() {

      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        vx_ = 0D;

        vy_ = 0D;

        wz_ = 0D;

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvVelocity_descriptor;
      }

      @java.lang.Override
      public cmvr.msgs.Agv.AgvVelocity getDefaultInstanceForType() {
        return cmvr.msgs.Agv.AgvVelocity.getDefaultInstance();
      }

      @java.lang.Override
      public cmvr.msgs.Agv.AgvVelocity build() {
        cmvr.msgs.Agv.AgvVelocity result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public cmvr.msgs.Agv.AgvVelocity buildPartial() {
        cmvr.msgs.Agv.AgvVelocity result = new cmvr.msgs.Agv.AgvVelocity(this);
        result.vx_ = vx_;
        result.vy_ = vy_;
        result.wz_ = wz_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof cmvr.msgs.Agv.AgvVelocity) {
          return mergeFrom((cmvr.msgs.Agv.AgvVelocity)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(cmvr.msgs.Agv.AgvVelocity other) {
        if (other == cmvr.msgs.Agv.AgvVelocity.getDefaultInstance()) return this;
        if (other.getVx() != 0D) {
          setVx(other.getVx());
        }
        if (other.getVy() != 0D) {
          setVy(other.getVy());
        }
        if (other.getWz() != 0D) {
          setWz(other.getWz());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 9: {
                vx_ = input.readDouble();

                break;
              } // case 9
              case 17: {
                vy_ = input.readDouble();

                break;
              } // case 17
              case 25: {
                wz_ = input.readDouble();

                break;
              } // case 25
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }

      private double vx_ ;
      /**
       * <pre>
       * 车体 X 方向线速度，单位：米/秒。
       * </pre>
       *
       * <code>double vx = 1;</code>
       * @return The vx.
       */
      @java.lang.Override
      public double getVx() {
        return vx_;
      }
      /**
       * <pre>
       * 车体 X 方向线速度，单位：米/秒。
       * </pre>
       *
       * <code>double vx = 1;</code>
       * @param value The vx to set.
       * @return This builder for chaining.
       */
      public Builder setVx(double value) {
        
        vx_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 车体 X 方向线速度，单位：米/秒。
       * </pre>
       *
       * <code>double vx = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearVx() {
        
        vx_ = 0D;
        onChanged();
        return this;
      }

      private double vy_ ;
      /**
       * <pre>
       * 车体 Y 方向线速度，单位：米/秒。
       * </pre>
       *
       * <code>double vy = 2;</code>
       * @return The vy.
       */
      @java.lang.Override
      public double getVy() {
        return vy_;
      }
      /**
       * <pre>
       * 车体 Y 方向线速度，单位：米/秒。
       * </pre>
       *
       * <code>double vy = 2;</code>
       * @param value The vy to set.
       * @return This builder for chaining.
       */
      public Builder setVy(double value) {
        
        vy_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 车体 Y 方向线速度，单位：米/秒。
       * </pre>
       *
       * <code>double vy = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearVy() {
        
        vy_ = 0D;
        onChanged();
        return this;
      }

      private double wz_ ;
      /**
       * <pre>
       * 绕 Z 轴角速度，单位：弧度/秒。
       * </pre>
       *
       * <code>double wz = 3;</code>
       * @return The wz.
       */
      @java.lang.Override
      public double getWz() {
        return wz_;
      }
      /**
       * <pre>
       * 绕 Z 轴角速度，单位：弧度/秒。
       * </pre>
       *
       * <code>double wz = 3;</code>
       * @param value The wz to set.
       * @return This builder for chaining.
       */
      public Builder setWz(double value) {
        
        wz_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 绕 Z 轴角速度，单位：弧度/秒。
       * </pre>
       *
       * <code>double wz = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearWz() {
        
        wz_ = 0D;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:cmvr.msgs.AgvVelocity)
    }

    // @@protoc_insertion_point(class_scope:cmvr.msgs.AgvVelocity)
    private static final cmvr.msgs.Agv.AgvVelocity DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new cmvr.msgs.Agv.AgvVelocity();
    }

    public static cmvr.msgs.Agv.AgvVelocity getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<AgvVelocity>
        PARSER = new com.google.protobuf.AbstractParser<AgvVelocity>() {
      @java.lang.Override
      public AgvVelocity parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (com.google.protobuf.UninitializedMessageException e) {
          throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(e)
              .setUnfinishedMessage(builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

    public static com.google.protobuf.Parser<AgvVelocity> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<AgvVelocity> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public cmvr.msgs.Agv.AgvVelocity getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface AgvBatteryStateOrBuilder extends
      // @@protoc_insertion_point(interface_extends:cmvr.msgs.AgvBatteryState)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * 电量比例，范围：[0, 1]，例如 0.8 表示 80%。
     * </pre>
     *
     * <code>double percentage = 1;</code>
     * @return The percentage.
     */
    double getPercentage();

    /**
     * <pre>
     * 电池电压，单位：伏特。
     * </pre>
     *
     * <code>double voltage = 2;</code>
     * @return The voltage.
     */
    double getVoltage();

    /**
     * <pre>
     * 电池电流，单位：安培；正负号含义由具体 AGV 适配器保持一致。
     * </pre>
     *
     * <code>double current = 3;</code>
     * @return The current.
     */
    double getCurrent();

    /**
     * <pre>
     * 电池温度，单位：摄氏度。
     * </pre>
     *
     * <code>double temperature = 4;</code>
     * @return The temperature.
     */
    double getTemperature();

    /**
     * <pre>
     * 是否正在充电。
     * </pre>
     *
     * <code>bool charging = 5;</code>
     * @return The charging.
     */
    boolean getCharging();
  }
  /**
   * <pre>
   * AGV 电池状态。
   * </pre>
   *
   * Protobuf type {@code cmvr.msgs.AgvBatteryState}
   */
  public static final class AgvBatteryState extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:cmvr.msgs.AgvBatteryState)
      AgvBatteryStateOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use AgvBatteryState.newBuilder() to construct.
    private AgvBatteryState(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private AgvBatteryState() {
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new AgvBatteryState();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvBatteryState_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvBatteryState_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              cmvr.msgs.Agv.AgvBatteryState.class, cmvr.msgs.Agv.AgvBatteryState.Builder.class);
    }

    public static final int PERCENTAGE_FIELD_NUMBER = 1;
    private double percentage_;
    /**
     * <pre>
     * 电量比例，范围：[0, 1]，例如 0.8 表示 80%。
     * </pre>
     *
     * <code>double percentage = 1;</code>
     * @return The percentage.
     */
    @java.lang.Override
    public double getPercentage() {
      return percentage_;
    }

    public static final int VOLTAGE_FIELD_NUMBER = 2;
    private double voltage_;
    /**
     * <pre>
     * 电池电压，单位：伏特。
     * </pre>
     *
     * <code>double voltage = 2;</code>
     * @return The voltage.
     */
    @java.lang.Override
    public double getVoltage() {
      return voltage_;
    }

    public static final int CURRENT_FIELD_NUMBER = 3;
    private double current_;
    /**
     * <pre>
     * 电池电流，单位：安培；正负号含义由具体 AGV 适配器保持一致。
     * </pre>
     *
     * <code>double current = 3;</code>
     * @return The current.
     */
    @java.lang.Override
    public double getCurrent() {
      return current_;
    }

    public static final int TEMPERATURE_FIELD_NUMBER = 4;
    private double temperature_;
    /**
     * <pre>
     * 电池温度，单位：摄氏度。
     * </pre>
     *
     * <code>double temperature = 4;</code>
     * @return The temperature.
     */
    @java.lang.Override
    public double getTemperature() {
      return temperature_;
    }

    public static final int CHARGING_FIELD_NUMBER = 5;
    private boolean charging_;
    /**
     * <pre>
     * 是否正在充电。
     * </pre>
     *
     * <code>bool charging = 5;</code>
     * @return The charging.
     */
    @java.lang.Override
    public boolean getCharging() {
      return charging_;
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (java.lang.Double.doubleToRawLongBits(percentage_) != 0) {
        output.writeDouble(1, percentage_);
      }
      if (java.lang.Double.doubleToRawLongBits(voltage_) != 0) {
        output.writeDouble(2, voltage_);
      }
      if (java.lang.Double.doubleToRawLongBits(current_) != 0) {
        output.writeDouble(3, current_);
      }
      if (java.lang.Double.doubleToRawLongBits(temperature_) != 0) {
        output.writeDouble(4, temperature_);
      }
      if (charging_ != false) {
        output.writeBool(5, charging_);
      }
      getUnknownFields().writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (java.lang.Double.doubleToRawLongBits(percentage_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(1, percentage_);
      }
      if (java.lang.Double.doubleToRawLongBits(voltage_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(2, voltage_);
      }
      if (java.lang.Double.doubleToRawLongBits(current_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(3, current_);
      }
      if (java.lang.Double.doubleToRawLongBits(temperature_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(4, temperature_);
      }
      if (charging_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(5, charging_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof cmvr.msgs.Agv.AgvBatteryState)) {
        return super.equals(obj);
      }
      cmvr.msgs.Agv.AgvBatteryState other = (cmvr.msgs.Agv.AgvBatteryState) obj;

      if (java.lang.Double.doubleToLongBits(getPercentage())
          != java.lang.Double.doubleToLongBits(
              other.getPercentage())) return false;
      if (java.lang.Double.doubleToLongBits(getVoltage())
          != java.lang.Double.doubleToLongBits(
              other.getVoltage())) return false;
      if (java.lang.Double.doubleToLongBits(getCurrent())
          != java.lang.Double.doubleToLongBits(
              other.getCurrent())) return false;
      if (java.lang.Double.doubleToLongBits(getTemperature())
          != java.lang.Double.doubleToLongBits(
              other.getTemperature())) return false;
      if (getCharging()
          != other.getCharging()) return false;
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + PERCENTAGE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getPercentage()));
      hash = (37 * hash) + VOLTAGE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getVoltage()));
      hash = (37 * hash) + CURRENT_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getCurrent()));
      hash = (37 * hash) + TEMPERATURE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getTemperature()));
      hash = (37 * hash) + CHARGING_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getCharging());
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static cmvr.msgs.Agv.AgvBatteryState parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.msgs.Agv.AgvBatteryState parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvBatteryState parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.msgs.Agv.AgvBatteryState parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvBatteryState parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.msgs.Agv.AgvBatteryState parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvBatteryState parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cmvr.msgs.Agv.AgvBatteryState parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvBatteryState parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static cmvr.msgs.Agv.AgvBatteryState parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvBatteryState parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cmvr.msgs.Agv.AgvBatteryState parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(cmvr.msgs.Agv.AgvBatteryState prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * AGV 电池状态。
     * </pre>
     *
     * Protobuf type {@code cmvr.msgs.AgvBatteryState}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:cmvr.msgs.AgvBatteryState)
        cmvr.msgs.Agv.AgvBatteryStateOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvBatteryState_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvBatteryState_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                cmvr.msgs.Agv.AgvBatteryState.class, cmvr.msgs.Agv.AgvBatteryState.Builder.class);
      }

      // Construct using cmvr.msgs.Agv.AgvBatteryState.newBuilder()
      private Builder() {

      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        percentage_ = 0D;

        voltage_ = 0D;

        current_ = 0D;

        temperature_ = 0D;

        charging_ = false;

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvBatteryState_descriptor;
      }

      @java.lang.Override
      public cmvr.msgs.Agv.AgvBatteryState getDefaultInstanceForType() {
        return cmvr.msgs.Agv.AgvBatteryState.getDefaultInstance();
      }

      @java.lang.Override
      public cmvr.msgs.Agv.AgvBatteryState build() {
        cmvr.msgs.Agv.AgvBatteryState result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public cmvr.msgs.Agv.AgvBatteryState buildPartial() {
        cmvr.msgs.Agv.AgvBatteryState result = new cmvr.msgs.Agv.AgvBatteryState(this);
        result.percentage_ = percentage_;
        result.voltage_ = voltage_;
        result.current_ = current_;
        result.temperature_ = temperature_;
        result.charging_ = charging_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof cmvr.msgs.Agv.AgvBatteryState) {
          return mergeFrom((cmvr.msgs.Agv.AgvBatteryState)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(cmvr.msgs.Agv.AgvBatteryState other) {
        if (other == cmvr.msgs.Agv.AgvBatteryState.getDefaultInstance()) return this;
        if (other.getPercentage() != 0D) {
          setPercentage(other.getPercentage());
        }
        if (other.getVoltage() != 0D) {
          setVoltage(other.getVoltage());
        }
        if (other.getCurrent() != 0D) {
          setCurrent(other.getCurrent());
        }
        if (other.getTemperature() != 0D) {
          setTemperature(other.getTemperature());
        }
        if (other.getCharging() != false) {
          setCharging(other.getCharging());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 9: {
                percentage_ = input.readDouble();

                break;
              } // case 9
              case 17: {
                voltage_ = input.readDouble();

                break;
              } // case 17
              case 25: {
                current_ = input.readDouble();

                break;
              } // case 25
              case 33: {
                temperature_ = input.readDouble();

                break;
              } // case 33
              case 40: {
                charging_ = input.readBool();

                break;
              } // case 40
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }

      private double percentage_ ;
      /**
       * <pre>
       * 电量比例，范围：[0, 1]，例如 0.8 表示 80%。
       * </pre>
       *
       * <code>double percentage = 1;</code>
       * @return The percentage.
       */
      @java.lang.Override
      public double getPercentage() {
        return percentage_;
      }
      /**
       * <pre>
       * 电量比例，范围：[0, 1]，例如 0.8 表示 80%。
       * </pre>
       *
       * <code>double percentage = 1;</code>
       * @param value The percentage to set.
       * @return This builder for chaining.
       */
      public Builder setPercentage(double value) {
        
        percentage_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 电量比例，范围：[0, 1]，例如 0.8 表示 80%。
       * </pre>
       *
       * <code>double percentage = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearPercentage() {
        
        percentage_ = 0D;
        onChanged();
        return this;
      }

      private double voltage_ ;
      /**
       * <pre>
       * 电池电压，单位：伏特。
       * </pre>
       *
       * <code>double voltage = 2;</code>
       * @return The voltage.
       */
      @java.lang.Override
      public double getVoltage() {
        return voltage_;
      }
      /**
       * <pre>
       * 电池电压，单位：伏特。
       * </pre>
       *
       * <code>double voltage = 2;</code>
       * @param value The voltage to set.
       * @return This builder for chaining.
       */
      public Builder setVoltage(double value) {
        
        voltage_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 电池电压，单位：伏特。
       * </pre>
       *
       * <code>double voltage = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearVoltage() {
        
        voltage_ = 0D;
        onChanged();
        return this;
      }

      private double current_ ;
      /**
       * <pre>
       * 电池电流，单位：安培；正负号含义由具体 AGV 适配器保持一致。
       * </pre>
       *
       * <code>double current = 3;</code>
       * @return The current.
       */
      @java.lang.Override
      public double getCurrent() {
        return current_;
      }
      /**
       * <pre>
       * 电池电流，单位：安培；正负号含义由具体 AGV 适配器保持一致。
       * </pre>
       *
       * <code>double current = 3;</code>
       * @param value The current to set.
       * @return This builder for chaining.
       */
      public Builder setCurrent(double value) {
        
        current_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 电池电流，单位：安培；正负号含义由具体 AGV 适配器保持一致。
       * </pre>
       *
       * <code>double current = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearCurrent() {
        
        current_ = 0D;
        onChanged();
        return this;
      }

      private double temperature_ ;
      /**
       * <pre>
       * 电池温度，单位：摄氏度。
       * </pre>
       *
       * <code>double temperature = 4;</code>
       * @return The temperature.
       */
      @java.lang.Override
      public double getTemperature() {
        return temperature_;
      }
      /**
       * <pre>
       * 电池温度，单位：摄氏度。
       * </pre>
       *
       * <code>double temperature = 4;</code>
       * @param value The temperature to set.
       * @return This builder for chaining.
       */
      public Builder setTemperature(double value) {
        
        temperature_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 电池温度，单位：摄氏度。
       * </pre>
       *
       * <code>double temperature = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearTemperature() {
        
        temperature_ = 0D;
        onChanged();
        return this;
      }

      private boolean charging_ ;
      /**
       * <pre>
       * 是否正在充电。
       * </pre>
       *
       * <code>bool charging = 5;</code>
       * @return The charging.
       */
      @java.lang.Override
      public boolean getCharging() {
        return charging_;
      }
      /**
       * <pre>
       * 是否正在充电。
       * </pre>
       *
       * <code>bool charging = 5;</code>
       * @param value The charging to set.
       * @return This builder for chaining.
       */
      public Builder setCharging(boolean value) {
        
        charging_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 是否正在充电。
       * </pre>
       *
       * <code>bool charging = 5;</code>
       * @return This builder for chaining.
       */
      public Builder clearCharging() {
        
        charging_ = false;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:cmvr.msgs.AgvBatteryState)
    }

    // @@protoc_insertion_point(class_scope:cmvr.msgs.AgvBatteryState)
    private static final cmvr.msgs.Agv.AgvBatteryState DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new cmvr.msgs.Agv.AgvBatteryState();
    }

    public static cmvr.msgs.Agv.AgvBatteryState getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<AgvBatteryState>
        PARSER = new com.google.protobuf.AbstractParser<AgvBatteryState>() {
      @java.lang.Override
      public AgvBatteryState parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (com.google.protobuf.UninitializedMessageException e) {
          throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(e)
              .setUnfinishedMessage(builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

    public static com.google.protobuf.Parser<AgvBatteryState> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<AgvBatteryState> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public cmvr.msgs.Agv.AgvBatteryState getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface AgvMotionOptionsOrBuilder extends
      // @@protoc_insertion_point(interface_extends:cmvr.msgs.AgvMotionOptions)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * 最大线速度，单位：米/秒；0 表示使用 AGV 默认值。
     * </pre>
     *
     * <code>double max_speed = 1;</code>
     * @return The maxSpeed.
     */
    double getMaxSpeed();

    /**
     * <pre>
     * 最大角速度，单位：弧度/秒；0 表示使用 AGV 默认值。
     * </pre>
     *
     * <code>double max_angular_speed = 2;</code>
     * @return The maxAngularSpeed.
     */
    double getMaxAngularSpeed();

    /**
     * <pre>
     * 最大线加速度，单位：米/秒^2；0 表示使用 AGV 默认值。
     * </pre>
     *
     * <code>double max_acceleration = 3;</code>
     * @return The maxAcceleration.
     */
    double getMaxAcceleration();

    /**
     * <pre>
     * 最大角加速度，单位：弧度/秒^2；0 表示使用 AGV 默认值。
     * </pre>
     *
     * <code>double max_angular_acceleration = 4;</code>
     * @return The maxAngularAcceleration.
     */
    double getMaxAngularAcceleration();

    /**
     * <pre>
     * 到达目标点的距离容差，单位：米；0 表示使用 AGV 默认值。
     * </pre>
     *
     * <code>double reach_distance = 5;</code>
     * @return The reachDistance.
     */
    double getReachDistance();

    /**
     * <pre>
     * 到达目标角度的角度容差，单位：弧度；0 表示使用 AGV 默认值。
     * </pre>
     *
     * <code>double reach_angle = 6;</code>
     * @return The reachAngle.
     */
    double getReachAngle();

    /**
     * <pre>
     * 速度比例，范围通常为 [0, 1]；1 表示不降速。
     * </pre>
     *
     * <code>double speed_ratio = 7;</code>
     * @return The speedRatio.
     */
    double getSpeedRatio();

    /**
     * <pre>
     * 是否异步执行；true 表示下发任务后立即返回。
     * </pre>
     *
     * <code>bool asynchronous = 8;</code>
     * @return The asynchronous.
     */
    boolean getAsynchronous();
  }
  /**
   * <pre>
   * 导航任务的通用运动约束和执行选项。
   * </pre>
   *
   * Protobuf type {@code cmvr.msgs.AgvMotionOptions}
   */
  public static final class AgvMotionOptions extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:cmvr.msgs.AgvMotionOptions)
      AgvMotionOptionsOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use AgvMotionOptions.newBuilder() to construct.
    private AgvMotionOptions(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private AgvMotionOptions() {
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new AgvMotionOptions();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvMotionOptions_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvMotionOptions_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              cmvr.msgs.Agv.AgvMotionOptions.class, cmvr.msgs.Agv.AgvMotionOptions.Builder.class);
    }

    public static final int MAX_SPEED_FIELD_NUMBER = 1;
    private double maxSpeed_;
    /**
     * <pre>
     * 最大线速度，单位：米/秒；0 表示使用 AGV 默认值。
     * </pre>
     *
     * <code>double max_speed = 1;</code>
     * @return The maxSpeed.
     */
    @java.lang.Override
    public double getMaxSpeed() {
      return maxSpeed_;
    }

    public static final int MAX_ANGULAR_SPEED_FIELD_NUMBER = 2;
    private double maxAngularSpeed_;
    /**
     * <pre>
     * 最大角速度，单位：弧度/秒；0 表示使用 AGV 默认值。
     * </pre>
     *
     * <code>double max_angular_speed = 2;</code>
     * @return The maxAngularSpeed.
     */
    @java.lang.Override
    public double getMaxAngularSpeed() {
      return maxAngularSpeed_;
    }

    public static final int MAX_ACCELERATION_FIELD_NUMBER = 3;
    private double maxAcceleration_;
    /**
     * <pre>
     * 最大线加速度，单位：米/秒^2；0 表示使用 AGV 默认值。
     * </pre>
     *
     * <code>double max_acceleration = 3;</code>
     * @return The maxAcceleration.
     */
    @java.lang.Override
    public double getMaxAcceleration() {
      return maxAcceleration_;
    }

    public static final int MAX_ANGULAR_ACCELERATION_FIELD_NUMBER = 4;
    private double maxAngularAcceleration_;
    /**
     * <pre>
     * 最大角加速度，单位：弧度/秒^2；0 表示使用 AGV 默认值。
     * </pre>
     *
     * <code>double max_angular_acceleration = 4;</code>
     * @return The maxAngularAcceleration.
     */
    @java.lang.Override
    public double getMaxAngularAcceleration() {
      return maxAngularAcceleration_;
    }

    public static final int REACH_DISTANCE_FIELD_NUMBER = 5;
    private double reachDistance_;
    /**
     * <pre>
     * 到达目标点的距离容差，单位：米；0 表示使用 AGV 默认值。
     * </pre>
     *
     * <code>double reach_distance = 5;</code>
     * @return The reachDistance.
     */
    @java.lang.Override
    public double getReachDistance() {
      return reachDistance_;
    }

    public static final int REACH_ANGLE_FIELD_NUMBER = 6;
    private double reachAngle_;
    /**
     * <pre>
     * 到达目标角度的角度容差，单位：弧度；0 表示使用 AGV 默认值。
     * </pre>
     *
     * <code>double reach_angle = 6;</code>
     * @return The reachAngle.
     */
    @java.lang.Override
    public double getReachAngle() {
      return reachAngle_;
    }

    public static final int SPEED_RATIO_FIELD_NUMBER = 7;
    private double speedRatio_;
    /**
     * <pre>
     * 速度比例，范围通常为 [0, 1]；1 表示不降速。
     * </pre>
     *
     * <code>double speed_ratio = 7;</code>
     * @return The speedRatio.
     */
    @java.lang.Override
    public double getSpeedRatio() {
      return speedRatio_;
    }

    public static final int ASYNCHRONOUS_FIELD_NUMBER = 8;
    private boolean asynchronous_;
    /**
     * <pre>
     * 是否异步执行；true 表示下发任务后立即返回。
     * </pre>
     *
     * <code>bool asynchronous = 8;</code>
     * @return The asynchronous.
     */
    @java.lang.Override
    public boolean getAsynchronous() {
      return asynchronous_;
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (java.lang.Double.doubleToRawLongBits(maxSpeed_) != 0) {
        output.writeDouble(1, maxSpeed_);
      }
      if (java.lang.Double.doubleToRawLongBits(maxAngularSpeed_) != 0) {
        output.writeDouble(2, maxAngularSpeed_);
      }
      if (java.lang.Double.doubleToRawLongBits(maxAcceleration_) != 0) {
        output.writeDouble(3, maxAcceleration_);
      }
      if (java.lang.Double.doubleToRawLongBits(maxAngularAcceleration_) != 0) {
        output.writeDouble(4, maxAngularAcceleration_);
      }
      if (java.lang.Double.doubleToRawLongBits(reachDistance_) != 0) {
        output.writeDouble(5, reachDistance_);
      }
      if (java.lang.Double.doubleToRawLongBits(reachAngle_) != 0) {
        output.writeDouble(6, reachAngle_);
      }
      if (java.lang.Double.doubleToRawLongBits(speedRatio_) != 0) {
        output.writeDouble(7, speedRatio_);
      }
      if (asynchronous_ != false) {
        output.writeBool(8, asynchronous_);
      }
      getUnknownFields().writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (java.lang.Double.doubleToRawLongBits(maxSpeed_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(1, maxSpeed_);
      }
      if (java.lang.Double.doubleToRawLongBits(maxAngularSpeed_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(2, maxAngularSpeed_);
      }
      if (java.lang.Double.doubleToRawLongBits(maxAcceleration_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(3, maxAcceleration_);
      }
      if (java.lang.Double.doubleToRawLongBits(maxAngularAcceleration_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(4, maxAngularAcceleration_);
      }
      if (java.lang.Double.doubleToRawLongBits(reachDistance_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(5, reachDistance_);
      }
      if (java.lang.Double.doubleToRawLongBits(reachAngle_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(6, reachAngle_);
      }
      if (java.lang.Double.doubleToRawLongBits(speedRatio_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(7, speedRatio_);
      }
      if (asynchronous_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(8, asynchronous_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof cmvr.msgs.Agv.AgvMotionOptions)) {
        return super.equals(obj);
      }
      cmvr.msgs.Agv.AgvMotionOptions other = (cmvr.msgs.Agv.AgvMotionOptions) obj;

      if (java.lang.Double.doubleToLongBits(getMaxSpeed())
          != java.lang.Double.doubleToLongBits(
              other.getMaxSpeed())) return false;
      if (java.lang.Double.doubleToLongBits(getMaxAngularSpeed())
          != java.lang.Double.doubleToLongBits(
              other.getMaxAngularSpeed())) return false;
      if (java.lang.Double.doubleToLongBits(getMaxAcceleration())
          != java.lang.Double.doubleToLongBits(
              other.getMaxAcceleration())) return false;
      if (java.lang.Double.doubleToLongBits(getMaxAngularAcceleration())
          != java.lang.Double.doubleToLongBits(
              other.getMaxAngularAcceleration())) return false;
      if (java.lang.Double.doubleToLongBits(getReachDistance())
          != java.lang.Double.doubleToLongBits(
              other.getReachDistance())) return false;
      if (java.lang.Double.doubleToLongBits(getReachAngle())
          != java.lang.Double.doubleToLongBits(
              other.getReachAngle())) return false;
      if (java.lang.Double.doubleToLongBits(getSpeedRatio())
          != java.lang.Double.doubleToLongBits(
              other.getSpeedRatio())) return false;
      if (getAsynchronous()
          != other.getAsynchronous()) return false;
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + MAX_SPEED_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getMaxSpeed()));
      hash = (37 * hash) + MAX_ANGULAR_SPEED_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getMaxAngularSpeed()));
      hash = (37 * hash) + MAX_ACCELERATION_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getMaxAcceleration()));
      hash = (37 * hash) + MAX_ANGULAR_ACCELERATION_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getMaxAngularAcceleration()));
      hash = (37 * hash) + REACH_DISTANCE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getReachDistance()));
      hash = (37 * hash) + REACH_ANGLE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getReachAngle()));
      hash = (37 * hash) + SPEED_RATIO_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getSpeedRatio()));
      hash = (37 * hash) + ASYNCHRONOUS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getAsynchronous());
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static cmvr.msgs.Agv.AgvMotionOptions parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.msgs.Agv.AgvMotionOptions parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvMotionOptions parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.msgs.Agv.AgvMotionOptions parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvMotionOptions parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.msgs.Agv.AgvMotionOptions parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvMotionOptions parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cmvr.msgs.Agv.AgvMotionOptions parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvMotionOptions parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static cmvr.msgs.Agv.AgvMotionOptions parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvMotionOptions parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cmvr.msgs.Agv.AgvMotionOptions parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(cmvr.msgs.Agv.AgvMotionOptions prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * 导航任务的通用运动约束和执行选项。
     * </pre>
     *
     * Protobuf type {@code cmvr.msgs.AgvMotionOptions}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:cmvr.msgs.AgvMotionOptions)
        cmvr.msgs.Agv.AgvMotionOptionsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvMotionOptions_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvMotionOptions_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                cmvr.msgs.Agv.AgvMotionOptions.class, cmvr.msgs.Agv.AgvMotionOptions.Builder.class);
      }

      // Construct using cmvr.msgs.Agv.AgvMotionOptions.newBuilder()
      private Builder() {

      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        maxSpeed_ = 0D;

        maxAngularSpeed_ = 0D;

        maxAcceleration_ = 0D;

        maxAngularAcceleration_ = 0D;

        reachDistance_ = 0D;

        reachAngle_ = 0D;

        speedRatio_ = 0D;

        asynchronous_ = false;

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvMotionOptions_descriptor;
      }

      @java.lang.Override
      public cmvr.msgs.Agv.AgvMotionOptions getDefaultInstanceForType() {
        return cmvr.msgs.Agv.AgvMotionOptions.getDefaultInstance();
      }

      @java.lang.Override
      public cmvr.msgs.Agv.AgvMotionOptions build() {
        cmvr.msgs.Agv.AgvMotionOptions result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public cmvr.msgs.Agv.AgvMotionOptions buildPartial() {
        cmvr.msgs.Agv.AgvMotionOptions result = new cmvr.msgs.Agv.AgvMotionOptions(this);
        result.maxSpeed_ = maxSpeed_;
        result.maxAngularSpeed_ = maxAngularSpeed_;
        result.maxAcceleration_ = maxAcceleration_;
        result.maxAngularAcceleration_ = maxAngularAcceleration_;
        result.reachDistance_ = reachDistance_;
        result.reachAngle_ = reachAngle_;
        result.speedRatio_ = speedRatio_;
        result.asynchronous_ = asynchronous_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof cmvr.msgs.Agv.AgvMotionOptions) {
          return mergeFrom((cmvr.msgs.Agv.AgvMotionOptions)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(cmvr.msgs.Agv.AgvMotionOptions other) {
        if (other == cmvr.msgs.Agv.AgvMotionOptions.getDefaultInstance()) return this;
        if (other.getMaxSpeed() != 0D) {
          setMaxSpeed(other.getMaxSpeed());
        }
        if (other.getMaxAngularSpeed() != 0D) {
          setMaxAngularSpeed(other.getMaxAngularSpeed());
        }
        if (other.getMaxAcceleration() != 0D) {
          setMaxAcceleration(other.getMaxAcceleration());
        }
        if (other.getMaxAngularAcceleration() != 0D) {
          setMaxAngularAcceleration(other.getMaxAngularAcceleration());
        }
        if (other.getReachDistance() != 0D) {
          setReachDistance(other.getReachDistance());
        }
        if (other.getReachAngle() != 0D) {
          setReachAngle(other.getReachAngle());
        }
        if (other.getSpeedRatio() != 0D) {
          setSpeedRatio(other.getSpeedRatio());
        }
        if (other.getAsynchronous() != false) {
          setAsynchronous(other.getAsynchronous());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 9: {
                maxSpeed_ = input.readDouble();

                break;
              } // case 9
              case 17: {
                maxAngularSpeed_ = input.readDouble();

                break;
              } // case 17
              case 25: {
                maxAcceleration_ = input.readDouble();

                break;
              } // case 25
              case 33: {
                maxAngularAcceleration_ = input.readDouble();

                break;
              } // case 33
              case 41: {
                reachDistance_ = input.readDouble();

                break;
              } // case 41
              case 49: {
                reachAngle_ = input.readDouble();

                break;
              } // case 49
              case 57: {
                speedRatio_ = input.readDouble();

                break;
              } // case 57
              case 64: {
                asynchronous_ = input.readBool();

                break;
              } // case 64
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }

      private double maxSpeed_ ;
      /**
       * <pre>
       * 最大线速度，单位：米/秒；0 表示使用 AGV 默认值。
       * </pre>
       *
       * <code>double max_speed = 1;</code>
       * @return The maxSpeed.
       */
      @java.lang.Override
      public double getMaxSpeed() {
        return maxSpeed_;
      }
      /**
       * <pre>
       * 最大线速度，单位：米/秒；0 表示使用 AGV 默认值。
       * </pre>
       *
       * <code>double max_speed = 1;</code>
       * @param value The maxSpeed to set.
       * @return This builder for chaining.
       */
      public Builder setMaxSpeed(double value) {
        
        maxSpeed_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 最大线速度，单位：米/秒；0 表示使用 AGV 默认值。
       * </pre>
       *
       * <code>double max_speed = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearMaxSpeed() {
        
        maxSpeed_ = 0D;
        onChanged();
        return this;
      }

      private double maxAngularSpeed_ ;
      /**
       * <pre>
       * 最大角速度，单位：弧度/秒；0 表示使用 AGV 默认值。
       * </pre>
       *
       * <code>double max_angular_speed = 2;</code>
       * @return The maxAngularSpeed.
       */
      @java.lang.Override
      public double getMaxAngularSpeed() {
        return maxAngularSpeed_;
      }
      /**
       * <pre>
       * 最大角速度，单位：弧度/秒；0 表示使用 AGV 默认值。
       * </pre>
       *
       * <code>double max_angular_speed = 2;</code>
       * @param value The maxAngularSpeed to set.
       * @return This builder for chaining.
       */
      public Builder setMaxAngularSpeed(double value) {
        
        maxAngularSpeed_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 最大角速度，单位：弧度/秒；0 表示使用 AGV 默认值。
       * </pre>
       *
       * <code>double max_angular_speed = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearMaxAngularSpeed() {
        
        maxAngularSpeed_ = 0D;
        onChanged();
        return this;
      }

      private double maxAcceleration_ ;
      /**
       * <pre>
       * 最大线加速度，单位：米/秒^2；0 表示使用 AGV 默认值。
       * </pre>
       *
       * <code>double max_acceleration = 3;</code>
       * @return The maxAcceleration.
       */
      @java.lang.Override
      public double getMaxAcceleration() {
        return maxAcceleration_;
      }
      /**
       * <pre>
       * 最大线加速度，单位：米/秒^2；0 表示使用 AGV 默认值。
       * </pre>
       *
       * <code>double max_acceleration = 3;</code>
       * @param value The maxAcceleration to set.
       * @return This builder for chaining.
       */
      public Builder setMaxAcceleration(double value) {
        
        maxAcceleration_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 最大线加速度，单位：米/秒^2；0 表示使用 AGV 默认值。
       * </pre>
       *
       * <code>double max_acceleration = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearMaxAcceleration() {
        
        maxAcceleration_ = 0D;
        onChanged();
        return this;
      }

      private double maxAngularAcceleration_ ;
      /**
       * <pre>
       * 最大角加速度，单位：弧度/秒^2；0 表示使用 AGV 默认值。
       * </pre>
       *
       * <code>double max_angular_acceleration = 4;</code>
       * @return The maxAngularAcceleration.
       */
      @java.lang.Override
      public double getMaxAngularAcceleration() {
        return maxAngularAcceleration_;
      }
      /**
       * <pre>
       * 最大角加速度，单位：弧度/秒^2；0 表示使用 AGV 默认值。
       * </pre>
       *
       * <code>double max_angular_acceleration = 4;</code>
       * @param value The maxAngularAcceleration to set.
       * @return This builder for chaining.
       */
      public Builder setMaxAngularAcceleration(double value) {
        
        maxAngularAcceleration_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 最大角加速度，单位：弧度/秒^2；0 表示使用 AGV 默认值。
       * </pre>
       *
       * <code>double max_angular_acceleration = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearMaxAngularAcceleration() {
        
        maxAngularAcceleration_ = 0D;
        onChanged();
        return this;
      }

      private double reachDistance_ ;
      /**
       * <pre>
       * 到达目标点的距离容差，单位：米；0 表示使用 AGV 默认值。
       * </pre>
       *
       * <code>double reach_distance = 5;</code>
       * @return The reachDistance.
       */
      @java.lang.Override
      public double getReachDistance() {
        return reachDistance_;
      }
      /**
       * <pre>
       * 到达目标点的距离容差，单位：米；0 表示使用 AGV 默认值。
       * </pre>
       *
       * <code>double reach_distance = 5;</code>
       * @param value The reachDistance to set.
       * @return This builder for chaining.
       */
      public Builder setReachDistance(double value) {
        
        reachDistance_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 到达目标点的距离容差，单位：米；0 表示使用 AGV 默认值。
       * </pre>
       *
       * <code>double reach_distance = 5;</code>
       * @return This builder for chaining.
       */
      public Builder clearReachDistance() {
        
        reachDistance_ = 0D;
        onChanged();
        return this;
      }

      private double reachAngle_ ;
      /**
       * <pre>
       * 到达目标角度的角度容差，单位：弧度；0 表示使用 AGV 默认值。
       * </pre>
       *
       * <code>double reach_angle = 6;</code>
       * @return The reachAngle.
       */
      @java.lang.Override
      public double getReachAngle() {
        return reachAngle_;
      }
      /**
       * <pre>
       * 到达目标角度的角度容差，单位：弧度；0 表示使用 AGV 默认值。
       * </pre>
       *
       * <code>double reach_angle = 6;</code>
       * @param value The reachAngle to set.
       * @return This builder for chaining.
       */
      public Builder setReachAngle(double value) {
        
        reachAngle_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 到达目标角度的角度容差，单位：弧度；0 表示使用 AGV 默认值。
       * </pre>
       *
       * <code>double reach_angle = 6;</code>
       * @return This builder for chaining.
       */
      public Builder clearReachAngle() {
        
        reachAngle_ = 0D;
        onChanged();
        return this;
      }

      private double speedRatio_ ;
      /**
       * <pre>
       * 速度比例，范围通常为 [0, 1]；1 表示不降速。
       * </pre>
       *
       * <code>double speed_ratio = 7;</code>
       * @return The speedRatio.
       */
      @java.lang.Override
      public double getSpeedRatio() {
        return speedRatio_;
      }
      /**
       * <pre>
       * 速度比例，范围通常为 [0, 1]；1 表示不降速。
       * </pre>
       *
       * <code>double speed_ratio = 7;</code>
       * @param value The speedRatio to set.
       * @return This builder for chaining.
       */
      public Builder setSpeedRatio(double value) {
        
        speedRatio_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 速度比例，范围通常为 [0, 1]；1 表示不降速。
       * </pre>
       *
       * <code>double speed_ratio = 7;</code>
       * @return This builder for chaining.
       */
      public Builder clearSpeedRatio() {
        
        speedRatio_ = 0D;
        onChanged();
        return this;
      }

      private boolean asynchronous_ ;
      /**
       * <pre>
       * 是否异步执行；true 表示下发任务后立即返回。
       * </pre>
       *
       * <code>bool asynchronous = 8;</code>
       * @return The asynchronous.
       */
      @java.lang.Override
      public boolean getAsynchronous() {
        return asynchronous_;
      }
      /**
       * <pre>
       * 是否异步执行；true 表示下发任务后立即返回。
       * </pre>
       *
       * <code>bool asynchronous = 8;</code>
       * @param value The asynchronous to set.
       * @return This builder for chaining.
       */
      public Builder setAsynchronous(boolean value) {
        
        asynchronous_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 是否异步执行；true 表示下发任务后立即返回。
       * </pre>
       *
       * <code>bool asynchronous = 8;</code>
       * @return This builder for chaining.
       */
      public Builder clearAsynchronous() {
        
        asynchronous_ = false;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:cmvr.msgs.AgvMotionOptions)
    }

    // @@protoc_insertion_point(class_scope:cmvr.msgs.AgvMotionOptions)
    private static final cmvr.msgs.Agv.AgvMotionOptions DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new cmvr.msgs.Agv.AgvMotionOptions();
    }

    public static cmvr.msgs.Agv.AgvMotionOptions getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<AgvMotionOptions>
        PARSER = new com.google.protobuf.AbstractParser<AgvMotionOptions>() {
      @java.lang.Override
      public AgvMotionOptions parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (com.google.protobuf.UninitializedMessageException e) {
          throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(e)
              .setUnfinishedMessage(builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

    public static com.google.protobuf.Parser<AgvMotionOptions> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<AgvMotionOptions> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public cmvr.msgs.Agv.AgvMotionOptions getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface AgvAdapterParamsOrBuilder extends
      // @@protoc_insertion_point(interface_extends:cmvr.msgs.AgvAdapterParams)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * 参数键值表。键和值都使用字符串，具体含义由 AGV 适配器解释。
     * </pre>
     *
     * <code>map&lt;string, string&gt; values = 1;</code>
     */
    int getValuesCount();
    /**
     * <pre>
     * 参数键值表。键和值都使用字符串，具体含义由 AGV 适配器解释。
     * </pre>
     *
     * <code>map&lt;string, string&gt; values = 1;</code>
     */
    boolean containsValues(
        java.lang.String key);
    /**
     * Use {@link #getValuesMap()} instead.
     */
    @java.lang.Deprecated
    java.util.Map<java.lang.String, java.lang.String>
    getValues();
    /**
     * <pre>
     * 参数键值表。键和值都使用字符串，具体含义由 AGV 适配器解释。
     * </pre>
     *
     * <code>map&lt;string, string&gt; values = 1;</code>
     */
    java.util.Map<java.lang.String, java.lang.String>
    getValuesMap();
    /**
     * <pre>
     * 参数键值表。键和值都使用字符串，具体含义由 AGV 适配器解释。
     * </pre>
     *
     * <code>map&lt;string, string&gt; values = 1;</code>
     */

    /* nullable */
java.lang.String getValuesOrDefault(
        java.lang.String key,
        /* nullable */
java.lang.String defaultValue);
    /**
     * <pre>
     * 参数键值表。键和值都使用字符串，具体含义由 AGV 适配器解释。
     * </pre>
     *
     * <code>map&lt;string, string&gt; values = 1;</code>
     */

    java.lang.String getValuesOrThrow(
        java.lang.String key);
  }
  /**
   * <pre>
   * AGV 适配器扩展参数。用于传递厂商或控制器特有的参数。
   * </pre>
   *
   * Protobuf type {@code cmvr.msgs.AgvAdapterParams}
   */
  public static final class AgvAdapterParams extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:cmvr.msgs.AgvAdapterParams)
      AgvAdapterParamsOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use AgvAdapterParams.newBuilder() to construct.
    private AgvAdapterParams(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private AgvAdapterParams() {
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new AgvAdapterParams();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvAdapterParams_descriptor;
    }

    @SuppressWarnings({"rawtypes"})
    @java.lang.Override
    protected com.google.protobuf.MapField internalGetMapField(
        int number) {
      switch (number) {
        case 1:
          return internalGetValues();
        default:
          throw new RuntimeException(
              "Invalid map field number: " + number);
      }
    }
    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvAdapterParams_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              cmvr.msgs.Agv.AgvAdapterParams.class, cmvr.msgs.Agv.AgvAdapterParams.Builder.class);
    }

    public static final int VALUES_FIELD_NUMBER = 1;
    private static final class ValuesDefaultEntryHolder {
      static final com.google.protobuf.MapEntry<
          java.lang.String, java.lang.String> defaultEntry =
              com.google.protobuf.MapEntry
              .<java.lang.String, java.lang.String>newDefaultInstance(
                  cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvAdapterParams_ValuesEntry_descriptor, 
                  com.google.protobuf.WireFormat.FieldType.STRING,
                  "",
                  com.google.protobuf.WireFormat.FieldType.STRING,
                  "");
    }
    private com.google.protobuf.MapField<
        java.lang.String, java.lang.String> values_;
    private com.google.protobuf.MapField<java.lang.String, java.lang.String>
    internalGetValues() {
      if (values_ == null) {
        return com.google.protobuf.MapField.emptyMapField(
            ValuesDefaultEntryHolder.defaultEntry);
      }
      return values_;
    }

    public int getValuesCount() {
      return internalGetValues().getMap().size();
    }
    /**
     * <pre>
     * 参数键值表。键和值都使用字符串，具体含义由 AGV 适配器解释。
     * </pre>
     *
     * <code>map&lt;string, string&gt; values = 1;</code>
     */

    @java.lang.Override
    public boolean containsValues(
        java.lang.String key) {
      if (key == null) { throw new NullPointerException("map key"); }
      return internalGetValues().getMap().containsKey(key);
    }
    /**
     * Use {@link #getValuesMap()} instead.
     */
    @java.lang.Override
    @java.lang.Deprecated
    public java.util.Map<java.lang.String, java.lang.String> getValues() {
      return getValuesMap();
    }
    /**
     * <pre>
     * 参数键值表。键和值都使用字符串，具体含义由 AGV 适配器解释。
     * </pre>
     *
     * <code>map&lt;string, string&gt; values = 1;</code>
     */
    @java.lang.Override

    public java.util.Map<java.lang.String, java.lang.String> getValuesMap() {
      return internalGetValues().getMap();
    }
    /**
     * <pre>
     * 参数键值表。键和值都使用字符串，具体含义由 AGV 适配器解释。
     * </pre>
     *
     * <code>map&lt;string, string&gt; values = 1;</code>
     */
    @java.lang.Override

    public java.lang.String getValuesOrDefault(
        java.lang.String key,
        java.lang.String defaultValue) {
      if (key == null) { throw new NullPointerException("map key"); }
      java.util.Map<java.lang.String, java.lang.String> map =
          internalGetValues().getMap();
      return map.containsKey(key) ? map.get(key) : defaultValue;
    }
    /**
     * <pre>
     * 参数键值表。键和值都使用字符串，具体含义由 AGV 适配器解释。
     * </pre>
     *
     * <code>map&lt;string, string&gt; values = 1;</code>
     */
    @java.lang.Override

    public java.lang.String getValuesOrThrow(
        java.lang.String key) {
      if (key == null) { throw new NullPointerException("map key"); }
      java.util.Map<java.lang.String, java.lang.String> map =
          internalGetValues().getMap();
      if (!map.containsKey(key)) {
        throw new java.lang.IllegalArgumentException();
      }
      return map.get(key);
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      com.google.protobuf.GeneratedMessageV3
        .serializeStringMapTo(
          output,
          internalGetValues(),
          ValuesDefaultEntryHolder.defaultEntry,
          1);
      getUnknownFields().writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      for (java.util.Map.Entry<java.lang.String, java.lang.String> entry
           : internalGetValues().getMap().entrySet()) {
        com.google.protobuf.MapEntry<java.lang.String, java.lang.String>
        values__ = ValuesDefaultEntryHolder.defaultEntry.newBuilderForType()
            .setKey(entry.getKey())
            .setValue(entry.getValue())
            .build();
        size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(1, values__);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof cmvr.msgs.Agv.AgvAdapterParams)) {
        return super.equals(obj);
      }
      cmvr.msgs.Agv.AgvAdapterParams other = (cmvr.msgs.Agv.AgvAdapterParams) obj;

      if (!internalGetValues().equals(
          other.internalGetValues())) return false;
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (!internalGetValues().getMap().isEmpty()) {
        hash = (37 * hash) + VALUES_FIELD_NUMBER;
        hash = (53 * hash) + internalGetValues().hashCode();
      }
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static cmvr.msgs.Agv.AgvAdapterParams parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.msgs.Agv.AgvAdapterParams parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvAdapterParams parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.msgs.Agv.AgvAdapterParams parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvAdapterParams parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.msgs.Agv.AgvAdapterParams parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvAdapterParams parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cmvr.msgs.Agv.AgvAdapterParams parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvAdapterParams parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static cmvr.msgs.Agv.AgvAdapterParams parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvAdapterParams parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cmvr.msgs.Agv.AgvAdapterParams parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(cmvr.msgs.Agv.AgvAdapterParams prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * AGV 适配器扩展参数。用于传递厂商或控制器特有的参数。
     * </pre>
     *
     * Protobuf type {@code cmvr.msgs.AgvAdapterParams}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:cmvr.msgs.AgvAdapterParams)
        cmvr.msgs.Agv.AgvAdapterParamsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvAdapterParams_descriptor;
      }

      @SuppressWarnings({"rawtypes"})
      protected com.google.protobuf.MapField internalGetMapField(
          int number) {
        switch (number) {
          case 1:
            return internalGetValues();
          default:
            throw new RuntimeException(
                "Invalid map field number: " + number);
        }
      }
      @SuppressWarnings({"rawtypes"})
      protected com.google.protobuf.MapField internalGetMutableMapField(
          int number) {
        switch (number) {
          case 1:
            return internalGetMutableValues();
          default:
            throw new RuntimeException(
                "Invalid map field number: " + number);
        }
      }
      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvAdapterParams_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                cmvr.msgs.Agv.AgvAdapterParams.class, cmvr.msgs.Agv.AgvAdapterParams.Builder.class);
      }

      // Construct using cmvr.msgs.Agv.AgvAdapterParams.newBuilder()
      private Builder() {

      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        internalGetMutableValues().clear();
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvAdapterParams_descriptor;
      }

      @java.lang.Override
      public cmvr.msgs.Agv.AgvAdapterParams getDefaultInstanceForType() {
        return cmvr.msgs.Agv.AgvAdapterParams.getDefaultInstance();
      }

      @java.lang.Override
      public cmvr.msgs.Agv.AgvAdapterParams build() {
        cmvr.msgs.Agv.AgvAdapterParams result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public cmvr.msgs.Agv.AgvAdapterParams buildPartial() {
        cmvr.msgs.Agv.AgvAdapterParams result = new cmvr.msgs.Agv.AgvAdapterParams(this);
        int from_bitField0_ = bitField0_;
        result.values_ = internalGetValues();
        result.values_.makeImmutable();
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof cmvr.msgs.Agv.AgvAdapterParams) {
          return mergeFrom((cmvr.msgs.Agv.AgvAdapterParams)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(cmvr.msgs.Agv.AgvAdapterParams other) {
        if (other == cmvr.msgs.Agv.AgvAdapterParams.getDefaultInstance()) return this;
        internalGetMutableValues().mergeFrom(
            other.internalGetValues());
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 10: {
                com.google.protobuf.MapEntry<java.lang.String, java.lang.String>
                values__ = input.readMessage(
                    ValuesDefaultEntryHolder.defaultEntry.getParserForType(), extensionRegistry);
                internalGetMutableValues().getMutableMap().put(
                    values__.getKey(), values__.getValue());
                break;
              } // case 10
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }
      private int bitField0_;

      private com.google.protobuf.MapField<
          java.lang.String, java.lang.String> values_;
      private com.google.protobuf.MapField<java.lang.String, java.lang.String>
      internalGetValues() {
        if (values_ == null) {
          return com.google.protobuf.MapField.emptyMapField(
              ValuesDefaultEntryHolder.defaultEntry);
        }
        return values_;
      }
      private com.google.protobuf.MapField<java.lang.String, java.lang.String>
      internalGetMutableValues() {
        onChanged();;
        if (values_ == null) {
          values_ = com.google.protobuf.MapField.newMapField(
              ValuesDefaultEntryHolder.defaultEntry);
        }
        if (!values_.isMutable()) {
          values_ = values_.copy();
        }
        return values_;
      }

      public int getValuesCount() {
        return internalGetValues().getMap().size();
      }
      /**
       * <pre>
       * 参数键值表。键和值都使用字符串，具体含义由 AGV 适配器解释。
       * </pre>
       *
       * <code>map&lt;string, string&gt; values = 1;</code>
       */

      @java.lang.Override
      public boolean containsValues(
          java.lang.String key) {
        if (key == null) { throw new NullPointerException("map key"); }
        return internalGetValues().getMap().containsKey(key);
      }
      /**
       * Use {@link #getValuesMap()} instead.
       */
      @java.lang.Override
      @java.lang.Deprecated
      public java.util.Map<java.lang.String, java.lang.String> getValues() {
        return getValuesMap();
      }
      /**
       * <pre>
       * 参数键值表。键和值都使用字符串，具体含义由 AGV 适配器解释。
       * </pre>
       *
       * <code>map&lt;string, string&gt; values = 1;</code>
       */
      @java.lang.Override

      public java.util.Map<java.lang.String, java.lang.String> getValuesMap() {
        return internalGetValues().getMap();
      }
      /**
       * <pre>
       * 参数键值表。键和值都使用字符串，具体含义由 AGV 适配器解释。
       * </pre>
       *
       * <code>map&lt;string, string&gt; values = 1;</code>
       */
      @java.lang.Override

      public java.lang.String getValuesOrDefault(
          java.lang.String key,
          java.lang.String defaultValue) {
        if (key == null) { throw new NullPointerException("map key"); }
        java.util.Map<java.lang.String, java.lang.String> map =
            internalGetValues().getMap();
        return map.containsKey(key) ? map.get(key) : defaultValue;
      }
      /**
       * <pre>
       * 参数键值表。键和值都使用字符串，具体含义由 AGV 适配器解释。
       * </pre>
       *
       * <code>map&lt;string, string&gt; values = 1;</code>
       */
      @java.lang.Override

      public java.lang.String getValuesOrThrow(
          java.lang.String key) {
        if (key == null) { throw new NullPointerException("map key"); }
        java.util.Map<java.lang.String, java.lang.String> map =
            internalGetValues().getMap();
        if (!map.containsKey(key)) {
          throw new java.lang.IllegalArgumentException();
        }
        return map.get(key);
      }

      public Builder clearValues() {
        internalGetMutableValues().getMutableMap()
            .clear();
        return this;
      }
      /**
       * <pre>
       * 参数键值表。键和值都使用字符串，具体含义由 AGV 适配器解释。
       * </pre>
       *
       * <code>map&lt;string, string&gt; values = 1;</code>
       */

      public Builder removeValues(
          java.lang.String key) {
        if (key == null) { throw new NullPointerException("map key"); }
        internalGetMutableValues().getMutableMap()
            .remove(key);
        return this;
      }
      /**
       * Use alternate mutation accessors instead.
       */
      @java.lang.Deprecated
      public java.util.Map<java.lang.String, java.lang.String>
      getMutableValues() {
        return internalGetMutableValues().getMutableMap();
      }
      /**
       * <pre>
       * 参数键值表。键和值都使用字符串，具体含义由 AGV 适配器解释。
       * </pre>
       *
       * <code>map&lt;string, string&gt; values = 1;</code>
       */
      public Builder putValues(
          java.lang.String key,
          java.lang.String value) {
        if (key == null) { throw new NullPointerException("map key"); }
        if (value == null) {
  throw new NullPointerException("map value");
}

        internalGetMutableValues().getMutableMap()
            .put(key, value);
        return this;
      }
      /**
       * <pre>
       * 参数键值表。键和值都使用字符串，具体含义由 AGV 适配器解释。
       * </pre>
       *
       * <code>map&lt;string, string&gt; values = 1;</code>
       */

      public Builder putAllValues(
          java.util.Map<java.lang.String, java.lang.String> values) {
        internalGetMutableValues().getMutableMap()
            .putAll(values);
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:cmvr.msgs.AgvAdapterParams)
    }

    // @@protoc_insertion_point(class_scope:cmvr.msgs.AgvAdapterParams)
    private static final cmvr.msgs.Agv.AgvAdapterParams DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new cmvr.msgs.Agv.AgvAdapterParams();
    }

    public static cmvr.msgs.Agv.AgvAdapterParams getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<AgvAdapterParams>
        PARSER = new com.google.protobuf.AbstractParser<AgvAdapterParams>() {
      @java.lang.Override
      public AgvAdapterParams parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (com.google.protobuf.UninitializedMessageException e) {
          throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(e)
              .setUnfinishedMessage(builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

    public static com.google.protobuf.Parser<AgvAdapterParams> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<AgvAdapterParams> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public cmvr.msgs.Agv.AgvAdapterParams getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface AgvRuntimeStateOrBuilder extends
      // @@protoc_insertion_point(interface_extends:cmvr.msgs.AgvRuntimeState)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * 状态采样时间，Unix 时间戳，单位：秒。
     * </pre>
     *
     * <code>double timestamp = 1;</code>
     * @return The timestamp.
     */
    double getTimestamp();

    /**
     * <pre>
     * 运行模式，取值对应服务端内部 AgvMode 枚举的整数值。
     * </pre>
     *
     * <code>int32 mode = 2;</code>
     * @return The mode.
     */
    int getMode();

    /**
     * <pre>
     * 是否已连接 AGV 控制器。
     * </pre>
     *
     * <code>bool connected = 3;</code>
     * @return The connected.
     */
    boolean getConnected();

    /**
     * <pre>
     * 是否已定位成功。
     * </pre>
     *
     * <code>bool localized = 4;</code>
     * @return The localized.
     */
    boolean getLocalized();

    /**
     * <pre>
     * AGV 是否处于运动状态。
     * </pre>
     *
     * <code>bool moving = 5;</code>
     * @return The moving.
     */
    boolean getMoving();

    /**
     * <pre>
     * AGV 是否处于故障状态。
     * </pre>
     *
     * <code>bool fault = 6;</code>
     * @return The fault.
     */
    boolean getFault();

    /**
     * <pre>
     * AGV 是否处于急停状态。
     * </pre>
     *
     * <code>bool emergency_stopped = 7;</code>
     * @return The emergencyStopped.
     */
    boolean getEmergencyStopped();

    /**
     * <pre>
     * 当前地图坐标系下的二维位姿。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvPose2d pose = 8;</code>
     * @return Whether the pose field is set.
     */
    boolean hasPose();
    /**
     * <pre>
     * 当前地图坐标系下的二维位姿。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvPose2d pose = 8;</code>
     * @return The pose.
     */
    cmvr.msgs.Agv.AgvPose2d getPose();
    /**
     * <pre>
     * 当前地图坐标系下的二维位姿。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvPose2d pose = 8;</code>
     */
    cmvr.msgs.Agv.AgvPose2dOrBuilder getPoseOrBuilder();

    /**
     * <pre>
     * 当前车体速度。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvVelocity velocity = 9;</code>
     * @return Whether the velocity field is set.
     */
    boolean hasVelocity();
    /**
     * <pre>
     * 当前车体速度。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvVelocity velocity = 9;</code>
     * @return The velocity.
     */
    cmvr.msgs.Agv.AgvVelocity getVelocity();
    /**
     * <pre>
     * 当前车体速度。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvVelocity velocity = 9;</code>
     */
    cmvr.msgs.Agv.AgvVelocityOrBuilder getVelocityOrBuilder();

    /**
     * <pre>
     * 当前电池状态。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvBatteryState battery = 10;</code>
     * @return Whether the battery field is set.
     */
    boolean hasBattery();
    /**
     * <pre>
     * 当前电池状态。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvBatteryState battery = 10;</code>
     * @return The battery.
     */
    cmvr.msgs.Agv.AgvBatteryState getBattery();
    /**
     * <pre>
     * 当前电池状态。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvBatteryState battery = 10;</code>
     */
    cmvr.msgs.Agv.AgvBatteryStateOrBuilder getBatteryOrBuilder();

    /**
     * <pre>
     * 当前加载地图名称；为空表示未知或控制器未返回。
     * </pre>
     *
     * <code>string current_map = 11;</code>
     * @return The currentMap.
     */
    java.lang.String getCurrentMap();
    /**
     * <pre>
     * 当前加载地图名称；为空表示未知或控制器未返回。
     * </pre>
     *
     * <code>string current_map = 11;</code>
     * @return The bytes for currentMap.
     */
    com.google.protobuf.ByteString
        getCurrentMapBytes();

    /**
     * <pre>
     * 当前或最近站点 id；为空表示未知或当前不在站点附近。
     * </pre>
     *
     * <code>string current_station = 12;</code>
     * @return The currentStation.
     */
    java.lang.String getCurrentStation();
    /**
     * <pre>
     * 当前或最近站点 id；为空表示未知或当前不在站点附近。
     * </pre>
     *
     * <code>string current_station = 12;</code>
     * @return The bytes for currentStation.
     */
    com.google.protobuf.ByteString
        getCurrentStationBytes();

    /**
     * <pre>
     * 最近一次错误信息；为空表示无错误或未知。
     * </pre>
     *
     * <code>string last_error = 13;</code>
     * @return The lastError.
     */
    java.lang.String getLastError();
    /**
     * <pre>
     * 最近一次错误信息；为空表示无错误或未知。
     * </pre>
     *
     * <code>string last_error = 13;</code>
     * @return The bytes for lastError.
     */
    com.google.protobuf.ByteString
        getLastErrorBytes();
  }
  /**
   * <pre>
   * AGV 当前运行状态快照。
   * </pre>
   *
   * Protobuf type {@code cmvr.msgs.AgvRuntimeState}
   */
  public static final class AgvRuntimeState extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:cmvr.msgs.AgvRuntimeState)
      AgvRuntimeStateOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use AgvRuntimeState.newBuilder() to construct.
    private AgvRuntimeState(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private AgvRuntimeState() {
      currentMap_ = "";
      currentStation_ = "";
      lastError_ = "";
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new AgvRuntimeState();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvRuntimeState_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvRuntimeState_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              cmvr.msgs.Agv.AgvRuntimeState.class, cmvr.msgs.Agv.AgvRuntimeState.Builder.class);
    }

    public static final int TIMESTAMP_FIELD_NUMBER = 1;
    private double timestamp_;
    /**
     * <pre>
     * 状态采样时间，Unix 时间戳，单位：秒。
     * </pre>
     *
     * <code>double timestamp = 1;</code>
     * @return The timestamp.
     */
    @java.lang.Override
    public double getTimestamp() {
      return timestamp_;
    }

    public static final int MODE_FIELD_NUMBER = 2;
    private int mode_;
    /**
     * <pre>
     * 运行模式，取值对应服务端内部 AgvMode 枚举的整数值。
     * </pre>
     *
     * <code>int32 mode = 2;</code>
     * @return The mode.
     */
    @java.lang.Override
    public int getMode() {
      return mode_;
    }

    public static final int CONNECTED_FIELD_NUMBER = 3;
    private boolean connected_;
    /**
     * <pre>
     * 是否已连接 AGV 控制器。
     * </pre>
     *
     * <code>bool connected = 3;</code>
     * @return The connected.
     */
    @java.lang.Override
    public boolean getConnected() {
      return connected_;
    }

    public static final int LOCALIZED_FIELD_NUMBER = 4;
    private boolean localized_;
    /**
     * <pre>
     * 是否已定位成功。
     * </pre>
     *
     * <code>bool localized = 4;</code>
     * @return The localized.
     */
    @java.lang.Override
    public boolean getLocalized() {
      return localized_;
    }

    public static final int MOVING_FIELD_NUMBER = 5;
    private boolean moving_;
    /**
     * <pre>
     * AGV 是否处于运动状态。
     * </pre>
     *
     * <code>bool moving = 5;</code>
     * @return The moving.
     */
    @java.lang.Override
    public boolean getMoving() {
      return moving_;
    }

    public static final int FAULT_FIELD_NUMBER = 6;
    private boolean fault_;
    /**
     * <pre>
     * AGV 是否处于故障状态。
     * </pre>
     *
     * <code>bool fault = 6;</code>
     * @return The fault.
     */
    @java.lang.Override
    public boolean getFault() {
      return fault_;
    }

    public static final int EMERGENCY_STOPPED_FIELD_NUMBER = 7;
    private boolean emergencyStopped_;
    /**
     * <pre>
     * AGV 是否处于急停状态。
     * </pre>
     *
     * <code>bool emergency_stopped = 7;</code>
     * @return The emergencyStopped.
     */
    @java.lang.Override
    public boolean getEmergencyStopped() {
      return emergencyStopped_;
    }

    public static final int POSE_FIELD_NUMBER = 8;
    private cmvr.msgs.Agv.AgvPose2d pose_;
    /**
     * <pre>
     * 当前地图坐标系下的二维位姿。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvPose2d pose = 8;</code>
     * @return Whether the pose field is set.
     */
    @java.lang.Override
    public boolean hasPose() {
      return pose_ != null;
    }
    /**
     * <pre>
     * 当前地图坐标系下的二维位姿。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvPose2d pose = 8;</code>
     * @return The pose.
     */
    @java.lang.Override
    public cmvr.msgs.Agv.AgvPose2d getPose() {
      return pose_ == null ? cmvr.msgs.Agv.AgvPose2d.getDefaultInstance() : pose_;
    }
    /**
     * <pre>
     * 当前地图坐标系下的二维位姿。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvPose2d pose = 8;</code>
     */
    @java.lang.Override
    public cmvr.msgs.Agv.AgvPose2dOrBuilder getPoseOrBuilder() {
      return getPose();
    }

    public static final int VELOCITY_FIELD_NUMBER = 9;
    private cmvr.msgs.Agv.AgvVelocity velocity_;
    /**
     * <pre>
     * 当前车体速度。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvVelocity velocity = 9;</code>
     * @return Whether the velocity field is set.
     */
    @java.lang.Override
    public boolean hasVelocity() {
      return velocity_ != null;
    }
    /**
     * <pre>
     * 当前车体速度。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvVelocity velocity = 9;</code>
     * @return The velocity.
     */
    @java.lang.Override
    public cmvr.msgs.Agv.AgvVelocity getVelocity() {
      return velocity_ == null ? cmvr.msgs.Agv.AgvVelocity.getDefaultInstance() : velocity_;
    }
    /**
     * <pre>
     * 当前车体速度。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvVelocity velocity = 9;</code>
     */
    @java.lang.Override
    public cmvr.msgs.Agv.AgvVelocityOrBuilder getVelocityOrBuilder() {
      return getVelocity();
    }

    public static final int BATTERY_FIELD_NUMBER = 10;
    private cmvr.msgs.Agv.AgvBatteryState battery_;
    /**
     * <pre>
     * 当前电池状态。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvBatteryState battery = 10;</code>
     * @return Whether the battery field is set.
     */
    @java.lang.Override
    public boolean hasBattery() {
      return battery_ != null;
    }
    /**
     * <pre>
     * 当前电池状态。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvBatteryState battery = 10;</code>
     * @return The battery.
     */
    @java.lang.Override
    public cmvr.msgs.Agv.AgvBatteryState getBattery() {
      return battery_ == null ? cmvr.msgs.Agv.AgvBatteryState.getDefaultInstance() : battery_;
    }
    /**
     * <pre>
     * 当前电池状态。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvBatteryState battery = 10;</code>
     */
    @java.lang.Override
    public cmvr.msgs.Agv.AgvBatteryStateOrBuilder getBatteryOrBuilder() {
      return getBattery();
    }

    public static final int CURRENT_MAP_FIELD_NUMBER = 11;
    private volatile java.lang.Object currentMap_;
    /**
     * <pre>
     * 当前加载地图名称；为空表示未知或控制器未返回。
     * </pre>
     *
     * <code>string current_map = 11;</code>
     * @return The currentMap.
     */
    @java.lang.Override
    public java.lang.String getCurrentMap() {
      java.lang.Object ref = currentMap_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        currentMap_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * 当前加载地图名称；为空表示未知或控制器未返回。
     * </pre>
     *
     * <code>string current_map = 11;</code>
     * @return The bytes for currentMap.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getCurrentMapBytes() {
      java.lang.Object ref = currentMap_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        currentMap_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int CURRENT_STATION_FIELD_NUMBER = 12;
    private volatile java.lang.Object currentStation_;
    /**
     * <pre>
     * 当前或最近站点 id；为空表示未知或当前不在站点附近。
     * </pre>
     *
     * <code>string current_station = 12;</code>
     * @return The currentStation.
     */
    @java.lang.Override
    public java.lang.String getCurrentStation() {
      java.lang.Object ref = currentStation_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        currentStation_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * 当前或最近站点 id；为空表示未知或当前不在站点附近。
     * </pre>
     *
     * <code>string current_station = 12;</code>
     * @return The bytes for currentStation.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getCurrentStationBytes() {
      java.lang.Object ref = currentStation_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        currentStation_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int LAST_ERROR_FIELD_NUMBER = 13;
    private volatile java.lang.Object lastError_;
    /**
     * <pre>
     * 最近一次错误信息；为空表示无错误或未知。
     * </pre>
     *
     * <code>string last_error = 13;</code>
     * @return The lastError.
     */
    @java.lang.Override
    public java.lang.String getLastError() {
      java.lang.Object ref = lastError_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        lastError_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * 最近一次错误信息；为空表示无错误或未知。
     * </pre>
     *
     * <code>string last_error = 13;</code>
     * @return The bytes for lastError.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getLastErrorBytes() {
      java.lang.Object ref = lastError_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        lastError_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (java.lang.Double.doubleToRawLongBits(timestamp_) != 0) {
        output.writeDouble(1, timestamp_);
      }
      if (mode_ != 0) {
        output.writeInt32(2, mode_);
      }
      if (connected_ != false) {
        output.writeBool(3, connected_);
      }
      if (localized_ != false) {
        output.writeBool(4, localized_);
      }
      if (moving_ != false) {
        output.writeBool(5, moving_);
      }
      if (fault_ != false) {
        output.writeBool(6, fault_);
      }
      if (emergencyStopped_ != false) {
        output.writeBool(7, emergencyStopped_);
      }
      if (pose_ != null) {
        output.writeMessage(8, getPose());
      }
      if (velocity_ != null) {
        output.writeMessage(9, getVelocity());
      }
      if (battery_ != null) {
        output.writeMessage(10, getBattery());
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(currentMap_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 11, currentMap_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(currentStation_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 12, currentStation_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(lastError_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 13, lastError_);
      }
      getUnknownFields().writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (java.lang.Double.doubleToRawLongBits(timestamp_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(1, timestamp_);
      }
      if (mode_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(2, mode_);
      }
      if (connected_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(3, connected_);
      }
      if (localized_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(4, localized_);
      }
      if (moving_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(5, moving_);
      }
      if (fault_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(6, fault_);
      }
      if (emergencyStopped_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(7, emergencyStopped_);
      }
      if (pose_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(8, getPose());
      }
      if (velocity_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(9, getVelocity());
      }
      if (battery_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(10, getBattery());
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(currentMap_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(11, currentMap_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(currentStation_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(12, currentStation_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(lastError_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(13, lastError_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof cmvr.msgs.Agv.AgvRuntimeState)) {
        return super.equals(obj);
      }
      cmvr.msgs.Agv.AgvRuntimeState other = (cmvr.msgs.Agv.AgvRuntimeState) obj;

      if (java.lang.Double.doubleToLongBits(getTimestamp())
          != java.lang.Double.doubleToLongBits(
              other.getTimestamp())) return false;
      if (getMode()
          != other.getMode()) return false;
      if (getConnected()
          != other.getConnected()) return false;
      if (getLocalized()
          != other.getLocalized()) return false;
      if (getMoving()
          != other.getMoving()) return false;
      if (getFault()
          != other.getFault()) return false;
      if (getEmergencyStopped()
          != other.getEmergencyStopped()) return false;
      if (hasPose() != other.hasPose()) return false;
      if (hasPose()) {
        if (!getPose()
            .equals(other.getPose())) return false;
      }
      if (hasVelocity() != other.hasVelocity()) return false;
      if (hasVelocity()) {
        if (!getVelocity()
            .equals(other.getVelocity())) return false;
      }
      if (hasBattery() != other.hasBattery()) return false;
      if (hasBattery()) {
        if (!getBattery()
            .equals(other.getBattery())) return false;
      }
      if (!getCurrentMap()
          .equals(other.getCurrentMap())) return false;
      if (!getCurrentStation()
          .equals(other.getCurrentStation())) return false;
      if (!getLastError()
          .equals(other.getLastError())) return false;
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getTimestamp()));
      hash = (37 * hash) + MODE_FIELD_NUMBER;
      hash = (53 * hash) + getMode();
      hash = (37 * hash) + CONNECTED_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getConnected());
      hash = (37 * hash) + LOCALIZED_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getLocalized());
      hash = (37 * hash) + MOVING_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getMoving());
      hash = (37 * hash) + FAULT_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getFault());
      hash = (37 * hash) + EMERGENCY_STOPPED_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getEmergencyStopped());
      if (hasPose()) {
        hash = (37 * hash) + POSE_FIELD_NUMBER;
        hash = (53 * hash) + getPose().hashCode();
      }
      if (hasVelocity()) {
        hash = (37 * hash) + VELOCITY_FIELD_NUMBER;
        hash = (53 * hash) + getVelocity().hashCode();
      }
      if (hasBattery()) {
        hash = (37 * hash) + BATTERY_FIELD_NUMBER;
        hash = (53 * hash) + getBattery().hashCode();
      }
      hash = (37 * hash) + CURRENT_MAP_FIELD_NUMBER;
      hash = (53 * hash) + getCurrentMap().hashCode();
      hash = (37 * hash) + CURRENT_STATION_FIELD_NUMBER;
      hash = (53 * hash) + getCurrentStation().hashCode();
      hash = (37 * hash) + LAST_ERROR_FIELD_NUMBER;
      hash = (53 * hash) + getLastError().hashCode();
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static cmvr.msgs.Agv.AgvRuntimeState parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.msgs.Agv.AgvRuntimeState parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvRuntimeState parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.msgs.Agv.AgvRuntimeState parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvRuntimeState parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.msgs.Agv.AgvRuntimeState parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvRuntimeState parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cmvr.msgs.Agv.AgvRuntimeState parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvRuntimeState parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static cmvr.msgs.Agv.AgvRuntimeState parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvRuntimeState parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cmvr.msgs.Agv.AgvRuntimeState parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(cmvr.msgs.Agv.AgvRuntimeState prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * AGV 当前运行状态快照。
     * </pre>
     *
     * Protobuf type {@code cmvr.msgs.AgvRuntimeState}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:cmvr.msgs.AgvRuntimeState)
        cmvr.msgs.Agv.AgvRuntimeStateOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvRuntimeState_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvRuntimeState_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                cmvr.msgs.Agv.AgvRuntimeState.class, cmvr.msgs.Agv.AgvRuntimeState.Builder.class);
      }

      // Construct using cmvr.msgs.Agv.AgvRuntimeState.newBuilder()
      private Builder() {

      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        timestamp_ = 0D;

        mode_ = 0;

        connected_ = false;

        localized_ = false;

        moving_ = false;

        fault_ = false;

        emergencyStopped_ = false;

        if (poseBuilder_ == null) {
          pose_ = null;
        } else {
          pose_ = null;
          poseBuilder_ = null;
        }
        if (velocityBuilder_ == null) {
          velocity_ = null;
        } else {
          velocity_ = null;
          velocityBuilder_ = null;
        }
        if (batteryBuilder_ == null) {
          battery_ = null;
        } else {
          battery_ = null;
          batteryBuilder_ = null;
        }
        currentMap_ = "";

        currentStation_ = "";

        lastError_ = "";

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvRuntimeState_descriptor;
      }

      @java.lang.Override
      public cmvr.msgs.Agv.AgvRuntimeState getDefaultInstanceForType() {
        return cmvr.msgs.Agv.AgvRuntimeState.getDefaultInstance();
      }

      @java.lang.Override
      public cmvr.msgs.Agv.AgvRuntimeState build() {
        cmvr.msgs.Agv.AgvRuntimeState result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public cmvr.msgs.Agv.AgvRuntimeState buildPartial() {
        cmvr.msgs.Agv.AgvRuntimeState result = new cmvr.msgs.Agv.AgvRuntimeState(this);
        result.timestamp_ = timestamp_;
        result.mode_ = mode_;
        result.connected_ = connected_;
        result.localized_ = localized_;
        result.moving_ = moving_;
        result.fault_ = fault_;
        result.emergencyStopped_ = emergencyStopped_;
        if (poseBuilder_ == null) {
          result.pose_ = pose_;
        } else {
          result.pose_ = poseBuilder_.build();
        }
        if (velocityBuilder_ == null) {
          result.velocity_ = velocity_;
        } else {
          result.velocity_ = velocityBuilder_.build();
        }
        if (batteryBuilder_ == null) {
          result.battery_ = battery_;
        } else {
          result.battery_ = batteryBuilder_.build();
        }
        result.currentMap_ = currentMap_;
        result.currentStation_ = currentStation_;
        result.lastError_ = lastError_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof cmvr.msgs.Agv.AgvRuntimeState) {
          return mergeFrom((cmvr.msgs.Agv.AgvRuntimeState)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(cmvr.msgs.Agv.AgvRuntimeState other) {
        if (other == cmvr.msgs.Agv.AgvRuntimeState.getDefaultInstance()) return this;
        if (other.getTimestamp() != 0D) {
          setTimestamp(other.getTimestamp());
        }
        if (other.getMode() != 0) {
          setMode(other.getMode());
        }
        if (other.getConnected() != false) {
          setConnected(other.getConnected());
        }
        if (other.getLocalized() != false) {
          setLocalized(other.getLocalized());
        }
        if (other.getMoving() != false) {
          setMoving(other.getMoving());
        }
        if (other.getFault() != false) {
          setFault(other.getFault());
        }
        if (other.getEmergencyStopped() != false) {
          setEmergencyStopped(other.getEmergencyStopped());
        }
        if (other.hasPose()) {
          mergePose(other.getPose());
        }
        if (other.hasVelocity()) {
          mergeVelocity(other.getVelocity());
        }
        if (other.hasBattery()) {
          mergeBattery(other.getBattery());
        }
        if (!other.getCurrentMap().isEmpty()) {
          currentMap_ = other.currentMap_;
          onChanged();
        }
        if (!other.getCurrentStation().isEmpty()) {
          currentStation_ = other.currentStation_;
          onChanged();
        }
        if (!other.getLastError().isEmpty()) {
          lastError_ = other.lastError_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 9: {
                timestamp_ = input.readDouble();

                break;
              } // case 9
              case 16: {
                mode_ = input.readInt32();

                break;
              } // case 16
              case 24: {
                connected_ = input.readBool();

                break;
              } // case 24
              case 32: {
                localized_ = input.readBool();

                break;
              } // case 32
              case 40: {
                moving_ = input.readBool();

                break;
              } // case 40
              case 48: {
                fault_ = input.readBool();

                break;
              } // case 48
              case 56: {
                emergencyStopped_ = input.readBool();

                break;
              } // case 56
              case 66: {
                input.readMessage(
                    getPoseFieldBuilder().getBuilder(),
                    extensionRegistry);

                break;
              } // case 66
              case 74: {
                input.readMessage(
                    getVelocityFieldBuilder().getBuilder(),
                    extensionRegistry);

                break;
              } // case 74
              case 82: {
                input.readMessage(
                    getBatteryFieldBuilder().getBuilder(),
                    extensionRegistry);

                break;
              } // case 82
              case 90: {
                currentMap_ = input.readStringRequireUtf8();

                break;
              } // case 90
              case 98: {
                currentStation_ = input.readStringRequireUtf8();

                break;
              } // case 98
              case 106: {
                lastError_ = input.readStringRequireUtf8();

                break;
              } // case 106
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }

      private double timestamp_ ;
      /**
       * <pre>
       * 状态采样时间，Unix 时间戳，单位：秒。
       * </pre>
       *
       * <code>double timestamp = 1;</code>
       * @return The timestamp.
       */
      @java.lang.Override
      public double getTimestamp() {
        return timestamp_;
      }
      /**
       * <pre>
       * 状态采样时间，Unix 时间戳，单位：秒。
       * </pre>
       *
       * <code>double timestamp = 1;</code>
       * @param value The timestamp to set.
       * @return This builder for chaining.
       */
      public Builder setTimestamp(double value) {
        
        timestamp_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 状态采样时间，Unix 时间戳，单位：秒。
       * </pre>
       *
       * <code>double timestamp = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearTimestamp() {
        
        timestamp_ = 0D;
        onChanged();
        return this;
      }

      private int mode_ ;
      /**
       * <pre>
       * 运行模式，取值对应服务端内部 AgvMode 枚举的整数值。
       * </pre>
       *
       * <code>int32 mode = 2;</code>
       * @return The mode.
       */
      @java.lang.Override
      public int getMode() {
        return mode_;
      }
      /**
       * <pre>
       * 运行模式，取值对应服务端内部 AgvMode 枚举的整数值。
       * </pre>
       *
       * <code>int32 mode = 2;</code>
       * @param value The mode to set.
       * @return This builder for chaining.
       */
      public Builder setMode(int value) {
        
        mode_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 运行模式，取值对应服务端内部 AgvMode 枚举的整数值。
       * </pre>
       *
       * <code>int32 mode = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearMode() {
        
        mode_ = 0;
        onChanged();
        return this;
      }

      private boolean connected_ ;
      /**
       * <pre>
       * 是否已连接 AGV 控制器。
       * </pre>
       *
       * <code>bool connected = 3;</code>
       * @return The connected.
       */
      @java.lang.Override
      public boolean getConnected() {
        return connected_;
      }
      /**
       * <pre>
       * 是否已连接 AGV 控制器。
       * </pre>
       *
       * <code>bool connected = 3;</code>
       * @param value The connected to set.
       * @return This builder for chaining.
       */
      public Builder setConnected(boolean value) {
        
        connected_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 是否已连接 AGV 控制器。
       * </pre>
       *
       * <code>bool connected = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearConnected() {
        
        connected_ = false;
        onChanged();
        return this;
      }

      private boolean localized_ ;
      /**
       * <pre>
       * 是否已定位成功。
       * </pre>
       *
       * <code>bool localized = 4;</code>
       * @return The localized.
       */
      @java.lang.Override
      public boolean getLocalized() {
        return localized_;
      }
      /**
       * <pre>
       * 是否已定位成功。
       * </pre>
       *
       * <code>bool localized = 4;</code>
       * @param value The localized to set.
       * @return This builder for chaining.
       */
      public Builder setLocalized(boolean value) {
        
        localized_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 是否已定位成功。
       * </pre>
       *
       * <code>bool localized = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearLocalized() {
        
        localized_ = false;
        onChanged();
        return this;
      }

      private boolean moving_ ;
      /**
       * <pre>
       * AGV 是否处于运动状态。
       * </pre>
       *
       * <code>bool moving = 5;</code>
       * @return The moving.
       */
      @java.lang.Override
      public boolean getMoving() {
        return moving_;
      }
      /**
       * <pre>
       * AGV 是否处于运动状态。
       * </pre>
       *
       * <code>bool moving = 5;</code>
       * @param value The moving to set.
       * @return This builder for chaining.
       */
      public Builder setMoving(boolean value) {
        
        moving_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * AGV 是否处于运动状态。
       * </pre>
       *
       * <code>bool moving = 5;</code>
       * @return This builder for chaining.
       */
      public Builder clearMoving() {
        
        moving_ = false;
        onChanged();
        return this;
      }

      private boolean fault_ ;
      /**
       * <pre>
       * AGV 是否处于故障状态。
       * </pre>
       *
       * <code>bool fault = 6;</code>
       * @return The fault.
       */
      @java.lang.Override
      public boolean getFault() {
        return fault_;
      }
      /**
       * <pre>
       * AGV 是否处于故障状态。
       * </pre>
       *
       * <code>bool fault = 6;</code>
       * @param value The fault to set.
       * @return This builder for chaining.
       */
      public Builder setFault(boolean value) {
        
        fault_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * AGV 是否处于故障状态。
       * </pre>
       *
       * <code>bool fault = 6;</code>
       * @return This builder for chaining.
       */
      public Builder clearFault() {
        
        fault_ = false;
        onChanged();
        return this;
      }

      private boolean emergencyStopped_ ;
      /**
       * <pre>
       * AGV 是否处于急停状态。
       * </pre>
       *
       * <code>bool emergency_stopped = 7;</code>
       * @return The emergencyStopped.
       */
      @java.lang.Override
      public boolean getEmergencyStopped() {
        return emergencyStopped_;
      }
      /**
       * <pre>
       * AGV 是否处于急停状态。
       * </pre>
       *
       * <code>bool emergency_stopped = 7;</code>
       * @param value The emergencyStopped to set.
       * @return This builder for chaining.
       */
      public Builder setEmergencyStopped(boolean value) {
        
        emergencyStopped_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * AGV 是否处于急停状态。
       * </pre>
       *
       * <code>bool emergency_stopped = 7;</code>
       * @return This builder for chaining.
       */
      public Builder clearEmergencyStopped() {
        
        emergencyStopped_ = false;
        onChanged();
        return this;
      }

      private cmvr.msgs.Agv.AgvPose2d pose_;
      private com.google.protobuf.SingleFieldBuilderV3<
          cmvr.msgs.Agv.AgvPose2d, cmvr.msgs.Agv.AgvPose2d.Builder, cmvr.msgs.Agv.AgvPose2dOrBuilder> poseBuilder_;
      /**
       * <pre>
       * 当前地图坐标系下的二维位姿。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvPose2d pose = 8;</code>
       * @return Whether the pose field is set.
       */
      public boolean hasPose() {
        return poseBuilder_ != null || pose_ != null;
      }
      /**
       * <pre>
       * 当前地图坐标系下的二维位姿。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvPose2d pose = 8;</code>
       * @return The pose.
       */
      public cmvr.msgs.Agv.AgvPose2d getPose() {
        if (poseBuilder_ == null) {
          return pose_ == null ? cmvr.msgs.Agv.AgvPose2d.getDefaultInstance() : pose_;
        } else {
          return poseBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * 当前地图坐标系下的二维位姿。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvPose2d pose = 8;</code>
       */
      public Builder setPose(cmvr.msgs.Agv.AgvPose2d value) {
        if (poseBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          pose_ = value;
          onChanged();
        } else {
          poseBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       * 当前地图坐标系下的二维位姿。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvPose2d pose = 8;</code>
       */
      public Builder setPose(
          cmvr.msgs.Agv.AgvPose2d.Builder builderForValue) {
        if (poseBuilder_ == null) {
          pose_ = builderForValue.build();
          onChanged();
        } else {
          poseBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       * 当前地图坐标系下的二维位姿。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvPose2d pose = 8;</code>
       */
      public Builder mergePose(cmvr.msgs.Agv.AgvPose2d value) {
        if (poseBuilder_ == null) {
          if (pose_ != null) {
            pose_ =
              cmvr.msgs.Agv.AgvPose2d.newBuilder(pose_).mergeFrom(value).buildPartial();
          } else {
            pose_ = value;
          }
          onChanged();
        } else {
          poseBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       * 当前地图坐标系下的二维位姿。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvPose2d pose = 8;</code>
       */
      public Builder clearPose() {
        if (poseBuilder_ == null) {
          pose_ = null;
          onChanged();
        } else {
          pose_ = null;
          poseBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       * 当前地图坐标系下的二维位姿。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvPose2d pose = 8;</code>
       */
      public cmvr.msgs.Agv.AgvPose2d.Builder getPoseBuilder() {
        
        onChanged();
        return getPoseFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * 当前地图坐标系下的二维位姿。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvPose2d pose = 8;</code>
       */
      public cmvr.msgs.Agv.AgvPose2dOrBuilder getPoseOrBuilder() {
        if (poseBuilder_ != null) {
          return poseBuilder_.getMessageOrBuilder();
        } else {
          return pose_ == null ?
              cmvr.msgs.Agv.AgvPose2d.getDefaultInstance() : pose_;
        }
      }
      /**
       * <pre>
       * 当前地图坐标系下的二维位姿。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvPose2d pose = 8;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          cmvr.msgs.Agv.AgvPose2d, cmvr.msgs.Agv.AgvPose2d.Builder, cmvr.msgs.Agv.AgvPose2dOrBuilder> 
          getPoseFieldBuilder() {
        if (poseBuilder_ == null) {
          poseBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              cmvr.msgs.Agv.AgvPose2d, cmvr.msgs.Agv.AgvPose2d.Builder, cmvr.msgs.Agv.AgvPose2dOrBuilder>(
                  getPose(),
                  getParentForChildren(),
                  isClean());
          pose_ = null;
        }
        return poseBuilder_;
      }

      private cmvr.msgs.Agv.AgvVelocity velocity_;
      private com.google.protobuf.SingleFieldBuilderV3<
          cmvr.msgs.Agv.AgvVelocity, cmvr.msgs.Agv.AgvVelocity.Builder, cmvr.msgs.Agv.AgvVelocityOrBuilder> velocityBuilder_;
      /**
       * <pre>
       * 当前车体速度。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvVelocity velocity = 9;</code>
       * @return Whether the velocity field is set.
       */
      public boolean hasVelocity() {
        return velocityBuilder_ != null || velocity_ != null;
      }
      /**
       * <pre>
       * 当前车体速度。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvVelocity velocity = 9;</code>
       * @return The velocity.
       */
      public cmvr.msgs.Agv.AgvVelocity getVelocity() {
        if (velocityBuilder_ == null) {
          return velocity_ == null ? cmvr.msgs.Agv.AgvVelocity.getDefaultInstance() : velocity_;
        } else {
          return velocityBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * 当前车体速度。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvVelocity velocity = 9;</code>
       */
      public Builder setVelocity(cmvr.msgs.Agv.AgvVelocity value) {
        if (velocityBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          velocity_ = value;
          onChanged();
        } else {
          velocityBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       * 当前车体速度。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvVelocity velocity = 9;</code>
       */
      public Builder setVelocity(
          cmvr.msgs.Agv.AgvVelocity.Builder builderForValue) {
        if (velocityBuilder_ == null) {
          velocity_ = builderForValue.build();
          onChanged();
        } else {
          velocityBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       * 当前车体速度。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvVelocity velocity = 9;</code>
       */
      public Builder mergeVelocity(cmvr.msgs.Agv.AgvVelocity value) {
        if (velocityBuilder_ == null) {
          if (velocity_ != null) {
            velocity_ =
              cmvr.msgs.Agv.AgvVelocity.newBuilder(velocity_).mergeFrom(value).buildPartial();
          } else {
            velocity_ = value;
          }
          onChanged();
        } else {
          velocityBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       * 当前车体速度。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvVelocity velocity = 9;</code>
       */
      public Builder clearVelocity() {
        if (velocityBuilder_ == null) {
          velocity_ = null;
          onChanged();
        } else {
          velocity_ = null;
          velocityBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       * 当前车体速度。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvVelocity velocity = 9;</code>
       */
      public cmvr.msgs.Agv.AgvVelocity.Builder getVelocityBuilder() {
        
        onChanged();
        return getVelocityFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * 当前车体速度。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvVelocity velocity = 9;</code>
       */
      public cmvr.msgs.Agv.AgvVelocityOrBuilder getVelocityOrBuilder() {
        if (velocityBuilder_ != null) {
          return velocityBuilder_.getMessageOrBuilder();
        } else {
          return velocity_ == null ?
              cmvr.msgs.Agv.AgvVelocity.getDefaultInstance() : velocity_;
        }
      }
      /**
       * <pre>
       * 当前车体速度。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvVelocity velocity = 9;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          cmvr.msgs.Agv.AgvVelocity, cmvr.msgs.Agv.AgvVelocity.Builder, cmvr.msgs.Agv.AgvVelocityOrBuilder> 
          getVelocityFieldBuilder() {
        if (velocityBuilder_ == null) {
          velocityBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              cmvr.msgs.Agv.AgvVelocity, cmvr.msgs.Agv.AgvVelocity.Builder, cmvr.msgs.Agv.AgvVelocityOrBuilder>(
                  getVelocity(),
                  getParentForChildren(),
                  isClean());
          velocity_ = null;
        }
        return velocityBuilder_;
      }

      private cmvr.msgs.Agv.AgvBatteryState battery_;
      private com.google.protobuf.SingleFieldBuilderV3<
          cmvr.msgs.Agv.AgvBatteryState, cmvr.msgs.Agv.AgvBatteryState.Builder, cmvr.msgs.Agv.AgvBatteryStateOrBuilder> batteryBuilder_;
      /**
       * <pre>
       * 当前电池状态。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvBatteryState battery = 10;</code>
       * @return Whether the battery field is set.
       */
      public boolean hasBattery() {
        return batteryBuilder_ != null || battery_ != null;
      }
      /**
       * <pre>
       * 当前电池状态。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvBatteryState battery = 10;</code>
       * @return The battery.
       */
      public cmvr.msgs.Agv.AgvBatteryState getBattery() {
        if (batteryBuilder_ == null) {
          return battery_ == null ? cmvr.msgs.Agv.AgvBatteryState.getDefaultInstance() : battery_;
        } else {
          return batteryBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * 当前电池状态。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvBatteryState battery = 10;</code>
       */
      public Builder setBattery(cmvr.msgs.Agv.AgvBatteryState value) {
        if (batteryBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          battery_ = value;
          onChanged();
        } else {
          batteryBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       * 当前电池状态。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvBatteryState battery = 10;</code>
       */
      public Builder setBattery(
          cmvr.msgs.Agv.AgvBatteryState.Builder builderForValue) {
        if (batteryBuilder_ == null) {
          battery_ = builderForValue.build();
          onChanged();
        } else {
          batteryBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       * 当前电池状态。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvBatteryState battery = 10;</code>
       */
      public Builder mergeBattery(cmvr.msgs.Agv.AgvBatteryState value) {
        if (batteryBuilder_ == null) {
          if (battery_ != null) {
            battery_ =
              cmvr.msgs.Agv.AgvBatteryState.newBuilder(battery_).mergeFrom(value).buildPartial();
          } else {
            battery_ = value;
          }
          onChanged();
        } else {
          batteryBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       * 当前电池状态。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvBatteryState battery = 10;</code>
       */
      public Builder clearBattery() {
        if (batteryBuilder_ == null) {
          battery_ = null;
          onChanged();
        } else {
          battery_ = null;
          batteryBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       * 当前电池状态。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvBatteryState battery = 10;</code>
       */
      public cmvr.msgs.Agv.AgvBatteryState.Builder getBatteryBuilder() {
        
        onChanged();
        return getBatteryFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * 当前电池状态。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvBatteryState battery = 10;</code>
       */
      public cmvr.msgs.Agv.AgvBatteryStateOrBuilder getBatteryOrBuilder() {
        if (batteryBuilder_ != null) {
          return batteryBuilder_.getMessageOrBuilder();
        } else {
          return battery_ == null ?
              cmvr.msgs.Agv.AgvBatteryState.getDefaultInstance() : battery_;
        }
      }
      /**
       * <pre>
       * 当前电池状态。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvBatteryState battery = 10;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          cmvr.msgs.Agv.AgvBatteryState, cmvr.msgs.Agv.AgvBatteryState.Builder, cmvr.msgs.Agv.AgvBatteryStateOrBuilder> 
          getBatteryFieldBuilder() {
        if (batteryBuilder_ == null) {
          batteryBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              cmvr.msgs.Agv.AgvBatteryState, cmvr.msgs.Agv.AgvBatteryState.Builder, cmvr.msgs.Agv.AgvBatteryStateOrBuilder>(
                  getBattery(),
                  getParentForChildren(),
                  isClean());
          battery_ = null;
        }
        return batteryBuilder_;
      }

      private java.lang.Object currentMap_ = "";
      /**
       * <pre>
       * 当前加载地图名称；为空表示未知或控制器未返回。
       * </pre>
       *
       * <code>string current_map = 11;</code>
       * @return The currentMap.
       */
      public java.lang.String getCurrentMap() {
        java.lang.Object ref = currentMap_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          currentMap_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * 当前加载地图名称；为空表示未知或控制器未返回。
       * </pre>
       *
       * <code>string current_map = 11;</code>
       * @return The bytes for currentMap.
       */
      public com.google.protobuf.ByteString
          getCurrentMapBytes() {
        java.lang.Object ref = currentMap_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          currentMap_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * 当前加载地图名称；为空表示未知或控制器未返回。
       * </pre>
       *
       * <code>string current_map = 11;</code>
       * @param value The currentMap to set.
       * @return This builder for chaining.
       */
      public Builder setCurrentMap(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        currentMap_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 当前加载地图名称；为空表示未知或控制器未返回。
       * </pre>
       *
       * <code>string current_map = 11;</code>
       * @return This builder for chaining.
       */
      public Builder clearCurrentMap() {
        
        currentMap_ = getDefaultInstance().getCurrentMap();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 当前加载地图名称；为空表示未知或控制器未返回。
       * </pre>
       *
       * <code>string current_map = 11;</code>
       * @param value The bytes for currentMap to set.
       * @return This builder for chaining.
       */
      public Builder setCurrentMapBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        currentMap_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object currentStation_ = "";
      /**
       * <pre>
       * 当前或最近站点 id；为空表示未知或当前不在站点附近。
       * </pre>
       *
       * <code>string current_station = 12;</code>
       * @return The currentStation.
       */
      public java.lang.String getCurrentStation() {
        java.lang.Object ref = currentStation_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          currentStation_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * 当前或最近站点 id；为空表示未知或当前不在站点附近。
       * </pre>
       *
       * <code>string current_station = 12;</code>
       * @return The bytes for currentStation.
       */
      public com.google.protobuf.ByteString
          getCurrentStationBytes() {
        java.lang.Object ref = currentStation_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          currentStation_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * 当前或最近站点 id；为空表示未知或当前不在站点附近。
       * </pre>
       *
       * <code>string current_station = 12;</code>
       * @param value The currentStation to set.
       * @return This builder for chaining.
       */
      public Builder setCurrentStation(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        currentStation_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 当前或最近站点 id；为空表示未知或当前不在站点附近。
       * </pre>
       *
       * <code>string current_station = 12;</code>
       * @return This builder for chaining.
       */
      public Builder clearCurrentStation() {
        
        currentStation_ = getDefaultInstance().getCurrentStation();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 当前或最近站点 id；为空表示未知或当前不在站点附近。
       * </pre>
       *
       * <code>string current_station = 12;</code>
       * @param value The bytes for currentStation to set.
       * @return This builder for chaining.
       */
      public Builder setCurrentStationBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        currentStation_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object lastError_ = "";
      /**
       * <pre>
       * 最近一次错误信息；为空表示无错误或未知。
       * </pre>
       *
       * <code>string last_error = 13;</code>
       * @return The lastError.
       */
      public java.lang.String getLastError() {
        java.lang.Object ref = lastError_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          lastError_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * 最近一次错误信息；为空表示无错误或未知。
       * </pre>
       *
       * <code>string last_error = 13;</code>
       * @return The bytes for lastError.
       */
      public com.google.protobuf.ByteString
          getLastErrorBytes() {
        java.lang.Object ref = lastError_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          lastError_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * 最近一次错误信息；为空表示无错误或未知。
       * </pre>
       *
       * <code>string last_error = 13;</code>
       * @param value The lastError to set.
       * @return This builder for chaining.
       */
      public Builder setLastError(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        lastError_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 最近一次错误信息；为空表示无错误或未知。
       * </pre>
       *
       * <code>string last_error = 13;</code>
       * @return This builder for chaining.
       */
      public Builder clearLastError() {
        
        lastError_ = getDefaultInstance().getLastError();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 最近一次错误信息；为空表示无错误或未知。
       * </pre>
       *
       * <code>string last_error = 13;</code>
       * @param value The bytes for lastError to set.
       * @return This builder for chaining.
       */
      public Builder setLastErrorBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        lastError_ = value;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:cmvr.msgs.AgvRuntimeState)
    }

    // @@protoc_insertion_point(class_scope:cmvr.msgs.AgvRuntimeState)
    private static final cmvr.msgs.Agv.AgvRuntimeState DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new cmvr.msgs.Agv.AgvRuntimeState();
    }

    public static cmvr.msgs.Agv.AgvRuntimeState getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<AgvRuntimeState>
        PARSER = new com.google.protobuf.AbstractParser<AgvRuntimeState>() {
      @java.lang.Override
      public AgvRuntimeState parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (com.google.protobuf.UninitializedMessageException e) {
          throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(e)
              .setUnfinishedMessage(builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

    public static com.google.protobuf.Parser<AgvRuntimeState> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<AgvRuntimeState> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public cmvr.msgs.Agv.AgvRuntimeState getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface AgvStationOrBuilder extends
      // @@protoc_insertion_point(interface_extends:cmvr.msgs.AgvStation)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * 站点唯一 id。
     * </pre>
     *
     * <code>string id = 1;</code>
     * @return The id.
     */
    java.lang.String getId();
    /**
     * <pre>
     * 站点唯一 id。
     * </pre>
     *
     * <code>string id = 1;</code>
     * @return The bytes for id.
     */
    com.google.protobuf.ByteString
        getIdBytes();

    /**
     * <pre>
     * 站点类型；具体枚举由地图或控制器定义。
     * </pre>
     *
     * <code>string type = 2;</code>
     * @return The type.
     */
    java.lang.String getType();
    /**
     * <pre>
     * 站点类型；具体枚举由地图或控制器定义。
     * </pre>
     *
     * <code>string type = 2;</code>
     * @return The bytes for type.
     */
    com.google.protobuf.ByteString
        getTypeBytes();

    /**
     * <pre>
     * 站点在地图坐标系下的二维位姿。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvPose2d pose = 3;</code>
     * @return Whether the pose field is set.
     */
    boolean hasPose();
    /**
     * <pre>
     * 站点在地图坐标系下的二维位姿。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvPose2d pose = 3;</code>
     * @return The pose.
     */
    cmvr.msgs.Agv.AgvPose2d getPose();
    /**
     * <pre>
     * 站点在地图坐标系下的二维位姿。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvPose2d pose = 3;</code>
     */
    cmvr.msgs.Agv.AgvPose2dOrBuilder getPoseOrBuilder();

    /**
     * <pre>
     * 站点描述或备注。
     * </pre>
     *
     * <code>string description = 4;</code>
     * @return The description.
     */
    java.lang.String getDescription();
    /**
     * <pre>
     * 站点描述或备注。
     * </pre>
     *
     * <code>string description = 4;</code>
     * @return The bytes for description.
     */
    com.google.protobuf.ByteString
        getDescriptionBytes();
  }
  /**
   * <pre>
   * 地图中的站点信息。
   * </pre>
   *
   * Protobuf type {@code cmvr.msgs.AgvStation}
   */
  public static final class AgvStation extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:cmvr.msgs.AgvStation)
      AgvStationOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use AgvStation.newBuilder() to construct.
    private AgvStation(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private AgvStation() {
      id_ = "";
      type_ = "";
      description_ = "";
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new AgvStation();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvStation_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvStation_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              cmvr.msgs.Agv.AgvStation.class, cmvr.msgs.Agv.AgvStation.Builder.class);
    }

    public static final int ID_FIELD_NUMBER = 1;
    private volatile java.lang.Object id_;
    /**
     * <pre>
     * 站点唯一 id。
     * </pre>
     *
     * <code>string id = 1;</code>
     * @return The id.
     */
    @java.lang.Override
    public java.lang.String getId() {
      java.lang.Object ref = id_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        id_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * 站点唯一 id。
     * </pre>
     *
     * <code>string id = 1;</code>
     * @return The bytes for id.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getIdBytes() {
      java.lang.Object ref = id_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        id_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int TYPE_FIELD_NUMBER = 2;
    private volatile java.lang.Object type_;
    /**
     * <pre>
     * 站点类型；具体枚举由地图或控制器定义。
     * </pre>
     *
     * <code>string type = 2;</code>
     * @return The type.
     */
    @java.lang.Override
    public java.lang.String getType() {
      java.lang.Object ref = type_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        type_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * 站点类型；具体枚举由地图或控制器定义。
     * </pre>
     *
     * <code>string type = 2;</code>
     * @return The bytes for type.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getTypeBytes() {
      java.lang.Object ref = type_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        type_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int POSE_FIELD_NUMBER = 3;
    private cmvr.msgs.Agv.AgvPose2d pose_;
    /**
     * <pre>
     * 站点在地图坐标系下的二维位姿。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvPose2d pose = 3;</code>
     * @return Whether the pose field is set.
     */
    @java.lang.Override
    public boolean hasPose() {
      return pose_ != null;
    }
    /**
     * <pre>
     * 站点在地图坐标系下的二维位姿。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvPose2d pose = 3;</code>
     * @return The pose.
     */
    @java.lang.Override
    public cmvr.msgs.Agv.AgvPose2d getPose() {
      return pose_ == null ? cmvr.msgs.Agv.AgvPose2d.getDefaultInstance() : pose_;
    }
    /**
     * <pre>
     * 站点在地图坐标系下的二维位姿。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvPose2d pose = 3;</code>
     */
    @java.lang.Override
    public cmvr.msgs.Agv.AgvPose2dOrBuilder getPoseOrBuilder() {
      return getPose();
    }

    public static final int DESCRIPTION_FIELD_NUMBER = 4;
    private volatile java.lang.Object description_;
    /**
     * <pre>
     * 站点描述或备注。
     * </pre>
     *
     * <code>string description = 4;</code>
     * @return The description.
     */
    @java.lang.Override
    public java.lang.String getDescription() {
      java.lang.Object ref = description_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        description_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * 站点描述或备注。
     * </pre>
     *
     * <code>string description = 4;</code>
     * @return The bytes for description.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getDescriptionBytes() {
      java.lang.Object ref = description_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        description_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(id_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, id_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(type_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, type_);
      }
      if (pose_ != null) {
        output.writeMessage(3, getPose());
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(description_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 4, description_);
      }
      getUnknownFields().writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(id_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, id_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(type_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, type_);
      }
      if (pose_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, getPose());
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(description_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, description_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof cmvr.msgs.Agv.AgvStation)) {
        return super.equals(obj);
      }
      cmvr.msgs.Agv.AgvStation other = (cmvr.msgs.Agv.AgvStation) obj;

      if (!getId()
          .equals(other.getId())) return false;
      if (!getType()
          .equals(other.getType())) return false;
      if (hasPose() != other.hasPose()) return false;
      if (hasPose()) {
        if (!getPose()
            .equals(other.getPose())) return false;
      }
      if (!getDescription()
          .equals(other.getDescription())) return false;
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + ID_FIELD_NUMBER;
      hash = (53 * hash) + getId().hashCode();
      hash = (37 * hash) + TYPE_FIELD_NUMBER;
      hash = (53 * hash) + getType().hashCode();
      if (hasPose()) {
        hash = (37 * hash) + POSE_FIELD_NUMBER;
        hash = (53 * hash) + getPose().hashCode();
      }
      hash = (37 * hash) + DESCRIPTION_FIELD_NUMBER;
      hash = (53 * hash) + getDescription().hashCode();
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static cmvr.msgs.Agv.AgvStation parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.msgs.Agv.AgvStation parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvStation parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.msgs.Agv.AgvStation parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvStation parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.msgs.Agv.AgvStation parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvStation parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cmvr.msgs.Agv.AgvStation parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvStation parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static cmvr.msgs.Agv.AgvStation parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvStation parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cmvr.msgs.Agv.AgvStation parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(cmvr.msgs.Agv.AgvStation prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * 地图中的站点信息。
     * </pre>
     *
     * Protobuf type {@code cmvr.msgs.AgvStation}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:cmvr.msgs.AgvStation)
        cmvr.msgs.Agv.AgvStationOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvStation_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvStation_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                cmvr.msgs.Agv.AgvStation.class, cmvr.msgs.Agv.AgvStation.Builder.class);
      }

      // Construct using cmvr.msgs.Agv.AgvStation.newBuilder()
      private Builder() {

      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        id_ = "";

        type_ = "";

        if (poseBuilder_ == null) {
          pose_ = null;
        } else {
          pose_ = null;
          poseBuilder_ = null;
        }
        description_ = "";

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvStation_descriptor;
      }

      @java.lang.Override
      public cmvr.msgs.Agv.AgvStation getDefaultInstanceForType() {
        return cmvr.msgs.Agv.AgvStation.getDefaultInstance();
      }

      @java.lang.Override
      public cmvr.msgs.Agv.AgvStation build() {
        cmvr.msgs.Agv.AgvStation result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public cmvr.msgs.Agv.AgvStation buildPartial() {
        cmvr.msgs.Agv.AgvStation result = new cmvr.msgs.Agv.AgvStation(this);
        result.id_ = id_;
        result.type_ = type_;
        if (poseBuilder_ == null) {
          result.pose_ = pose_;
        } else {
          result.pose_ = poseBuilder_.build();
        }
        result.description_ = description_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof cmvr.msgs.Agv.AgvStation) {
          return mergeFrom((cmvr.msgs.Agv.AgvStation)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(cmvr.msgs.Agv.AgvStation other) {
        if (other == cmvr.msgs.Agv.AgvStation.getDefaultInstance()) return this;
        if (!other.getId().isEmpty()) {
          id_ = other.id_;
          onChanged();
        }
        if (!other.getType().isEmpty()) {
          type_ = other.type_;
          onChanged();
        }
        if (other.hasPose()) {
          mergePose(other.getPose());
        }
        if (!other.getDescription().isEmpty()) {
          description_ = other.description_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 10: {
                id_ = input.readStringRequireUtf8();

                break;
              } // case 10
              case 18: {
                type_ = input.readStringRequireUtf8();

                break;
              } // case 18
              case 26: {
                input.readMessage(
                    getPoseFieldBuilder().getBuilder(),
                    extensionRegistry);

                break;
              } // case 26
              case 34: {
                description_ = input.readStringRequireUtf8();

                break;
              } // case 34
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }

      private java.lang.Object id_ = "";
      /**
       * <pre>
       * 站点唯一 id。
       * </pre>
       *
       * <code>string id = 1;</code>
       * @return The id.
       */
      public java.lang.String getId() {
        java.lang.Object ref = id_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          id_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * 站点唯一 id。
       * </pre>
       *
       * <code>string id = 1;</code>
       * @return The bytes for id.
       */
      public com.google.protobuf.ByteString
          getIdBytes() {
        java.lang.Object ref = id_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          id_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * 站点唯一 id。
       * </pre>
       *
       * <code>string id = 1;</code>
       * @param value The id to set.
       * @return This builder for chaining.
       */
      public Builder setId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        id_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 站点唯一 id。
       * </pre>
       *
       * <code>string id = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearId() {
        
        id_ = getDefaultInstance().getId();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 站点唯一 id。
       * </pre>
       *
       * <code>string id = 1;</code>
       * @param value The bytes for id to set.
       * @return This builder for chaining.
       */
      public Builder setIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        id_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object type_ = "";
      /**
       * <pre>
       * 站点类型；具体枚举由地图或控制器定义。
       * </pre>
       *
       * <code>string type = 2;</code>
       * @return The type.
       */
      public java.lang.String getType() {
        java.lang.Object ref = type_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          type_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * 站点类型；具体枚举由地图或控制器定义。
       * </pre>
       *
       * <code>string type = 2;</code>
       * @return The bytes for type.
       */
      public com.google.protobuf.ByteString
          getTypeBytes() {
        java.lang.Object ref = type_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          type_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * 站点类型；具体枚举由地图或控制器定义。
       * </pre>
       *
       * <code>string type = 2;</code>
       * @param value The type to set.
       * @return This builder for chaining.
       */
      public Builder setType(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        type_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 站点类型；具体枚举由地图或控制器定义。
       * </pre>
       *
       * <code>string type = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearType() {
        
        type_ = getDefaultInstance().getType();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 站点类型；具体枚举由地图或控制器定义。
       * </pre>
       *
       * <code>string type = 2;</code>
       * @param value The bytes for type to set.
       * @return This builder for chaining.
       */
      public Builder setTypeBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        type_ = value;
        onChanged();
        return this;
      }

      private cmvr.msgs.Agv.AgvPose2d pose_;
      private com.google.protobuf.SingleFieldBuilderV3<
          cmvr.msgs.Agv.AgvPose2d, cmvr.msgs.Agv.AgvPose2d.Builder, cmvr.msgs.Agv.AgvPose2dOrBuilder> poseBuilder_;
      /**
       * <pre>
       * 站点在地图坐标系下的二维位姿。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvPose2d pose = 3;</code>
       * @return Whether the pose field is set.
       */
      public boolean hasPose() {
        return poseBuilder_ != null || pose_ != null;
      }
      /**
       * <pre>
       * 站点在地图坐标系下的二维位姿。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvPose2d pose = 3;</code>
       * @return The pose.
       */
      public cmvr.msgs.Agv.AgvPose2d getPose() {
        if (poseBuilder_ == null) {
          return pose_ == null ? cmvr.msgs.Agv.AgvPose2d.getDefaultInstance() : pose_;
        } else {
          return poseBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * 站点在地图坐标系下的二维位姿。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvPose2d pose = 3;</code>
       */
      public Builder setPose(cmvr.msgs.Agv.AgvPose2d value) {
        if (poseBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          pose_ = value;
          onChanged();
        } else {
          poseBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       * 站点在地图坐标系下的二维位姿。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvPose2d pose = 3;</code>
       */
      public Builder setPose(
          cmvr.msgs.Agv.AgvPose2d.Builder builderForValue) {
        if (poseBuilder_ == null) {
          pose_ = builderForValue.build();
          onChanged();
        } else {
          poseBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       * 站点在地图坐标系下的二维位姿。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvPose2d pose = 3;</code>
       */
      public Builder mergePose(cmvr.msgs.Agv.AgvPose2d value) {
        if (poseBuilder_ == null) {
          if (pose_ != null) {
            pose_ =
              cmvr.msgs.Agv.AgvPose2d.newBuilder(pose_).mergeFrom(value).buildPartial();
          } else {
            pose_ = value;
          }
          onChanged();
        } else {
          poseBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       * 站点在地图坐标系下的二维位姿。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvPose2d pose = 3;</code>
       */
      public Builder clearPose() {
        if (poseBuilder_ == null) {
          pose_ = null;
          onChanged();
        } else {
          pose_ = null;
          poseBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       * 站点在地图坐标系下的二维位姿。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvPose2d pose = 3;</code>
       */
      public cmvr.msgs.Agv.AgvPose2d.Builder getPoseBuilder() {
        
        onChanged();
        return getPoseFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * 站点在地图坐标系下的二维位姿。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvPose2d pose = 3;</code>
       */
      public cmvr.msgs.Agv.AgvPose2dOrBuilder getPoseOrBuilder() {
        if (poseBuilder_ != null) {
          return poseBuilder_.getMessageOrBuilder();
        } else {
          return pose_ == null ?
              cmvr.msgs.Agv.AgvPose2d.getDefaultInstance() : pose_;
        }
      }
      /**
       * <pre>
       * 站点在地图坐标系下的二维位姿。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvPose2d pose = 3;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          cmvr.msgs.Agv.AgvPose2d, cmvr.msgs.Agv.AgvPose2d.Builder, cmvr.msgs.Agv.AgvPose2dOrBuilder> 
          getPoseFieldBuilder() {
        if (poseBuilder_ == null) {
          poseBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              cmvr.msgs.Agv.AgvPose2d, cmvr.msgs.Agv.AgvPose2d.Builder, cmvr.msgs.Agv.AgvPose2dOrBuilder>(
                  getPose(),
                  getParentForChildren(),
                  isClean());
          pose_ = null;
        }
        return poseBuilder_;
      }

      private java.lang.Object description_ = "";
      /**
       * <pre>
       * 站点描述或备注。
       * </pre>
       *
       * <code>string description = 4;</code>
       * @return The description.
       */
      public java.lang.String getDescription() {
        java.lang.Object ref = description_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          description_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * 站点描述或备注。
       * </pre>
       *
       * <code>string description = 4;</code>
       * @return The bytes for description.
       */
      public com.google.protobuf.ByteString
          getDescriptionBytes() {
        java.lang.Object ref = description_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          description_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * 站点描述或备注。
       * </pre>
       *
       * <code>string description = 4;</code>
       * @param value The description to set.
       * @return This builder for chaining.
       */
      public Builder setDescription(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        description_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 站点描述或备注。
       * </pre>
       *
       * <code>string description = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearDescription() {
        
        description_ = getDefaultInstance().getDescription();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 站点描述或备注。
       * </pre>
       *
       * <code>string description = 4;</code>
       * @param value The bytes for description to set.
       * @return This builder for chaining.
       */
      public Builder setDescriptionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        description_ = value;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:cmvr.msgs.AgvStation)
    }

    // @@protoc_insertion_point(class_scope:cmvr.msgs.AgvStation)
    private static final cmvr.msgs.Agv.AgvStation DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new cmvr.msgs.Agv.AgvStation();
    }

    public static cmvr.msgs.Agv.AgvStation getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<AgvStation>
        PARSER = new com.google.protobuf.AbstractParser<AgvStation>() {
      @java.lang.Override
      public AgvStation parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (com.google.protobuf.UninitializedMessageException e) {
          throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(e)
              .setUnfinishedMessage(builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

    public static com.google.protobuf.Parser<AgvStation> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<AgvStation> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public cmvr.msgs.Agv.AgvStation getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface AgvPathSegmentOrBuilder extends
      // @@protoc_insertion_point(interface_extends:cmvr.msgs.AgvPathSegment)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * 起点站点 id。
     * </pre>
     *
     * <code>string source_station = 1;</code>
     * @return The sourceStation.
     */
    java.lang.String getSourceStation();
    /**
     * <pre>
     * 起点站点 id。
     * </pre>
     *
     * <code>string source_station = 1;</code>
     * @return The bytes for sourceStation.
     */
    com.google.protobuf.ByteString
        getSourceStationBytes();

    /**
     * <pre>
     * 目标站点 id。
     * </pre>
     *
     * <code>string target_station = 2;</code>
     * @return The targetStation.
     */
    java.lang.String getTargetStation();
    /**
     * <pre>
     * 目标站点 id。
     * </pre>
     *
     * <code>string target_station = 2;</code>
     * @return The bytes for targetStation.
     */
    com.google.protobuf.ByteString
        getTargetStationBytes();
  }
  /**
   * <pre>
   * 显式站点路径中的一段路径。
   * </pre>
   *
   * Protobuf type {@code cmvr.msgs.AgvPathSegment}
   */
  public static final class AgvPathSegment extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:cmvr.msgs.AgvPathSegment)
      AgvPathSegmentOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use AgvPathSegment.newBuilder() to construct.
    private AgvPathSegment(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private AgvPathSegment() {
      sourceStation_ = "";
      targetStation_ = "";
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new AgvPathSegment();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvPathSegment_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvPathSegment_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              cmvr.msgs.Agv.AgvPathSegment.class, cmvr.msgs.Agv.AgvPathSegment.Builder.class);
    }

    public static final int SOURCE_STATION_FIELD_NUMBER = 1;
    private volatile java.lang.Object sourceStation_;
    /**
     * <pre>
     * 起点站点 id。
     * </pre>
     *
     * <code>string source_station = 1;</code>
     * @return The sourceStation.
     */
    @java.lang.Override
    public java.lang.String getSourceStation() {
      java.lang.Object ref = sourceStation_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        sourceStation_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * 起点站点 id。
     * </pre>
     *
     * <code>string source_station = 1;</code>
     * @return The bytes for sourceStation.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getSourceStationBytes() {
      java.lang.Object ref = sourceStation_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        sourceStation_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int TARGET_STATION_FIELD_NUMBER = 2;
    private volatile java.lang.Object targetStation_;
    /**
     * <pre>
     * 目标站点 id。
     * </pre>
     *
     * <code>string target_station = 2;</code>
     * @return The targetStation.
     */
    @java.lang.Override
    public java.lang.String getTargetStation() {
      java.lang.Object ref = targetStation_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        targetStation_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * 目标站点 id。
     * </pre>
     *
     * <code>string target_station = 2;</code>
     * @return The bytes for targetStation.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getTargetStationBytes() {
      java.lang.Object ref = targetStation_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        targetStation_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(sourceStation_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, sourceStation_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(targetStation_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, targetStation_);
      }
      getUnknownFields().writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(sourceStation_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, sourceStation_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(targetStation_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, targetStation_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof cmvr.msgs.Agv.AgvPathSegment)) {
        return super.equals(obj);
      }
      cmvr.msgs.Agv.AgvPathSegment other = (cmvr.msgs.Agv.AgvPathSegment) obj;

      if (!getSourceStation()
          .equals(other.getSourceStation())) return false;
      if (!getTargetStation()
          .equals(other.getTargetStation())) return false;
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + SOURCE_STATION_FIELD_NUMBER;
      hash = (53 * hash) + getSourceStation().hashCode();
      hash = (37 * hash) + TARGET_STATION_FIELD_NUMBER;
      hash = (53 * hash) + getTargetStation().hashCode();
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static cmvr.msgs.Agv.AgvPathSegment parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.msgs.Agv.AgvPathSegment parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvPathSegment parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.msgs.Agv.AgvPathSegment parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvPathSegment parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.msgs.Agv.AgvPathSegment parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvPathSegment parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cmvr.msgs.Agv.AgvPathSegment parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvPathSegment parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static cmvr.msgs.Agv.AgvPathSegment parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvPathSegment parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cmvr.msgs.Agv.AgvPathSegment parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(cmvr.msgs.Agv.AgvPathSegment prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * 显式站点路径中的一段路径。
     * </pre>
     *
     * Protobuf type {@code cmvr.msgs.AgvPathSegment}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:cmvr.msgs.AgvPathSegment)
        cmvr.msgs.Agv.AgvPathSegmentOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvPathSegment_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvPathSegment_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                cmvr.msgs.Agv.AgvPathSegment.class, cmvr.msgs.Agv.AgvPathSegment.Builder.class);
      }

      // Construct using cmvr.msgs.Agv.AgvPathSegment.newBuilder()
      private Builder() {

      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        sourceStation_ = "";

        targetStation_ = "";

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvPathSegment_descriptor;
      }

      @java.lang.Override
      public cmvr.msgs.Agv.AgvPathSegment getDefaultInstanceForType() {
        return cmvr.msgs.Agv.AgvPathSegment.getDefaultInstance();
      }

      @java.lang.Override
      public cmvr.msgs.Agv.AgvPathSegment build() {
        cmvr.msgs.Agv.AgvPathSegment result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public cmvr.msgs.Agv.AgvPathSegment buildPartial() {
        cmvr.msgs.Agv.AgvPathSegment result = new cmvr.msgs.Agv.AgvPathSegment(this);
        result.sourceStation_ = sourceStation_;
        result.targetStation_ = targetStation_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof cmvr.msgs.Agv.AgvPathSegment) {
          return mergeFrom((cmvr.msgs.Agv.AgvPathSegment)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(cmvr.msgs.Agv.AgvPathSegment other) {
        if (other == cmvr.msgs.Agv.AgvPathSegment.getDefaultInstance()) return this;
        if (!other.getSourceStation().isEmpty()) {
          sourceStation_ = other.sourceStation_;
          onChanged();
        }
        if (!other.getTargetStation().isEmpty()) {
          targetStation_ = other.targetStation_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 10: {
                sourceStation_ = input.readStringRequireUtf8();

                break;
              } // case 10
              case 18: {
                targetStation_ = input.readStringRequireUtf8();

                break;
              } // case 18
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }

      private java.lang.Object sourceStation_ = "";
      /**
       * <pre>
       * 起点站点 id。
       * </pre>
       *
       * <code>string source_station = 1;</code>
       * @return The sourceStation.
       */
      public java.lang.String getSourceStation() {
        java.lang.Object ref = sourceStation_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          sourceStation_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * 起点站点 id。
       * </pre>
       *
       * <code>string source_station = 1;</code>
       * @return The bytes for sourceStation.
       */
      public com.google.protobuf.ByteString
          getSourceStationBytes() {
        java.lang.Object ref = sourceStation_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          sourceStation_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * 起点站点 id。
       * </pre>
       *
       * <code>string source_station = 1;</code>
       * @param value The sourceStation to set.
       * @return This builder for chaining.
       */
      public Builder setSourceStation(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        sourceStation_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 起点站点 id。
       * </pre>
       *
       * <code>string source_station = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearSourceStation() {
        
        sourceStation_ = getDefaultInstance().getSourceStation();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 起点站点 id。
       * </pre>
       *
       * <code>string source_station = 1;</code>
       * @param value The bytes for sourceStation to set.
       * @return This builder for chaining.
       */
      public Builder setSourceStationBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        sourceStation_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object targetStation_ = "";
      /**
       * <pre>
       * 目标站点 id。
       * </pre>
       *
       * <code>string target_station = 2;</code>
       * @return The targetStation.
       */
      public java.lang.String getTargetStation() {
        java.lang.Object ref = targetStation_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          targetStation_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * 目标站点 id。
       * </pre>
       *
       * <code>string target_station = 2;</code>
       * @return The bytes for targetStation.
       */
      public com.google.protobuf.ByteString
          getTargetStationBytes() {
        java.lang.Object ref = targetStation_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          targetStation_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * 目标站点 id。
       * </pre>
       *
       * <code>string target_station = 2;</code>
       * @param value The targetStation to set.
       * @return This builder for chaining.
       */
      public Builder setTargetStation(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        targetStation_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 目标站点 id。
       * </pre>
       *
       * <code>string target_station = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearTargetStation() {
        
        targetStation_ = getDefaultInstance().getTargetStation();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 目标站点 id。
       * </pre>
       *
       * <code>string target_station = 2;</code>
       * @param value The bytes for targetStation to set.
       * @return This builder for chaining.
       */
      public Builder setTargetStationBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        targetStation_ = value;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:cmvr.msgs.AgvPathSegment)
    }

    // @@protoc_insertion_point(class_scope:cmvr.msgs.AgvPathSegment)
    private static final cmvr.msgs.Agv.AgvPathSegment DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new cmvr.msgs.Agv.AgvPathSegment();
    }

    public static cmvr.msgs.Agv.AgvPathSegment getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<AgvPathSegment>
        PARSER = new com.google.protobuf.AbstractParser<AgvPathSegment>() {
      @java.lang.Override
      public AgvPathSegment parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (com.google.protobuf.UninitializedMessageException e) {
          throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(e)
              .setUnfinishedMessage(builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

    public static com.google.protobuf.Parser<AgvPathSegment> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<AgvPathSegment> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public cmvr.msgs.Agv.AgvPathSegment getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface AgvMapPoint3DOrBuilder extends
      // @@protoc_insertion_point(interface_extends:cmvr.msgs.AgvMapPoint3D)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * X 坐标，单位：米。
     * </pre>
     *
     * <code>double x = 1;</code>
     * @return The x.
     */
    double getX();

    /**
     * <pre>
     * Y 坐标，单位：米。
     * </pre>
     *
     * <code>double y = 2;</code>
     * @return The y.
     */
    double getY();

    /**
     * <pre>
     * Z 坐标，单位：米；纯 2D 几何可置为 0。
     * </pre>
     *
     * <code>double z = 3;</code>
     * @return The z.
     */
    double getZ();
  }
  /**
   * <pre>
   * 地图坐标系下的三维点。单位：米。
   * </pre>
   *
   * Protobuf type {@code cmvr.msgs.AgvMapPoint3D}
   */
  public static final class AgvMapPoint3D extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:cmvr.msgs.AgvMapPoint3D)
      AgvMapPoint3DOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use AgvMapPoint3D.newBuilder() to construct.
    private AgvMapPoint3D(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private AgvMapPoint3D() {
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new AgvMapPoint3D();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvMapPoint3D_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvMapPoint3D_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              cmvr.msgs.Agv.AgvMapPoint3D.class, cmvr.msgs.Agv.AgvMapPoint3D.Builder.class);
    }

    public static final int X_FIELD_NUMBER = 1;
    private double x_;
    /**
     * <pre>
     * X 坐标，单位：米。
     * </pre>
     *
     * <code>double x = 1;</code>
     * @return The x.
     */
    @java.lang.Override
    public double getX() {
      return x_;
    }

    public static final int Y_FIELD_NUMBER = 2;
    private double y_;
    /**
     * <pre>
     * Y 坐标，单位：米。
     * </pre>
     *
     * <code>double y = 2;</code>
     * @return The y.
     */
    @java.lang.Override
    public double getY() {
      return y_;
    }

    public static final int Z_FIELD_NUMBER = 3;
    private double z_;
    /**
     * <pre>
     * Z 坐标，单位：米；纯 2D 几何可置为 0。
     * </pre>
     *
     * <code>double z = 3;</code>
     * @return The z.
     */
    @java.lang.Override
    public double getZ() {
      return z_;
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (java.lang.Double.doubleToRawLongBits(x_) != 0) {
        output.writeDouble(1, x_);
      }
      if (java.lang.Double.doubleToRawLongBits(y_) != 0) {
        output.writeDouble(2, y_);
      }
      if (java.lang.Double.doubleToRawLongBits(z_) != 0) {
        output.writeDouble(3, z_);
      }
      getUnknownFields().writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (java.lang.Double.doubleToRawLongBits(x_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(1, x_);
      }
      if (java.lang.Double.doubleToRawLongBits(y_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(2, y_);
      }
      if (java.lang.Double.doubleToRawLongBits(z_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(3, z_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof cmvr.msgs.Agv.AgvMapPoint3D)) {
        return super.equals(obj);
      }
      cmvr.msgs.Agv.AgvMapPoint3D other = (cmvr.msgs.Agv.AgvMapPoint3D) obj;

      if (java.lang.Double.doubleToLongBits(getX())
          != java.lang.Double.doubleToLongBits(
              other.getX())) return false;
      if (java.lang.Double.doubleToLongBits(getY())
          != java.lang.Double.doubleToLongBits(
              other.getY())) return false;
      if (java.lang.Double.doubleToLongBits(getZ())
          != java.lang.Double.doubleToLongBits(
              other.getZ())) return false;
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + X_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getX()));
      hash = (37 * hash) + Y_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getY()));
      hash = (37 * hash) + Z_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getZ()));
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static cmvr.msgs.Agv.AgvMapPoint3D parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.msgs.Agv.AgvMapPoint3D parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvMapPoint3D parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.msgs.Agv.AgvMapPoint3D parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvMapPoint3D parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.msgs.Agv.AgvMapPoint3D parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvMapPoint3D parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cmvr.msgs.Agv.AgvMapPoint3D parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvMapPoint3D parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static cmvr.msgs.Agv.AgvMapPoint3D parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvMapPoint3D parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cmvr.msgs.Agv.AgvMapPoint3D parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(cmvr.msgs.Agv.AgvMapPoint3D prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * 地图坐标系下的三维点。单位：米。
     * </pre>
     *
     * Protobuf type {@code cmvr.msgs.AgvMapPoint3D}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:cmvr.msgs.AgvMapPoint3D)
        cmvr.msgs.Agv.AgvMapPoint3DOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvMapPoint3D_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvMapPoint3D_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                cmvr.msgs.Agv.AgvMapPoint3D.class, cmvr.msgs.Agv.AgvMapPoint3D.Builder.class);
      }

      // Construct using cmvr.msgs.Agv.AgvMapPoint3D.newBuilder()
      private Builder() {

      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        x_ = 0D;

        y_ = 0D;

        z_ = 0D;

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvMapPoint3D_descriptor;
      }

      @java.lang.Override
      public cmvr.msgs.Agv.AgvMapPoint3D getDefaultInstanceForType() {
        return cmvr.msgs.Agv.AgvMapPoint3D.getDefaultInstance();
      }

      @java.lang.Override
      public cmvr.msgs.Agv.AgvMapPoint3D build() {
        cmvr.msgs.Agv.AgvMapPoint3D result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public cmvr.msgs.Agv.AgvMapPoint3D buildPartial() {
        cmvr.msgs.Agv.AgvMapPoint3D result = new cmvr.msgs.Agv.AgvMapPoint3D(this);
        result.x_ = x_;
        result.y_ = y_;
        result.z_ = z_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof cmvr.msgs.Agv.AgvMapPoint3D) {
          return mergeFrom((cmvr.msgs.Agv.AgvMapPoint3D)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(cmvr.msgs.Agv.AgvMapPoint3D other) {
        if (other == cmvr.msgs.Agv.AgvMapPoint3D.getDefaultInstance()) return this;
        if (other.getX() != 0D) {
          setX(other.getX());
        }
        if (other.getY() != 0D) {
          setY(other.getY());
        }
        if (other.getZ() != 0D) {
          setZ(other.getZ());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 9: {
                x_ = input.readDouble();

                break;
              } // case 9
              case 17: {
                y_ = input.readDouble();

                break;
              } // case 17
              case 25: {
                z_ = input.readDouble();

                break;
              } // case 25
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }

      private double x_ ;
      /**
       * <pre>
       * X 坐标，单位：米。
       * </pre>
       *
       * <code>double x = 1;</code>
       * @return The x.
       */
      @java.lang.Override
      public double getX() {
        return x_;
      }
      /**
       * <pre>
       * X 坐标，单位：米。
       * </pre>
       *
       * <code>double x = 1;</code>
       * @param value The x to set.
       * @return This builder for chaining.
       */
      public Builder setX(double value) {
        
        x_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * X 坐标，单位：米。
       * </pre>
       *
       * <code>double x = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearX() {
        
        x_ = 0D;
        onChanged();
        return this;
      }

      private double y_ ;
      /**
       * <pre>
       * Y 坐标，单位：米。
       * </pre>
       *
       * <code>double y = 2;</code>
       * @return The y.
       */
      @java.lang.Override
      public double getY() {
        return y_;
      }
      /**
       * <pre>
       * Y 坐标，单位：米。
       * </pre>
       *
       * <code>double y = 2;</code>
       * @param value The y to set.
       * @return This builder for chaining.
       */
      public Builder setY(double value) {
        
        y_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Y 坐标，单位：米。
       * </pre>
       *
       * <code>double y = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearY() {
        
        y_ = 0D;
        onChanged();
        return this;
      }

      private double z_ ;
      /**
       * <pre>
       * Z 坐标，单位：米；纯 2D 几何可置为 0。
       * </pre>
       *
       * <code>double z = 3;</code>
       * @return The z.
       */
      @java.lang.Override
      public double getZ() {
        return z_;
      }
      /**
       * <pre>
       * Z 坐标，单位：米；纯 2D 几何可置为 0。
       * </pre>
       *
       * <code>double z = 3;</code>
       * @param value The z to set.
       * @return This builder for chaining.
       */
      public Builder setZ(double value) {
        
        z_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Z 坐标，单位：米；纯 2D 几何可置为 0。
       * </pre>
       *
       * <code>double z = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearZ() {
        
        z_ = 0D;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:cmvr.msgs.AgvMapPoint3D)
    }

    // @@protoc_insertion_point(class_scope:cmvr.msgs.AgvMapPoint3D)
    private static final cmvr.msgs.Agv.AgvMapPoint3D DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new cmvr.msgs.Agv.AgvMapPoint3D();
    }

    public static cmvr.msgs.Agv.AgvMapPoint3D getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<AgvMapPoint3D>
        PARSER = new com.google.protobuf.AbstractParser<AgvMapPoint3D>() {
      @java.lang.Override
      public AgvMapPoint3D parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (com.google.protobuf.UninitializedMessageException e) {
          throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(e)
              .setUnfinishedMessage(builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

    public static com.google.protobuf.Parser<AgvMapPoint3D> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<AgvMapPoint3D> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public cmvr.msgs.Agv.AgvMapPoint3D getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface AgvUnifiedMap2DOrBuilder extends
      // @@protoc_insertion_point(interface_extends:cmvr.msgs.AgvUnifiedMap2D)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * 坐标系名称，例如 "map"。
     * </pre>
     *
     * <code>string frame_id = 1;</code>
     * @return The frameId.
     */
    java.lang.String getFrameId();
    /**
     * <pre>
     * 坐标系名称，例如 "map"。
     * </pre>
     *
     * <code>string frame_id = 1;</code>
     * @return The bytes for frameId.
     */
    com.google.protobuf.ByteString
        getFrameIdBytes();

    /**
     * <pre>
     * 地图采样或更新时间，Unix 时间戳，单位：秒。
     * </pre>
     *
     * <code>double timestamp = 2;</code>
     * @return The timestamp.
     */
    double getTimestamp();

    /**
     * <pre>
     * 栅格分辨率，单位：米/格。
     * </pre>
     *
     * <code>double resolution = 3;</code>
     * @return The resolution.
     */
    double getResolution();

    /**
     * <pre>
     * 栅格宽度，单位：格。
     * </pre>
     *
     * <code>uint32 width = 4;</code>
     * @return The width.
     */
    int getWidth();

    /**
     * <pre>
     * 栅格高度，单位：格。
     * </pre>
     *
     * <code>uint32 height = 5;</code>
     * @return The height.
     */
    int getHeight();

    /**
     * <pre>
     * 栅格 (0, 0) 在世界/地图坐标系下的位姿；x/y 单位：米，theta 单位：弧度。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvPose2d origin = 6;</code>
     * @return Whether the origin field is set.
     */
    boolean hasOrigin();
    /**
     * <pre>
     * 栅格 (0, 0) 在世界/地图坐标系下的位姿；x/y 单位：米，theta 单位：弧度。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvPose2d origin = 6;</code>
     * @return The origin.
     */
    cmvr.msgs.Agv.AgvPose2d getOrigin();
    /**
     * <pre>
     * 栅格 (0, 0) 在世界/地图坐标系下的位姿；x/y 单位：米，theta 单位：弧度。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvPose2d origin = 6;</code>
     */
    cmvr.msgs.Agv.AgvPose2dOrBuilder getOriginOrBuilder();

    /**
     * <pre>
     * 占据值：-1 表示未知，0 表示空闲，100 表示占据。
     * </pre>
     *
     * <code>repeated int32 data = 7;</code>
     * @return A list containing the data.
     */
    java.util.List<java.lang.Integer> getDataList();
    /**
     * <pre>
     * 占据值：-1 表示未知，0 表示空闲，100 表示占据。
     * </pre>
     *
     * <code>repeated int32 data = 7;</code>
     * @return The count of data.
     */
    int getDataCount();
    /**
     * <pre>
     * 占据值：-1 表示未知，0 表示空闲，100 表示占据。
     * </pre>
     *
     * <code>repeated int32 data = 7;</code>
     * @param index The index of the element to return.
     * @return The data at the given index.
     */
    int getData(int index);

    /**
     * <pre>
     * 地图中的统一语义对象，例如站点、线、区域、标签、反光板等。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapObject objects = 8;</code>
     */
    java.util.List<cmvr.msgs.Agv.AgvMapObject> 
        getObjectsList();
    /**
     * <pre>
     * 地图中的统一语义对象，例如站点、线、区域、标签、反光板等。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapObject objects = 8;</code>
     */
    cmvr.msgs.Agv.AgvMapObject getObjects(int index);
    /**
     * <pre>
     * 地图中的统一语义对象，例如站点、线、区域、标签、反光板等。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapObject objects = 8;</code>
     */
    int getObjectsCount();
    /**
     * <pre>
     * 地图中的统一语义对象，例如站点、线、区域、标签、反光板等。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapObject objects = 8;</code>
     */
    java.util.List<? extends cmvr.msgs.Agv.AgvMapObjectOrBuilder> 
        getObjectsOrBuilderList();
    /**
     * <pre>
     * 地图中的统一语义对象，例如站点、线、区域、标签、反光板等。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapObject objects = 8;</code>
     */
    cmvr.msgs.Agv.AgvMapObjectOrBuilder getObjectsOrBuilder(
        int index);
  }
  /**
   * <pre>
   * 统一 2D 地图。栅格数据按行优先排列：index = y * width + x。
   * </pre>
   *
   * Protobuf type {@code cmvr.msgs.AgvUnifiedMap2D}
   */
  public static final class AgvUnifiedMap2D extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:cmvr.msgs.AgvUnifiedMap2D)
      AgvUnifiedMap2DOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use AgvUnifiedMap2D.newBuilder() to construct.
    private AgvUnifiedMap2D(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private AgvUnifiedMap2D() {
      frameId_ = "";
      data_ = emptyIntList();
      objects_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new AgvUnifiedMap2D();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvUnifiedMap2D_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvUnifiedMap2D_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              cmvr.msgs.Agv.AgvUnifiedMap2D.class, cmvr.msgs.Agv.AgvUnifiedMap2D.Builder.class);
    }

    public static final int FRAME_ID_FIELD_NUMBER = 1;
    private volatile java.lang.Object frameId_;
    /**
     * <pre>
     * 坐标系名称，例如 "map"。
     * </pre>
     *
     * <code>string frame_id = 1;</code>
     * @return The frameId.
     */
    @java.lang.Override
    public java.lang.String getFrameId() {
      java.lang.Object ref = frameId_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        frameId_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * 坐标系名称，例如 "map"。
     * </pre>
     *
     * <code>string frame_id = 1;</code>
     * @return The bytes for frameId.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getFrameIdBytes() {
      java.lang.Object ref = frameId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        frameId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int TIMESTAMP_FIELD_NUMBER = 2;
    private double timestamp_;
    /**
     * <pre>
     * 地图采样或更新时间，Unix 时间戳，单位：秒。
     * </pre>
     *
     * <code>double timestamp = 2;</code>
     * @return The timestamp.
     */
    @java.lang.Override
    public double getTimestamp() {
      return timestamp_;
    }

    public static final int RESOLUTION_FIELD_NUMBER = 3;
    private double resolution_;
    /**
     * <pre>
     * 栅格分辨率，单位：米/格。
     * </pre>
     *
     * <code>double resolution = 3;</code>
     * @return The resolution.
     */
    @java.lang.Override
    public double getResolution() {
      return resolution_;
    }

    public static final int WIDTH_FIELD_NUMBER = 4;
    private int width_;
    /**
     * <pre>
     * 栅格宽度，单位：格。
     * </pre>
     *
     * <code>uint32 width = 4;</code>
     * @return The width.
     */
    @java.lang.Override
    public int getWidth() {
      return width_;
    }

    public static final int HEIGHT_FIELD_NUMBER = 5;
    private int height_;
    /**
     * <pre>
     * 栅格高度，单位：格。
     * </pre>
     *
     * <code>uint32 height = 5;</code>
     * @return The height.
     */
    @java.lang.Override
    public int getHeight() {
      return height_;
    }

    public static final int ORIGIN_FIELD_NUMBER = 6;
    private cmvr.msgs.Agv.AgvPose2d origin_;
    /**
     * <pre>
     * 栅格 (0, 0) 在世界/地图坐标系下的位姿；x/y 单位：米，theta 单位：弧度。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvPose2d origin = 6;</code>
     * @return Whether the origin field is set.
     */
    @java.lang.Override
    public boolean hasOrigin() {
      return origin_ != null;
    }
    /**
     * <pre>
     * 栅格 (0, 0) 在世界/地图坐标系下的位姿；x/y 单位：米，theta 单位：弧度。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvPose2d origin = 6;</code>
     * @return The origin.
     */
    @java.lang.Override
    public cmvr.msgs.Agv.AgvPose2d getOrigin() {
      return origin_ == null ? cmvr.msgs.Agv.AgvPose2d.getDefaultInstance() : origin_;
    }
    /**
     * <pre>
     * 栅格 (0, 0) 在世界/地图坐标系下的位姿；x/y 单位：米，theta 单位：弧度。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvPose2d origin = 6;</code>
     */
    @java.lang.Override
    public cmvr.msgs.Agv.AgvPose2dOrBuilder getOriginOrBuilder() {
      return getOrigin();
    }

    public static final int DATA_FIELD_NUMBER = 7;
    private com.google.protobuf.Internal.IntList data_;
    /**
     * <pre>
     * 占据值：-1 表示未知，0 表示空闲，100 表示占据。
     * </pre>
     *
     * <code>repeated int32 data = 7;</code>
     * @return A list containing the data.
     */
    @java.lang.Override
    public java.util.List<java.lang.Integer>
        getDataList() {
      return data_;
    }
    /**
     * <pre>
     * 占据值：-1 表示未知，0 表示空闲，100 表示占据。
     * </pre>
     *
     * <code>repeated int32 data = 7;</code>
     * @return The count of data.
     */
    public int getDataCount() {
      return data_.size();
    }
    /**
     * <pre>
     * 占据值：-1 表示未知，0 表示空闲，100 表示占据。
     * </pre>
     *
     * <code>repeated int32 data = 7;</code>
     * @param index The index of the element to return.
     * @return The data at the given index.
     */
    public int getData(int index) {
      return data_.getInt(index);
    }
    private int dataMemoizedSerializedSize = -1;

    public static final int OBJECTS_FIELD_NUMBER = 8;
    private java.util.List<cmvr.msgs.Agv.AgvMapObject> objects_;
    /**
     * <pre>
     * 地图中的统一语义对象，例如站点、线、区域、标签、反光板等。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapObject objects = 8;</code>
     */
    @java.lang.Override
    public java.util.List<cmvr.msgs.Agv.AgvMapObject> getObjectsList() {
      return objects_;
    }
    /**
     * <pre>
     * 地图中的统一语义对象，例如站点、线、区域、标签、反光板等。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapObject objects = 8;</code>
     */
    @java.lang.Override
    public java.util.List<? extends cmvr.msgs.Agv.AgvMapObjectOrBuilder> 
        getObjectsOrBuilderList() {
      return objects_;
    }
    /**
     * <pre>
     * 地图中的统一语义对象，例如站点、线、区域、标签、反光板等。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapObject objects = 8;</code>
     */
    @java.lang.Override
    public int getObjectsCount() {
      return objects_.size();
    }
    /**
     * <pre>
     * 地图中的统一语义对象，例如站点、线、区域、标签、反光板等。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapObject objects = 8;</code>
     */
    @java.lang.Override
    public cmvr.msgs.Agv.AgvMapObject getObjects(int index) {
      return objects_.get(index);
    }
    /**
     * <pre>
     * 地图中的统一语义对象，例如站点、线、区域、标签、反光板等。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapObject objects = 8;</code>
     */
    @java.lang.Override
    public cmvr.msgs.Agv.AgvMapObjectOrBuilder getObjectsOrBuilder(
        int index) {
      return objects_.get(index);
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(frameId_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, frameId_);
      }
      if (java.lang.Double.doubleToRawLongBits(timestamp_) != 0) {
        output.writeDouble(2, timestamp_);
      }
      if (java.lang.Double.doubleToRawLongBits(resolution_) != 0) {
        output.writeDouble(3, resolution_);
      }
      if (width_ != 0) {
        output.writeUInt32(4, width_);
      }
      if (height_ != 0) {
        output.writeUInt32(5, height_);
      }
      if (origin_ != null) {
        output.writeMessage(6, getOrigin());
      }
      if (getDataList().size() > 0) {
        output.writeUInt32NoTag(58);
        output.writeUInt32NoTag(dataMemoizedSerializedSize);
      }
      for (int i = 0; i < data_.size(); i++) {
        output.writeInt32NoTag(data_.getInt(i));
      }
      for (int i = 0; i < objects_.size(); i++) {
        output.writeMessage(8, objects_.get(i));
      }
      getUnknownFields().writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(frameId_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, frameId_);
      }
      if (java.lang.Double.doubleToRawLongBits(timestamp_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(2, timestamp_);
      }
      if (java.lang.Double.doubleToRawLongBits(resolution_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(3, resolution_);
      }
      if (width_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(4, width_);
      }
      if (height_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(5, height_);
      }
      if (origin_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, getOrigin());
      }
      {
        int dataSize = 0;
        for (int i = 0; i < data_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeInt32SizeNoTag(data_.getInt(i));
        }
        size += dataSize;
        if (!getDataList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        dataMemoizedSerializedSize = dataSize;
      }
      for (int i = 0; i < objects_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(8, objects_.get(i));
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof cmvr.msgs.Agv.AgvUnifiedMap2D)) {
        return super.equals(obj);
      }
      cmvr.msgs.Agv.AgvUnifiedMap2D other = (cmvr.msgs.Agv.AgvUnifiedMap2D) obj;

      if (!getFrameId()
          .equals(other.getFrameId())) return false;
      if (java.lang.Double.doubleToLongBits(getTimestamp())
          != java.lang.Double.doubleToLongBits(
              other.getTimestamp())) return false;
      if (java.lang.Double.doubleToLongBits(getResolution())
          != java.lang.Double.doubleToLongBits(
              other.getResolution())) return false;
      if (getWidth()
          != other.getWidth()) return false;
      if (getHeight()
          != other.getHeight()) return false;
      if (hasOrigin() != other.hasOrigin()) return false;
      if (hasOrigin()) {
        if (!getOrigin()
            .equals(other.getOrigin())) return false;
      }
      if (!getDataList()
          .equals(other.getDataList())) return false;
      if (!getObjectsList()
          .equals(other.getObjectsList())) return false;
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + FRAME_ID_FIELD_NUMBER;
      hash = (53 * hash) + getFrameId().hashCode();
      hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getTimestamp()));
      hash = (37 * hash) + RESOLUTION_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getResolution()));
      hash = (37 * hash) + WIDTH_FIELD_NUMBER;
      hash = (53 * hash) + getWidth();
      hash = (37 * hash) + HEIGHT_FIELD_NUMBER;
      hash = (53 * hash) + getHeight();
      if (hasOrigin()) {
        hash = (37 * hash) + ORIGIN_FIELD_NUMBER;
        hash = (53 * hash) + getOrigin().hashCode();
      }
      if (getDataCount() > 0) {
        hash = (37 * hash) + DATA_FIELD_NUMBER;
        hash = (53 * hash) + getDataList().hashCode();
      }
      if (getObjectsCount() > 0) {
        hash = (37 * hash) + OBJECTS_FIELD_NUMBER;
        hash = (53 * hash) + getObjectsList().hashCode();
      }
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static cmvr.msgs.Agv.AgvUnifiedMap2D parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.msgs.Agv.AgvUnifiedMap2D parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvUnifiedMap2D parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.msgs.Agv.AgvUnifiedMap2D parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvUnifiedMap2D parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.msgs.Agv.AgvUnifiedMap2D parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvUnifiedMap2D parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cmvr.msgs.Agv.AgvUnifiedMap2D parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvUnifiedMap2D parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static cmvr.msgs.Agv.AgvUnifiedMap2D parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvUnifiedMap2D parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cmvr.msgs.Agv.AgvUnifiedMap2D parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(cmvr.msgs.Agv.AgvUnifiedMap2D prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * 统一 2D 地图。栅格数据按行优先排列：index = y * width + x。
     * </pre>
     *
     * Protobuf type {@code cmvr.msgs.AgvUnifiedMap2D}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:cmvr.msgs.AgvUnifiedMap2D)
        cmvr.msgs.Agv.AgvUnifiedMap2DOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvUnifiedMap2D_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvUnifiedMap2D_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                cmvr.msgs.Agv.AgvUnifiedMap2D.class, cmvr.msgs.Agv.AgvUnifiedMap2D.Builder.class);
      }

      // Construct using cmvr.msgs.Agv.AgvUnifiedMap2D.newBuilder()
      private Builder() {

      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        frameId_ = "";

        timestamp_ = 0D;

        resolution_ = 0D;

        width_ = 0;

        height_ = 0;

        if (originBuilder_ == null) {
          origin_ = null;
        } else {
          origin_ = null;
          originBuilder_ = null;
        }
        data_ = emptyIntList();
        bitField0_ = (bitField0_ & ~0x00000001);
        if (objectsBuilder_ == null) {
          objects_ = java.util.Collections.emptyList();
        } else {
          objects_ = null;
          objectsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvUnifiedMap2D_descriptor;
      }

      @java.lang.Override
      public cmvr.msgs.Agv.AgvUnifiedMap2D getDefaultInstanceForType() {
        return cmvr.msgs.Agv.AgvUnifiedMap2D.getDefaultInstance();
      }

      @java.lang.Override
      public cmvr.msgs.Agv.AgvUnifiedMap2D build() {
        cmvr.msgs.Agv.AgvUnifiedMap2D result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public cmvr.msgs.Agv.AgvUnifiedMap2D buildPartial() {
        cmvr.msgs.Agv.AgvUnifiedMap2D result = new cmvr.msgs.Agv.AgvUnifiedMap2D(this);
        int from_bitField0_ = bitField0_;
        result.frameId_ = frameId_;
        result.timestamp_ = timestamp_;
        result.resolution_ = resolution_;
        result.width_ = width_;
        result.height_ = height_;
        if (originBuilder_ == null) {
          result.origin_ = origin_;
        } else {
          result.origin_ = originBuilder_.build();
        }
        if (((bitField0_ & 0x00000001) != 0)) {
          data_.makeImmutable();
          bitField0_ = (bitField0_ & ~0x00000001);
        }
        result.data_ = data_;
        if (objectsBuilder_ == null) {
          if (((bitField0_ & 0x00000002) != 0)) {
            objects_ = java.util.Collections.unmodifiableList(objects_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.objects_ = objects_;
        } else {
          result.objects_ = objectsBuilder_.build();
        }
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof cmvr.msgs.Agv.AgvUnifiedMap2D) {
          return mergeFrom((cmvr.msgs.Agv.AgvUnifiedMap2D)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(cmvr.msgs.Agv.AgvUnifiedMap2D other) {
        if (other == cmvr.msgs.Agv.AgvUnifiedMap2D.getDefaultInstance()) return this;
        if (!other.getFrameId().isEmpty()) {
          frameId_ = other.frameId_;
          onChanged();
        }
        if (other.getTimestamp() != 0D) {
          setTimestamp(other.getTimestamp());
        }
        if (other.getResolution() != 0D) {
          setResolution(other.getResolution());
        }
        if (other.getWidth() != 0) {
          setWidth(other.getWidth());
        }
        if (other.getHeight() != 0) {
          setHeight(other.getHeight());
        }
        if (other.hasOrigin()) {
          mergeOrigin(other.getOrigin());
        }
        if (!other.data_.isEmpty()) {
          if (data_.isEmpty()) {
            data_ = other.data_;
            bitField0_ = (bitField0_ & ~0x00000001);
          } else {
            ensureDataIsMutable();
            data_.addAll(other.data_);
          }
          onChanged();
        }
        if (objectsBuilder_ == null) {
          if (!other.objects_.isEmpty()) {
            if (objects_.isEmpty()) {
              objects_ = other.objects_;
              bitField0_ = (bitField0_ & ~0x00000002);
            } else {
              ensureObjectsIsMutable();
              objects_.addAll(other.objects_);
            }
            onChanged();
          }
        } else {
          if (!other.objects_.isEmpty()) {
            if (objectsBuilder_.isEmpty()) {
              objectsBuilder_.dispose();
              objectsBuilder_ = null;
              objects_ = other.objects_;
              bitField0_ = (bitField0_ & ~0x00000002);
              objectsBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getObjectsFieldBuilder() : null;
            } else {
              objectsBuilder_.addAllMessages(other.objects_);
            }
          }
        }
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 10: {
                frameId_ = input.readStringRequireUtf8();

                break;
              } // case 10
              case 17: {
                timestamp_ = input.readDouble();

                break;
              } // case 17
              case 25: {
                resolution_ = input.readDouble();

                break;
              } // case 25
              case 32: {
                width_ = input.readUInt32();

                break;
              } // case 32
              case 40: {
                height_ = input.readUInt32();

                break;
              } // case 40
              case 50: {
                input.readMessage(
                    getOriginFieldBuilder().getBuilder(),
                    extensionRegistry);

                break;
              } // case 50
              case 56: {
                int v = input.readInt32();
                ensureDataIsMutable();
                data_.addInt(v);
                break;
              } // case 56
              case 58: {
                int length = input.readRawVarint32();
                int limit = input.pushLimit(length);
                ensureDataIsMutable();
                while (input.getBytesUntilLimit() > 0) {
                  data_.addInt(input.readInt32());
                }
                input.popLimit(limit);
                break;
              } // case 58
              case 66: {
                cmvr.msgs.Agv.AgvMapObject m =
                    input.readMessage(
                        cmvr.msgs.Agv.AgvMapObject.parser(),
                        extensionRegistry);
                if (objectsBuilder_ == null) {
                  ensureObjectsIsMutable();
                  objects_.add(m);
                } else {
                  objectsBuilder_.addMessage(m);
                }
                break;
              } // case 66
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }
      private int bitField0_;

      private java.lang.Object frameId_ = "";
      /**
       * <pre>
       * 坐标系名称，例如 "map"。
       * </pre>
       *
       * <code>string frame_id = 1;</code>
       * @return The frameId.
       */
      public java.lang.String getFrameId() {
        java.lang.Object ref = frameId_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          frameId_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * 坐标系名称，例如 "map"。
       * </pre>
       *
       * <code>string frame_id = 1;</code>
       * @return The bytes for frameId.
       */
      public com.google.protobuf.ByteString
          getFrameIdBytes() {
        java.lang.Object ref = frameId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          frameId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * 坐标系名称，例如 "map"。
       * </pre>
       *
       * <code>string frame_id = 1;</code>
       * @param value The frameId to set.
       * @return This builder for chaining.
       */
      public Builder setFrameId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        frameId_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 坐标系名称，例如 "map"。
       * </pre>
       *
       * <code>string frame_id = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearFrameId() {
        
        frameId_ = getDefaultInstance().getFrameId();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 坐标系名称，例如 "map"。
       * </pre>
       *
       * <code>string frame_id = 1;</code>
       * @param value The bytes for frameId to set.
       * @return This builder for chaining.
       */
      public Builder setFrameIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        frameId_ = value;
        onChanged();
        return this;
      }

      private double timestamp_ ;
      /**
       * <pre>
       * 地图采样或更新时间，Unix 时间戳，单位：秒。
       * </pre>
       *
       * <code>double timestamp = 2;</code>
       * @return The timestamp.
       */
      @java.lang.Override
      public double getTimestamp() {
        return timestamp_;
      }
      /**
       * <pre>
       * 地图采样或更新时间，Unix 时间戳，单位：秒。
       * </pre>
       *
       * <code>double timestamp = 2;</code>
       * @param value The timestamp to set.
       * @return This builder for chaining.
       */
      public Builder setTimestamp(double value) {
        
        timestamp_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 地图采样或更新时间，Unix 时间戳，单位：秒。
       * </pre>
       *
       * <code>double timestamp = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearTimestamp() {
        
        timestamp_ = 0D;
        onChanged();
        return this;
      }

      private double resolution_ ;
      /**
       * <pre>
       * 栅格分辨率，单位：米/格。
       * </pre>
       *
       * <code>double resolution = 3;</code>
       * @return The resolution.
       */
      @java.lang.Override
      public double getResolution() {
        return resolution_;
      }
      /**
       * <pre>
       * 栅格分辨率，单位：米/格。
       * </pre>
       *
       * <code>double resolution = 3;</code>
       * @param value The resolution to set.
       * @return This builder for chaining.
       */
      public Builder setResolution(double value) {
        
        resolution_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 栅格分辨率，单位：米/格。
       * </pre>
       *
       * <code>double resolution = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearResolution() {
        
        resolution_ = 0D;
        onChanged();
        return this;
      }

      private int width_ ;
      /**
       * <pre>
       * 栅格宽度，单位：格。
       * </pre>
       *
       * <code>uint32 width = 4;</code>
       * @return The width.
       */
      @java.lang.Override
      public int getWidth() {
        return width_;
      }
      /**
       * <pre>
       * 栅格宽度，单位：格。
       * </pre>
       *
       * <code>uint32 width = 4;</code>
       * @param value The width to set.
       * @return This builder for chaining.
       */
      public Builder setWidth(int value) {
        
        width_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 栅格宽度，单位：格。
       * </pre>
       *
       * <code>uint32 width = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearWidth() {
        
        width_ = 0;
        onChanged();
        return this;
      }

      private int height_ ;
      /**
       * <pre>
       * 栅格高度，单位：格。
       * </pre>
       *
       * <code>uint32 height = 5;</code>
       * @return The height.
       */
      @java.lang.Override
      public int getHeight() {
        return height_;
      }
      /**
       * <pre>
       * 栅格高度，单位：格。
       * </pre>
       *
       * <code>uint32 height = 5;</code>
       * @param value The height to set.
       * @return This builder for chaining.
       */
      public Builder setHeight(int value) {
        
        height_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 栅格高度，单位：格。
       * </pre>
       *
       * <code>uint32 height = 5;</code>
       * @return This builder for chaining.
       */
      public Builder clearHeight() {
        
        height_ = 0;
        onChanged();
        return this;
      }

      private cmvr.msgs.Agv.AgvPose2d origin_;
      private com.google.protobuf.SingleFieldBuilderV3<
          cmvr.msgs.Agv.AgvPose2d, cmvr.msgs.Agv.AgvPose2d.Builder, cmvr.msgs.Agv.AgvPose2dOrBuilder> originBuilder_;
      /**
       * <pre>
       * 栅格 (0, 0) 在世界/地图坐标系下的位姿；x/y 单位：米，theta 单位：弧度。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvPose2d origin = 6;</code>
       * @return Whether the origin field is set.
       */
      public boolean hasOrigin() {
        return originBuilder_ != null || origin_ != null;
      }
      /**
       * <pre>
       * 栅格 (0, 0) 在世界/地图坐标系下的位姿；x/y 单位：米，theta 单位：弧度。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvPose2d origin = 6;</code>
       * @return The origin.
       */
      public cmvr.msgs.Agv.AgvPose2d getOrigin() {
        if (originBuilder_ == null) {
          return origin_ == null ? cmvr.msgs.Agv.AgvPose2d.getDefaultInstance() : origin_;
        } else {
          return originBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * 栅格 (0, 0) 在世界/地图坐标系下的位姿；x/y 单位：米，theta 单位：弧度。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvPose2d origin = 6;</code>
       */
      public Builder setOrigin(cmvr.msgs.Agv.AgvPose2d value) {
        if (originBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          origin_ = value;
          onChanged();
        } else {
          originBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       * 栅格 (0, 0) 在世界/地图坐标系下的位姿；x/y 单位：米，theta 单位：弧度。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvPose2d origin = 6;</code>
       */
      public Builder setOrigin(
          cmvr.msgs.Agv.AgvPose2d.Builder builderForValue) {
        if (originBuilder_ == null) {
          origin_ = builderForValue.build();
          onChanged();
        } else {
          originBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       * 栅格 (0, 0) 在世界/地图坐标系下的位姿；x/y 单位：米，theta 单位：弧度。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvPose2d origin = 6;</code>
       */
      public Builder mergeOrigin(cmvr.msgs.Agv.AgvPose2d value) {
        if (originBuilder_ == null) {
          if (origin_ != null) {
            origin_ =
              cmvr.msgs.Agv.AgvPose2d.newBuilder(origin_).mergeFrom(value).buildPartial();
          } else {
            origin_ = value;
          }
          onChanged();
        } else {
          originBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       * 栅格 (0, 0) 在世界/地图坐标系下的位姿；x/y 单位：米，theta 单位：弧度。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvPose2d origin = 6;</code>
       */
      public Builder clearOrigin() {
        if (originBuilder_ == null) {
          origin_ = null;
          onChanged();
        } else {
          origin_ = null;
          originBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       * 栅格 (0, 0) 在世界/地图坐标系下的位姿；x/y 单位：米，theta 单位：弧度。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvPose2d origin = 6;</code>
       */
      public cmvr.msgs.Agv.AgvPose2d.Builder getOriginBuilder() {
        
        onChanged();
        return getOriginFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * 栅格 (0, 0) 在世界/地图坐标系下的位姿；x/y 单位：米，theta 单位：弧度。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvPose2d origin = 6;</code>
       */
      public cmvr.msgs.Agv.AgvPose2dOrBuilder getOriginOrBuilder() {
        if (originBuilder_ != null) {
          return originBuilder_.getMessageOrBuilder();
        } else {
          return origin_ == null ?
              cmvr.msgs.Agv.AgvPose2d.getDefaultInstance() : origin_;
        }
      }
      /**
       * <pre>
       * 栅格 (0, 0) 在世界/地图坐标系下的位姿；x/y 单位：米，theta 单位：弧度。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvPose2d origin = 6;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          cmvr.msgs.Agv.AgvPose2d, cmvr.msgs.Agv.AgvPose2d.Builder, cmvr.msgs.Agv.AgvPose2dOrBuilder> 
          getOriginFieldBuilder() {
        if (originBuilder_ == null) {
          originBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              cmvr.msgs.Agv.AgvPose2d, cmvr.msgs.Agv.AgvPose2d.Builder, cmvr.msgs.Agv.AgvPose2dOrBuilder>(
                  getOrigin(),
                  getParentForChildren(),
                  isClean());
          origin_ = null;
        }
        return originBuilder_;
      }

      private com.google.protobuf.Internal.IntList data_ = emptyIntList();
      private void ensureDataIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          data_ = mutableCopy(data_);
          bitField0_ |= 0x00000001;
         }
      }
      /**
       * <pre>
       * 占据值：-1 表示未知，0 表示空闲，100 表示占据。
       * </pre>
       *
       * <code>repeated int32 data = 7;</code>
       * @return A list containing the data.
       */
      public java.util.List<java.lang.Integer>
          getDataList() {
        return ((bitField0_ & 0x00000001) != 0) ?
                 java.util.Collections.unmodifiableList(data_) : data_;
      }
      /**
       * <pre>
       * 占据值：-1 表示未知，0 表示空闲，100 表示占据。
       * </pre>
       *
       * <code>repeated int32 data = 7;</code>
       * @return The count of data.
       */
      public int getDataCount() {
        return data_.size();
      }
      /**
       * <pre>
       * 占据值：-1 表示未知，0 表示空闲，100 表示占据。
       * </pre>
       *
       * <code>repeated int32 data = 7;</code>
       * @param index The index of the element to return.
       * @return The data at the given index.
       */
      public int getData(int index) {
        return data_.getInt(index);
      }
      /**
       * <pre>
       * 占据值：-1 表示未知，0 表示空闲，100 表示占据。
       * </pre>
       *
       * <code>repeated int32 data = 7;</code>
       * @param index The index to set the value at.
       * @param value The data to set.
       * @return This builder for chaining.
       */
      public Builder setData(
          int index, int value) {
        ensureDataIsMutable();
        data_.setInt(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 占据值：-1 表示未知，0 表示空闲，100 表示占据。
       * </pre>
       *
       * <code>repeated int32 data = 7;</code>
       * @param value The data to add.
       * @return This builder for chaining.
       */
      public Builder addData(int value) {
        ensureDataIsMutable();
        data_.addInt(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 占据值：-1 表示未知，0 表示空闲，100 表示占据。
       * </pre>
       *
       * <code>repeated int32 data = 7;</code>
       * @param values The data to add.
       * @return This builder for chaining.
       */
      public Builder addAllData(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        ensureDataIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, data_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 占据值：-1 表示未知，0 表示空闲，100 表示占据。
       * </pre>
       *
       * <code>repeated int32 data = 7;</code>
       * @return This builder for chaining.
       */
      public Builder clearData() {
        data_ = emptyIntList();
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }

      private java.util.List<cmvr.msgs.Agv.AgvMapObject> objects_ =
        java.util.Collections.emptyList();
      private void ensureObjectsIsMutable() {
        if (!((bitField0_ & 0x00000002) != 0)) {
          objects_ = new java.util.ArrayList<cmvr.msgs.Agv.AgvMapObject>(objects_);
          bitField0_ |= 0x00000002;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          cmvr.msgs.Agv.AgvMapObject, cmvr.msgs.Agv.AgvMapObject.Builder, cmvr.msgs.Agv.AgvMapObjectOrBuilder> objectsBuilder_;

      /**
       * <pre>
       * 地图中的统一语义对象，例如站点、线、区域、标签、反光板等。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapObject objects = 8;</code>
       */
      public java.util.List<cmvr.msgs.Agv.AgvMapObject> getObjectsList() {
        if (objectsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(objects_);
        } else {
          return objectsBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * 地图中的统一语义对象，例如站点、线、区域、标签、反光板等。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapObject objects = 8;</code>
       */
      public int getObjectsCount() {
        if (objectsBuilder_ == null) {
          return objects_.size();
        } else {
          return objectsBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * 地图中的统一语义对象，例如站点、线、区域、标签、反光板等。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapObject objects = 8;</code>
       */
      public cmvr.msgs.Agv.AgvMapObject getObjects(int index) {
        if (objectsBuilder_ == null) {
          return objects_.get(index);
        } else {
          return objectsBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * 地图中的统一语义对象，例如站点、线、区域、标签、反光板等。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapObject objects = 8;</code>
       */
      public Builder setObjects(
          int index, cmvr.msgs.Agv.AgvMapObject value) {
        if (objectsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureObjectsIsMutable();
          objects_.set(index, value);
          onChanged();
        } else {
          objectsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * 地图中的统一语义对象，例如站点、线、区域、标签、反光板等。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapObject objects = 8;</code>
       */
      public Builder setObjects(
          int index, cmvr.msgs.Agv.AgvMapObject.Builder builderForValue) {
        if (objectsBuilder_ == null) {
          ensureObjectsIsMutable();
          objects_.set(index, builderForValue.build());
          onChanged();
        } else {
          objectsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * 地图中的统一语义对象，例如站点、线、区域、标签、反光板等。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapObject objects = 8;</code>
       */
      public Builder addObjects(cmvr.msgs.Agv.AgvMapObject value) {
        if (objectsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureObjectsIsMutable();
          objects_.add(value);
          onChanged();
        } else {
          objectsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * 地图中的统一语义对象，例如站点、线、区域、标签、反光板等。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapObject objects = 8;</code>
       */
      public Builder addObjects(
          int index, cmvr.msgs.Agv.AgvMapObject value) {
        if (objectsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureObjectsIsMutable();
          objects_.add(index, value);
          onChanged();
        } else {
          objectsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * 地图中的统一语义对象，例如站点、线、区域、标签、反光板等。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapObject objects = 8;</code>
       */
      public Builder addObjects(
          cmvr.msgs.Agv.AgvMapObject.Builder builderForValue) {
        if (objectsBuilder_ == null) {
          ensureObjectsIsMutable();
          objects_.add(builderForValue.build());
          onChanged();
        } else {
          objectsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * 地图中的统一语义对象，例如站点、线、区域、标签、反光板等。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapObject objects = 8;</code>
       */
      public Builder addObjects(
          int index, cmvr.msgs.Agv.AgvMapObject.Builder builderForValue) {
        if (objectsBuilder_ == null) {
          ensureObjectsIsMutable();
          objects_.add(index, builderForValue.build());
          onChanged();
        } else {
          objectsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * 地图中的统一语义对象，例如站点、线、区域、标签、反光板等。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapObject objects = 8;</code>
       */
      public Builder addAllObjects(
          java.lang.Iterable<? extends cmvr.msgs.Agv.AgvMapObject> values) {
        if (objectsBuilder_ == null) {
          ensureObjectsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, objects_);
          onChanged();
        } else {
          objectsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * 地图中的统一语义对象，例如站点、线、区域、标签、反光板等。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapObject objects = 8;</code>
       */
      public Builder clearObjects() {
        if (objectsBuilder_ == null) {
          objects_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
        } else {
          objectsBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * 地图中的统一语义对象，例如站点、线、区域、标签、反光板等。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapObject objects = 8;</code>
       */
      public Builder removeObjects(int index) {
        if (objectsBuilder_ == null) {
          ensureObjectsIsMutable();
          objects_.remove(index);
          onChanged();
        } else {
          objectsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * 地图中的统一语义对象，例如站点、线、区域、标签、反光板等。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapObject objects = 8;</code>
       */
      public cmvr.msgs.Agv.AgvMapObject.Builder getObjectsBuilder(
          int index) {
        return getObjectsFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * 地图中的统一语义对象，例如站点、线、区域、标签、反光板等。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapObject objects = 8;</code>
       */
      public cmvr.msgs.Agv.AgvMapObjectOrBuilder getObjectsOrBuilder(
          int index) {
        if (objectsBuilder_ == null) {
          return objects_.get(index);  } else {
          return objectsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * 地图中的统一语义对象，例如站点、线、区域、标签、反光板等。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapObject objects = 8;</code>
       */
      public java.util.List<? extends cmvr.msgs.Agv.AgvMapObjectOrBuilder> 
           getObjectsOrBuilderList() {
        if (objectsBuilder_ != null) {
          return objectsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(objects_);
        }
      }
      /**
       * <pre>
       * 地图中的统一语义对象，例如站点、线、区域、标签、反光板等。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapObject objects = 8;</code>
       */
      public cmvr.msgs.Agv.AgvMapObject.Builder addObjectsBuilder() {
        return getObjectsFieldBuilder().addBuilder(
            cmvr.msgs.Agv.AgvMapObject.getDefaultInstance());
      }
      /**
       * <pre>
       * 地图中的统一语义对象，例如站点、线、区域、标签、反光板等。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapObject objects = 8;</code>
       */
      public cmvr.msgs.Agv.AgvMapObject.Builder addObjectsBuilder(
          int index) {
        return getObjectsFieldBuilder().addBuilder(
            index, cmvr.msgs.Agv.AgvMapObject.getDefaultInstance());
      }
      /**
       * <pre>
       * 地图中的统一语义对象，例如站点、线、区域、标签、反光板等。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapObject objects = 8;</code>
       */
      public java.util.List<cmvr.msgs.Agv.AgvMapObject.Builder> 
           getObjectsBuilderList() {
        return getObjectsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          cmvr.msgs.Agv.AgvMapObject, cmvr.msgs.Agv.AgvMapObject.Builder, cmvr.msgs.Agv.AgvMapObjectOrBuilder> 
          getObjectsFieldBuilder() {
        if (objectsBuilder_ == null) {
          objectsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              cmvr.msgs.Agv.AgvMapObject, cmvr.msgs.Agv.AgvMapObject.Builder, cmvr.msgs.Agv.AgvMapObjectOrBuilder>(
                  objects_,
                  ((bitField0_ & 0x00000002) != 0),
                  getParentForChildren(),
                  isClean());
          objects_ = null;
        }
        return objectsBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:cmvr.msgs.AgvUnifiedMap2D)
    }

    // @@protoc_insertion_point(class_scope:cmvr.msgs.AgvUnifiedMap2D)
    private static final cmvr.msgs.Agv.AgvUnifiedMap2D DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new cmvr.msgs.Agv.AgvUnifiedMap2D();
    }

    public static cmvr.msgs.Agv.AgvUnifiedMap2D getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<AgvUnifiedMap2D>
        PARSER = new com.google.protobuf.AbstractParser<AgvUnifiedMap2D>() {
      @java.lang.Override
      public AgvUnifiedMap2D parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (com.google.protobuf.UninitializedMessageException e) {
          throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(e)
              .setUnfinishedMessage(builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

    public static com.google.protobuf.Parser<AgvUnifiedMap2D> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<AgvUnifiedMap2D> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public cmvr.msgs.Agv.AgvUnifiedMap2D getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface AgvMapPointSample3DOrBuilder extends
      // @@protoc_insertion_point(interface_extends:cmvr.msgs.AgvMapPointSample3D)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * X 坐标，单位：米。
     * </pre>
     *
     * <code>double x = 1;</code>
     * @return The x.
     */
    double getX();

    /**
     * <pre>
     * Y 坐标，单位：米。
     * </pre>
     *
     * <code>double y = 2;</code>
     * @return The y.
     */
    double getY();

    /**
     * <pre>
     * Z 坐标，单位：米。
     * </pre>
     *
     * <code>double z = 3;</code>
     * @return The z.
     */
    double getZ();

    /**
     * <pre>
     * 激光强度；无强度信息时置为 0。
     * </pre>
     *
     * <code>float intensity = 4;</code>
     * @return The intensity.
     */
    float getIntensity();

    /**
     * <pre>
     * 激光雷达线束/通道编号；无该信息时置为 0。
     * </pre>
     *
     * <code>uint32 ring = 5;</code>
     * @return The ring.
     */
    int getRing();

    /**
     * <pre>
     * 相对地图时间戳的时间偏移，单位：秒；无该信息时置为 0。
     * </pre>
     *
     * <code>double time_offset = 6;</code>
     * @return The timeOffset.
     */
    double getTimeOffset();
  }
  /**
   * <pre>
   * 统一 3D 点样本。坐标单位：米。
   * </pre>
   *
   * Protobuf type {@code cmvr.msgs.AgvMapPointSample3D}
   */
  public static final class AgvMapPointSample3D extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:cmvr.msgs.AgvMapPointSample3D)
      AgvMapPointSample3DOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use AgvMapPointSample3D.newBuilder() to construct.
    private AgvMapPointSample3D(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private AgvMapPointSample3D() {
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new AgvMapPointSample3D();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvMapPointSample3D_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvMapPointSample3D_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              cmvr.msgs.Agv.AgvMapPointSample3D.class, cmvr.msgs.Agv.AgvMapPointSample3D.Builder.class);
    }

    public static final int X_FIELD_NUMBER = 1;
    private double x_;
    /**
     * <pre>
     * X 坐标，单位：米。
     * </pre>
     *
     * <code>double x = 1;</code>
     * @return The x.
     */
    @java.lang.Override
    public double getX() {
      return x_;
    }

    public static final int Y_FIELD_NUMBER = 2;
    private double y_;
    /**
     * <pre>
     * Y 坐标，单位：米。
     * </pre>
     *
     * <code>double y = 2;</code>
     * @return The y.
     */
    @java.lang.Override
    public double getY() {
      return y_;
    }

    public static final int Z_FIELD_NUMBER = 3;
    private double z_;
    /**
     * <pre>
     * Z 坐标，单位：米。
     * </pre>
     *
     * <code>double z = 3;</code>
     * @return The z.
     */
    @java.lang.Override
    public double getZ() {
      return z_;
    }

    public static final int INTENSITY_FIELD_NUMBER = 4;
    private float intensity_;
    /**
     * <pre>
     * 激光强度；无强度信息时置为 0。
     * </pre>
     *
     * <code>float intensity = 4;</code>
     * @return The intensity.
     */
    @java.lang.Override
    public float getIntensity() {
      return intensity_;
    }

    public static final int RING_FIELD_NUMBER = 5;
    private int ring_;
    /**
     * <pre>
     * 激光雷达线束/通道编号；无该信息时置为 0。
     * </pre>
     *
     * <code>uint32 ring = 5;</code>
     * @return The ring.
     */
    @java.lang.Override
    public int getRing() {
      return ring_;
    }

    public static final int TIME_OFFSET_FIELD_NUMBER = 6;
    private double timeOffset_;
    /**
     * <pre>
     * 相对地图时间戳的时间偏移，单位：秒；无该信息时置为 0。
     * </pre>
     *
     * <code>double time_offset = 6;</code>
     * @return The timeOffset.
     */
    @java.lang.Override
    public double getTimeOffset() {
      return timeOffset_;
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (java.lang.Double.doubleToRawLongBits(x_) != 0) {
        output.writeDouble(1, x_);
      }
      if (java.lang.Double.doubleToRawLongBits(y_) != 0) {
        output.writeDouble(2, y_);
      }
      if (java.lang.Double.doubleToRawLongBits(z_) != 0) {
        output.writeDouble(3, z_);
      }
      if (java.lang.Float.floatToRawIntBits(intensity_) != 0) {
        output.writeFloat(4, intensity_);
      }
      if (ring_ != 0) {
        output.writeUInt32(5, ring_);
      }
      if (java.lang.Double.doubleToRawLongBits(timeOffset_) != 0) {
        output.writeDouble(6, timeOffset_);
      }
      getUnknownFields().writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (java.lang.Double.doubleToRawLongBits(x_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(1, x_);
      }
      if (java.lang.Double.doubleToRawLongBits(y_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(2, y_);
      }
      if (java.lang.Double.doubleToRawLongBits(z_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(3, z_);
      }
      if (java.lang.Float.floatToRawIntBits(intensity_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeFloatSize(4, intensity_);
      }
      if (ring_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(5, ring_);
      }
      if (java.lang.Double.doubleToRawLongBits(timeOffset_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(6, timeOffset_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof cmvr.msgs.Agv.AgvMapPointSample3D)) {
        return super.equals(obj);
      }
      cmvr.msgs.Agv.AgvMapPointSample3D other = (cmvr.msgs.Agv.AgvMapPointSample3D) obj;

      if (java.lang.Double.doubleToLongBits(getX())
          != java.lang.Double.doubleToLongBits(
              other.getX())) return false;
      if (java.lang.Double.doubleToLongBits(getY())
          != java.lang.Double.doubleToLongBits(
              other.getY())) return false;
      if (java.lang.Double.doubleToLongBits(getZ())
          != java.lang.Double.doubleToLongBits(
              other.getZ())) return false;
      if (java.lang.Float.floatToIntBits(getIntensity())
          != java.lang.Float.floatToIntBits(
              other.getIntensity())) return false;
      if (getRing()
          != other.getRing()) return false;
      if (java.lang.Double.doubleToLongBits(getTimeOffset())
          != java.lang.Double.doubleToLongBits(
              other.getTimeOffset())) return false;
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + X_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getX()));
      hash = (37 * hash) + Y_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getY()));
      hash = (37 * hash) + Z_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getZ()));
      hash = (37 * hash) + INTENSITY_FIELD_NUMBER;
      hash = (53 * hash) + java.lang.Float.floatToIntBits(
          getIntensity());
      hash = (37 * hash) + RING_FIELD_NUMBER;
      hash = (53 * hash) + getRing();
      hash = (37 * hash) + TIME_OFFSET_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getTimeOffset()));
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static cmvr.msgs.Agv.AgvMapPointSample3D parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.msgs.Agv.AgvMapPointSample3D parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvMapPointSample3D parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.msgs.Agv.AgvMapPointSample3D parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvMapPointSample3D parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.msgs.Agv.AgvMapPointSample3D parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvMapPointSample3D parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cmvr.msgs.Agv.AgvMapPointSample3D parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvMapPointSample3D parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static cmvr.msgs.Agv.AgvMapPointSample3D parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvMapPointSample3D parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cmvr.msgs.Agv.AgvMapPointSample3D parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(cmvr.msgs.Agv.AgvMapPointSample3D prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * 统一 3D 点样本。坐标单位：米。
     * </pre>
     *
     * Protobuf type {@code cmvr.msgs.AgvMapPointSample3D}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:cmvr.msgs.AgvMapPointSample3D)
        cmvr.msgs.Agv.AgvMapPointSample3DOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvMapPointSample3D_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvMapPointSample3D_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                cmvr.msgs.Agv.AgvMapPointSample3D.class, cmvr.msgs.Agv.AgvMapPointSample3D.Builder.class);
      }

      // Construct using cmvr.msgs.Agv.AgvMapPointSample3D.newBuilder()
      private Builder() {

      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        x_ = 0D;

        y_ = 0D;

        z_ = 0D;

        intensity_ = 0F;

        ring_ = 0;

        timeOffset_ = 0D;

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvMapPointSample3D_descriptor;
      }

      @java.lang.Override
      public cmvr.msgs.Agv.AgvMapPointSample3D getDefaultInstanceForType() {
        return cmvr.msgs.Agv.AgvMapPointSample3D.getDefaultInstance();
      }

      @java.lang.Override
      public cmvr.msgs.Agv.AgvMapPointSample3D build() {
        cmvr.msgs.Agv.AgvMapPointSample3D result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public cmvr.msgs.Agv.AgvMapPointSample3D buildPartial() {
        cmvr.msgs.Agv.AgvMapPointSample3D result = new cmvr.msgs.Agv.AgvMapPointSample3D(this);
        result.x_ = x_;
        result.y_ = y_;
        result.z_ = z_;
        result.intensity_ = intensity_;
        result.ring_ = ring_;
        result.timeOffset_ = timeOffset_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof cmvr.msgs.Agv.AgvMapPointSample3D) {
          return mergeFrom((cmvr.msgs.Agv.AgvMapPointSample3D)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(cmvr.msgs.Agv.AgvMapPointSample3D other) {
        if (other == cmvr.msgs.Agv.AgvMapPointSample3D.getDefaultInstance()) return this;
        if (other.getX() != 0D) {
          setX(other.getX());
        }
        if (other.getY() != 0D) {
          setY(other.getY());
        }
        if (other.getZ() != 0D) {
          setZ(other.getZ());
        }
        if (other.getIntensity() != 0F) {
          setIntensity(other.getIntensity());
        }
        if (other.getRing() != 0) {
          setRing(other.getRing());
        }
        if (other.getTimeOffset() != 0D) {
          setTimeOffset(other.getTimeOffset());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 9: {
                x_ = input.readDouble();

                break;
              } // case 9
              case 17: {
                y_ = input.readDouble();

                break;
              } // case 17
              case 25: {
                z_ = input.readDouble();

                break;
              } // case 25
              case 37: {
                intensity_ = input.readFloat();

                break;
              } // case 37
              case 40: {
                ring_ = input.readUInt32();

                break;
              } // case 40
              case 49: {
                timeOffset_ = input.readDouble();

                break;
              } // case 49
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }

      private double x_ ;
      /**
       * <pre>
       * X 坐标，单位：米。
       * </pre>
       *
       * <code>double x = 1;</code>
       * @return The x.
       */
      @java.lang.Override
      public double getX() {
        return x_;
      }
      /**
       * <pre>
       * X 坐标，单位：米。
       * </pre>
       *
       * <code>double x = 1;</code>
       * @param value The x to set.
       * @return This builder for chaining.
       */
      public Builder setX(double value) {
        
        x_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * X 坐标，单位：米。
       * </pre>
       *
       * <code>double x = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearX() {
        
        x_ = 0D;
        onChanged();
        return this;
      }

      private double y_ ;
      /**
       * <pre>
       * Y 坐标，单位：米。
       * </pre>
       *
       * <code>double y = 2;</code>
       * @return The y.
       */
      @java.lang.Override
      public double getY() {
        return y_;
      }
      /**
       * <pre>
       * Y 坐标，单位：米。
       * </pre>
       *
       * <code>double y = 2;</code>
       * @param value The y to set.
       * @return This builder for chaining.
       */
      public Builder setY(double value) {
        
        y_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Y 坐标，单位：米。
       * </pre>
       *
       * <code>double y = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearY() {
        
        y_ = 0D;
        onChanged();
        return this;
      }

      private double z_ ;
      /**
       * <pre>
       * Z 坐标，单位：米。
       * </pre>
       *
       * <code>double z = 3;</code>
       * @return The z.
       */
      @java.lang.Override
      public double getZ() {
        return z_;
      }
      /**
       * <pre>
       * Z 坐标，单位：米。
       * </pre>
       *
       * <code>double z = 3;</code>
       * @param value The z to set.
       * @return This builder for chaining.
       */
      public Builder setZ(double value) {
        
        z_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Z 坐标，单位：米。
       * </pre>
       *
       * <code>double z = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearZ() {
        
        z_ = 0D;
        onChanged();
        return this;
      }

      private float intensity_ ;
      /**
       * <pre>
       * 激光强度；无强度信息时置为 0。
       * </pre>
       *
       * <code>float intensity = 4;</code>
       * @return The intensity.
       */
      @java.lang.Override
      public float getIntensity() {
        return intensity_;
      }
      /**
       * <pre>
       * 激光强度；无强度信息时置为 0。
       * </pre>
       *
       * <code>float intensity = 4;</code>
       * @param value The intensity to set.
       * @return This builder for chaining.
       */
      public Builder setIntensity(float value) {
        
        intensity_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 激光强度；无强度信息时置为 0。
       * </pre>
       *
       * <code>float intensity = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearIntensity() {
        
        intensity_ = 0F;
        onChanged();
        return this;
      }

      private int ring_ ;
      /**
       * <pre>
       * 激光雷达线束/通道编号；无该信息时置为 0。
       * </pre>
       *
       * <code>uint32 ring = 5;</code>
       * @return The ring.
       */
      @java.lang.Override
      public int getRing() {
        return ring_;
      }
      /**
       * <pre>
       * 激光雷达线束/通道编号；无该信息时置为 0。
       * </pre>
       *
       * <code>uint32 ring = 5;</code>
       * @param value The ring to set.
       * @return This builder for chaining.
       */
      public Builder setRing(int value) {
        
        ring_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 激光雷达线束/通道编号；无该信息时置为 0。
       * </pre>
       *
       * <code>uint32 ring = 5;</code>
       * @return This builder for chaining.
       */
      public Builder clearRing() {
        
        ring_ = 0;
        onChanged();
        return this;
      }

      private double timeOffset_ ;
      /**
       * <pre>
       * 相对地图时间戳的时间偏移，单位：秒；无该信息时置为 0。
       * </pre>
       *
       * <code>double time_offset = 6;</code>
       * @return The timeOffset.
       */
      @java.lang.Override
      public double getTimeOffset() {
        return timeOffset_;
      }
      /**
       * <pre>
       * 相对地图时间戳的时间偏移，单位：秒；无该信息时置为 0。
       * </pre>
       *
       * <code>double time_offset = 6;</code>
       * @param value The timeOffset to set.
       * @return This builder for chaining.
       */
      public Builder setTimeOffset(double value) {
        
        timeOffset_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 相对地图时间戳的时间偏移，单位：秒；无该信息时置为 0。
       * </pre>
       *
       * <code>double time_offset = 6;</code>
       * @return This builder for chaining.
       */
      public Builder clearTimeOffset() {
        
        timeOffset_ = 0D;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:cmvr.msgs.AgvMapPointSample3D)
    }

    // @@protoc_insertion_point(class_scope:cmvr.msgs.AgvMapPointSample3D)
    private static final cmvr.msgs.Agv.AgvMapPointSample3D DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new cmvr.msgs.Agv.AgvMapPointSample3D();
    }

    public static cmvr.msgs.Agv.AgvMapPointSample3D getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<AgvMapPointSample3D>
        PARSER = new com.google.protobuf.AbstractParser<AgvMapPointSample3D>() {
      @java.lang.Override
      public AgvMapPointSample3D parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (com.google.protobuf.UninitializedMessageException e) {
          throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(e)
              .setUnfinishedMessage(builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

    public static com.google.protobuf.Parser<AgvMapPointSample3D> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<AgvMapPointSample3D> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public cmvr.msgs.Agv.AgvMapPointSample3D getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface AgvMapVoxel3DOrBuilder extends
      // @@protoc_insertion_point(interface_extends:cmvr.msgs.AgvMapVoxel3D)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * 体素 X 索引。
     * </pre>
     *
     * <code>int32 x = 1;</code>
     * @return The x.
     */
    int getX();

    /**
     * <pre>
     * 体素 Y 索引。
     * </pre>
     *
     * <code>int32 y = 2;</code>
     * @return The y.
     */
    int getY();

    /**
     * <pre>
     * 体素 Z 索引。
     * </pre>
     *
     * <code>int32 z = 3;</code>
     * @return The z.
     */
    int getZ();

    /**
     * <pre>
     * 占据概率，范围：[0, 1]；未知时置为 -1。
     * </pre>
     *
     * <code>float probability = 4;</code>
     * @return The probability.
     */
    float getProbability();
  }
  /**
   * <pre>
   * 统一 3D 体素。体素索引基于 AgvUnifiedMap3D.voxel_resolution。
   * </pre>
   *
   * Protobuf type {@code cmvr.msgs.AgvMapVoxel3D}
   */
  public static final class AgvMapVoxel3D extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:cmvr.msgs.AgvMapVoxel3D)
      AgvMapVoxel3DOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use AgvMapVoxel3D.newBuilder() to construct.
    private AgvMapVoxel3D(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private AgvMapVoxel3D() {
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new AgvMapVoxel3D();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvMapVoxel3D_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvMapVoxel3D_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              cmvr.msgs.Agv.AgvMapVoxel3D.class, cmvr.msgs.Agv.AgvMapVoxel3D.Builder.class);
    }

    public static final int X_FIELD_NUMBER = 1;
    private int x_;
    /**
     * <pre>
     * 体素 X 索引。
     * </pre>
     *
     * <code>int32 x = 1;</code>
     * @return The x.
     */
    @java.lang.Override
    public int getX() {
      return x_;
    }

    public static final int Y_FIELD_NUMBER = 2;
    private int y_;
    /**
     * <pre>
     * 体素 Y 索引。
     * </pre>
     *
     * <code>int32 y = 2;</code>
     * @return The y.
     */
    @java.lang.Override
    public int getY() {
      return y_;
    }

    public static final int Z_FIELD_NUMBER = 3;
    private int z_;
    /**
     * <pre>
     * 体素 Z 索引。
     * </pre>
     *
     * <code>int32 z = 3;</code>
     * @return The z.
     */
    @java.lang.Override
    public int getZ() {
      return z_;
    }

    public static final int PROBABILITY_FIELD_NUMBER = 4;
    private float probability_;
    /**
     * <pre>
     * 占据概率，范围：[0, 1]；未知时置为 -1。
     * </pre>
     *
     * <code>float probability = 4;</code>
     * @return The probability.
     */
    @java.lang.Override
    public float getProbability() {
      return probability_;
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (x_ != 0) {
        output.writeInt32(1, x_);
      }
      if (y_ != 0) {
        output.writeInt32(2, y_);
      }
      if (z_ != 0) {
        output.writeInt32(3, z_);
      }
      if (java.lang.Float.floatToRawIntBits(probability_) != 0) {
        output.writeFloat(4, probability_);
      }
      getUnknownFields().writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (x_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, x_);
      }
      if (y_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(2, y_);
      }
      if (z_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(3, z_);
      }
      if (java.lang.Float.floatToRawIntBits(probability_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeFloatSize(4, probability_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof cmvr.msgs.Agv.AgvMapVoxel3D)) {
        return super.equals(obj);
      }
      cmvr.msgs.Agv.AgvMapVoxel3D other = (cmvr.msgs.Agv.AgvMapVoxel3D) obj;

      if (getX()
          != other.getX()) return false;
      if (getY()
          != other.getY()) return false;
      if (getZ()
          != other.getZ()) return false;
      if (java.lang.Float.floatToIntBits(getProbability())
          != java.lang.Float.floatToIntBits(
              other.getProbability())) return false;
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + X_FIELD_NUMBER;
      hash = (53 * hash) + getX();
      hash = (37 * hash) + Y_FIELD_NUMBER;
      hash = (53 * hash) + getY();
      hash = (37 * hash) + Z_FIELD_NUMBER;
      hash = (53 * hash) + getZ();
      hash = (37 * hash) + PROBABILITY_FIELD_NUMBER;
      hash = (53 * hash) + java.lang.Float.floatToIntBits(
          getProbability());
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static cmvr.msgs.Agv.AgvMapVoxel3D parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.msgs.Agv.AgvMapVoxel3D parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvMapVoxel3D parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.msgs.Agv.AgvMapVoxel3D parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvMapVoxel3D parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.msgs.Agv.AgvMapVoxel3D parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvMapVoxel3D parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cmvr.msgs.Agv.AgvMapVoxel3D parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvMapVoxel3D parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static cmvr.msgs.Agv.AgvMapVoxel3D parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvMapVoxel3D parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cmvr.msgs.Agv.AgvMapVoxel3D parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(cmvr.msgs.Agv.AgvMapVoxel3D prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * 统一 3D 体素。体素索引基于 AgvUnifiedMap3D.voxel_resolution。
     * </pre>
     *
     * Protobuf type {@code cmvr.msgs.AgvMapVoxel3D}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:cmvr.msgs.AgvMapVoxel3D)
        cmvr.msgs.Agv.AgvMapVoxel3DOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvMapVoxel3D_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvMapVoxel3D_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                cmvr.msgs.Agv.AgvMapVoxel3D.class, cmvr.msgs.Agv.AgvMapVoxel3D.Builder.class);
      }

      // Construct using cmvr.msgs.Agv.AgvMapVoxel3D.newBuilder()
      private Builder() {

      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        x_ = 0;

        y_ = 0;

        z_ = 0;

        probability_ = 0F;

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvMapVoxel3D_descriptor;
      }

      @java.lang.Override
      public cmvr.msgs.Agv.AgvMapVoxel3D getDefaultInstanceForType() {
        return cmvr.msgs.Agv.AgvMapVoxel3D.getDefaultInstance();
      }

      @java.lang.Override
      public cmvr.msgs.Agv.AgvMapVoxel3D build() {
        cmvr.msgs.Agv.AgvMapVoxel3D result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public cmvr.msgs.Agv.AgvMapVoxel3D buildPartial() {
        cmvr.msgs.Agv.AgvMapVoxel3D result = new cmvr.msgs.Agv.AgvMapVoxel3D(this);
        result.x_ = x_;
        result.y_ = y_;
        result.z_ = z_;
        result.probability_ = probability_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof cmvr.msgs.Agv.AgvMapVoxel3D) {
          return mergeFrom((cmvr.msgs.Agv.AgvMapVoxel3D)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(cmvr.msgs.Agv.AgvMapVoxel3D other) {
        if (other == cmvr.msgs.Agv.AgvMapVoxel3D.getDefaultInstance()) return this;
        if (other.getX() != 0) {
          setX(other.getX());
        }
        if (other.getY() != 0) {
          setY(other.getY());
        }
        if (other.getZ() != 0) {
          setZ(other.getZ());
        }
        if (other.getProbability() != 0F) {
          setProbability(other.getProbability());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 8: {
                x_ = input.readInt32();

                break;
              } // case 8
              case 16: {
                y_ = input.readInt32();

                break;
              } // case 16
              case 24: {
                z_ = input.readInt32();

                break;
              } // case 24
              case 37: {
                probability_ = input.readFloat();

                break;
              } // case 37
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }

      private int x_ ;
      /**
       * <pre>
       * 体素 X 索引。
       * </pre>
       *
       * <code>int32 x = 1;</code>
       * @return The x.
       */
      @java.lang.Override
      public int getX() {
        return x_;
      }
      /**
       * <pre>
       * 体素 X 索引。
       * </pre>
       *
       * <code>int32 x = 1;</code>
       * @param value The x to set.
       * @return This builder for chaining.
       */
      public Builder setX(int value) {
        
        x_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 体素 X 索引。
       * </pre>
       *
       * <code>int32 x = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearX() {
        
        x_ = 0;
        onChanged();
        return this;
      }

      private int y_ ;
      /**
       * <pre>
       * 体素 Y 索引。
       * </pre>
       *
       * <code>int32 y = 2;</code>
       * @return The y.
       */
      @java.lang.Override
      public int getY() {
        return y_;
      }
      /**
       * <pre>
       * 体素 Y 索引。
       * </pre>
       *
       * <code>int32 y = 2;</code>
       * @param value The y to set.
       * @return This builder for chaining.
       */
      public Builder setY(int value) {
        
        y_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 体素 Y 索引。
       * </pre>
       *
       * <code>int32 y = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearY() {
        
        y_ = 0;
        onChanged();
        return this;
      }

      private int z_ ;
      /**
       * <pre>
       * 体素 Z 索引。
       * </pre>
       *
       * <code>int32 z = 3;</code>
       * @return The z.
       */
      @java.lang.Override
      public int getZ() {
        return z_;
      }
      /**
       * <pre>
       * 体素 Z 索引。
       * </pre>
       *
       * <code>int32 z = 3;</code>
       * @param value The z to set.
       * @return This builder for chaining.
       */
      public Builder setZ(int value) {
        
        z_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 体素 Z 索引。
       * </pre>
       *
       * <code>int32 z = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearZ() {
        
        z_ = 0;
        onChanged();
        return this;
      }

      private float probability_ ;
      /**
       * <pre>
       * 占据概率，范围：[0, 1]；未知时置为 -1。
       * </pre>
       *
       * <code>float probability = 4;</code>
       * @return The probability.
       */
      @java.lang.Override
      public float getProbability() {
        return probability_;
      }
      /**
       * <pre>
       * 占据概率，范围：[0, 1]；未知时置为 -1。
       * </pre>
       *
       * <code>float probability = 4;</code>
       * @param value The probability to set.
       * @return This builder for chaining.
       */
      public Builder setProbability(float value) {
        
        probability_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 占据概率，范围：[0, 1]；未知时置为 -1。
       * </pre>
       *
       * <code>float probability = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearProbability() {
        
        probability_ = 0F;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:cmvr.msgs.AgvMapVoxel3D)
    }

    // @@protoc_insertion_point(class_scope:cmvr.msgs.AgvMapVoxel3D)
    private static final cmvr.msgs.Agv.AgvMapVoxel3D DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new cmvr.msgs.Agv.AgvMapVoxel3D();
    }

    public static cmvr.msgs.Agv.AgvMapVoxel3D getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<AgvMapVoxel3D>
        PARSER = new com.google.protobuf.AbstractParser<AgvMapVoxel3D>() {
      @java.lang.Override
      public AgvMapVoxel3D parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (com.google.protobuf.UninitializedMessageException e) {
          throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(e)
              .setUnfinishedMessage(builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

    public static com.google.protobuf.Parser<AgvMapVoxel3D> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<AgvMapVoxel3D> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public cmvr.msgs.Agv.AgvMapVoxel3D getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface AgvMapPlane3DOrBuilder extends
      // @@protoc_insertion_point(interface_extends:cmvr.msgs.AgvMapPlane3D)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * 平面中心点，单位：米。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvMapPoint3D center = 1;</code>
     * @return Whether the center field is set.
     */
    boolean hasCenter();
    /**
     * <pre>
     * 平面中心点，单位：米。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvMapPoint3D center = 1;</code>
     * @return The center.
     */
    cmvr.msgs.Agv.AgvMapPoint3D getCenter();
    /**
     * <pre>
     * 平面中心点，单位：米。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvMapPoint3D center = 1;</code>
     */
    cmvr.msgs.Agv.AgvMapPoint3DOrBuilder getCenterOrBuilder();

    /**
     * <pre>
     * 平面单位法向量。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvMapPoint3D normal = 2;</code>
     * @return Whether the normal field is set.
     */
    boolean hasNormal();
    /**
     * <pre>
     * 平面单位法向量。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvMapPoint3D normal = 2;</code>
     * @return The normal.
     */
    cmvr.msgs.Agv.AgvMapPoint3D getNormal();
    /**
     * <pre>
     * 平面单位法向量。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvMapPoint3D normal = 2;</code>
     */
    cmvr.msgs.Agv.AgvMapPoint3DOrBuilder getNormalOrBuilder();

    /**
     * <pre>
     * 平面方程偏移量，单位：米。
     * </pre>
     *
     * <code>double d = 3;</code>
     * @return The d.
     */
    double getD();

    /**
     * <pre>
     * 平面特征近似半径，单位：米。
     * </pre>
     *
     * <code>double radius = 4;</code>
     * @return The radius.
     */
    double getRadius();
  }
  /**
   * <pre>
   * 统一 3D 平面特征。平面方程：
   * normal.x * x + normal.y * y + normal.z * z + d = 0。
   * </pre>
   *
   * Protobuf type {@code cmvr.msgs.AgvMapPlane3D}
   */
  public static final class AgvMapPlane3D extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:cmvr.msgs.AgvMapPlane3D)
      AgvMapPlane3DOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use AgvMapPlane3D.newBuilder() to construct.
    private AgvMapPlane3D(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private AgvMapPlane3D() {
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new AgvMapPlane3D();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvMapPlane3D_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvMapPlane3D_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              cmvr.msgs.Agv.AgvMapPlane3D.class, cmvr.msgs.Agv.AgvMapPlane3D.Builder.class);
    }

    public static final int CENTER_FIELD_NUMBER = 1;
    private cmvr.msgs.Agv.AgvMapPoint3D center_;
    /**
     * <pre>
     * 平面中心点，单位：米。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvMapPoint3D center = 1;</code>
     * @return Whether the center field is set.
     */
    @java.lang.Override
    public boolean hasCenter() {
      return center_ != null;
    }
    /**
     * <pre>
     * 平面中心点，单位：米。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvMapPoint3D center = 1;</code>
     * @return The center.
     */
    @java.lang.Override
    public cmvr.msgs.Agv.AgvMapPoint3D getCenter() {
      return center_ == null ? cmvr.msgs.Agv.AgvMapPoint3D.getDefaultInstance() : center_;
    }
    /**
     * <pre>
     * 平面中心点，单位：米。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvMapPoint3D center = 1;</code>
     */
    @java.lang.Override
    public cmvr.msgs.Agv.AgvMapPoint3DOrBuilder getCenterOrBuilder() {
      return getCenter();
    }

    public static final int NORMAL_FIELD_NUMBER = 2;
    private cmvr.msgs.Agv.AgvMapPoint3D normal_;
    /**
     * <pre>
     * 平面单位法向量。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvMapPoint3D normal = 2;</code>
     * @return Whether the normal field is set.
     */
    @java.lang.Override
    public boolean hasNormal() {
      return normal_ != null;
    }
    /**
     * <pre>
     * 平面单位法向量。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvMapPoint3D normal = 2;</code>
     * @return The normal.
     */
    @java.lang.Override
    public cmvr.msgs.Agv.AgvMapPoint3D getNormal() {
      return normal_ == null ? cmvr.msgs.Agv.AgvMapPoint3D.getDefaultInstance() : normal_;
    }
    /**
     * <pre>
     * 平面单位法向量。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvMapPoint3D normal = 2;</code>
     */
    @java.lang.Override
    public cmvr.msgs.Agv.AgvMapPoint3DOrBuilder getNormalOrBuilder() {
      return getNormal();
    }

    public static final int D_FIELD_NUMBER = 3;
    private double d_;
    /**
     * <pre>
     * 平面方程偏移量，单位：米。
     * </pre>
     *
     * <code>double d = 3;</code>
     * @return The d.
     */
    @java.lang.Override
    public double getD() {
      return d_;
    }

    public static final int RADIUS_FIELD_NUMBER = 4;
    private double radius_;
    /**
     * <pre>
     * 平面特征近似半径，单位：米。
     * </pre>
     *
     * <code>double radius = 4;</code>
     * @return The radius.
     */
    @java.lang.Override
    public double getRadius() {
      return radius_;
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (center_ != null) {
        output.writeMessage(1, getCenter());
      }
      if (normal_ != null) {
        output.writeMessage(2, getNormal());
      }
      if (java.lang.Double.doubleToRawLongBits(d_) != 0) {
        output.writeDouble(3, d_);
      }
      if (java.lang.Double.doubleToRawLongBits(radius_) != 0) {
        output.writeDouble(4, radius_);
      }
      getUnknownFields().writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (center_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getCenter());
      }
      if (normal_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, getNormal());
      }
      if (java.lang.Double.doubleToRawLongBits(d_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(3, d_);
      }
      if (java.lang.Double.doubleToRawLongBits(radius_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(4, radius_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof cmvr.msgs.Agv.AgvMapPlane3D)) {
        return super.equals(obj);
      }
      cmvr.msgs.Agv.AgvMapPlane3D other = (cmvr.msgs.Agv.AgvMapPlane3D) obj;

      if (hasCenter() != other.hasCenter()) return false;
      if (hasCenter()) {
        if (!getCenter()
            .equals(other.getCenter())) return false;
      }
      if (hasNormal() != other.hasNormal()) return false;
      if (hasNormal()) {
        if (!getNormal()
            .equals(other.getNormal())) return false;
      }
      if (java.lang.Double.doubleToLongBits(getD())
          != java.lang.Double.doubleToLongBits(
              other.getD())) return false;
      if (java.lang.Double.doubleToLongBits(getRadius())
          != java.lang.Double.doubleToLongBits(
              other.getRadius())) return false;
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasCenter()) {
        hash = (37 * hash) + CENTER_FIELD_NUMBER;
        hash = (53 * hash) + getCenter().hashCode();
      }
      if (hasNormal()) {
        hash = (37 * hash) + NORMAL_FIELD_NUMBER;
        hash = (53 * hash) + getNormal().hashCode();
      }
      hash = (37 * hash) + D_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getD()));
      hash = (37 * hash) + RADIUS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getRadius()));
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static cmvr.msgs.Agv.AgvMapPlane3D parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.msgs.Agv.AgvMapPlane3D parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvMapPlane3D parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.msgs.Agv.AgvMapPlane3D parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvMapPlane3D parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.msgs.Agv.AgvMapPlane3D parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvMapPlane3D parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cmvr.msgs.Agv.AgvMapPlane3D parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvMapPlane3D parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static cmvr.msgs.Agv.AgvMapPlane3D parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvMapPlane3D parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cmvr.msgs.Agv.AgvMapPlane3D parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(cmvr.msgs.Agv.AgvMapPlane3D prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * 统一 3D 平面特征。平面方程：
     * normal.x * x + normal.y * y + normal.z * z + d = 0。
     * </pre>
     *
     * Protobuf type {@code cmvr.msgs.AgvMapPlane3D}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:cmvr.msgs.AgvMapPlane3D)
        cmvr.msgs.Agv.AgvMapPlane3DOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvMapPlane3D_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvMapPlane3D_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                cmvr.msgs.Agv.AgvMapPlane3D.class, cmvr.msgs.Agv.AgvMapPlane3D.Builder.class);
      }

      // Construct using cmvr.msgs.Agv.AgvMapPlane3D.newBuilder()
      private Builder() {

      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (centerBuilder_ == null) {
          center_ = null;
        } else {
          center_ = null;
          centerBuilder_ = null;
        }
        if (normalBuilder_ == null) {
          normal_ = null;
        } else {
          normal_ = null;
          normalBuilder_ = null;
        }
        d_ = 0D;

        radius_ = 0D;

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvMapPlane3D_descriptor;
      }

      @java.lang.Override
      public cmvr.msgs.Agv.AgvMapPlane3D getDefaultInstanceForType() {
        return cmvr.msgs.Agv.AgvMapPlane3D.getDefaultInstance();
      }

      @java.lang.Override
      public cmvr.msgs.Agv.AgvMapPlane3D build() {
        cmvr.msgs.Agv.AgvMapPlane3D result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public cmvr.msgs.Agv.AgvMapPlane3D buildPartial() {
        cmvr.msgs.Agv.AgvMapPlane3D result = new cmvr.msgs.Agv.AgvMapPlane3D(this);
        if (centerBuilder_ == null) {
          result.center_ = center_;
        } else {
          result.center_ = centerBuilder_.build();
        }
        if (normalBuilder_ == null) {
          result.normal_ = normal_;
        } else {
          result.normal_ = normalBuilder_.build();
        }
        result.d_ = d_;
        result.radius_ = radius_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof cmvr.msgs.Agv.AgvMapPlane3D) {
          return mergeFrom((cmvr.msgs.Agv.AgvMapPlane3D)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(cmvr.msgs.Agv.AgvMapPlane3D other) {
        if (other == cmvr.msgs.Agv.AgvMapPlane3D.getDefaultInstance()) return this;
        if (other.hasCenter()) {
          mergeCenter(other.getCenter());
        }
        if (other.hasNormal()) {
          mergeNormal(other.getNormal());
        }
        if (other.getD() != 0D) {
          setD(other.getD());
        }
        if (other.getRadius() != 0D) {
          setRadius(other.getRadius());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 10: {
                input.readMessage(
                    getCenterFieldBuilder().getBuilder(),
                    extensionRegistry);

                break;
              } // case 10
              case 18: {
                input.readMessage(
                    getNormalFieldBuilder().getBuilder(),
                    extensionRegistry);

                break;
              } // case 18
              case 25: {
                d_ = input.readDouble();

                break;
              } // case 25
              case 33: {
                radius_ = input.readDouble();

                break;
              } // case 33
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }

      private cmvr.msgs.Agv.AgvMapPoint3D center_;
      private com.google.protobuf.SingleFieldBuilderV3<
          cmvr.msgs.Agv.AgvMapPoint3D, cmvr.msgs.Agv.AgvMapPoint3D.Builder, cmvr.msgs.Agv.AgvMapPoint3DOrBuilder> centerBuilder_;
      /**
       * <pre>
       * 平面中心点，单位：米。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvMapPoint3D center = 1;</code>
       * @return Whether the center field is set.
       */
      public boolean hasCenter() {
        return centerBuilder_ != null || center_ != null;
      }
      /**
       * <pre>
       * 平面中心点，单位：米。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvMapPoint3D center = 1;</code>
       * @return The center.
       */
      public cmvr.msgs.Agv.AgvMapPoint3D getCenter() {
        if (centerBuilder_ == null) {
          return center_ == null ? cmvr.msgs.Agv.AgvMapPoint3D.getDefaultInstance() : center_;
        } else {
          return centerBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * 平面中心点，单位：米。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvMapPoint3D center = 1;</code>
       */
      public Builder setCenter(cmvr.msgs.Agv.AgvMapPoint3D value) {
        if (centerBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          center_ = value;
          onChanged();
        } else {
          centerBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       * 平面中心点，单位：米。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvMapPoint3D center = 1;</code>
       */
      public Builder setCenter(
          cmvr.msgs.Agv.AgvMapPoint3D.Builder builderForValue) {
        if (centerBuilder_ == null) {
          center_ = builderForValue.build();
          onChanged();
        } else {
          centerBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       * 平面中心点，单位：米。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvMapPoint3D center = 1;</code>
       */
      public Builder mergeCenter(cmvr.msgs.Agv.AgvMapPoint3D value) {
        if (centerBuilder_ == null) {
          if (center_ != null) {
            center_ =
              cmvr.msgs.Agv.AgvMapPoint3D.newBuilder(center_).mergeFrom(value).buildPartial();
          } else {
            center_ = value;
          }
          onChanged();
        } else {
          centerBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       * 平面中心点，单位：米。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvMapPoint3D center = 1;</code>
       */
      public Builder clearCenter() {
        if (centerBuilder_ == null) {
          center_ = null;
          onChanged();
        } else {
          center_ = null;
          centerBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       * 平面中心点，单位：米。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvMapPoint3D center = 1;</code>
       */
      public cmvr.msgs.Agv.AgvMapPoint3D.Builder getCenterBuilder() {
        
        onChanged();
        return getCenterFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * 平面中心点，单位：米。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvMapPoint3D center = 1;</code>
       */
      public cmvr.msgs.Agv.AgvMapPoint3DOrBuilder getCenterOrBuilder() {
        if (centerBuilder_ != null) {
          return centerBuilder_.getMessageOrBuilder();
        } else {
          return center_ == null ?
              cmvr.msgs.Agv.AgvMapPoint3D.getDefaultInstance() : center_;
        }
      }
      /**
       * <pre>
       * 平面中心点，单位：米。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvMapPoint3D center = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          cmvr.msgs.Agv.AgvMapPoint3D, cmvr.msgs.Agv.AgvMapPoint3D.Builder, cmvr.msgs.Agv.AgvMapPoint3DOrBuilder> 
          getCenterFieldBuilder() {
        if (centerBuilder_ == null) {
          centerBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              cmvr.msgs.Agv.AgvMapPoint3D, cmvr.msgs.Agv.AgvMapPoint3D.Builder, cmvr.msgs.Agv.AgvMapPoint3DOrBuilder>(
                  getCenter(),
                  getParentForChildren(),
                  isClean());
          center_ = null;
        }
        return centerBuilder_;
      }

      private cmvr.msgs.Agv.AgvMapPoint3D normal_;
      private com.google.protobuf.SingleFieldBuilderV3<
          cmvr.msgs.Agv.AgvMapPoint3D, cmvr.msgs.Agv.AgvMapPoint3D.Builder, cmvr.msgs.Agv.AgvMapPoint3DOrBuilder> normalBuilder_;
      /**
       * <pre>
       * 平面单位法向量。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvMapPoint3D normal = 2;</code>
       * @return Whether the normal field is set.
       */
      public boolean hasNormal() {
        return normalBuilder_ != null || normal_ != null;
      }
      /**
       * <pre>
       * 平面单位法向量。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvMapPoint3D normal = 2;</code>
       * @return The normal.
       */
      public cmvr.msgs.Agv.AgvMapPoint3D getNormal() {
        if (normalBuilder_ == null) {
          return normal_ == null ? cmvr.msgs.Agv.AgvMapPoint3D.getDefaultInstance() : normal_;
        } else {
          return normalBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * 平面单位法向量。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvMapPoint3D normal = 2;</code>
       */
      public Builder setNormal(cmvr.msgs.Agv.AgvMapPoint3D value) {
        if (normalBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          normal_ = value;
          onChanged();
        } else {
          normalBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       * 平面单位法向量。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvMapPoint3D normal = 2;</code>
       */
      public Builder setNormal(
          cmvr.msgs.Agv.AgvMapPoint3D.Builder builderForValue) {
        if (normalBuilder_ == null) {
          normal_ = builderForValue.build();
          onChanged();
        } else {
          normalBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       * 平面单位法向量。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvMapPoint3D normal = 2;</code>
       */
      public Builder mergeNormal(cmvr.msgs.Agv.AgvMapPoint3D value) {
        if (normalBuilder_ == null) {
          if (normal_ != null) {
            normal_ =
              cmvr.msgs.Agv.AgvMapPoint3D.newBuilder(normal_).mergeFrom(value).buildPartial();
          } else {
            normal_ = value;
          }
          onChanged();
        } else {
          normalBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       * 平面单位法向量。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvMapPoint3D normal = 2;</code>
       */
      public Builder clearNormal() {
        if (normalBuilder_ == null) {
          normal_ = null;
          onChanged();
        } else {
          normal_ = null;
          normalBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       * 平面单位法向量。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvMapPoint3D normal = 2;</code>
       */
      public cmvr.msgs.Agv.AgvMapPoint3D.Builder getNormalBuilder() {
        
        onChanged();
        return getNormalFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * 平面单位法向量。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvMapPoint3D normal = 2;</code>
       */
      public cmvr.msgs.Agv.AgvMapPoint3DOrBuilder getNormalOrBuilder() {
        if (normalBuilder_ != null) {
          return normalBuilder_.getMessageOrBuilder();
        } else {
          return normal_ == null ?
              cmvr.msgs.Agv.AgvMapPoint3D.getDefaultInstance() : normal_;
        }
      }
      /**
       * <pre>
       * 平面单位法向量。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvMapPoint3D normal = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          cmvr.msgs.Agv.AgvMapPoint3D, cmvr.msgs.Agv.AgvMapPoint3D.Builder, cmvr.msgs.Agv.AgvMapPoint3DOrBuilder> 
          getNormalFieldBuilder() {
        if (normalBuilder_ == null) {
          normalBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              cmvr.msgs.Agv.AgvMapPoint3D, cmvr.msgs.Agv.AgvMapPoint3D.Builder, cmvr.msgs.Agv.AgvMapPoint3DOrBuilder>(
                  getNormal(),
                  getParentForChildren(),
                  isClean());
          normal_ = null;
        }
        return normalBuilder_;
      }

      private double d_ ;
      /**
       * <pre>
       * 平面方程偏移量，单位：米。
       * </pre>
       *
       * <code>double d = 3;</code>
       * @return The d.
       */
      @java.lang.Override
      public double getD() {
        return d_;
      }
      /**
       * <pre>
       * 平面方程偏移量，单位：米。
       * </pre>
       *
       * <code>double d = 3;</code>
       * @param value The d to set.
       * @return This builder for chaining.
       */
      public Builder setD(double value) {
        
        d_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 平面方程偏移量，单位：米。
       * </pre>
       *
       * <code>double d = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearD() {
        
        d_ = 0D;
        onChanged();
        return this;
      }

      private double radius_ ;
      /**
       * <pre>
       * 平面特征近似半径，单位：米。
       * </pre>
       *
       * <code>double radius = 4;</code>
       * @return The radius.
       */
      @java.lang.Override
      public double getRadius() {
        return radius_;
      }
      /**
       * <pre>
       * 平面特征近似半径，单位：米。
       * </pre>
       *
       * <code>double radius = 4;</code>
       * @param value The radius to set.
       * @return This builder for chaining.
       */
      public Builder setRadius(double value) {
        
        radius_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 平面特征近似半径，单位：米。
       * </pre>
       *
       * <code>double radius = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearRadius() {
        
        radius_ = 0D;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:cmvr.msgs.AgvMapPlane3D)
    }

    // @@protoc_insertion_point(class_scope:cmvr.msgs.AgvMapPlane3D)
    private static final cmvr.msgs.Agv.AgvMapPlane3D DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new cmvr.msgs.Agv.AgvMapPlane3D();
    }

    public static cmvr.msgs.Agv.AgvMapPlane3D getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<AgvMapPlane3D>
        PARSER = new com.google.protobuf.AbstractParser<AgvMapPlane3D>() {
      @java.lang.Override
      public AgvMapPlane3D parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (com.google.protobuf.UninitializedMessageException e) {
          throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(e)
              .setUnfinishedMessage(builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

    public static com.google.protobuf.Parser<AgvMapPlane3D> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<AgvMapPlane3D> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public cmvr.msgs.Agv.AgvMapPlane3D getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface AgvMapObjectOrBuilder extends
      // @@protoc_insertion_point(interface_extends:cmvr.msgs.AgvMapObject)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * 对象稳定 id 或名称。
     * </pre>
     *
     * <code>string id = 1;</code>
     * @return The id.
     */
    java.lang.String getId();
    /**
     * <pre>
     * 对象稳定 id 或名称。
     * </pre>
     *
     * <code>string id = 1;</code>
     * @return The bytes for id.
     */
    com.google.protobuf.ByteString
        getIdBytes();

    /**
     * <pre>
     * 对象类型。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvMapObjectType type = 2;</code>
     * @return The enum numeric value on the wire for type.
     */
    int getTypeValue();
    /**
     * <pre>
     * 对象类型。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvMapObjectType type = 2;</code>
     * @return The type.
     */
    cmvr.msgs.Agv.AgvMapObjectType getType();

    /**
     * <pre>
     * 对象几何点。点对象使用 1 个点，线对象使用多个点，区域对象使用多边形顶点。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapPoint3D points = 3;</code>
     */
    java.util.List<cmvr.msgs.Agv.AgvMapPoint3D> 
        getPointsList();
    /**
     * <pre>
     * 对象几何点。点对象使用 1 个点，线对象使用多个点，区域对象使用多边形顶点。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapPoint3D points = 3;</code>
     */
    cmvr.msgs.Agv.AgvMapPoint3D getPoints(int index);
    /**
     * <pre>
     * 对象几何点。点对象使用 1 个点，线对象使用多个点，区域对象使用多边形顶点。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapPoint3D points = 3;</code>
     */
    int getPointsCount();
    /**
     * <pre>
     * 对象几何点。点对象使用 1 个点，线对象使用多个点，区域对象使用多边形顶点。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapPoint3D points = 3;</code>
     */
    java.util.List<? extends cmvr.msgs.Agv.AgvMapPoint3DOrBuilder> 
        getPointsOrBuilderList();
    /**
     * <pre>
     * 对象几何点。点对象使用 1 个点，线对象使用多个点，区域对象使用多边形顶点。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapPoint3D points = 3;</code>
     */
    cmvr.msgs.Agv.AgvMapPoint3DOrBuilder getPointsOrBuilder(
        int index);

    /**
     * <pre>
     * 朝向角，单位：弧度；不适用时置为 0。
     * </pre>
     *
     * <code>double heading = 4;</code>
     * @return The heading.
     */
    double getHeading();

    /**
     * <pre>
     * 额外归一化属性。为兼容不同 AGV，属性值统一使用字符串。
     * </pre>
     *
     * <code>map&lt;string, string&gt; properties = 5;</code>
     */
    int getPropertiesCount();
    /**
     * <pre>
     * 额外归一化属性。为兼容不同 AGV，属性值统一使用字符串。
     * </pre>
     *
     * <code>map&lt;string, string&gt; properties = 5;</code>
     */
    boolean containsProperties(
        java.lang.String key);
    /**
     * Use {@link #getPropertiesMap()} instead.
     */
    @java.lang.Deprecated
    java.util.Map<java.lang.String, java.lang.String>
    getProperties();
    /**
     * <pre>
     * 额外归一化属性。为兼容不同 AGV，属性值统一使用字符串。
     * </pre>
     *
     * <code>map&lt;string, string&gt; properties = 5;</code>
     */
    java.util.Map<java.lang.String, java.lang.String>
    getPropertiesMap();
    /**
     * <pre>
     * 额外归一化属性。为兼容不同 AGV，属性值统一使用字符串。
     * </pre>
     *
     * <code>map&lt;string, string&gt; properties = 5;</code>
     */

    /* nullable */
java.lang.String getPropertiesOrDefault(
        java.lang.String key,
        /* nullable */
java.lang.String defaultValue);
    /**
     * <pre>
     * 额外归一化属性。为兼容不同 AGV，属性值统一使用字符串。
     * </pre>
     *
     * <code>map&lt;string, string&gt; properties = 5;</code>
     */

    java.lang.String getPropertiesOrThrow(
        java.lang.String key);
  }
  /**
   * <pre>
   * 统一语义对象。几何点均使用地图坐标系，单位：米。
   * </pre>
   *
   * Protobuf type {@code cmvr.msgs.AgvMapObject}
   */
  public static final class AgvMapObject extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:cmvr.msgs.AgvMapObject)
      AgvMapObjectOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use AgvMapObject.newBuilder() to construct.
    private AgvMapObject(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private AgvMapObject() {
      id_ = "";
      type_ = 0;
      points_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new AgvMapObject();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvMapObject_descriptor;
    }

    @SuppressWarnings({"rawtypes"})
    @java.lang.Override
    protected com.google.protobuf.MapField internalGetMapField(
        int number) {
      switch (number) {
        case 5:
          return internalGetProperties();
        default:
          throw new RuntimeException(
              "Invalid map field number: " + number);
      }
    }
    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvMapObject_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              cmvr.msgs.Agv.AgvMapObject.class, cmvr.msgs.Agv.AgvMapObject.Builder.class);
    }

    public static final int ID_FIELD_NUMBER = 1;
    private volatile java.lang.Object id_;
    /**
     * <pre>
     * 对象稳定 id 或名称。
     * </pre>
     *
     * <code>string id = 1;</code>
     * @return The id.
     */
    @java.lang.Override
    public java.lang.String getId() {
      java.lang.Object ref = id_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        id_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * 对象稳定 id 或名称。
     * </pre>
     *
     * <code>string id = 1;</code>
     * @return The bytes for id.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getIdBytes() {
      java.lang.Object ref = id_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        id_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int TYPE_FIELD_NUMBER = 2;
    private int type_;
    /**
     * <pre>
     * 对象类型。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvMapObjectType type = 2;</code>
     * @return The enum numeric value on the wire for type.
     */
    @java.lang.Override public int getTypeValue() {
      return type_;
    }
    /**
     * <pre>
     * 对象类型。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvMapObjectType type = 2;</code>
     * @return The type.
     */
    @java.lang.Override public cmvr.msgs.Agv.AgvMapObjectType getType() {
      @SuppressWarnings("deprecation")
      cmvr.msgs.Agv.AgvMapObjectType result = cmvr.msgs.Agv.AgvMapObjectType.valueOf(type_);
      return result == null ? cmvr.msgs.Agv.AgvMapObjectType.UNRECOGNIZED : result;
    }

    public static final int POINTS_FIELD_NUMBER = 3;
    private java.util.List<cmvr.msgs.Agv.AgvMapPoint3D> points_;
    /**
     * <pre>
     * 对象几何点。点对象使用 1 个点，线对象使用多个点，区域对象使用多边形顶点。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapPoint3D points = 3;</code>
     */
    @java.lang.Override
    public java.util.List<cmvr.msgs.Agv.AgvMapPoint3D> getPointsList() {
      return points_;
    }
    /**
     * <pre>
     * 对象几何点。点对象使用 1 个点，线对象使用多个点，区域对象使用多边形顶点。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapPoint3D points = 3;</code>
     */
    @java.lang.Override
    public java.util.List<? extends cmvr.msgs.Agv.AgvMapPoint3DOrBuilder> 
        getPointsOrBuilderList() {
      return points_;
    }
    /**
     * <pre>
     * 对象几何点。点对象使用 1 个点，线对象使用多个点，区域对象使用多边形顶点。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapPoint3D points = 3;</code>
     */
    @java.lang.Override
    public int getPointsCount() {
      return points_.size();
    }
    /**
     * <pre>
     * 对象几何点。点对象使用 1 个点，线对象使用多个点，区域对象使用多边形顶点。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapPoint3D points = 3;</code>
     */
    @java.lang.Override
    public cmvr.msgs.Agv.AgvMapPoint3D getPoints(int index) {
      return points_.get(index);
    }
    /**
     * <pre>
     * 对象几何点。点对象使用 1 个点，线对象使用多个点，区域对象使用多边形顶点。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapPoint3D points = 3;</code>
     */
    @java.lang.Override
    public cmvr.msgs.Agv.AgvMapPoint3DOrBuilder getPointsOrBuilder(
        int index) {
      return points_.get(index);
    }

    public static final int HEADING_FIELD_NUMBER = 4;
    private double heading_;
    /**
     * <pre>
     * 朝向角，单位：弧度；不适用时置为 0。
     * </pre>
     *
     * <code>double heading = 4;</code>
     * @return The heading.
     */
    @java.lang.Override
    public double getHeading() {
      return heading_;
    }

    public static final int PROPERTIES_FIELD_NUMBER = 5;
    private static final class PropertiesDefaultEntryHolder {
      static final com.google.protobuf.MapEntry<
          java.lang.String, java.lang.String> defaultEntry =
              com.google.protobuf.MapEntry
              .<java.lang.String, java.lang.String>newDefaultInstance(
                  cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvMapObject_PropertiesEntry_descriptor, 
                  com.google.protobuf.WireFormat.FieldType.STRING,
                  "",
                  com.google.protobuf.WireFormat.FieldType.STRING,
                  "");
    }
    private com.google.protobuf.MapField<
        java.lang.String, java.lang.String> properties_;
    private com.google.protobuf.MapField<java.lang.String, java.lang.String>
    internalGetProperties() {
      if (properties_ == null) {
        return com.google.protobuf.MapField.emptyMapField(
            PropertiesDefaultEntryHolder.defaultEntry);
      }
      return properties_;
    }

    public int getPropertiesCount() {
      return internalGetProperties().getMap().size();
    }
    /**
     * <pre>
     * 额外归一化属性。为兼容不同 AGV，属性值统一使用字符串。
     * </pre>
     *
     * <code>map&lt;string, string&gt; properties = 5;</code>
     */

    @java.lang.Override
    public boolean containsProperties(
        java.lang.String key) {
      if (key == null) { throw new NullPointerException("map key"); }
      return internalGetProperties().getMap().containsKey(key);
    }
    /**
     * Use {@link #getPropertiesMap()} instead.
     */
    @java.lang.Override
    @java.lang.Deprecated
    public java.util.Map<java.lang.String, java.lang.String> getProperties() {
      return getPropertiesMap();
    }
    /**
     * <pre>
     * 额外归一化属性。为兼容不同 AGV，属性值统一使用字符串。
     * </pre>
     *
     * <code>map&lt;string, string&gt; properties = 5;</code>
     */
    @java.lang.Override

    public java.util.Map<java.lang.String, java.lang.String> getPropertiesMap() {
      return internalGetProperties().getMap();
    }
    /**
     * <pre>
     * 额外归一化属性。为兼容不同 AGV，属性值统一使用字符串。
     * </pre>
     *
     * <code>map&lt;string, string&gt; properties = 5;</code>
     */
    @java.lang.Override

    public java.lang.String getPropertiesOrDefault(
        java.lang.String key,
        java.lang.String defaultValue) {
      if (key == null) { throw new NullPointerException("map key"); }
      java.util.Map<java.lang.String, java.lang.String> map =
          internalGetProperties().getMap();
      return map.containsKey(key) ? map.get(key) : defaultValue;
    }
    /**
     * <pre>
     * 额外归一化属性。为兼容不同 AGV，属性值统一使用字符串。
     * </pre>
     *
     * <code>map&lt;string, string&gt; properties = 5;</code>
     */
    @java.lang.Override

    public java.lang.String getPropertiesOrThrow(
        java.lang.String key) {
      if (key == null) { throw new NullPointerException("map key"); }
      java.util.Map<java.lang.String, java.lang.String> map =
          internalGetProperties().getMap();
      if (!map.containsKey(key)) {
        throw new java.lang.IllegalArgumentException();
      }
      return map.get(key);
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(id_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, id_);
      }
      if (type_ != cmvr.msgs.Agv.AgvMapObjectType.AGV_MAP_OBJECT_UNSPECIFIED.getNumber()) {
        output.writeEnum(2, type_);
      }
      for (int i = 0; i < points_.size(); i++) {
        output.writeMessage(3, points_.get(i));
      }
      if (java.lang.Double.doubleToRawLongBits(heading_) != 0) {
        output.writeDouble(4, heading_);
      }
      com.google.protobuf.GeneratedMessageV3
        .serializeStringMapTo(
          output,
          internalGetProperties(),
          PropertiesDefaultEntryHolder.defaultEntry,
          5);
      getUnknownFields().writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(id_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, id_);
      }
      if (type_ != cmvr.msgs.Agv.AgvMapObjectType.AGV_MAP_OBJECT_UNSPECIFIED.getNumber()) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(2, type_);
      }
      for (int i = 0; i < points_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, points_.get(i));
      }
      if (java.lang.Double.doubleToRawLongBits(heading_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(4, heading_);
      }
      for (java.util.Map.Entry<java.lang.String, java.lang.String> entry
           : internalGetProperties().getMap().entrySet()) {
        com.google.protobuf.MapEntry<java.lang.String, java.lang.String>
        properties__ = PropertiesDefaultEntryHolder.defaultEntry.newBuilderForType()
            .setKey(entry.getKey())
            .setValue(entry.getValue())
            .build();
        size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(5, properties__);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof cmvr.msgs.Agv.AgvMapObject)) {
        return super.equals(obj);
      }
      cmvr.msgs.Agv.AgvMapObject other = (cmvr.msgs.Agv.AgvMapObject) obj;

      if (!getId()
          .equals(other.getId())) return false;
      if (type_ != other.type_) return false;
      if (!getPointsList()
          .equals(other.getPointsList())) return false;
      if (java.lang.Double.doubleToLongBits(getHeading())
          != java.lang.Double.doubleToLongBits(
              other.getHeading())) return false;
      if (!internalGetProperties().equals(
          other.internalGetProperties())) return false;
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + ID_FIELD_NUMBER;
      hash = (53 * hash) + getId().hashCode();
      hash = (37 * hash) + TYPE_FIELD_NUMBER;
      hash = (53 * hash) + type_;
      if (getPointsCount() > 0) {
        hash = (37 * hash) + POINTS_FIELD_NUMBER;
        hash = (53 * hash) + getPointsList().hashCode();
      }
      hash = (37 * hash) + HEADING_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getHeading()));
      if (!internalGetProperties().getMap().isEmpty()) {
        hash = (37 * hash) + PROPERTIES_FIELD_NUMBER;
        hash = (53 * hash) + internalGetProperties().hashCode();
      }
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static cmvr.msgs.Agv.AgvMapObject parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.msgs.Agv.AgvMapObject parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvMapObject parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.msgs.Agv.AgvMapObject parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvMapObject parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.msgs.Agv.AgvMapObject parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvMapObject parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cmvr.msgs.Agv.AgvMapObject parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvMapObject parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static cmvr.msgs.Agv.AgvMapObject parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvMapObject parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cmvr.msgs.Agv.AgvMapObject parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(cmvr.msgs.Agv.AgvMapObject prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * 统一语义对象。几何点均使用地图坐标系，单位：米。
     * </pre>
     *
     * Protobuf type {@code cmvr.msgs.AgvMapObject}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:cmvr.msgs.AgvMapObject)
        cmvr.msgs.Agv.AgvMapObjectOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvMapObject_descriptor;
      }

      @SuppressWarnings({"rawtypes"})
      protected com.google.protobuf.MapField internalGetMapField(
          int number) {
        switch (number) {
          case 5:
            return internalGetProperties();
          default:
            throw new RuntimeException(
                "Invalid map field number: " + number);
        }
      }
      @SuppressWarnings({"rawtypes"})
      protected com.google.protobuf.MapField internalGetMutableMapField(
          int number) {
        switch (number) {
          case 5:
            return internalGetMutableProperties();
          default:
            throw new RuntimeException(
                "Invalid map field number: " + number);
        }
      }
      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvMapObject_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                cmvr.msgs.Agv.AgvMapObject.class, cmvr.msgs.Agv.AgvMapObject.Builder.class);
      }

      // Construct using cmvr.msgs.Agv.AgvMapObject.newBuilder()
      private Builder() {

      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        id_ = "";

        type_ = 0;

        if (pointsBuilder_ == null) {
          points_ = java.util.Collections.emptyList();
        } else {
          points_ = null;
          pointsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        heading_ = 0D;

        internalGetMutableProperties().clear();
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvMapObject_descriptor;
      }

      @java.lang.Override
      public cmvr.msgs.Agv.AgvMapObject getDefaultInstanceForType() {
        return cmvr.msgs.Agv.AgvMapObject.getDefaultInstance();
      }

      @java.lang.Override
      public cmvr.msgs.Agv.AgvMapObject build() {
        cmvr.msgs.Agv.AgvMapObject result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public cmvr.msgs.Agv.AgvMapObject buildPartial() {
        cmvr.msgs.Agv.AgvMapObject result = new cmvr.msgs.Agv.AgvMapObject(this);
        int from_bitField0_ = bitField0_;
        result.id_ = id_;
        result.type_ = type_;
        if (pointsBuilder_ == null) {
          if (((bitField0_ & 0x00000001) != 0)) {
            points_ = java.util.Collections.unmodifiableList(points_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.points_ = points_;
        } else {
          result.points_ = pointsBuilder_.build();
        }
        result.heading_ = heading_;
        result.properties_ = internalGetProperties();
        result.properties_.makeImmutable();
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof cmvr.msgs.Agv.AgvMapObject) {
          return mergeFrom((cmvr.msgs.Agv.AgvMapObject)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(cmvr.msgs.Agv.AgvMapObject other) {
        if (other == cmvr.msgs.Agv.AgvMapObject.getDefaultInstance()) return this;
        if (!other.getId().isEmpty()) {
          id_ = other.id_;
          onChanged();
        }
        if (other.type_ != 0) {
          setTypeValue(other.getTypeValue());
        }
        if (pointsBuilder_ == null) {
          if (!other.points_.isEmpty()) {
            if (points_.isEmpty()) {
              points_ = other.points_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensurePointsIsMutable();
              points_.addAll(other.points_);
            }
            onChanged();
          }
        } else {
          if (!other.points_.isEmpty()) {
            if (pointsBuilder_.isEmpty()) {
              pointsBuilder_.dispose();
              pointsBuilder_ = null;
              points_ = other.points_;
              bitField0_ = (bitField0_ & ~0x00000001);
              pointsBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getPointsFieldBuilder() : null;
            } else {
              pointsBuilder_.addAllMessages(other.points_);
            }
          }
        }
        if (other.getHeading() != 0D) {
          setHeading(other.getHeading());
        }
        internalGetMutableProperties().mergeFrom(
            other.internalGetProperties());
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 10: {
                id_ = input.readStringRequireUtf8();

                break;
              } // case 10
              case 16: {
                type_ = input.readEnum();

                break;
              } // case 16
              case 26: {
                cmvr.msgs.Agv.AgvMapPoint3D m =
                    input.readMessage(
                        cmvr.msgs.Agv.AgvMapPoint3D.parser(),
                        extensionRegistry);
                if (pointsBuilder_ == null) {
                  ensurePointsIsMutable();
                  points_.add(m);
                } else {
                  pointsBuilder_.addMessage(m);
                }
                break;
              } // case 26
              case 33: {
                heading_ = input.readDouble();

                break;
              } // case 33
              case 42: {
                com.google.protobuf.MapEntry<java.lang.String, java.lang.String>
                properties__ = input.readMessage(
                    PropertiesDefaultEntryHolder.defaultEntry.getParserForType(), extensionRegistry);
                internalGetMutableProperties().getMutableMap().put(
                    properties__.getKey(), properties__.getValue());
                break;
              } // case 42
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }
      private int bitField0_;

      private java.lang.Object id_ = "";
      /**
       * <pre>
       * 对象稳定 id 或名称。
       * </pre>
       *
       * <code>string id = 1;</code>
       * @return The id.
       */
      public java.lang.String getId() {
        java.lang.Object ref = id_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          id_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * 对象稳定 id 或名称。
       * </pre>
       *
       * <code>string id = 1;</code>
       * @return The bytes for id.
       */
      public com.google.protobuf.ByteString
          getIdBytes() {
        java.lang.Object ref = id_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          id_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * 对象稳定 id 或名称。
       * </pre>
       *
       * <code>string id = 1;</code>
       * @param value The id to set.
       * @return This builder for chaining.
       */
      public Builder setId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        id_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 对象稳定 id 或名称。
       * </pre>
       *
       * <code>string id = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearId() {
        
        id_ = getDefaultInstance().getId();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 对象稳定 id 或名称。
       * </pre>
       *
       * <code>string id = 1;</code>
       * @param value The bytes for id to set.
       * @return This builder for chaining.
       */
      public Builder setIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        id_ = value;
        onChanged();
        return this;
      }

      private int type_ = 0;
      /**
       * <pre>
       * 对象类型。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvMapObjectType type = 2;</code>
       * @return The enum numeric value on the wire for type.
       */
      @java.lang.Override public int getTypeValue() {
        return type_;
      }
      /**
       * <pre>
       * 对象类型。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvMapObjectType type = 2;</code>
       * @param value The enum numeric value on the wire for type to set.
       * @return This builder for chaining.
       */
      public Builder setTypeValue(int value) {
        
        type_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 对象类型。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvMapObjectType type = 2;</code>
       * @return The type.
       */
      @java.lang.Override
      public cmvr.msgs.Agv.AgvMapObjectType getType() {
        @SuppressWarnings("deprecation")
        cmvr.msgs.Agv.AgvMapObjectType result = cmvr.msgs.Agv.AgvMapObjectType.valueOf(type_);
        return result == null ? cmvr.msgs.Agv.AgvMapObjectType.UNRECOGNIZED : result;
      }
      /**
       * <pre>
       * 对象类型。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvMapObjectType type = 2;</code>
       * @param value The type to set.
       * @return This builder for chaining.
       */
      public Builder setType(cmvr.msgs.Agv.AgvMapObjectType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        
        type_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 对象类型。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvMapObjectType type = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearType() {
        
        type_ = 0;
        onChanged();
        return this;
      }

      private java.util.List<cmvr.msgs.Agv.AgvMapPoint3D> points_ =
        java.util.Collections.emptyList();
      private void ensurePointsIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          points_ = new java.util.ArrayList<cmvr.msgs.Agv.AgvMapPoint3D>(points_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          cmvr.msgs.Agv.AgvMapPoint3D, cmvr.msgs.Agv.AgvMapPoint3D.Builder, cmvr.msgs.Agv.AgvMapPoint3DOrBuilder> pointsBuilder_;

      /**
       * <pre>
       * 对象几何点。点对象使用 1 个点，线对象使用多个点，区域对象使用多边形顶点。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapPoint3D points = 3;</code>
       */
      public java.util.List<cmvr.msgs.Agv.AgvMapPoint3D> getPointsList() {
        if (pointsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(points_);
        } else {
          return pointsBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * 对象几何点。点对象使用 1 个点，线对象使用多个点，区域对象使用多边形顶点。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapPoint3D points = 3;</code>
       */
      public int getPointsCount() {
        if (pointsBuilder_ == null) {
          return points_.size();
        } else {
          return pointsBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * 对象几何点。点对象使用 1 个点，线对象使用多个点，区域对象使用多边形顶点。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapPoint3D points = 3;</code>
       */
      public cmvr.msgs.Agv.AgvMapPoint3D getPoints(int index) {
        if (pointsBuilder_ == null) {
          return points_.get(index);
        } else {
          return pointsBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * 对象几何点。点对象使用 1 个点，线对象使用多个点，区域对象使用多边形顶点。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapPoint3D points = 3;</code>
       */
      public Builder setPoints(
          int index, cmvr.msgs.Agv.AgvMapPoint3D value) {
        if (pointsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePointsIsMutable();
          points_.set(index, value);
          onChanged();
        } else {
          pointsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * 对象几何点。点对象使用 1 个点，线对象使用多个点，区域对象使用多边形顶点。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapPoint3D points = 3;</code>
       */
      public Builder setPoints(
          int index, cmvr.msgs.Agv.AgvMapPoint3D.Builder builderForValue) {
        if (pointsBuilder_ == null) {
          ensurePointsIsMutable();
          points_.set(index, builderForValue.build());
          onChanged();
        } else {
          pointsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * 对象几何点。点对象使用 1 个点，线对象使用多个点，区域对象使用多边形顶点。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapPoint3D points = 3;</code>
       */
      public Builder addPoints(cmvr.msgs.Agv.AgvMapPoint3D value) {
        if (pointsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePointsIsMutable();
          points_.add(value);
          onChanged();
        } else {
          pointsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * 对象几何点。点对象使用 1 个点，线对象使用多个点，区域对象使用多边形顶点。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapPoint3D points = 3;</code>
       */
      public Builder addPoints(
          int index, cmvr.msgs.Agv.AgvMapPoint3D value) {
        if (pointsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePointsIsMutable();
          points_.add(index, value);
          onChanged();
        } else {
          pointsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * 对象几何点。点对象使用 1 个点，线对象使用多个点，区域对象使用多边形顶点。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapPoint3D points = 3;</code>
       */
      public Builder addPoints(
          cmvr.msgs.Agv.AgvMapPoint3D.Builder builderForValue) {
        if (pointsBuilder_ == null) {
          ensurePointsIsMutable();
          points_.add(builderForValue.build());
          onChanged();
        } else {
          pointsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * 对象几何点。点对象使用 1 个点，线对象使用多个点，区域对象使用多边形顶点。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapPoint3D points = 3;</code>
       */
      public Builder addPoints(
          int index, cmvr.msgs.Agv.AgvMapPoint3D.Builder builderForValue) {
        if (pointsBuilder_ == null) {
          ensurePointsIsMutable();
          points_.add(index, builderForValue.build());
          onChanged();
        } else {
          pointsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * 对象几何点。点对象使用 1 个点，线对象使用多个点，区域对象使用多边形顶点。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapPoint3D points = 3;</code>
       */
      public Builder addAllPoints(
          java.lang.Iterable<? extends cmvr.msgs.Agv.AgvMapPoint3D> values) {
        if (pointsBuilder_ == null) {
          ensurePointsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, points_);
          onChanged();
        } else {
          pointsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * 对象几何点。点对象使用 1 个点，线对象使用多个点，区域对象使用多边形顶点。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapPoint3D points = 3;</code>
       */
      public Builder clearPoints() {
        if (pointsBuilder_ == null) {
          points_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          pointsBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * 对象几何点。点对象使用 1 个点，线对象使用多个点，区域对象使用多边形顶点。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapPoint3D points = 3;</code>
       */
      public Builder removePoints(int index) {
        if (pointsBuilder_ == null) {
          ensurePointsIsMutable();
          points_.remove(index);
          onChanged();
        } else {
          pointsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * 对象几何点。点对象使用 1 个点，线对象使用多个点，区域对象使用多边形顶点。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapPoint3D points = 3;</code>
       */
      public cmvr.msgs.Agv.AgvMapPoint3D.Builder getPointsBuilder(
          int index) {
        return getPointsFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * 对象几何点。点对象使用 1 个点，线对象使用多个点，区域对象使用多边形顶点。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapPoint3D points = 3;</code>
       */
      public cmvr.msgs.Agv.AgvMapPoint3DOrBuilder getPointsOrBuilder(
          int index) {
        if (pointsBuilder_ == null) {
          return points_.get(index);  } else {
          return pointsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * 对象几何点。点对象使用 1 个点，线对象使用多个点，区域对象使用多边形顶点。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapPoint3D points = 3;</code>
       */
      public java.util.List<? extends cmvr.msgs.Agv.AgvMapPoint3DOrBuilder> 
           getPointsOrBuilderList() {
        if (pointsBuilder_ != null) {
          return pointsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(points_);
        }
      }
      /**
       * <pre>
       * 对象几何点。点对象使用 1 个点，线对象使用多个点，区域对象使用多边形顶点。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapPoint3D points = 3;</code>
       */
      public cmvr.msgs.Agv.AgvMapPoint3D.Builder addPointsBuilder() {
        return getPointsFieldBuilder().addBuilder(
            cmvr.msgs.Agv.AgvMapPoint3D.getDefaultInstance());
      }
      /**
       * <pre>
       * 对象几何点。点对象使用 1 个点，线对象使用多个点，区域对象使用多边形顶点。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapPoint3D points = 3;</code>
       */
      public cmvr.msgs.Agv.AgvMapPoint3D.Builder addPointsBuilder(
          int index) {
        return getPointsFieldBuilder().addBuilder(
            index, cmvr.msgs.Agv.AgvMapPoint3D.getDefaultInstance());
      }
      /**
       * <pre>
       * 对象几何点。点对象使用 1 个点，线对象使用多个点，区域对象使用多边形顶点。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapPoint3D points = 3;</code>
       */
      public java.util.List<cmvr.msgs.Agv.AgvMapPoint3D.Builder> 
           getPointsBuilderList() {
        return getPointsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          cmvr.msgs.Agv.AgvMapPoint3D, cmvr.msgs.Agv.AgvMapPoint3D.Builder, cmvr.msgs.Agv.AgvMapPoint3DOrBuilder> 
          getPointsFieldBuilder() {
        if (pointsBuilder_ == null) {
          pointsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              cmvr.msgs.Agv.AgvMapPoint3D, cmvr.msgs.Agv.AgvMapPoint3D.Builder, cmvr.msgs.Agv.AgvMapPoint3DOrBuilder>(
                  points_,
                  ((bitField0_ & 0x00000001) != 0),
                  getParentForChildren(),
                  isClean());
          points_ = null;
        }
        return pointsBuilder_;
      }

      private double heading_ ;
      /**
       * <pre>
       * 朝向角，单位：弧度；不适用时置为 0。
       * </pre>
       *
       * <code>double heading = 4;</code>
       * @return The heading.
       */
      @java.lang.Override
      public double getHeading() {
        return heading_;
      }
      /**
       * <pre>
       * 朝向角，单位：弧度；不适用时置为 0。
       * </pre>
       *
       * <code>double heading = 4;</code>
       * @param value The heading to set.
       * @return This builder for chaining.
       */
      public Builder setHeading(double value) {
        
        heading_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 朝向角，单位：弧度；不适用时置为 0。
       * </pre>
       *
       * <code>double heading = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearHeading() {
        
        heading_ = 0D;
        onChanged();
        return this;
      }

      private com.google.protobuf.MapField<
          java.lang.String, java.lang.String> properties_;
      private com.google.protobuf.MapField<java.lang.String, java.lang.String>
      internalGetProperties() {
        if (properties_ == null) {
          return com.google.protobuf.MapField.emptyMapField(
              PropertiesDefaultEntryHolder.defaultEntry);
        }
        return properties_;
      }
      private com.google.protobuf.MapField<java.lang.String, java.lang.String>
      internalGetMutableProperties() {
        onChanged();;
        if (properties_ == null) {
          properties_ = com.google.protobuf.MapField.newMapField(
              PropertiesDefaultEntryHolder.defaultEntry);
        }
        if (!properties_.isMutable()) {
          properties_ = properties_.copy();
        }
        return properties_;
      }

      public int getPropertiesCount() {
        return internalGetProperties().getMap().size();
      }
      /**
       * <pre>
       * 额外归一化属性。为兼容不同 AGV，属性值统一使用字符串。
       * </pre>
       *
       * <code>map&lt;string, string&gt; properties = 5;</code>
       */

      @java.lang.Override
      public boolean containsProperties(
          java.lang.String key) {
        if (key == null) { throw new NullPointerException("map key"); }
        return internalGetProperties().getMap().containsKey(key);
      }
      /**
       * Use {@link #getPropertiesMap()} instead.
       */
      @java.lang.Override
      @java.lang.Deprecated
      public java.util.Map<java.lang.String, java.lang.String> getProperties() {
        return getPropertiesMap();
      }
      /**
       * <pre>
       * 额外归一化属性。为兼容不同 AGV，属性值统一使用字符串。
       * </pre>
       *
       * <code>map&lt;string, string&gt; properties = 5;</code>
       */
      @java.lang.Override

      public java.util.Map<java.lang.String, java.lang.String> getPropertiesMap() {
        return internalGetProperties().getMap();
      }
      /**
       * <pre>
       * 额外归一化属性。为兼容不同 AGV，属性值统一使用字符串。
       * </pre>
       *
       * <code>map&lt;string, string&gt; properties = 5;</code>
       */
      @java.lang.Override

      public java.lang.String getPropertiesOrDefault(
          java.lang.String key,
          java.lang.String defaultValue) {
        if (key == null) { throw new NullPointerException("map key"); }
        java.util.Map<java.lang.String, java.lang.String> map =
            internalGetProperties().getMap();
        return map.containsKey(key) ? map.get(key) : defaultValue;
      }
      /**
       * <pre>
       * 额外归一化属性。为兼容不同 AGV，属性值统一使用字符串。
       * </pre>
       *
       * <code>map&lt;string, string&gt; properties = 5;</code>
       */
      @java.lang.Override

      public java.lang.String getPropertiesOrThrow(
          java.lang.String key) {
        if (key == null) { throw new NullPointerException("map key"); }
        java.util.Map<java.lang.String, java.lang.String> map =
            internalGetProperties().getMap();
        if (!map.containsKey(key)) {
          throw new java.lang.IllegalArgumentException();
        }
        return map.get(key);
      }

      public Builder clearProperties() {
        internalGetMutableProperties().getMutableMap()
            .clear();
        return this;
      }
      /**
       * <pre>
       * 额外归一化属性。为兼容不同 AGV，属性值统一使用字符串。
       * </pre>
       *
       * <code>map&lt;string, string&gt; properties = 5;</code>
       */

      public Builder removeProperties(
          java.lang.String key) {
        if (key == null) { throw new NullPointerException("map key"); }
        internalGetMutableProperties().getMutableMap()
            .remove(key);
        return this;
      }
      /**
       * Use alternate mutation accessors instead.
       */
      @java.lang.Deprecated
      public java.util.Map<java.lang.String, java.lang.String>
      getMutableProperties() {
        return internalGetMutableProperties().getMutableMap();
      }
      /**
       * <pre>
       * 额外归一化属性。为兼容不同 AGV，属性值统一使用字符串。
       * </pre>
       *
       * <code>map&lt;string, string&gt; properties = 5;</code>
       */
      public Builder putProperties(
          java.lang.String key,
          java.lang.String value) {
        if (key == null) { throw new NullPointerException("map key"); }
        if (value == null) {
  throw new NullPointerException("map value");
}

        internalGetMutableProperties().getMutableMap()
            .put(key, value);
        return this;
      }
      /**
       * <pre>
       * 额外归一化属性。为兼容不同 AGV，属性值统一使用字符串。
       * </pre>
       *
       * <code>map&lt;string, string&gt; properties = 5;</code>
       */

      public Builder putAllProperties(
          java.util.Map<java.lang.String, java.lang.String> values) {
        internalGetMutableProperties().getMutableMap()
            .putAll(values);
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:cmvr.msgs.AgvMapObject)
    }

    // @@protoc_insertion_point(class_scope:cmvr.msgs.AgvMapObject)
    private static final cmvr.msgs.Agv.AgvMapObject DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new cmvr.msgs.Agv.AgvMapObject();
    }

    public static cmvr.msgs.Agv.AgvMapObject getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<AgvMapObject>
        PARSER = new com.google.protobuf.AbstractParser<AgvMapObject>() {
      @java.lang.Override
      public AgvMapObject parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (com.google.protobuf.UninitializedMessageException e) {
          throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(e)
              .setUnfinishedMessage(builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

    public static com.google.protobuf.Parser<AgvMapObject> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<AgvMapObject> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public cmvr.msgs.Agv.AgvMapObject getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface AgvUnifiedMap3DOrBuilder extends
      // @@protoc_insertion_point(interface_extends:cmvr.msgs.AgvUnifiedMap3D)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * 坐标系名称，例如 "map"。
     * </pre>
     *
     * <code>string frame_id = 1;</code>
     * @return The frameId.
     */
    java.lang.String getFrameId();
    /**
     * <pre>
     * 坐标系名称，例如 "map"。
     * </pre>
     *
     * <code>string frame_id = 1;</code>
     * @return The bytes for frameId.
     */
    com.google.protobuf.ByteString
        getFrameIdBytes();

    /**
     * <pre>
     * 地图采样或更新时间，Unix 时间戳，单位：秒。
     * </pre>
     *
     * <code>double timestamp = 2;</code>
     * @return The timestamp.
     */
    double getTimestamp();

    /**
     * <pre>
     * 体素分辨率，单位：米/体素；没有体素数据时置为 0。
     * </pre>
     *
     * <code>double voxel_resolution = 3;</code>
     * @return The voxelResolution.
     */
    double getVoxelResolution();

    /**
     * <pre>
     * 统一点云点样本。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapPointSample3D points = 4;</code>
     */
    java.util.List<cmvr.msgs.Agv.AgvMapPointSample3D> 
        getPointsList();
    /**
     * <pre>
     * 统一点云点样本。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapPointSample3D points = 4;</code>
     */
    cmvr.msgs.Agv.AgvMapPointSample3D getPoints(int index);
    /**
     * <pre>
     * 统一点云点样本。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapPointSample3D points = 4;</code>
     */
    int getPointsCount();
    /**
     * <pre>
     * 统一点云点样本。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapPointSample3D points = 4;</code>
     */
    java.util.List<? extends cmvr.msgs.Agv.AgvMapPointSample3DOrBuilder> 
        getPointsOrBuilderList();
    /**
     * <pre>
     * 统一点云点样本。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapPointSample3D points = 4;</code>
     */
    cmvr.msgs.Agv.AgvMapPointSample3DOrBuilder getPointsOrBuilder(
        int index);

    /**
     * <pre>
     * 统一占据体素。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapVoxel3D voxels = 5;</code>
     */
    java.util.List<cmvr.msgs.Agv.AgvMapVoxel3D> 
        getVoxelsList();
    /**
     * <pre>
     * 统一占据体素。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapVoxel3D voxels = 5;</code>
     */
    cmvr.msgs.Agv.AgvMapVoxel3D getVoxels(int index);
    /**
     * <pre>
     * 统一占据体素。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapVoxel3D voxels = 5;</code>
     */
    int getVoxelsCount();
    /**
     * <pre>
     * 统一占据体素。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapVoxel3D voxels = 5;</code>
     */
    java.util.List<? extends cmvr.msgs.Agv.AgvMapVoxel3DOrBuilder> 
        getVoxelsOrBuilderList();
    /**
     * <pre>
     * 统一占据体素。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapVoxel3D voxels = 5;</code>
     */
    cmvr.msgs.Agv.AgvMapVoxel3DOrBuilder getVoxelsOrBuilder(
        int index);

    /**
     * <pre>
     * 统一平面特征。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapPlane3D planes = 6;</code>
     */
    java.util.List<cmvr.msgs.Agv.AgvMapPlane3D> 
        getPlanesList();
    /**
     * <pre>
     * 统一平面特征。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapPlane3D planes = 6;</code>
     */
    cmvr.msgs.Agv.AgvMapPlane3D getPlanes(int index);
    /**
     * <pre>
     * 统一平面特征。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapPlane3D planes = 6;</code>
     */
    int getPlanesCount();
    /**
     * <pre>
     * 统一平面特征。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapPlane3D planes = 6;</code>
     */
    java.util.List<? extends cmvr.msgs.Agv.AgvMapPlane3DOrBuilder> 
        getPlanesOrBuilderList();
    /**
     * <pre>
     * 统一平面特征。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapPlane3D planes = 6;</code>
     */
    cmvr.msgs.Agv.AgvMapPlane3DOrBuilder getPlanesOrBuilder(
        int index);

    /**
     * <pre>
     * 统一 3D 语义对象，例如站点、区域、标签、地标等。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapObject objects = 7;</code>
     */
    java.util.List<cmvr.msgs.Agv.AgvMapObject> 
        getObjectsList();
    /**
     * <pre>
     * 统一 3D 语义对象，例如站点、区域、标签、地标等。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapObject objects = 7;</code>
     */
    cmvr.msgs.Agv.AgvMapObject getObjects(int index);
    /**
     * <pre>
     * 统一 3D 语义对象，例如站点、区域、标签、地标等。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapObject objects = 7;</code>
     */
    int getObjectsCount();
    /**
     * <pre>
     * 统一 3D 语义对象，例如站点、区域、标签、地标等。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapObject objects = 7;</code>
     */
    java.util.List<? extends cmvr.msgs.Agv.AgvMapObjectOrBuilder> 
        getObjectsOrBuilderList();
    /**
     * <pre>
     * 统一 3D 语义对象，例如站点、区域、标签、地标等。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapObject objects = 7;</code>
     */
    cmvr.msgs.Agv.AgvMapObjectOrBuilder getObjectsOrBuilder(
        int index);
  }
  /**
   * <pre>
   * 统一 3D 地图。虽然内部包含点、体素、平面和语义对象，
   * 但对上位机来说它仍然是唯一的 3D 地图格式。
   * </pre>
   *
   * Protobuf type {@code cmvr.msgs.AgvUnifiedMap3D}
   */
  public static final class AgvUnifiedMap3D extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:cmvr.msgs.AgvUnifiedMap3D)
      AgvUnifiedMap3DOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use AgvUnifiedMap3D.newBuilder() to construct.
    private AgvUnifiedMap3D(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private AgvUnifiedMap3D() {
      frameId_ = "";
      points_ = java.util.Collections.emptyList();
      voxels_ = java.util.Collections.emptyList();
      planes_ = java.util.Collections.emptyList();
      objects_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new AgvUnifiedMap3D();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvUnifiedMap3D_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvUnifiedMap3D_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              cmvr.msgs.Agv.AgvUnifiedMap3D.class, cmvr.msgs.Agv.AgvUnifiedMap3D.Builder.class);
    }

    public static final int FRAME_ID_FIELD_NUMBER = 1;
    private volatile java.lang.Object frameId_;
    /**
     * <pre>
     * 坐标系名称，例如 "map"。
     * </pre>
     *
     * <code>string frame_id = 1;</code>
     * @return The frameId.
     */
    @java.lang.Override
    public java.lang.String getFrameId() {
      java.lang.Object ref = frameId_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        frameId_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * 坐标系名称，例如 "map"。
     * </pre>
     *
     * <code>string frame_id = 1;</code>
     * @return The bytes for frameId.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getFrameIdBytes() {
      java.lang.Object ref = frameId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        frameId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int TIMESTAMP_FIELD_NUMBER = 2;
    private double timestamp_;
    /**
     * <pre>
     * 地图采样或更新时间，Unix 时间戳，单位：秒。
     * </pre>
     *
     * <code>double timestamp = 2;</code>
     * @return The timestamp.
     */
    @java.lang.Override
    public double getTimestamp() {
      return timestamp_;
    }

    public static final int VOXEL_RESOLUTION_FIELD_NUMBER = 3;
    private double voxelResolution_;
    /**
     * <pre>
     * 体素分辨率，单位：米/体素；没有体素数据时置为 0。
     * </pre>
     *
     * <code>double voxel_resolution = 3;</code>
     * @return The voxelResolution.
     */
    @java.lang.Override
    public double getVoxelResolution() {
      return voxelResolution_;
    }

    public static final int POINTS_FIELD_NUMBER = 4;
    private java.util.List<cmvr.msgs.Agv.AgvMapPointSample3D> points_;
    /**
     * <pre>
     * 统一点云点样本。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapPointSample3D points = 4;</code>
     */
    @java.lang.Override
    public java.util.List<cmvr.msgs.Agv.AgvMapPointSample3D> getPointsList() {
      return points_;
    }
    /**
     * <pre>
     * 统一点云点样本。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapPointSample3D points = 4;</code>
     */
    @java.lang.Override
    public java.util.List<? extends cmvr.msgs.Agv.AgvMapPointSample3DOrBuilder> 
        getPointsOrBuilderList() {
      return points_;
    }
    /**
     * <pre>
     * 统一点云点样本。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapPointSample3D points = 4;</code>
     */
    @java.lang.Override
    public int getPointsCount() {
      return points_.size();
    }
    /**
     * <pre>
     * 统一点云点样本。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapPointSample3D points = 4;</code>
     */
    @java.lang.Override
    public cmvr.msgs.Agv.AgvMapPointSample3D getPoints(int index) {
      return points_.get(index);
    }
    /**
     * <pre>
     * 统一点云点样本。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapPointSample3D points = 4;</code>
     */
    @java.lang.Override
    public cmvr.msgs.Agv.AgvMapPointSample3DOrBuilder getPointsOrBuilder(
        int index) {
      return points_.get(index);
    }

    public static final int VOXELS_FIELD_NUMBER = 5;
    private java.util.List<cmvr.msgs.Agv.AgvMapVoxel3D> voxels_;
    /**
     * <pre>
     * 统一占据体素。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapVoxel3D voxels = 5;</code>
     */
    @java.lang.Override
    public java.util.List<cmvr.msgs.Agv.AgvMapVoxel3D> getVoxelsList() {
      return voxels_;
    }
    /**
     * <pre>
     * 统一占据体素。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapVoxel3D voxels = 5;</code>
     */
    @java.lang.Override
    public java.util.List<? extends cmvr.msgs.Agv.AgvMapVoxel3DOrBuilder> 
        getVoxelsOrBuilderList() {
      return voxels_;
    }
    /**
     * <pre>
     * 统一占据体素。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapVoxel3D voxels = 5;</code>
     */
    @java.lang.Override
    public int getVoxelsCount() {
      return voxels_.size();
    }
    /**
     * <pre>
     * 统一占据体素。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapVoxel3D voxels = 5;</code>
     */
    @java.lang.Override
    public cmvr.msgs.Agv.AgvMapVoxel3D getVoxels(int index) {
      return voxels_.get(index);
    }
    /**
     * <pre>
     * 统一占据体素。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapVoxel3D voxels = 5;</code>
     */
    @java.lang.Override
    public cmvr.msgs.Agv.AgvMapVoxel3DOrBuilder getVoxelsOrBuilder(
        int index) {
      return voxels_.get(index);
    }

    public static final int PLANES_FIELD_NUMBER = 6;
    private java.util.List<cmvr.msgs.Agv.AgvMapPlane3D> planes_;
    /**
     * <pre>
     * 统一平面特征。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapPlane3D planes = 6;</code>
     */
    @java.lang.Override
    public java.util.List<cmvr.msgs.Agv.AgvMapPlane3D> getPlanesList() {
      return planes_;
    }
    /**
     * <pre>
     * 统一平面特征。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapPlane3D planes = 6;</code>
     */
    @java.lang.Override
    public java.util.List<? extends cmvr.msgs.Agv.AgvMapPlane3DOrBuilder> 
        getPlanesOrBuilderList() {
      return planes_;
    }
    /**
     * <pre>
     * 统一平面特征。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapPlane3D planes = 6;</code>
     */
    @java.lang.Override
    public int getPlanesCount() {
      return planes_.size();
    }
    /**
     * <pre>
     * 统一平面特征。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapPlane3D planes = 6;</code>
     */
    @java.lang.Override
    public cmvr.msgs.Agv.AgvMapPlane3D getPlanes(int index) {
      return planes_.get(index);
    }
    /**
     * <pre>
     * 统一平面特征。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapPlane3D planes = 6;</code>
     */
    @java.lang.Override
    public cmvr.msgs.Agv.AgvMapPlane3DOrBuilder getPlanesOrBuilder(
        int index) {
      return planes_.get(index);
    }

    public static final int OBJECTS_FIELD_NUMBER = 7;
    private java.util.List<cmvr.msgs.Agv.AgvMapObject> objects_;
    /**
     * <pre>
     * 统一 3D 语义对象，例如站点、区域、标签、地标等。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapObject objects = 7;</code>
     */
    @java.lang.Override
    public java.util.List<cmvr.msgs.Agv.AgvMapObject> getObjectsList() {
      return objects_;
    }
    /**
     * <pre>
     * 统一 3D 语义对象，例如站点、区域、标签、地标等。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapObject objects = 7;</code>
     */
    @java.lang.Override
    public java.util.List<? extends cmvr.msgs.Agv.AgvMapObjectOrBuilder> 
        getObjectsOrBuilderList() {
      return objects_;
    }
    /**
     * <pre>
     * 统一 3D 语义对象，例如站点、区域、标签、地标等。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapObject objects = 7;</code>
     */
    @java.lang.Override
    public int getObjectsCount() {
      return objects_.size();
    }
    /**
     * <pre>
     * 统一 3D 语义对象，例如站点、区域、标签、地标等。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapObject objects = 7;</code>
     */
    @java.lang.Override
    public cmvr.msgs.Agv.AgvMapObject getObjects(int index) {
      return objects_.get(index);
    }
    /**
     * <pre>
     * 统一 3D 语义对象，例如站点、区域、标签、地标等。
     * </pre>
     *
     * <code>repeated .cmvr.msgs.AgvMapObject objects = 7;</code>
     */
    @java.lang.Override
    public cmvr.msgs.Agv.AgvMapObjectOrBuilder getObjectsOrBuilder(
        int index) {
      return objects_.get(index);
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(frameId_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, frameId_);
      }
      if (java.lang.Double.doubleToRawLongBits(timestamp_) != 0) {
        output.writeDouble(2, timestamp_);
      }
      if (java.lang.Double.doubleToRawLongBits(voxelResolution_) != 0) {
        output.writeDouble(3, voxelResolution_);
      }
      for (int i = 0; i < points_.size(); i++) {
        output.writeMessage(4, points_.get(i));
      }
      for (int i = 0; i < voxels_.size(); i++) {
        output.writeMessage(5, voxels_.get(i));
      }
      for (int i = 0; i < planes_.size(); i++) {
        output.writeMessage(6, planes_.get(i));
      }
      for (int i = 0; i < objects_.size(); i++) {
        output.writeMessage(7, objects_.get(i));
      }
      getUnknownFields().writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(frameId_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, frameId_);
      }
      if (java.lang.Double.doubleToRawLongBits(timestamp_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(2, timestamp_);
      }
      if (java.lang.Double.doubleToRawLongBits(voxelResolution_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(3, voxelResolution_);
      }
      for (int i = 0; i < points_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, points_.get(i));
      }
      for (int i = 0; i < voxels_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, voxels_.get(i));
      }
      for (int i = 0; i < planes_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, planes_.get(i));
      }
      for (int i = 0; i < objects_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, objects_.get(i));
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof cmvr.msgs.Agv.AgvUnifiedMap3D)) {
        return super.equals(obj);
      }
      cmvr.msgs.Agv.AgvUnifiedMap3D other = (cmvr.msgs.Agv.AgvUnifiedMap3D) obj;

      if (!getFrameId()
          .equals(other.getFrameId())) return false;
      if (java.lang.Double.doubleToLongBits(getTimestamp())
          != java.lang.Double.doubleToLongBits(
              other.getTimestamp())) return false;
      if (java.lang.Double.doubleToLongBits(getVoxelResolution())
          != java.lang.Double.doubleToLongBits(
              other.getVoxelResolution())) return false;
      if (!getPointsList()
          .equals(other.getPointsList())) return false;
      if (!getVoxelsList()
          .equals(other.getVoxelsList())) return false;
      if (!getPlanesList()
          .equals(other.getPlanesList())) return false;
      if (!getObjectsList()
          .equals(other.getObjectsList())) return false;
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + FRAME_ID_FIELD_NUMBER;
      hash = (53 * hash) + getFrameId().hashCode();
      hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getTimestamp()));
      hash = (37 * hash) + VOXEL_RESOLUTION_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getVoxelResolution()));
      if (getPointsCount() > 0) {
        hash = (37 * hash) + POINTS_FIELD_NUMBER;
        hash = (53 * hash) + getPointsList().hashCode();
      }
      if (getVoxelsCount() > 0) {
        hash = (37 * hash) + VOXELS_FIELD_NUMBER;
        hash = (53 * hash) + getVoxelsList().hashCode();
      }
      if (getPlanesCount() > 0) {
        hash = (37 * hash) + PLANES_FIELD_NUMBER;
        hash = (53 * hash) + getPlanesList().hashCode();
      }
      if (getObjectsCount() > 0) {
        hash = (37 * hash) + OBJECTS_FIELD_NUMBER;
        hash = (53 * hash) + getObjectsList().hashCode();
      }
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static cmvr.msgs.Agv.AgvUnifiedMap3D parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.msgs.Agv.AgvUnifiedMap3D parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvUnifiedMap3D parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.msgs.Agv.AgvUnifiedMap3D parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvUnifiedMap3D parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.msgs.Agv.AgvUnifiedMap3D parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvUnifiedMap3D parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cmvr.msgs.Agv.AgvUnifiedMap3D parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvUnifiedMap3D parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static cmvr.msgs.Agv.AgvUnifiedMap3D parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvUnifiedMap3D parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cmvr.msgs.Agv.AgvUnifiedMap3D parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(cmvr.msgs.Agv.AgvUnifiedMap3D prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * 统一 3D 地图。虽然内部包含点、体素、平面和语义对象，
     * 但对上位机来说它仍然是唯一的 3D 地图格式。
     * </pre>
     *
     * Protobuf type {@code cmvr.msgs.AgvUnifiedMap3D}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:cmvr.msgs.AgvUnifiedMap3D)
        cmvr.msgs.Agv.AgvUnifiedMap3DOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvUnifiedMap3D_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvUnifiedMap3D_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                cmvr.msgs.Agv.AgvUnifiedMap3D.class, cmvr.msgs.Agv.AgvUnifiedMap3D.Builder.class);
      }

      // Construct using cmvr.msgs.Agv.AgvUnifiedMap3D.newBuilder()
      private Builder() {

      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        frameId_ = "";

        timestamp_ = 0D;

        voxelResolution_ = 0D;

        if (pointsBuilder_ == null) {
          points_ = java.util.Collections.emptyList();
        } else {
          points_ = null;
          pointsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        if (voxelsBuilder_ == null) {
          voxels_ = java.util.Collections.emptyList();
        } else {
          voxels_ = null;
          voxelsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        if (planesBuilder_ == null) {
          planes_ = java.util.Collections.emptyList();
        } else {
          planes_ = null;
          planesBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        if (objectsBuilder_ == null) {
          objects_ = java.util.Collections.emptyList();
        } else {
          objects_ = null;
          objectsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvUnifiedMap3D_descriptor;
      }

      @java.lang.Override
      public cmvr.msgs.Agv.AgvUnifiedMap3D getDefaultInstanceForType() {
        return cmvr.msgs.Agv.AgvUnifiedMap3D.getDefaultInstance();
      }

      @java.lang.Override
      public cmvr.msgs.Agv.AgvUnifiedMap3D build() {
        cmvr.msgs.Agv.AgvUnifiedMap3D result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public cmvr.msgs.Agv.AgvUnifiedMap3D buildPartial() {
        cmvr.msgs.Agv.AgvUnifiedMap3D result = new cmvr.msgs.Agv.AgvUnifiedMap3D(this);
        int from_bitField0_ = bitField0_;
        result.frameId_ = frameId_;
        result.timestamp_ = timestamp_;
        result.voxelResolution_ = voxelResolution_;
        if (pointsBuilder_ == null) {
          if (((bitField0_ & 0x00000001) != 0)) {
            points_ = java.util.Collections.unmodifiableList(points_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.points_ = points_;
        } else {
          result.points_ = pointsBuilder_.build();
        }
        if (voxelsBuilder_ == null) {
          if (((bitField0_ & 0x00000002) != 0)) {
            voxels_ = java.util.Collections.unmodifiableList(voxels_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.voxels_ = voxels_;
        } else {
          result.voxels_ = voxelsBuilder_.build();
        }
        if (planesBuilder_ == null) {
          if (((bitField0_ & 0x00000004) != 0)) {
            planes_ = java.util.Collections.unmodifiableList(planes_);
            bitField0_ = (bitField0_ & ~0x00000004);
          }
          result.planes_ = planes_;
        } else {
          result.planes_ = planesBuilder_.build();
        }
        if (objectsBuilder_ == null) {
          if (((bitField0_ & 0x00000008) != 0)) {
            objects_ = java.util.Collections.unmodifiableList(objects_);
            bitField0_ = (bitField0_ & ~0x00000008);
          }
          result.objects_ = objects_;
        } else {
          result.objects_ = objectsBuilder_.build();
        }
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof cmvr.msgs.Agv.AgvUnifiedMap3D) {
          return mergeFrom((cmvr.msgs.Agv.AgvUnifiedMap3D)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(cmvr.msgs.Agv.AgvUnifiedMap3D other) {
        if (other == cmvr.msgs.Agv.AgvUnifiedMap3D.getDefaultInstance()) return this;
        if (!other.getFrameId().isEmpty()) {
          frameId_ = other.frameId_;
          onChanged();
        }
        if (other.getTimestamp() != 0D) {
          setTimestamp(other.getTimestamp());
        }
        if (other.getVoxelResolution() != 0D) {
          setVoxelResolution(other.getVoxelResolution());
        }
        if (pointsBuilder_ == null) {
          if (!other.points_.isEmpty()) {
            if (points_.isEmpty()) {
              points_ = other.points_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensurePointsIsMutable();
              points_.addAll(other.points_);
            }
            onChanged();
          }
        } else {
          if (!other.points_.isEmpty()) {
            if (pointsBuilder_.isEmpty()) {
              pointsBuilder_.dispose();
              pointsBuilder_ = null;
              points_ = other.points_;
              bitField0_ = (bitField0_ & ~0x00000001);
              pointsBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getPointsFieldBuilder() : null;
            } else {
              pointsBuilder_.addAllMessages(other.points_);
            }
          }
        }
        if (voxelsBuilder_ == null) {
          if (!other.voxels_.isEmpty()) {
            if (voxels_.isEmpty()) {
              voxels_ = other.voxels_;
              bitField0_ = (bitField0_ & ~0x00000002);
            } else {
              ensureVoxelsIsMutable();
              voxels_.addAll(other.voxels_);
            }
            onChanged();
          }
        } else {
          if (!other.voxels_.isEmpty()) {
            if (voxelsBuilder_.isEmpty()) {
              voxelsBuilder_.dispose();
              voxelsBuilder_ = null;
              voxels_ = other.voxels_;
              bitField0_ = (bitField0_ & ~0x00000002);
              voxelsBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getVoxelsFieldBuilder() : null;
            } else {
              voxelsBuilder_.addAllMessages(other.voxels_);
            }
          }
        }
        if (planesBuilder_ == null) {
          if (!other.planes_.isEmpty()) {
            if (planes_.isEmpty()) {
              planes_ = other.planes_;
              bitField0_ = (bitField0_ & ~0x00000004);
            } else {
              ensurePlanesIsMutable();
              planes_.addAll(other.planes_);
            }
            onChanged();
          }
        } else {
          if (!other.planes_.isEmpty()) {
            if (planesBuilder_.isEmpty()) {
              planesBuilder_.dispose();
              planesBuilder_ = null;
              planes_ = other.planes_;
              bitField0_ = (bitField0_ & ~0x00000004);
              planesBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getPlanesFieldBuilder() : null;
            } else {
              planesBuilder_.addAllMessages(other.planes_);
            }
          }
        }
        if (objectsBuilder_ == null) {
          if (!other.objects_.isEmpty()) {
            if (objects_.isEmpty()) {
              objects_ = other.objects_;
              bitField0_ = (bitField0_ & ~0x00000008);
            } else {
              ensureObjectsIsMutable();
              objects_.addAll(other.objects_);
            }
            onChanged();
          }
        } else {
          if (!other.objects_.isEmpty()) {
            if (objectsBuilder_.isEmpty()) {
              objectsBuilder_.dispose();
              objectsBuilder_ = null;
              objects_ = other.objects_;
              bitField0_ = (bitField0_ & ~0x00000008);
              objectsBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getObjectsFieldBuilder() : null;
            } else {
              objectsBuilder_.addAllMessages(other.objects_);
            }
          }
        }
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 10: {
                frameId_ = input.readStringRequireUtf8();

                break;
              } // case 10
              case 17: {
                timestamp_ = input.readDouble();

                break;
              } // case 17
              case 25: {
                voxelResolution_ = input.readDouble();

                break;
              } // case 25
              case 34: {
                cmvr.msgs.Agv.AgvMapPointSample3D m =
                    input.readMessage(
                        cmvr.msgs.Agv.AgvMapPointSample3D.parser(),
                        extensionRegistry);
                if (pointsBuilder_ == null) {
                  ensurePointsIsMutable();
                  points_.add(m);
                } else {
                  pointsBuilder_.addMessage(m);
                }
                break;
              } // case 34
              case 42: {
                cmvr.msgs.Agv.AgvMapVoxel3D m =
                    input.readMessage(
                        cmvr.msgs.Agv.AgvMapVoxel3D.parser(),
                        extensionRegistry);
                if (voxelsBuilder_ == null) {
                  ensureVoxelsIsMutable();
                  voxels_.add(m);
                } else {
                  voxelsBuilder_.addMessage(m);
                }
                break;
              } // case 42
              case 50: {
                cmvr.msgs.Agv.AgvMapPlane3D m =
                    input.readMessage(
                        cmvr.msgs.Agv.AgvMapPlane3D.parser(),
                        extensionRegistry);
                if (planesBuilder_ == null) {
                  ensurePlanesIsMutable();
                  planes_.add(m);
                } else {
                  planesBuilder_.addMessage(m);
                }
                break;
              } // case 50
              case 58: {
                cmvr.msgs.Agv.AgvMapObject m =
                    input.readMessage(
                        cmvr.msgs.Agv.AgvMapObject.parser(),
                        extensionRegistry);
                if (objectsBuilder_ == null) {
                  ensureObjectsIsMutable();
                  objects_.add(m);
                } else {
                  objectsBuilder_.addMessage(m);
                }
                break;
              } // case 58
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }
      private int bitField0_;

      private java.lang.Object frameId_ = "";
      /**
       * <pre>
       * 坐标系名称，例如 "map"。
       * </pre>
       *
       * <code>string frame_id = 1;</code>
       * @return The frameId.
       */
      public java.lang.String getFrameId() {
        java.lang.Object ref = frameId_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          frameId_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * 坐标系名称，例如 "map"。
       * </pre>
       *
       * <code>string frame_id = 1;</code>
       * @return The bytes for frameId.
       */
      public com.google.protobuf.ByteString
          getFrameIdBytes() {
        java.lang.Object ref = frameId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          frameId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * 坐标系名称，例如 "map"。
       * </pre>
       *
       * <code>string frame_id = 1;</code>
       * @param value The frameId to set.
       * @return This builder for chaining.
       */
      public Builder setFrameId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        frameId_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 坐标系名称，例如 "map"。
       * </pre>
       *
       * <code>string frame_id = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearFrameId() {
        
        frameId_ = getDefaultInstance().getFrameId();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 坐标系名称，例如 "map"。
       * </pre>
       *
       * <code>string frame_id = 1;</code>
       * @param value The bytes for frameId to set.
       * @return This builder for chaining.
       */
      public Builder setFrameIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        frameId_ = value;
        onChanged();
        return this;
      }

      private double timestamp_ ;
      /**
       * <pre>
       * 地图采样或更新时间，Unix 时间戳，单位：秒。
       * </pre>
       *
       * <code>double timestamp = 2;</code>
       * @return The timestamp.
       */
      @java.lang.Override
      public double getTimestamp() {
        return timestamp_;
      }
      /**
       * <pre>
       * 地图采样或更新时间，Unix 时间戳，单位：秒。
       * </pre>
       *
       * <code>double timestamp = 2;</code>
       * @param value The timestamp to set.
       * @return This builder for chaining.
       */
      public Builder setTimestamp(double value) {
        
        timestamp_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 地图采样或更新时间，Unix 时间戳，单位：秒。
       * </pre>
       *
       * <code>double timestamp = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearTimestamp() {
        
        timestamp_ = 0D;
        onChanged();
        return this;
      }

      private double voxelResolution_ ;
      /**
       * <pre>
       * 体素分辨率，单位：米/体素；没有体素数据时置为 0。
       * </pre>
       *
       * <code>double voxel_resolution = 3;</code>
       * @return The voxelResolution.
       */
      @java.lang.Override
      public double getVoxelResolution() {
        return voxelResolution_;
      }
      /**
       * <pre>
       * 体素分辨率，单位：米/体素；没有体素数据时置为 0。
       * </pre>
       *
       * <code>double voxel_resolution = 3;</code>
       * @param value The voxelResolution to set.
       * @return This builder for chaining.
       */
      public Builder setVoxelResolution(double value) {
        
        voxelResolution_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 体素分辨率，单位：米/体素；没有体素数据时置为 0。
       * </pre>
       *
       * <code>double voxel_resolution = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearVoxelResolution() {
        
        voxelResolution_ = 0D;
        onChanged();
        return this;
      }

      private java.util.List<cmvr.msgs.Agv.AgvMapPointSample3D> points_ =
        java.util.Collections.emptyList();
      private void ensurePointsIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          points_ = new java.util.ArrayList<cmvr.msgs.Agv.AgvMapPointSample3D>(points_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          cmvr.msgs.Agv.AgvMapPointSample3D, cmvr.msgs.Agv.AgvMapPointSample3D.Builder, cmvr.msgs.Agv.AgvMapPointSample3DOrBuilder> pointsBuilder_;

      /**
       * <pre>
       * 统一点云点样本。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapPointSample3D points = 4;</code>
       */
      public java.util.List<cmvr.msgs.Agv.AgvMapPointSample3D> getPointsList() {
        if (pointsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(points_);
        } else {
          return pointsBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * 统一点云点样本。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapPointSample3D points = 4;</code>
       */
      public int getPointsCount() {
        if (pointsBuilder_ == null) {
          return points_.size();
        } else {
          return pointsBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * 统一点云点样本。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapPointSample3D points = 4;</code>
       */
      public cmvr.msgs.Agv.AgvMapPointSample3D getPoints(int index) {
        if (pointsBuilder_ == null) {
          return points_.get(index);
        } else {
          return pointsBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * 统一点云点样本。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapPointSample3D points = 4;</code>
       */
      public Builder setPoints(
          int index, cmvr.msgs.Agv.AgvMapPointSample3D value) {
        if (pointsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePointsIsMutable();
          points_.set(index, value);
          onChanged();
        } else {
          pointsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * 统一点云点样本。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapPointSample3D points = 4;</code>
       */
      public Builder setPoints(
          int index, cmvr.msgs.Agv.AgvMapPointSample3D.Builder builderForValue) {
        if (pointsBuilder_ == null) {
          ensurePointsIsMutable();
          points_.set(index, builderForValue.build());
          onChanged();
        } else {
          pointsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * 统一点云点样本。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapPointSample3D points = 4;</code>
       */
      public Builder addPoints(cmvr.msgs.Agv.AgvMapPointSample3D value) {
        if (pointsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePointsIsMutable();
          points_.add(value);
          onChanged();
        } else {
          pointsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * 统一点云点样本。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapPointSample3D points = 4;</code>
       */
      public Builder addPoints(
          int index, cmvr.msgs.Agv.AgvMapPointSample3D value) {
        if (pointsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePointsIsMutable();
          points_.add(index, value);
          onChanged();
        } else {
          pointsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * 统一点云点样本。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapPointSample3D points = 4;</code>
       */
      public Builder addPoints(
          cmvr.msgs.Agv.AgvMapPointSample3D.Builder builderForValue) {
        if (pointsBuilder_ == null) {
          ensurePointsIsMutable();
          points_.add(builderForValue.build());
          onChanged();
        } else {
          pointsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * 统一点云点样本。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapPointSample3D points = 4;</code>
       */
      public Builder addPoints(
          int index, cmvr.msgs.Agv.AgvMapPointSample3D.Builder builderForValue) {
        if (pointsBuilder_ == null) {
          ensurePointsIsMutable();
          points_.add(index, builderForValue.build());
          onChanged();
        } else {
          pointsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * 统一点云点样本。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapPointSample3D points = 4;</code>
       */
      public Builder addAllPoints(
          java.lang.Iterable<? extends cmvr.msgs.Agv.AgvMapPointSample3D> values) {
        if (pointsBuilder_ == null) {
          ensurePointsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, points_);
          onChanged();
        } else {
          pointsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * 统一点云点样本。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapPointSample3D points = 4;</code>
       */
      public Builder clearPoints() {
        if (pointsBuilder_ == null) {
          points_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          pointsBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * 统一点云点样本。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapPointSample3D points = 4;</code>
       */
      public Builder removePoints(int index) {
        if (pointsBuilder_ == null) {
          ensurePointsIsMutable();
          points_.remove(index);
          onChanged();
        } else {
          pointsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * 统一点云点样本。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapPointSample3D points = 4;</code>
       */
      public cmvr.msgs.Agv.AgvMapPointSample3D.Builder getPointsBuilder(
          int index) {
        return getPointsFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * 统一点云点样本。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapPointSample3D points = 4;</code>
       */
      public cmvr.msgs.Agv.AgvMapPointSample3DOrBuilder getPointsOrBuilder(
          int index) {
        if (pointsBuilder_ == null) {
          return points_.get(index);  } else {
          return pointsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * 统一点云点样本。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapPointSample3D points = 4;</code>
       */
      public java.util.List<? extends cmvr.msgs.Agv.AgvMapPointSample3DOrBuilder> 
           getPointsOrBuilderList() {
        if (pointsBuilder_ != null) {
          return pointsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(points_);
        }
      }
      /**
       * <pre>
       * 统一点云点样本。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapPointSample3D points = 4;</code>
       */
      public cmvr.msgs.Agv.AgvMapPointSample3D.Builder addPointsBuilder() {
        return getPointsFieldBuilder().addBuilder(
            cmvr.msgs.Agv.AgvMapPointSample3D.getDefaultInstance());
      }
      /**
       * <pre>
       * 统一点云点样本。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapPointSample3D points = 4;</code>
       */
      public cmvr.msgs.Agv.AgvMapPointSample3D.Builder addPointsBuilder(
          int index) {
        return getPointsFieldBuilder().addBuilder(
            index, cmvr.msgs.Agv.AgvMapPointSample3D.getDefaultInstance());
      }
      /**
       * <pre>
       * 统一点云点样本。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapPointSample3D points = 4;</code>
       */
      public java.util.List<cmvr.msgs.Agv.AgvMapPointSample3D.Builder> 
           getPointsBuilderList() {
        return getPointsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          cmvr.msgs.Agv.AgvMapPointSample3D, cmvr.msgs.Agv.AgvMapPointSample3D.Builder, cmvr.msgs.Agv.AgvMapPointSample3DOrBuilder> 
          getPointsFieldBuilder() {
        if (pointsBuilder_ == null) {
          pointsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              cmvr.msgs.Agv.AgvMapPointSample3D, cmvr.msgs.Agv.AgvMapPointSample3D.Builder, cmvr.msgs.Agv.AgvMapPointSample3DOrBuilder>(
                  points_,
                  ((bitField0_ & 0x00000001) != 0),
                  getParentForChildren(),
                  isClean());
          points_ = null;
        }
        return pointsBuilder_;
      }

      private java.util.List<cmvr.msgs.Agv.AgvMapVoxel3D> voxels_ =
        java.util.Collections.emptyList();
      private void ensureVoxelsIsMutable() {
        if (!((bitField0_ & 0x00000002) != 0)) {
          voxels_ = new java.util.ArrayList<cmvr.msgs.Agv.AgvMapVoxel3D>(voxels_);
          bitField0_ |= 0x00000002;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          cmvr.msgs.Agv.AgvMapVoxel3D, cmvr.msgs.Agv.AgvMapVoxel3D.Builder, cmvr.msgs.Agv.AgvMapVoxel3DOrBuilder> voxelsBuilder_;

      /**
       * <pre>
       * 统一占据体素。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapVoxel3D voxels = 5;</code>
       */
      public java.util.List<cmvr.msgs.Agv.AgvMapVoxel3D> getVoxelsList() {
        if (voxelsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(voxels_);
        } else {
          return voxelsBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * 统一占据体素。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapVoxel3D voxels = 5;</code>
       */
      public int getVoxelsCount() {
        if (voxelsBuilder_ == null) {
          return voxels_.size();
        } else {
          return voxelsBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * 统一占据体素。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapVoxel3D voxels = 5;</code>
       */
      public cmvr.msgs.Agv.AgvMapVoxel3D getVoxels(int index) {
        if (voxelsBuilder_ == null) {
          return voxels_.get(index);
        } else {
          return voxelsBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * 统一占据体素。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapVoxel3D voxels = 5;</code>
       */
      public Builder setVoxels(
          int index, cmvr.msgs.Agv.AgvMapVoxel3D value) {
        if (voxelsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureVoxelsIsMutable();
          voxels_.set(index, value);
          onChanged();
        } else {
          voxelsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * 统一占据体素。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapVoxel3D voxels = 5;</code>
       */
      public Builder setVoxels(
          int index, cmvr.msgs.Agv.AgvMapVoxel3D.Builder builderForValue) {
        if (voxelsBuilder_ == null) {
          ensureVoxelsIsMutable();
          voxels_.set(index, builderForValue.build());
          onChanged();
        } else {
          voxelsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * 统一占据体素。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapVoxel3D voxels = 5;</code>
       */
      public Builder addVoxels(cmvr.msgs.Agv.AgvMapVoxel3D value) {
        if (voxelsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureVoxelsIsMutable();
          voxels_.add(value);
          onChanged();
        } else {
          voxelsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * 统一占据体素。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapVoxel3D voxels = 5;</code>
       */
      public Builder addVoxels(
          int index, cmvr.msgs.Agv.AgvMapVoxel3D value) {
        if (voxelsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureVoxelsIsMutable();
          voxels_.add(index, value);
          onChanged();
        } else {
          voxelsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * 统一占据体素。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapVoxel3D voxels = 5;</code>
       */
      public Builder addVoxels(
          cmvr.msgs.Agv.AgvMapVoxel3D.Builder builderForValue) {
        if (voxelsBuilder_ == null) {
          ensureVoxelsIsMutable();
          voxels_.add(builderForValue.build());
          onChanged();
        } else {
          voxelsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * 统一占据体素。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapVoxel3D voxels = 5;</code>
       */
      public Builder addVoxels(
          int index, cmvr.msgs.Agv.AgvMapVoxel3D.Builder builderForValue) {
        if (voxelsBuilder_ == null) {
          ensureVoxelsIsMutable();
          voxels_.add(index, builderForValue.build());
          onChanged();
        } else {
          voxelsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * 统一占据体素。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapVoxel3D voxels = 5;</code>
       */
      public Builder addAllVoxels(
          java.lang.Iterable<? extends cmvr.msgs.Agv.AgvMapVoxel3D> values) {
        if (voxelsBuilder_ == null) {
          ensureVoxelsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, voxels_);
          onChanged();
        } else {
          voxelsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * 统一占据体素。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapVoxel3D voxels = 5;</code>
       */
      public Builder clearVoxels() {
        if (voxelsBuilder_ == null) {
          voxels_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
        } else {
          voxelsBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * 统一占据体素。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapVoxel3D voxels = 5;</code>
       */
      public Builder removeVoxels(int index) {
        if (voxelsBuilder_ == null) {
          ensureVoxelsIsMutable();
          voxels_.remove(index);
          onChanged();
        } else {
          voxelsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * 统一占据体素。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapVoxel3D voxels = 5;</code>
       */
      public cmvr.msgs.Agv.AgvMapVoxel3D.Builder getVoxelsBuilder(
          int index) {
        return getVoxelsFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * 统一占据体素。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapVoxel3D voxels = 5;</code>
       */
      public cmvr.msgs.Agv.AgvMapVoxel3DOrBuilder getVoxelsOrBuilder(
          int index) {
        if (voxelsBuilder_ == null) {
          return voxels_.get(index);  } else {
          return voxelsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * 统一占据体素。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapVoxel3D voxels = 5;</code>
       */
      public java.util.List<? extends cmvr.msgs.Agv.AgvMapVoxel3DOrBuilder> 
           getVoxelsOrBuilderList() {
        if (voxelsBuilder_ != null) {
          return voxelsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(voxels_);
        }
      }
      /**
       * <pre>
       * 统一占据体素。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapVoxel3D voxels = 5;</code>
       */
      public cmvr.msgs.Agv.AgvMapVoxel3D.Builder addVoxelsBuilder() {
        return getVoxelsFieldBuilder().addBuilder(
            cmvr.msgs.Agv.AgvMapVoxel3D.getDefaultInstance());
      }
      /**
       * <pre>
       * 统一占据体素。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapVoxel3D voxels = 5;</code>
       */
      public cmvr.msgs.Agv.AgvMapVoxel3D.Builder addVoxelsBuilder(
          int index) {
        return getVoxelsFieldBuilder().addBuilder(
            index, cmvr.msgs.Agv.AgvMapVoxel3D.getDefaultInstance());
      }
      /**
       * <pre>
       * 统一占据体素。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapVoxel3D voxels = 5;</code>
       */
      public java.util.List<cmvr.msgs.Agv.AgvMapVoxel3D.Builder> 
           getVoxelsBuilderList() {
        return getVoxelsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          cmvr.msgs.Agv.AgvMapVoxel3D, cmvr.msgs.Agv.AgvMapVoxel3D.Builder, cmvr.msgs.Agv.AgvMapVoxel3DOrBuilder> 
          getVoxelsFieldBuilder() {
        if (voxelsBuilder_ == null) {
          voxelsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              cmvr.msgs.Agv.AgvMapVoxel3D, cmvr.msgs.Agv.AgvMapVoxel3D.Builder, cmvr.msgs.Agv.AgvMapVoxel3DOrBuilder>(
                  voxels_,
                  ((bitField0_ & 0x00000002) != 0),
                  getParentForChildren(),
                  isClean());
          voxels_ = null;
        }
        return voxelsBuilder_;
      }

      private java.util.List<cmvr.msgs.Agv.AgvMapPlane3D> planes_ =
        java.util.Collections.emptyList();
      private void ensurePlanesIsMutable() {
        if (!((bitField0_ & 0x00000004) != 0)) {
          planes_ = new java.util.ArrayList<cmvr.msgs.Agv.AgvMapPlane3D>(planes_);
          bitField0_ |= 0x00000004;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          cmvr.msgs.Agv.AgvMapPlane3D, cmvr.msgs.Agv.AgvMapPlane3D.Builder, cmvr.msgs.Agv.AgvMapPlane3DOrBuilder> planesBuilder_;

      /**
       * <pre>
       * 统一平面特征。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapPlane3D planes = 6;</code>
       */
      public java.util.List<cmvr.msgs.Agv.AgvMapPlane3D> getPlanesList() {
        if (planesBuilder_ == null) {
          return java.util.Collections.unmodifiableList(planes_);
        } else {
          return planesBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * 统一平面特征。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapPlane3D planes = 6;</code>
       */
      public int getPlanesCount() {
        if (planesBuilder_ == null) {
          return planes_.size();
        } else {
          return planesBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * 统一平面特征。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapPlane3D planes = 6;</code>
       */
      public cmvr.msgs.Agv.AgvMapPlane3D getPlanes(int index) {
        if (planesBuilder_ == null) {
          return planes_.get(index);
        } else {
          return planesBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * 统一平面特征。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapPlane3D planes = 6;</code>
       */
      public Builder setPlanes(
          int index, cmvr.msgs.Agv.AgvMapPlane3D value) {
        if (planesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePlanesIsMutable();
          planes_.set(index, value);
          onChanged();
        } else {
          planesBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * 统一平面特征。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapPlane3D planes = 6;</code>
       */
      public Builder setPlanes(
          int index, cmvr.msgs.Agv.AgvMapPlane3D.Builder builderForValue) {
        if (planesBuilder_ == null) {
          ensurePlanesIsMutable();
          planes_.set(index, builderForValue.build());
          onChanged();
        } else {
          planesBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * 统一平面特征。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapPlane3D planes = 6;</code>
       */
      public Builder addPlanes(cmvr.msgs.Agv.AgvMapPlane3D value) {
        if (planesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePlanesIsMutable();
          planes_.add(value);
          onChanged();
        } else {
          planesBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * 统一平面特征。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapPlane3D planes = 6;</code>
       */
      public Builder addPlanes(
          int index, cmvr.msgs.Agv.AgvMapPlane3D value) {
        if (planesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePlanesIsMutable();
          planes_.add(index, value);
          onChanged();
        } else {
          planesBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * 统一平面特征。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapPlane3D planes = 6;</code>
       */
      public Builder addPlanes(
          cmvr.msgs.Agv.AgvMapPlane3D.Builder builderForValue) {
        if (planesBuilder_ == null) {
          ensurePlanesIsMutable();
          planes_.add(builderForValue.build());
          onChanged();
        } else {
          planesBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * 统一平面特征。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapPlane3D planes = 6;</code>
       */
      public Builder addPlanes(
          int index, cmvr.msgs.Agv.AgvMapPlane3D.Builder builderForValue) {
        if (planesBuilder_ == null) {
          ensurePlanesIsMutable();
          planes_.add(index, builderForValue.build());
          onChanged();
        } else {
          planesBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * 统一平面特征。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapPlane3D planes = 6;</code>
       */
      public Builder addAllPlanes(
          java.lang.Iterable<? extends cmvr.msgs.Agv.AgvMapPlane3D> values) {
        if (planesBuilder_ == null) {
          ensurePlanesIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, planes_);
          onChanged();
        } else {
          planesBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * 统一平面特征。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapPlane3D planes = 6;</code>
       */
      public Builder clearPlanes() {
        if (planesBuilder_ == null) {
          planes_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
          onChanged();
        } else {
          planesBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * 统一平面特征。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapPlane3D planes = 6;</code>
       */
      public Builder removePlanes(int index) {
        if (planesBuilder_ == null) {
          ensurePlanesIsMutable();
          planes_.remove(index);
          onChanged();
        } else {
          planesBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * 统一平面特征。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapPlane3D planes = 6;</code>
       */
      public cmvr.msgs.Agv.AgvMapPlane3D.Builder getPlanesBuilder(
          int index) {
        return getPlanesFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * 统一平面特征。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapPlane3D planes = 6;</code>
       */
      public cmvr.msgs.Agv.AgvMapPlane3DOrBuilder getPlanesOrBuilder(
          int index) {
        if (planesBuilder_ == null) {
          return planes_.get(index);  } else {
          return planesBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * 统一平面特征。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapPlane3D planes = 6;</code>
       */
      public java.util.List<? extends cmvr.msgs.Agv.AgvMapPlane3DOrBuilder> 
           getPlanesOrBuilderList() {
        if (planesBuilder_ != null) {
          return planesBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(planes_);
        }
      }
      /**
       * <pre>
       * 统一平面特征。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapPlane3D planes = 6;</code>
       */
      public cmvr.msgs.Agv.AgvMapPlane3D.Builder addPlanesBuilder() {
        return getPlanesFieldBuilder().addBuilder(
            cmvr.msgs.Agv.AgvMapPlane3D.getDefaultInstance());
      }
      /**
       * <pre>
       * 统一平面特征。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapPlane3D planes = 6;</code>
       */
      public cmvr.msgs.Agv.AgvMapPlane3D.Builder addPlanesBuilder(
          int index) {
        return getPlanesFieldBuilder().addBuilder(
            index, cmvr.msgs.Agv.AgvMapPlane3D.getDefaultInstance());
      }
      /**
       * <pre>
       * 统一平面特征。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapPlane3D planes = 6;</code>
       */
      public java.util.List<cmvr.msgs.Agv.AgvMapPlane3D.Builder> 
           getPlanesBuilderList() {
        return getPlanesFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          cmvr.msgs.Agv.AgvMapPlane3D, cmvr.msgs.Agv.AgvMapPlane3D.Builder, cmvr.msgs.Agv.AgvMapPlane3DOrBuilder> 
          getPlanesFieldBuilder() {
        if (planesBuilder_ == null) {
          planesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              cmvr.msgs.Agv.AgvMapPlane3D, cmvr.msgs.Agv.AgvMapPlane3D.Builder, cmvr.msgs.Agv.AgvMapPlane3DOrBuilder>(
                  planes_,
                  ((bitField0_ & 0x00000004) != 0),
                  getParentForChildren(),
                  isClean());
          planes_ = null;
        }
        return planesBuilder_;
      }

      private java.util.List<cmvr.msgs.Agv.AgvMapObject> objects_ =
        java.util.Collections.emptyList();
      private void ensureObjectsIsMutable() {
        if (!((bitField0_ & 0x00000008) != 0)) {
          objects_ = new java.util.ArrayList<cmvr.msgs.Agv.AgvMapObject>(objects_);
          bitField0_ |= 0x00000008;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          cmvr.msgs.Agv.AgvMapObject, cmvr.msgs.Agv.AgvMapObject.Builder, cmvr.msgs.Agv.AgvMapObjectOrBuilder> objectsBuilder_;

      /**
       * <pre>
       * 统一 3D 语义对象，例如站点、区域、标签、地标等。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapObject objects = 7;</code>
       */
      public java.util.List<cmvr.msgs.Agv.AgvMapObject> getObjectsList() {
        if (objectsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(objects_);
        } else {
          return objectsBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * 统一 3D 语义对象，例如站点、区域、标签、地标等。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapObject objects = 7;</code>
       */
      public int getObjectsCount() {
        if (objectsBuilder_ == null) {
          return objects_.size();
        } else {
          return objectsBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * 统一 3D 语义对象，例如站点、区域、标签、地标等。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapObject objects = 7;</code>
       */
      public cmvr.msgs.Agv.AgvMapObject getObjects(int index) {
        if (objectsBuilder_ == null) {
          return objects_.get(index);
        } else {
          return objectsBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * 统一 3D 语义对象，例如站点、区域、标签、地标等。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapObject objects = 7;</code>
       */
      public Builder setObjects(
          int index, cmvr.msgs.Agv.AgvMapObject value) {
        if (objectsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureObjectsIsMutable();
          objects_.set(index, value);
          onChanged();
        } else {
          objectsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * 统一 3D 语义对象，例如站点、区域、标签、地标等。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapObject objects = 7;</code>
       */
      public Builder setObjects(
          int index, cmvr.msgs.Agv.AgvMapObject.Builder builderForValue) {
        if (objectsBuilder_ == null) {
          ensureObjectsIsMutable();
          objects_.set(index, builderForValue.build());
          onChanged();
        } else {
          objectsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * 统一 3D 语义对象，例如站点、区域、标签、地标等。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapObject objects = 7;</code>
       */
      public Builder addObjects(cmvr.msgs.Agv.AgvMapObject value) {
        if (objectsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureObjectsIsMutable();
          objects_.add(value);
          onChanged();
        } else {
          objectsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * 统一 3D 语义对象，例如站点、区域、标签、地标等。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapObject objects = 7;</code>
       */
      public Builder addObjects(
          int index, cmvr.msgs.Agv.AgvMapObject value) {
        if (objectsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureObjectsIsMutable();
          objects_.add(index, value);
          onChanged();
        } else {
          objectsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * 统一 3D 语义对象，例如站点、区域、标签、地标等。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapObject objects = 7;</code>
       */
      public Builder addObjects(
          cmvr.msgs.Agv.AgvMapObject.Builder builderForValue) {
        if (objectsBuilder_ == null) {
          ensureObjectsIsMutable();
          objects_.add(builderForValue.build());
          onChanged();
        } else {
          objectsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * 统一 3D 语义对象，例如站点、区域、标签、地标等。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapObject objects = 7;</code>
       */
      public Builder addObjects(
          int index, cmvr.msgs.Agv.AgvMapObject.Builder builderForValue) {
        if (objectsBuilder_ == null) {
          ensureObjectsIsMutable();
          objects_.add(index, builderForValue.build());
          onChanged();
        } else {
          objectsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * 统一 3D 语义对象，例如站点、区域、标签、地标等。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapObject objects = 7;</code>
       */
      public Builder addAllObjects(
          java.lang.Iterable<? extends cmvr.msgs.Agv.AgvMapObject> values) {
        if (objectsBuilder_ == null) {
          ensureObjectsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, objects_);
          onChanged();
        } else {
          objectsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * 统一 3D 语义对象，例如站点、区域、标签、地标等。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapObject objects = 7;</code>
       */
      public Builder clearObjects() {
        if (objectsBuilder_ == null) {
          objects_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
          onChanged();
        } else {
          objectsBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * 统一 3D 语义对象，例如站点、区域、标签、地标等。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapObject objects = 7;</code>
       */
      public Builder removeObjects(int index) {
        if (objectsBuilder_ == null) {
          ensureObjectsIsMutable();
          objects_.remove(index);
          onChanged();
        } else {
          objectsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * 统一 3D 语义对象，例如站点、区域、标签、地标等。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapObject objects = 7;</code>
       */
      public cmvr.msgs.Agv.AgvMapObject.Builder getObjectsBuilder(
          int index) {
        return getObjectsFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * 统一 3D 语义对象，例如站点、区域、标签、地标等。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapObject objects = 7;</code>
       */
      public cmvr.msgs.Agv.AgvMapObjectOrBuilder getObjectsOrBuilder(
          int index) {
        if (objectsBuilder_ == null) {
          return objects_.get(index);  } else {
          return objectsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * 统一 3D 语义对象，例如站点、区域、标签、地标等。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapObject objects = 7;</code>
       */
      public java.util.List<? extends cmvr.msgs.Agv.AgvMapObjectOrBuilder> 
           getObjectsOrBuilderList() {
        if (objectsBuilder_ != null) {
          return objectsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(objects_);
        }
      }
      /**
       * <pre>
       * 统一 3D 语义对象，例如站点、区域、标签、地标等。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapObject objects = 7;</code>
       */
      public cmvr.msgs.Agv.AgvMapObject.Builder addObjectsBuilder() {
        return getObjectsFieldBuilder().addBuilder(
            cmvr.msgs.Agv.AgvMapObject.getDefaultInstance());
      }
      /**
       * <pre>
       * 统一 3D 语义对象，例如站点、区域、标签、地标等。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapObject objects = 7;</code>
       */
      public cmvr.msgs.Agv.AgvMapObject.Builder addObjectsBuilder(
          int index) {
        return getObjectsFieldBuilder().addBuilder(
            index, cmvr.msgs.Agv.AgvMapObject.getDefaultInstance());
      }
      /**
       * <pre>
       * 统一 3D 语义对象，例如站点、区域、标签、地标等。
       * </pre>
       *
       * <code>repeated .cmvr.msgs.AgvMapObject objects = 7;</code>
       */
      public java.util.List<cmvr.msgs.Agv.AgvMapObject.Builder> 
           getObjectsBuilderList() {
        return getObjectsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          cmvr.msgs.Agv.AgvMapObject, cmvr.msgs.Agv.AgvMapObject.Builder, cmvr.msgs.Agv.AgvMapObjectOrBuilder> 
          getObjectsFieldBuilder() {
        if (objectsBuilder_ == null) {
          objectsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              cmvr.msgs.Agv.AgvMapObject, cmvr.msgs.Agv.AgvMapObject.Builder, cmvr.msgs.Agv.AgvMapObjectOrBuilder>(
                  objects_,
                  ((bitField0_ & 0x00000008) != 0),
                  getParentForChildren(),
                  isClean());
          objects_ = null;
        }
        return objectsBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:cmvr.msgs.AgvUnifiedMap3D)
    }

    // @@protoc_insertion_point(class_scope:cmvr.msgs.AgvUnifiedMap3D)
    private static final cmvr.msgs.Agv.AgvUnifiedMap3D DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new cmvr.msgs.Agv.AgvUnifiedMap3D();
    }

    public static cmvr.msgs.Agv.AgvUnifiedMap3D getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<AgvUnifiedMap3D>
        PARSER = new com.google.protobuf.AbstractParser<AgvUnifiedMap3D>() {
      @java.lang.Override
      public AgvUnifiedMap3D parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (com.google.protobuf.UninitializedMessageException e) {
          throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(e)
              .setUnfinishedMessage(builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

    public static com.google.protobuf.Parser<AgvUnifiedMap3D> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<AgvUnifiedMap3D> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public cmvr.msgs.Agv.AgvUnifiedMap3D getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface AgvUnifiedMapUpdateOrBuilder extends
      // @@protoc_insertion_point(interface_extends:cmvr.msgs.AgvUnifiedMapUpdate)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * 实际发送的地图 id 或名称。请求 map_name 为空时，AGV 可选择当前或最近地图。
     * </pre>
     *
     * <code>string map_id = 1;</code>
     * @return The mapId.
     */
    java.lang.String getMapId();
    /**
     * <pre>
     * 实际发送的地图 id 或名称。请求 map_name 为空时，AGV 可选择当前或最近地图。
     * </pre>
     *
     * <code>string map_id = 1;</code>
     * @return The bytes for mapId.
     */
    com.google.protobuf.ByteString
        getMapIdBytes();

    /**
     * <pre>
     * 建图或地图流会话 id。
     * </pre>
     *
     * <code>string session_id = 2;</code>
     * @return The sessionId.
     */
    java.lang.String getSessionId();
    /**
     * <pre>
     * 建图或地图流会话 id。
     * </pre>
     *
     * <code>string session_id = 2;</code>
     * @return The bytes for sessionId.
     */
    com.google.protobuf.ByteString
        getSessionIdBytes();

    /**
     * <pre>
     * 会话内单调递增序号，从 0 或 1 开始均可，但同一会话内必须保持递增。
     * </pre>
     *
     * <code>uint64 sequence = 3;</code>
     * @return The sequence.
     */
    long getSequence();

    /**
     * <pre>
     * 用于断点续传或增量订阅的不透明令牌。
     * </pre>
     *
     * <code>string resume_token = 4;</code>
     * @return The resumeToken.
     */
    java.lang.String getResumeToken();
    /**
     * <pre>
     * 用于断点续传或增量订阅的不透明令牌。
     * </pre>
     *
     * <code>string resume_token = 4;</code>
     * @return The bytes for resumeToken.
     */
    com.google.protobuf.ByteString
        getResumeTokenBytes();

    /**
     * <pre>
     * 本条更新的数据维度。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvMapDimension dimension = 5;</code>
     * @return The enum numeric value on the wire for dimension.
     */
    int getDimensionValue();
    /**
     * <pre>
     * 本条更新的数据维度。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvMapDimension dimension = 5;</code>
     * @return The dimension.
     */
    cmvr.msgs.Agv.AgvMapDimension getDimension();

    /**
     * <pre>
     * 本条更新是全量、增量还是缓存重置。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvMapUpdateType update_type = 6;</code>
     * @return The enum numeric value on the wire for updateType.
     */
    int getUpdateTypeValue();
    /**
     * <pre>
     * 本条更新是全量、增量还是缓存重置。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvMapUpdateType update_type = 6;</code>
     * @return The updateType.
     */
    cmvr.msgs.Agv.AgvMapUpdateType getUpdateType();

    /**
     * <pre>
     * 坐标系名称，例如 "map"。
     * </pre>
     *
     * <code>string frame_id = 7;</code>
     * @return The frameId.
     */
    java.lang.String getFrameId();
    /**
     * <pre>
     * 坐标系名称，例如 "map"。
     * </pre>
     *
     * <code>string frame_id = 7;</code>
     * @return The bytes for frameId.
     */
    com.google.protobuf.ByteString
        getFrameIdBytes();

    /**
     * <pre>
     * 本条更新产生时间，Unix 时间戳，单位：秒。
     * </pre>
     *
     * <code>double timestamp = 8;</code>
     * @return The timestamp.
     */
    double getTimestamp();

    /**
     * <pre>
     * 是否为全量快照的第一条消息。
     * </pre>
     *
     * <code>bool snapshot_begin = 9;</code>
     * @return The snapshotBegin.
     */
    boolean getSnapshotBegin();

    /**
     * <pre>
     * 是否为全量快照的最后一条消息。
     * </pre>
     *
     * <code>bool snapshot_end = 10;</code>
     * @return The snapshotEnd.
     */
    boolean getSnapshotEnd();

    /**
     * <pre>
     * 大地图分片发送时的分片序号，从 0 开始。
     * </pre>
     *
     * <code>uint32 chunk_index = 11;</code>
     * @return The chunkIndex.
     */
    int getChunkIndex();

    /**
     * <pre>
     * 大地图分片总数；0 表示未知或连续流。
     * </pre>
     *
     * <code>uint32 chunk_count = 12;</code>
     * @return The chunkCount.
     */
    int getChunkCount();

    /**
     * <pre>
     * 统一 2D 地图或 2D 地图增量。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvUnifiedMap2D map_2d = 20;</code>
     * @return Whether the map2d field is set.
     */
    boolean hasMap2D();
    /**
     * <pre>
     * 统一 2D 地图或 2D 地图增量。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvUnifiedMap2D map_2d = 20;</code>
     * @return The map2d.
     */
    cmvr.msgs.Agv.AgvUnifiedMap2D getMap2D();
    /**
     * <pre>
     * 统一 2D 地图或 2D 地图增量。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvUnifiedMap2D map_2d = 20;</code>
     */
    cmvr.msgs.Agv.AgvUnifiedMap2DOrBuilder getMap2DOrBuilder();

    /**
     * <pre>
     * 统一 3D 地图或 3D 地图增量。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvUnifiedMap3D map_3d = 21;</code>
     * @return Whether the map3d field is set.
     */
    boolean hasMap3D();
    /**
     * <pre>
     * 统一 3D 地图或 3D 地图增量。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvUnifiedMap3D map_3d = 21;</code>
     * @return The map3d.
     */
    cmvr.msgs.Agv.AgvUnifiedMap3D getMap3D();
    /**
     * <pre>
     * 统一 3D 地图或 3D 地图增量。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvUnifiedMap3D map_3d = 21;</code>
     */
    cmvr.msgs.Agv.AgvUnifiedMap3DOrBuilder getMap3DOrBuilder();

    public cmvr.msgs.Agv.AgvUnifiedMapUpdate.PayloadCase getPayloadCase();
  }
  /**
   * <pre>
   * 地图流中的单条更新。AGV 适配器必须先把厂商地图转换成 map_2d 或 map_3d，
   * 再通过该消息发送给上位机。
   * </pre>
   *
   * Protobuf type {@code cmvr.msgs.AgvUnifiedMapUpdate}
   */
  public static final class AgvUnifiedMapUpdate extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:cmvr.msgs.AgvUnifiedMapUpdate)
      AgvUnifiedMapUpdateOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use AgvUnifiedMapUpdate.newBuilder() to construct.
    private AgvUnifiedMapUpdate(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private AgvUnifiedMapUpdate() {
      mapId_ = "";
      sessionId_ = "";
      resumeToken_ = "";
      dimension_ = 0;
      updateType_ = 0;
      frameId_ = "";
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new AgvUnifiedMapUpdate();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvUnifiedMapUpdate_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvUnifiedMapUpdate_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              cmvr.msgs.Agv.AgvUnifiedMapUpdate.class, cmvr.msgs.Agv.AgvUnifiedMapUpdate.Builder.class);
    }

    private int payloadCase_ = 0;
    private java.lang.Object payload_;
    public enum PayloadCase
        implements com.google.protobuf.Internal.EnumLite,
            com.google.protobuf.AbstractMessage.InternalOneOfEnum {
      MAP_2D(20),
      MAP_3D(21),
      PAYLOAD_NOT_SET(0);
      private final int value;
      private PayloadCase(int value) {
        this.value = value;
      }
      /**
       * @param value The number of the enum to look for.
       * @return The enum associated with the given number.
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static PayloadCase valueOf(int value) {
        return forNumber(value);
      }

      public static PayloadCase forNumber(int value) {
        switch (value) {
          case 20: return MAP_2D;
          case 21: return MAP_3D;
          case 0: return PAYLOAD_NOT_SET;
          default: return null;
        }
      }
      public int getNumber() {
        return this.value;
      }
    };

    public PayloadCase
    getPayloadCase() {
      return PayloadCase.forNumber(
          payloadCase_);
    }

    public static final int MAP_ID_FIELD_NUMBER = 1;
    private volatile java.lang.Object mapId_;
    /**
     * <pre>
     * 实际发送的地图 id 或名称。请求 map_name 为空时，AGV 可选择当前或最近地图。
     * </pre>
     *
     * <code>string map_id = 1;</code>
     * @return The mapId.
     */
    @java.lang.Override
    public java.lang.String getMapId() {
      java.lang.Object ref = mapId_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        mapId_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * 实际发送的地图 id 或名称。请求 map_name 为空时，AGV 可选择当前或最近地图。
     * </pre>
     *
     * <code>string map_id = 1;</code>
     * @return The bytes for mapId.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getMapIdBytes() {
      java.lang.Object ref = mapId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        mapId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int SESSION_ID_FIELD_NUMBER = 2;
    private volatile java.lang.Object sessionId_;
    /**
     * <pre>
     * 建图或地图流会话 id。
     * </pre>
     *
     * <code>string session_id = 2;</code>
     * @return The sessionId.
     */
    @java.lang.Override
    public java.lang.String getSessionId() {
      java.lang.Object ref = sessionId_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        sessionId_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * 建图或地图流会话 id。
     * </pre>
     *
     * <code>string session_id = 2;</code>
     * @return The bytes for sessionId.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getSessionIdBytes() {
      java.lang.Object ref = sessionId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        sessionId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int SEQUENCE_FIELD_NUMBER = 3;
    private long sequence_;
    /**
     * <pre>
     * 会话内单调递增序号，从 0 或 1 开始均可，但同一会话内必须保持递增。
     * </pre>
     *
     * <code>uint64 sequence = 3;</code>
     * @return The sequence.
     */
    @java.lang.Override
    public long getSequence() {
      return sequence_;
    }

    public static final int RESUME_TOKEN_FIELD_NUMBER = 4;
    private volatile java.lang.Object resumeToken_;
    /**
     * <pre>
     * 用于断点续传或增量订阅的不透明令牌。
     * </pre>
     *
     * <code>string resume_token = 4;</code>
     * @return The resumeToken.
     */
    @java.lang.Override
    public java.lang.String getResumeToken() {
      java.lang.Object ref = resumeToken_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        resumeToken_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * 用于断点续传或增量订阅的不透明令牌。
     * </pre>
     *
     * <code>string resume_token = 4;</code>
     * @return The bytes for resumeToken.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getResumeTokenBytes() {
      java.lang.Object ref = resumeToken_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        resumeToken_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int DIMENSION_FIELD_NUMBER = 5;
    private int dimension_;
    /**
     * <pre>
     * 本条更新的数据维度。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvMapDimension dimension = 5;</code>
     * @return The enum numeric value on the wire for dimension.
     */
    @java.lang.Override public int getDimensionValue() {
      return dimension_;
    }
    /**
     * <pre>
     * 本条更新的数据维度。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvMapDimension dimension = 5;</code>
     * @return The dimension.
     */
    @java.lang.Override public cmvr.msgs.Agv.AgvMapDimension getDimension() {
      @SuppressWarnings("deprecation")
      cmvr.msgs.Agv.AgvMapDimension result = cmvr.msgs.Agv.AgvMapDimension.valueOf(dimension_);
      return result == null ? cmvr.msgs.Agv.AgvMapDimension.UNRECOGNIZED : result;
    }

    public static final int UPDATE_TYPE_FIELD_NUMBER = 6;
    private int updateType_;
    /**
     * <pre>
     * 本条更新是全量、增量还是缓存重置。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvMapUpdateType update_type = 6;</code>
     * @return The enum numeric value on the wire for updateType.
     */
    @java.lang.Override public int getUpdateTypeValue() {
      return updateType_;
    }
    /**
     * <pre>
     * 本条更新是全量、增量还是缓存重置。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvMapUpdateType update_type = 6;</code>
     * @return The updateType.
     */
    @java.lang.Override public cmvr.msgs.Agv.AgvMapUpdateType getUpdateType() {
      @SuppressWarnings("deprecation")
      cmvr.msgs.Agv.AgvMapUpdateType result = cmvr.msgs.Agv.AgvMapUpdateType.valueOf(updateType_);
      return result == null ? cmvr.msgs.Agv.AgvMapUpdateType.UNRECOGNIZED : result;
    }

    public static final int FRAME_ID_FIELD_NUMBER = 7;
    private volatile java.lang.Object frameId_;
    /**
     * <pre>
     * 坐标系名称，例如 "map"。
     * </pre>
     *
     * <code>string frame_id = 7;</code>
     * @return The frameId.
     */
    @java.lang.Override
    public java.lang.String getFrameId() {
      java.lang.Object ref = frameId_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        frameId_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * 坐标系名称，例如 "map"。
     * </pre>
     *
     * <code>string frame_id = 7;</code>
     * @return The bytes for frameId.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getFrameIdBytes() {
      java.lang.Object ref = frameId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        frameId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int TIMESTAMP_FIELD_NUMBER = 8;
    private double timestamp_;
    /**
     * <pre>
     * 本条更新产生时间，Unix 时间戳，单位：秒。
     * </pre>
     *
     * <code>double timestamp = 8;</code>
     * @return The timestamp.
     */
    @java.lang.Override
    public double getTimestamp() {
      return timestamp_;
    }

    public static final int SNAPSHOT_BEGIN_FIELD_NUMBER = 9;
    private boolean snapshotBegin_;
    /**
     * <pre>
     * 是否为全量快照的第一条消息。
     * </pre>
     *
     * <code>bool snapshot_begin = 9;</code>
     * @return The snapshotBegin.
     */
    @java.lang.Override
    public boolean getSnapshotBegin() {
      return snapshotBegin_;
    }

    public static final int SNAPSHOT_END_FIELD_NUMBER = 10;
    private boolean snapshotEnd_;
    /**
     * <pre>
     * 是否为全量快照的最后一条消息。
     * </pre>
     *
     * <code>bool snapshot_end = 10;</code>
     * @return The snapshotEnd.
     */
    @java.lang.Override
    public boolean getSnapshotEnd() {
      return snapshotEnd_;
    }

    public static final int CHUNK_INDEX_FIELD_NUMBER = 11;
    private int chunkIndex_;
    /**
     * <pre>
     * 大地图分片发送时的分片序号，从 0 开始。
     * </pre>
     *
     * <code>uint32 chunk_index = 11;</code>
     * @return The chunkIndex.
     */
    @java.lang.Override
    public int getChunkIndex() {
      return chunkIndex_;
    }

    public static final int CHUNK_COUNT_FIELD_NUMBER = 12;
    private int chunkCount_;
    /**
     * <pre>
     * 大地图分片总数；0 表示未知或连续流。
     * </pre>
     *
     * <code>uint32 chunk_count = 12;</code>
     * @return The chunkCount.
     */
    @java.lang.Override
    public int getChunkCount() {
      return chunkCount_;
    }

    public static final int MAP_2D_FIELD_NUMBER = 20;
    /**
     * <pre>
     * 统一 2D 地图或 2D 地图增量。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvUnifiedMap2D map_2d = 20;</code>
     * @return Whether the map2d field is set.
     */
    @java.lang.Override
    public boolean hasMap2D() {
      return payloadCase_ == 20;
    }
    /**
     * <pre>
     * 统一 2D 地图或 2D 地图增量。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvUnifiedMap2D map_2d = 20;</code>
     * @return The map2d.
     */
    @java.lang.Override
    public cmvr.msgs.Agv.AgvUnifiedMap2D getMap2D() {
      if (payloadCase_ == 20) {
         return (cmvr.msgs.Agv.AgvUnifiedMap2D) payload_;
      }
      return cmvr.msgs.Agv.AgvUnifiedMap2D.getDefaultInstance();
    }
    /**
     * <pre>
     * 统一 2D 地图或 2D 地图增量。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvUnifiedMap2D map_2d = 20;</code>
     */
    @java.lang.Override
    public cmvr.msgs.Agv.AgvUnifiedMap2DOrBuilder getMap2DOrBuilder() {
      if (payloadCase_ == 20) {
         return (cmvr.msgs.Agv.AgvUnifiedMap2D) payload_;
      }
      return cmvr.msgs.Agv.AgvUnifiedMap2D.getDefaultInstance();
    }

    public static final int MAP_3D_FIELD_NUMBER = 21;
    /**
     * <pre>
     * 统一 3D 地图或 3D 地图增量。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvUnifiedMap3D map_3d = 21;</code>
     * @return Whether the map3d field is set.
     */
    @java.lang.Override
    public boolean hasMap3D() {
      return payloadCase_ == 21;
    }
    /**
     * <pre>
     * 统一 3D 地图或 3D 地图增量。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvUnifiedMap3D map_3d = 21;</code>
     * @return The map3d.
     */
    @java.lang.Override
    public cmvr.msgs.Agv.AgvUnifiedMap3D getMap3D() {
      if (payloadCase_ == 21) {
         return (cmvr.msgs.Agv.AgvUnifiedMap3D) payload_;
      }
      return cmvr.msgs.Agv.AgvUnifiedMap3D.getDefaultInstance();
    }
    /**
     * <pre>
     * 统一 3D 地图或 3D 地图增量。
     * </pre>
     *
     * <code>.cmvr.msgs.AgvUnifiedMap3D map_3d = 21;</code>
     */
    @java.lang.Override
    public cmvr.msgs.Agv.AgvUnifiedMap3DOrBuilder getMap3DOrBuilder() {
      if (payloadCase_ == 21) {
         return (cmvr.msgs.Agv.AgvUnifiedMap3D) payload_;
      }
      return cmvr.msgs.Agv.AgvUnifiedMap3D.getDefaultInstance();
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(mapId_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, mapId_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(sessionId_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, sessionId_);
      }
      if (sequence_ != 0L) {
        output.writeUInt64(3, sequence_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(resumeToken_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 4, resumeToken_);
      }
      if (dimension_ != cmvr.msgs.Agv.AgvMapDimension.AGV_MAP_DIMENSION_UNSPECIFIED.getNumber()) {
        output.writeEnum(5, dimension_);
      }
      if (updateType_ != cmvr.msgs.Agv.AgvMapUpdateType.AGV_MAP_UPDATE_UNSPECIFIED.getNumber()) {
        output.writeEnum(6, updateType_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(frameId_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 7, frameId_);
      }
      if (java.lang.Double.doubleToRawLongBits(timestamp_) != 0) {
        output.writeDouble(8, timestamp_);
      }
      if (snapshotBegin_ != false) {
        output.writeBool(9, snapshotBegin_);
      }
      if (snapshotEnd_ != false) {
        output.writeBool(10, snapshotEnd_);
      }
      if (chunkIndex_ != 0) {
        output.writeUInt32(11, chunkIndex_);
      }
      if (chunkCount_ != 0) {
        output.writeUInt32(12, chunkCount_);
      }
      if (payloadCase_ == 20) {
        output.writeMessage(20, (cmvr.msgs.Agv.AgvUnifiedMap2D) payload_);
      }
      if (payloadCase_ == 21) {
        output.writeMessage(21, (cmvr.msgs.Agv.AgvUnifiedMap3D) payload_);
      }
      getUnknownFields().writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(mapId_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, mapId_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(sessionId_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, sessionId_);
      }
      if (sequence_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(3, sequence_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(resumeToken_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, resumeToken_);
      }
      if (dimension_ != cmvr.msgs.Agv.AgvMapDimension.AGV_MAP_DIMENSION_UNSPECIFIED.getNumber()) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(5, dimension_);
      }
      if (updateType_ != cmvr.msgs.Agv.AgvMapUpdateType.AGV_MAP_UPDATE_UNSPECIFIED.getNumber()) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(6, updateType_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(frameId_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(7, frameId_);
      }
      if (java.lang.Double.doubleToRawLongBits(timestamp_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(8, timestamp_);
      }
      if (snapshotBegin_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(9, snapshotBegin_);
      }
      if (snapshotEnd_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(10, snapshotEnd_);
      }
      if (chunkIndex_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(11, chunkIndex_);
      }
      if (chunkCount_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(12, chunkCount_);
      }
      if (payloadCase_ == 20) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(20, (cmvr.msgs.Agv.AgvUnifiedMap2D) payload_);
      }
      if (payloadCase_ == 21) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(21, (cmvr.msgs.Agv.AgvUnifiedMap3D) payload_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof cmvr.msgs.Agv.AgvUnifiedMapUpdate)) {
        return super.equals(obj);
      }
      cmvr.msgs.Agv.AgvUnifiedMapUpdate other = (cmvr.msgs.Agv.AgvUnifiedMapUpdate) obj;

      if (!getMapId()
          .equals(other.getMapId())) return false;
      if (!getSessionId()
          .equals(other.getSessionId())) return false;
      if (getSequence()
          != other.getSequence()) return false;
      if (!getResumeToken()
          .equals(other.getResumeToken())) return false;
      if (dimension_ != other.dimension_) return false;
      if (updateType_ != other.updateType_) return false;
      if (!getFrameId()
          .equals(other.getFrameId())) return false;
      if (java.lang.Double.doubleToLongBits(getTimestamp())
          != java.lang.Double.doubleToLongBits(
              other.getTimestamp())) return false;
      if (getSnapshotBegin()
          != other.getSnapshotBegin()) return false;
      if (getSnapshotEnd()
          != other.getSnapshotEnd()) return false;
      if (getChunkIndex()
          != other.getChunkIndex()) return false;
      if (getChunkCount()
          != other.getChunkCount()) return false;
      if (!getPayloadCase().equals(other.getPayloadCase())) return false;
      switch (payloadCase_) {
        case 20:
          if (!getMap2D()
              .equals(other.getMap2D())) return false;
          break;
        case 21:
          if (!getMap3D()
              .equals(other.getMap3D())) return false;
          break;
        case 0:
        default:
      }
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + MAP_ID_FIELD_NUMBER;
      hash = (53 * hash) + getMapId().hashCode();
      hash = (37 * hash) + SESSION_ID_FIELD_NUMBER;
      hash = (53 * hash) + getSessionId().hashCode();
      hash = (37 * hash) + SEQUENCE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getSequence());
      hash = (37 * hash) + RESUME_TOKEN_FIELD_NUMBER;
      hash = (53 * hash) + getResumeToken().hashCode();
      hash = (37 * hash) + DIMENSION_FIELD_NUMBER;
      hash = (53 * hash) + dimension_;
      hash = (37 * hash) + UPDATE_TYPE_FIELD_NUMBER;
      hash = (53 * hash) + updateType_;
      hash = (37 * hash) + FRAME_ID_FIELD_NUMBER;
      hash = (53 * hash) + getFrameId().hashCode();
      hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getTimestamp()));
      hash = (37 * hash) + SNAPSHOT_BEGIN_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getSnapshotBegin());
      hash = (37 * hash) + SNAPSHOT_END_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getSnapshotEnd());
      hash = (37 * hash) + CHUNK_INDEX_FIELD_NUMBER;
      hash = (53 * hash) + getChunkIndex();
      hash = (37 * hash) + CHUNK_COUNT_FIELD_NUMBER;
      hash = (53 * hash) + getChunkCount();
      switch (payloadCase_) {
        case 20:
          hash = (37 * hash) + MAP_2D_FIELD_NUMBER;
          hash = (53 * hash) + getMap2D().hashCode();
          break;
        case 21:
          hash = (37 * hash) + MAP_3D_FIELD_NUMBER;
          hash = (53 * hash) + getMap3D().hashCode();
          break;
        case 0:
        default:
      }
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static cmvr.msgs.Agv.AgvUnifiedMapUpdate parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.msgs.Agv.AgvUnifiedMapUpdate parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvUnifiedMapUpdate parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.msgs.Agv.AgvUnifiedMapUpdate parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvUnifiedMapUpdate parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.msgs.Agv.AgvUnifiedMapUpdate parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvUnifiedMapUpdate parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cmvr.msgs.Agv.AgvUnifiedMapUpdate parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvUnifiedMapUpdate parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static cmvr.msgs.Agv.AgvUnifiedMapUpdate parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvUnifiedMapUpdate parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cmvr.msgs.Agv.AgvUnifiedMapUpdate parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(cmvr.msgs.Agv.AgvUnifiedMapUpdate prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * 地图流中的单条更新。AGV 适配器必须先把厂商地图转换成 map_2d 或 map_3d，
     * 再通过该消息发送给上位机。
     * </pre>
     *
     * Protobuf type {@code cmvr.msgs.AgvUnifiedMapUpdate}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:cmvr.msgs.AgvUnifiedMapUpdate)
        cmvr.msgs.Agv.AgvUnifiedMapUpdateOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvUnifiedMapUpdate_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvUnifiedMapUpdate_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                cmvr.msgs.Agv.AgvUnifiedMapUpdate.class, cmvr.msgs.Agv.AgvUnifiedMapUpdate.Builder.class);
      }

      // Construct using cmvr.msgs.Agv.AgvUnifiedMapUpdate.newBuilder()
      private Builder() {

      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        mapId_ = "";

        sessionId_ = "";

        sequence_ = 0L;

        resumeToken_ = "";

        dimension_ = 0;

        updateType_ = 0;

        frameId_ = "";

        timestamp_ = 0D;

        snapshotBegin_ = false;

        snapshotEnd_ = false;

        chunkIndex_ = 0;

        chunkCount_ = 0;

        if (map2DBuilder_ != null) {
          map2DBuilder_.clear();
        }
        if (map3DBuilder_ != null) {
          map3DBuilder_.clear();
        }
        payloadCase_ = 0;
        payload_ = null;
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvUnifiedMapUpdate_descriptor;
      }

      @java.lang.Override
      public cmvr.msgs.Agv.AgvUnifiedMapUpdate getDefaultInstanceForType() {
        return cmvr.msgs.Agv.AgvUnifiedMapUpdate.getDefaultInstance();
      }

      @java.lang.Override
      public cmvr.msgs.Agv.AgvUnifiedMapUpdate build() {
        cmvr.msgs.Agv.AgvUnifiedMapUpdate result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public cmvr.msgs.Agv.AgvUnifiedMapUpdate buildPartial() {
        cmvr.msgs.Agv.AgvUnifiedMapUpdate result = new cmvr.msgs.Agv.AgvUnifiedMapUpdate(this);
        result.mapId_ = mapId_;
        result.sessionId_ = sessionId_;
        result.sequence_ = sequence_;
        result.resumeToken_ = resumeToken_;
        result.dimension_ = dimension_;
        result.updateType_ = updateType_;
        result.frameId_ = frameId_;
        result.timestamp_ = timestamp_;
        result.snapshotBegin_ = snapshotBegin_;
        result.snapshotEnd_ = snapshotEnd_;
        result.chunkIndex_ = chunkIndex_;
        result.chunkCount_ = chunkCount_;
        if (payloadCase_ == 20) {
          if (map2DBuilder_ == null) {
            result.payload_ = payload_;
          } else {
            result.payload_ = map2DBuilder_.build();
          }
        }
        if (payloadCase_ == 21) {
          if (map3DBuilder_ == null) {
            result.payload_ = payload_;
          } else {
            result.payload_ = map3DBuilder_.build();
          }
        }
        result.payloadCase_ = payloadCase_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof cmvr.msgs.Agv.AgvUnifiedMapUpdate) {
          return mergeFrom((cmvr.msgs.Agv.AgvUnifiedMapUpdate)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(cmvr.msgs.Agv.AgvUnifiedMapUpdate other) {
        if (other == cmvr.msgs.Agv.AgvUnifiedMapUpdate.getDefaultInstance()) return this;
        if (!other.getMapId().isEmpty()) {
          mapId_ = other.mapId_;
          onChanged();
        }
        if (!other.getSessionId().isEmpty()) {
          sessionId_ = other.sessionId_;
          onChanged();
        }
        if (other.getSequence() != 0L) {
          setSequence(other.getSequence());
        }
        if (!other.getResumeToken().isEmpty()) {
          resumeToken_ = other.resumeToken_;
          onChanged();
        }
        if (other.dimension_ != 0) {
          setDimensionValue(other.getDimensionValue());
        }
        if (other.updateType_ != 0) {
          setUpdateTypeValue(other.getUpdateTypeValue());
        }
        if (!other.getFrameId().isEmpty()) {
          frameId_ = other.frameId_;
          onChanged();
        }
        if (other.getTimestamp() != 0D) {
          setTimestamp(other.getTimestamp());
        }
        if (other.getSnapshotBegin() != false) {
          setSnapshotBegin(other.getSnapshotBegin());
        }
        if (other.getSnapshotEnd() != false) {
          setSnapshotEnd(other.getSnapshotEnd());
        }
        if (other.getChunkIndex() != 0) {
          setChunkIndex(other.getChunkIndex());
        }
        if (other.getChunkCount() != 0) {
          setChunkCount(other.getChunkCount());
        }
        switch (other.getPayloadCase()) {
          case MAP_2D: {
            mergeMap2D(other.getMap2D());
            break;
          }
          case MAP_3D: {
            mergeMap3D(other.getMap3D());
            break;
          }
          case PAYLOAD_NOT_SET: {
            break;
          }
        }
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 10: {
                mapId_ = input.readStringRequireUtf8();

                break;
              } // case 10
              case 18: {
                sessionId_ = input.readStringRequireUtf8();

                break;
              } // case 18
              case 24: {
                sequence_ = input.readUInt64();

                break;
              } // case 24
              case 34: {
                resumeToken_ = input.readStringRequireUtf8();

                break;
              } // case 34
              case 40: {
                dimension_ = input.readEnum();

                break;
              } // case 40
              case 48: {
                updateType_ = input.readEnum();

                break;
              } // case 48
              case 58: {
                frameId_ = input.readStringRequireUtf8();

                break;
              } // case 58
              case 65: {
                timestamp_ = input.readDouble();

                break;
              } // case 65
              case 72: {
                snapshotBegin_ = input.readBool();

                break;
              } // case 72
              case 80: {
                snapshotEnd_ = input.readBool();

                break;
              } // case 80
              case 88: {
                chunkIndex_ = input.readUInt32();

                break;
              } // case 88
              case 96: {
                chunkCount_ = input.readUInt32();

                break;
              } // case 96
              case 162: {
                input.readMessage(
                    getMap2DFieldBuilder().getBuilder(),
                    extensionRegistry);
                payloadCase_ = 20;
                break;
              } // case 162
              case 170: {
                input.readMessage(
                    getMap3DFieldBuilder().getBuilder(),
                    extensionRegistry);
                payloadCase_ = 21;
                break;
              } // case 170
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }
      private int payloadCase_ = 0;
      private java.lang.Object payload_;
      public PayloadCase
          getPayloadCase() {
        return PayloadCase.forNumber(
            payloadCase_);
      }

      public Builder clearPayload() {
        payloadCase_ = 0;
        payload_ = null;
        onChanged();
        return this;
      }


      private java.lang.Object mapId_ = "";
      /**
       * <pre>
       * 实际发送的地图 id 或名称。请求 map_name 为空时，AGV 可选择当前或最近地图。
       * </pre>
       *
       * <code>string map_id = 1;</code>
       * @return The mapId.
       */
      public java.lang.String getMapId() {
        java.lang.Object ref = mapId_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          mapId_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * 实际发送的地图 id 或名称。请求 map_name 为空时，AGV 可选择当前或最近地图。
       * </pre>
       *
       * <code>string map_id = 1;</code>
       * @return The bytes for mapId.
       */
      public com.google.protobuf.ByteString
          getMapIdBytes() {
        java.lang.Object ref = mapId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          mapId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * 实际发送的地图 id 或名称。请求 map_name 为空时，AGV 可选择当前或最近地图。
       * </pre>
       *
       * <code>string map_id = 1;</code>
       * @param value The mapId to set.
       * @return This builder for chaining.
       */
      public Builder setMapId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        mapId_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 实际发送的地图 id 或名称。请求 map_name 为空时，AGV 可选择当前或最近地图。
       * </pre>
       *
       * <code>string map_id = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearMapId() {
        
        mapId_ = getDefaultInstance().getMapId();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 实际发送的地图 id 或名称。请求 map_name 为空时，AGV 可选择当前或最近地图。
       * </pre>
       *
       * <code>string map_id = 1;</code>
       * @param value The bytes for mapId to set.
       * @return This builder for chaining.
       */
      public Builder setMapIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        mapId_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object sessionId_ = "";
      /**
       * <pre>
       * 建图或地图流会话 id。
       * </pre>
       *
       * <code>string session_id = 2;</code>
       * @return The sessionId.
       */
      public java.lang.String getSessionId() {
        java.lang.Object ref = sessionId_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          sessionId_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * 建图或地图流会话 id。
       * </pre>
       *
       * <code>string session_id = 2;</code>
       * @return The bytes for sessionId.
       */
      public com.google.protobuf.ByteString
          getSessionIdBytes() {
        java.lang.Object ref = sessionId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          sessionId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * 建图或地图流会话 id。
       * </pre>
       *
       * <code>string session_id = 2;</code>
       * @param value The sessionId to set.
       * @return This builder for chaining.
       */
      public Builder setSessionId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        sessionId_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 建图或地图流会话 id。
       * </pre>
       *
       * <code>string session_id = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearSessionId() {
        
        sessionId_ = getDefaultInstance().getSessionId();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 建图或地图流会话 id。
       * </pre>
       *
       * <code>string session_id = 2;</code>
       * @param value The bytes for sessionId to set.
       * @return This builder for chaining.
       */
      public Builder setSessionIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        sessionId_ = value;
        onChanged();
        return this;
      }

      private long sequence_ ;
      /**
       * <pre>
       * 会话内单调递增序号，从 0 或 1 开始均可，但同一会话内必须保持递增。
       * </pre>
       *
       * <code>uint64 sequence = 3;</code>
       * @return The sequence.
       */
      @java.lang.Override
      public long getSequence() {
        return sequence_;
      }
      /**
       * <pre>
       * 会话内单调递增序号，从 0 或 1 开始均可，但同一会话内必须保持递增。
       * </pre>
       *
       * <code>uint64 sequence = 3;</code>
       * @param value The sequence to set.
       * @return This builder for chaining.
       */
      public Builder setSequence(long value) {
        
        sequence_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 会话内单调递增序号，从 0 或 1 开始均可，但同一会话内必须保持递增。
       * </pre>
       *
       * <code>uint64 sequence = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearSequence() {
        
        sequence_ = 0L;
        onChanged();
        return this;
      }

      private java.lang.Object resumeToken_ = "";
      /**
       * <pre>
       * 用于断点续传或增量订阅的不透明令牌。
       * </pre>
       *
       * <code>string resume_token = 4;</code>
       * @return The resumeToken.
       */
      public java.lang.String getResumeToken() {
        java.lang.Object ref = resumeToken_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          resumeToken_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * 用于断点续传或增量订阅的不透明令牌。
       * </pre>
       *
       * <code>string resume_token = 4;</code>
       * @return The bytes for resumeToken.
       */
      public com.google.protobuf.ByteString
          getResumeTokenBytes() {
        java.lang.Object ref = resumeToken_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          resumeToken_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * 用于断点续传或增量订阅的不透明令牌。
       * </pre>
       *
       * <code>string resume_token = 4;</code>
       * @param value The resumeToken to set.
       * @return This builder for chaining.
       */
      public Builder setResumeToken(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        resumeToken_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 用于断点续传或增量订阅的不透明令牌。
       * </pre>
       *
       * <code>string resume_token = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearResumeToken() {
        
        resumeToken_ = getDefaultInstance().getResumeToken();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 用于断点续传或增量订阅的不透明令牌。
       * </pre>
       *
       * <code>string resume_token = 4;</code>
       * @param value The bytes for resumeToken to set.
       * @return This builder for chaining.
       */
      public Builder setResumeTokenBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        resumeToken_ = value;
        onChanged();
        return this;
      }

      private int dimension_ = 0;
      /**
       * <pre>
       * 本条更新的数据维度。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvMapDimension dimension = 5;</code>
       * @return The enum numeric value on the wire for dimension.
       */
      @java.lang.Override public int getDimensionValue() {
        return dimension_;
      }
      /**
       * <pre>
       * 本条更新的数据维度。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvMapDimension dimension = 5;</code>
       * @param value The enum numeric value on the wire for dimension to set.
       * @return This builder for chaining.
       */
      public Builder setDimensionValue(int value) {
        
        dimension_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 本条更新的数据维度。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvMapDimension dimension = 5;</code>
       * @return The dimension.
       */
      @java.lang.Override
      public cmvr.msgs.Agv.AgvMapDimension getDimension() {
        @SuppressWarnings("deprecation")
        cmvr.msgs.Agv.AgvMapDimension result = cmvr.msgs.Agv.AgvMapDimension.valueOf(dimension_);
        return result == null ? cmvr.msgs.Agv.AgvMapDimension.UNRECOGNIZED : result;
      }
      /**
       * <pre>
       * 本条更新的数据维度。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvMapDimension dimension = 5;</code>
       * @param value The dimension to set.
       * @return This builder for chaining.
       */
      public Builder setDimension(cmvr.msgs.Agv.AgvMapDimension value) {
        if (value == null) {
          throw new NullPointerException();
        }
        
        dimension_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 本条更新的数据维度。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvMapDimension dimension = 5;</code>
       * @return This builder for chaining.
       */
      public Builder clearDimension() {
        
        dimension_ = 0;
        onChanged();
        return this;
      }

      private int updateType_ = 0;
      /**
       * <pre>
       * 本条更新是全量、增量还是缓存重置。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvMapUpdateType update_type = 6;</code>
       * @return The enum numeric value on the wire for updateType.
       */
      @java.lang.Override public int getUpdateTypeValue() {
        return updateType_;
      }
      /**
       * <pre>
       * 本条更新是全量、增量还是缓存重置。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvMapUpdateType update_type = 6;</code>
       * @param value The enum numeric value on the wire for updateType to set.
       * @return This builder for chaining.
       */
      public Builder setUpdateTypeValue(int value) {
        
        updateType_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 本条更新是全量、增量还是缓存重置。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvMapUpdateType update_type = 6;</code>
       * @return The updateType.
       */
      @java.lang.Override
      public cmvr.msgs.Agv.AgvMapUpdateType getUpdateType() {
        @SuppressWarnings("deprecation")
        cmvr.msgs.Agv.AgvMapUpdateType result = cmvr.msgs.Agv.AgvMapUpdateType.valueOf(updateType_);
        return result == null ? cmvr.msgs.Agv.AgvMapUpdateType.UNRECOGNIZED : result;
      }
      /**
       * <pre>
       * 本条更新是全量、增量还是缓存重置。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvMapUpdateType update_type = 6;</code>
       * @param value The updateType to set.
       * @return This builder for chaining.
       */
      public Builder setUpdateType(cmvr.msgs.Agv.AgvMapUpdateType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        
        updateType_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 本条更新是全量、增量还是缓存重置。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvMapUpdateType update_type = 6;</code>
       * @return This builder for chaining.
       */
      public Builder clearUpdateType() {
        
        updateType_ = 0;
        onChanged();
        return this;
      }

      private java.lang.Object frameId_ = "";
      /**
       * <pre>
       * 坐标系名称，例如 "map"。
       * </pre>
       *
       * <code>string frame_id = 7;</code>
       * @return The frameId.
       */
      public java.lang.String getFrameId() {
        java.lang.Object ref = frameId_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          frameId_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * 坐标系名称，例如 "map"。
       * </pre>
       *
       * <code>string frame_id = 7;</code>
       * @return The bytes for frameId.
       */
      public com.google.protobuf.ByteString
          getFrameIdBytes() {
        java.lang.Object ref = frameId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          frameId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * 坐标系名称，例如 "map"。
       * </pre>
       *
       * <code>string frame_id = 7;</code>
       * @param value The frameId to set.
       * @return This builder for chaining.
       */
      public Builder setFrameId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        frameId_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 坐标系名称，例如 "map"。
       * </pre>
       *
       * <code>string frame_id = 7;</code>
       * @return This builder for chaining.
       */
      public Builder clearFrameId() {
        
        frameId_ = getDefaultInstance().getFrameId();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 坐标系名称，例如 "map"。
       * </pre>
       *
       * <code>string frame_id = 7;</code>
       * @param value The bytes for frameId to set.
       * @return This builder for chaining.
       */
      public Builder setFrameIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        frameId_ = value;
        onChanged();
        return this;
      }

      private double timestamp_ ;
      /**
       * <pre>
       * 本条更新产生时间，Unix 时间戳，单位：秒。
       * </pre>
       *
       * <code>double timestamp = 8;</code>
       * @return The timestamp.
       */
      @java.lang.Override
      public double getTimestamp() {
        return timestamp_;
      }
      /**
       * <pre>
       * 本条更新产生时间，Unix 时间戳，单位：秒。
       * </pre>
       *
       * <code>double timestamp = 8;</code>
       * @param value The timestamp to set.
       * @return This builder for chaining.
       */
      public Builder setTimestamp(double value) {
        
        timestamp_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 本条更新产生时间，Unix 时间戳，单位：秒。
       * </pre>
       *
       * <code>double timestamp = 8;</code>
       * @return This builder for chaining.
       */
      public Builder clearTimestamp() {
        
        timestamp_ = 0D;
        onChanged();
        return this;
      }

      private boolean snapshotBegin_ ;
      /**
       * <pre>
       * 是否为全量快照的第一条消息。
       * </pre>
       *
       * <code>bool snapshot_begin = 9;</code>
       * @return The snapshotBegin.
       */
      @java.lang.Override
      public boolean getSnapshotBegin() {
        return snapshotBegin_;
      }
      /**
       * <pre>
       * 是否为全量快照的第一条消息。
       * </pre>
       *
       * <code>bool snapshot_begin = 9;</code>
       * @param value The snapshotBegin to set.
       * @return This builder for chaining.
       */
      public Builder setSnapshotBegin(boolean value) {
        
        snapshotBegin_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 是否为全量快照的第一条消息。
       * </pre>
       *
       * <code>bool snapshot_begin = 9;</code>
       * @return This builder for chaining.
       */
      public Builder clearSnapshotBegin() {
        
        snapshotBegin_ = false;
        onChanged();
        return this;
      }

      private boolean snapshotEnd_ ;
      /**
       * <pre>
       * 是否为全量快照的最后一条消息。
       * </pre>
       *
       * <code>bool snapshot_end = 10;</code>
       * @return The snapshotEnd.
       */
      @java.lang.Override
      public boolean getSnapshotEnd() {
        return snapshotEnd_;
      }
      /**
       * <pre>
       * 是否为全量快照的最后一条消息。
       * </pre>
       *
       * <code>bool snapshot_end = 10;</code>
       * @param value The snapshotEnd to set.
       * @return This builder for chaining.
       */
      public Builder setSnapshotEnd(boolean value) {
        
        snapshotEnd_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 是否为全量快照的最后一条消息。
       * </pre>
       *
       * <code>bool snapshot_end = 10;</code>
       * @return This builder for chaining.
       */
      public Builder clearSnapshotEnd() {
        
        snapshotEnd_ = false;
        onChanged();
        return this;
      }

      private int chunkIndex_ ;
      /**
       * <pre>
       * 大地图分片发送时的分片序号，从 0 开始。
       * </pre>
       *
       * <code>uint32 chunk_index = 11;</code>
       * @return The chunkIndex.
       */
      @java.lang.Override
      public int getChunkIndex() {
        return chunkIndex_;
      }
      /**
       * <pre>
       * 大地图分片发送时的分片序号，从 0 开始。
       * </pre>
       *
       * <code>uint32 chunk_index = 11;</code>
       * @param value The chunkIndex to set.
       * @return This builder for chaining.
       */
      public Builder setChunkIndex(int value) {
        
        chunkIndex_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 大地图分片发送时的分片序号，从 0 开始。
       * </pre>
       *
       * <code>uint32 chunk_index = 11;</code>
       * @return This builder for chaining.
       */
      public Builder clearChunkIndex() {
        
        chunkIndex_ = 0;
        onChanged();
        return this;
      }

      private int chunkCount_ ;
      /**
       * <pre>
       * 大地图分片总数；0 表示未知或连续流。
       * </pre>
       *
       * <code>uint32 chunk_count = 12;</code>
       * @return The chunkCount.
       */
      @java.lang.Override
      public int getChunkCount() {
        return chunkCount_;
      }
      /**
       * <pre>
       * 大地图分片总数；0 表示未知或连续流。
       * </pre>
       *
       * <code>uint32 chunk_count = 12;</code>
       * @param value The chunkCount to set.
       * @return This builder for chaining.
       */
      public Builder setChunkCount(int value) {
        
        chunkCount_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 大地图分片总数；0 表示未知或连续流。
       * </pre>
       *
       * <code>uint32 chunk_count = 12;</code>
       * @return This builder for chaining.
       */
      public Builder clearChunkCount() {
        
        chunkCount_ = 0;
        onChanged();
        return this;
      }

      private com.google.protobuf.SingleFieldBuilderV3<
          cmvr.msgs.Agv.AgvUnifiedMap2D, cmvr.msgs.Agv.AgvUnifiedMap2D.Builder, cmvr.msgs.Agv.AgvUnifiedMap2DOrBuilder> map2DBuilder_;
      /**
       * <pre>
       * 统一 2D 地图或 2D 地图增量。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvUnifiedMap2D map_2d = 20;</code>
       * @return Whether the map2d field is set.
       */
      @java.lang.Override
      public boolean hasMap2D() {
        return payloadCase_ == 20;
      }
      /**
       * <pre>
       * 统一 2D 地图或 2D 地图增量。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvUnifiedMap2D map_2d = 20;</code>
       * @return The map2d.
       */
      @java.lang.Override
      public cmvr.msgs.Agv.AgvUnifiedMap2D getMap2D() {
        if (map2DBuilder_ == null) {
          if (payloadCase_ == 20) {
            return (cmvr.msgs.Agv.AgvUnifiedMap2D) payload_;
          }
          return cmvr.msgs.Agv.AgvUnifiedMap2D.getDefaultInstance();
        } else {
          if (payloadCase_ == 20) {
            return map2DBuilder_.getMessage();
          }
          return cmvr.msgs.Agv.AgvUnifiedMap2D.getDefaultInstance();
        }
      }
      /**
       * <pre>
       * 统一 2D 地图或 2D 地图增量。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvUnifiedMap2D map_2d = 20;</code>
       */
      public Builder setMap2D(cmvr.msgs.Agv.AgvUnifiedMap2D value) {
        if (map2DBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          payload_ = value;
          onChanged();
        } else {
          map2DBuilder_.setMessage(value);
        }
        payloadCase_ = 20;
        return this;
      }
      /**
       * <pre>
       * 统一 2D 地图或 2D 地图增量。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvUnifiedMap2D map_2d = 20;</code>
       */
      public Builder setMap2D(
          cmvr.msgs.Agv.AgvUnifiedMap2D.Builder builderForValue) {
        if (map2DBuilder_ == null) {
          payload_ = builderForValue.build();
          onChanged();
        } else {
          map2DBuilder_.setMessage(builderForValue.build());
        }
        payloadCase_ = 20;
        return this;
      }
      /**
       * <pre>
       * 统一 2D 地图或 2D 地图增量。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvUnifiedMap2D map_2d = 20;</code>
       */
      public Builder mergeMap2D(cmvr.msgs.Agv.AgvUnifiedMap2D value) {
        if (map2DBuilder_ == null) {
          if (payloadCase_ == 20 &&
              payload_ != cmvr.msgs.Agv.AgvUnifiedMap2D.getDefaultInstance()) {
            payload_ = cmvr.msgs.Agv.AgvUnifiedMap2D.newBuilder((cmvr.msgs.Agv.AgvUnifiedMap2D) payload_)
                .mergeFrom(value).buildPartial();
          } else {
            payload_ = value;
          }
          onChanged();
        } else {
          if (payloadCase_ == 20) {
            map2DBuilder_.mergeFrom(value);
          } else {
            map2DBuilder_.setMessage(value);
          }
        }
        payloadCase_ = 20;
        return this;
      }
      /**
       * <pre>
       * 统一 2D 地图或 2D 地图增量。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvUnifiedMap2D map_2d = 20;</code>
       */
      public Builder clearMap2D() {
        if (map2DBuilder_ == null) {
          if (payloadCase_ == 20) {
            payloadCase_ = 0;
            payload_ = null;
            onChanged();
          }
        } else {
          if (payloadCase_ == 20) {
            payloadCase_ = 0;
            payload_ = null;
          }
          map2DBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * 统一 2D 地图或 2D 地图增量。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvUnifiedMap2D map_2d = 20;</code>
       */
      public cmvr.msgs.Agv.AgvUnifiedMap2D.Builder getMap2DBuilder() {
        return getMap2DFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * 统一 2D 地图或 2D 地图增量。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvUnifiedMap2D map_2d = 20;</code>
       */
      @java.lang.Override
      public cmvr.msgs.Agv.AgvUnifiedMap2DOrBuilder getMap2DOrBuilder() {
        if ((payloadCase_ == 20) && (map2DBuilder_ != null)) {
          return map2DBuilder_.getMessageOrBuilder();
        } else {
          if (payloadCase_ == 20) {
            return (cmvr.msgs.Agv.AgvUnifiedMap2D) payload_;
          }
          return cmvr.msgs.Agv.AgvUnifiedMap2D.getDefaultInstance();
        }
      }
      /**
       * <pre>
       * 统一 2D 地图或 2D 地图增量。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvUnifiedMap2D map_2d = 20;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          cmvr.msgs.Agv.AgvUnifiedMap2D, cmvr.msgs.Agv.AgvUnifiedMap2D.Builder, cmvr.msgs.Agv.AgvUnifiedMap2DOrBuilder> 
          getMap2DFieldBuilder() {
        if (map2DBuilder_ == null) {
          if (!(payloadCase_ == 20)) {
            payload_ = cmvr.msgs.Agv.AgvUnifiedMap2D.getDefaultInstance();
          }
          map2DBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              cmvr.msgs.Agv.AgvUnifiedMap2D, cmvr.msgs.Agv.AgvUnifiedMap2D.Builder, cmvr.msgs.Agv.AgvUnifiedMap2DOrBuilder>(
                  (cmvr.msgs.Agv.AgvUnifiedMap2D) payload_,
                  getParentForChildren(),
                  isClean());
          payload_ = null;
        }
        payloadCase_ = 20;
        onChanged();;
        return map2DBuilder_;
      }

      private com.google.protobuf.SingleFieldBuilderV3<
          cmvr.msgs.Agv.AgvUnifiedMap3D, cmvr.msgs.Agv.AgvUnifiedMap3D.Builder, cmvr.msgs.Agv.AgvUnifiedMap3DOrBuilder> map3DBuilder_;
      /**
       * <pre>
       * 统一 3D 地图或 3D 地图增量。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvUnifiedMap3D map_3d = 21;</code>
       * @return Whether the map3d field is set.
       */
      @java.lang.Override
      public boolean hasMap3D() {
        return payloadCase_ == 21;
      }
      /**
       * <pre>
       * 统一 3D 地图或 3D 地图增量。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvUnifiedMap3D map_3d = 21;</code>
       * @return The map3d.
       */
      @java.lang.Override
      public cmvr.msgs.Agv.AgvUnifiedMap3D getMap3D() {
        if (map3DBuilder_ == null) {
          if (payloadCase_ == 21) {
            return (cmvr.msgs.Agv.AgvUnifiedMap3D) payload_;
          }
          return cmvr.msgs.Agv.AgvUnifiedMap3D.getDefaultInstance();
        } else {
          if (payloadCase_ == 21) {
            return map3DBuilder_.getMessage();
          }
          return cmvr.msgs.Agv.AgvUnifiedMap3D.getDefaultInstance();
        }
      }
      /**
       * <pre>
       * 统一 3D 地图或 3D 地图增量。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvUnifiedMap3D map_3d = 21;</code>
       */
      public Builder setMap3D(cmvr.msgs.Agv.AgvUnifiedMap3D value) {
        if (map3DBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          payload_ = value;
          onChanged();
        } else {
          map3DBuilder_.setMessage(value);
        }
        payloadCase_ = 21;
        return this;
      }
      /**
       * <pre>
       * 统一 3D 地图或 3D 地图增量。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvUnifiedMap3D map_3d = 21;</code>
       */
      public Builder setMap3D(
          cmvr.msgs.Agv.AgvUnifiedMap3D.Builder builderForValue) {
        if (map3DBuilder_ == null) {
          payload_ = builderForValue.build();
          onChanged();
        } else {
          map3DBuilder_.setMessage(builderForValue.build());
        }
        payloadCase_ = 21;
        return this;
      }
      /**
       * <pre>
       * 统一 3D 地图或 3D 地图增量。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvUnifiedMap3D map_3d = 21;</code>
       */
      public Builder mergeMap3D(cmvr.msgs.Agv.AgvUnifiedMap3D value) {
        if (map3DBuilder_ == null) {
          if (payloadCase_ == 21 &&
              payload_ != cmvr.msgs.Agv.AgvUnifiedMap3D.getDefaultInstance()) {
            payload_ = cmvr.msgs.Agv.AgvUnifiedMap3D.newBuilder((cmvr.msgs.Agv.AgvUnifiedMap3D) payload_)
                .mergeFrom(value).buildPartial();
          } else {
            payload_ = value;
          }
          onChanged();
        } else {
          if (payloadCase_ == 21) {
            map3DBuilder_.mergeFrom(value);
          } else {
            map3DBuilder_.setMessage(value);
          }
        }
        payloadCase_ = 21;
        return this;
      }
      /**
       * <pre>
       * 统一 3D 地图或 3D 地图增量。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvUnifiedMap3D map_3d = 21;</code>
       */
      public Builder clearMap3D() {
        if (map3DBuilder_ == null) {
          if (payloadCase_ == 21) {
            payloadCase_ = 0;
            payload_ = null;
            onChanged();
          }
        } else {
          if (payloadCase_ == 21) {
            payloadCase_ = 0;
            payload_ = null;
          }
          map3DBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * 统一 3D 地图或 3D 地图增量。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvUnifiedMap3D map_3d = 21;</code>
       */
      public cmvr.msgs.Agv.AgvUnifiedMap3D.Builder getMap3DBuilder() {
        return getMap3DFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * 统一 3D 地图或 3D 地图增量。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvUnifiedMap3D map_3d = 21;</code>
       */
      @java.lang.Override
      public cmvr.msgs.Agv.AgvUnifiedMap3DOrBuilder getMap3DOrBuilder() {
        if ((payloadCase_ == 21) && (map3DBuilder_ != null)) {
          return map3DBuilder_.getMessageOrBuilder();
        } else {
          if (payloadCase_ == 21) {
            return (cmvr.msgs.Agv.AgvUnifiedMap3D) payload_;
          }
          return cmvr.msgs.Agv.AgvUnifiedMap3D.getDefaultInstance();
        }
      }
      /**
       * <pre>
       * 统一 3D 地图或 3D 地图增量。
       * </pre>
       *
       * <code>.cmvr.msgs.AgvUnifiedMap3D map_3d = 21;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          cmvr.msgs.Agv.AgvUnifiedMap3D, cmvr.msgs.Agv.AgvUnifiedMap3D.Builder, cmvr.msgs.Agv.AgvUnifiedMap3DOrBuilder> 
          getMap3DFieldBuilder() {
        if (map3DBuilder_ == null) {
          if (!(payloadCase_ == 21)) {
            payload_ = cmvr.msgs.Agv.AgvUnifiedMap3D.getDefaultInstance();
          }
          map3DBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              cmvr.msgs.Agv.AgvUnifiedMap3D, cmvr.msgs.Agv.AgvUnifiedMap3D.Builder, cmvr.msgs.Agv.AgvUnifiedMap3DOrBuilder>(
                  (cmvr.msgs.Agv.AgvUnifiedMap3D) payload_,
                  getParentForChildren(),
                  isClean());
          payload_ = null;
        }
        payloadCase_ = 21;
        onChanged();;
        return map3DBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:cmvr.msgs.AgvUnifiedMapUpdate)
    }

    // @@protoc_insertion_point(class_scope:cmvr.msgs.AgvUnifiedMapUpdate)
    private static final cmvr.msgs.Agv.AgvUnifiedMapUpdate DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new cmvr.msgs.Agv.AgvUnifiedMapUpdate();
    }

    public static cmvr.msgs.Agv.AgvUnifiedMapUpdate getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<AgvUnifiedMapUpdate>
        PARSER = new com.google.protobuf.AbstractParser<AgvUnifiedMapUpdate>() {
      @java.lang.Override
      public AgvUnifiedMapUpdate parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (com.google.protobuf.UninitializedMessageException e) {
          throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(e)
              .setUnfinishedMessage(builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

    public static com.google.protobuf.Parser<AgvUnifiedMapUpdate> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<AgvUnifiedMapUpdate> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public cmvr.msgs.Agv.AgvUnifiedMapUpdate getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface AgvNavigationStatusOrBuilder extends
      // @@protoc_insertion_point(interface_extends:cmvr.msgs.AgvNavigationStatus)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * 导航状态，取值对应服务端内部 AgvTaskState 枚举的整数值。
     * </pre>
     *
     * <code>int32 state = 1;</code>
     * @return The state.
     */
    int getState();

    /**
     * <pre>
     * 导航任务类型，取值对应服务端内部 AgvTaskType 枚举的整数值。
     * </pre>
     *
     * <code>int32 type = 2;</code>
     * @return The type.
     */
    int getType();

    /**
     * <pre>
     * 当前任务进度，范围：[0, 1]；未知时置为 0。
     * </pre>
     *
     * <code>double progress = 3;</code>
     * @return The progress.
     */
    double getProgress();

    /**
     * <pre>
     * 状态描述或错误信息。
     * </pre>
     *
     * <code>string message = 4;</code>
     * @return The message.
     */
    java.lang.String getMessage();
    /**
     * <pre>
     * 状态描述或错误信息。
     * </pre>
     *
     * <code>string message = 4;</code>
     * @return The bytes for message.
     */
    com.google.protobuf.ByteString
        getMessageBytes();
  }
  /**
   * <pre>
   * 当前导航任务状态。
   * </pre>
   *
   * Protobuf type {@code cmvr.msgs.AgvNavigationStatus}
   */
  public static final class AgvNavigationStatus extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:cmvr.msgs.AgvNavigationStatus)
      AgvNavigationStatusOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use AgvNavigationStatus.newBuilder() to construct.
    private AgvNavigationStatus(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private AgvNavigationStatus() {
      message_ = "";
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new AgvNavigationStatus();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvNavigationStatus_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvNavigationStatus_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              cmvr.msgs.Agv.AgvNavigationStatus.class, cmvr.msgs.Agv.AgvNavigationStatus.Builder.class);
    }

    public static final int STATE_FIELD_NUMBER = 1;
    private int state_;
    /**
     * <pre>
     * 导航状态，取值对应服务端内部 AgvTaskState 枚举的整数值。
     * </pre>
     *
     * <code>int32 state = 1;</code>
     * @return The state.
     */
    @java.lang.Override
    public int getState() {
      return state_;
    }

    public static final int TYPE_FIELD_NUMBER = 2;
    private int type_;
    /**
     * <pre>
     * 导航任务类型，取值对应服务端内部 AgvTaskType 枚举的整数值。
     * </pre>
     *
     * <code>int32 type = 2;</code>
     * @return The type.
     */
    @java.lang.Override
    public int getType() {
      return type_;
    }

    public static final int PROGRESS_FIELD_NUMBER = 3;
    private double progress_;
    /**
     * <pre>
     * 当前任务进度，范围：[0, 1]；未知时置为 0。
     * </pre>
     *
     * <code>double progress = 3;</code>
     * @return The progress.
     */
    @java.lang.Override
    public double getProgress() {
      return progress_;
    }

    public static final int MESSAGE_FIELD_NUMBER = 4;
    private volatile java.lang.Object message_;
    /**
     * <pre>
     * 状态描述或错误信息。
     * </pre>
     *
     * <code>string message = 4;</code>
     * @return The message.
     */
    @java.lang.Override
    public java.lang.String getMessage() {
      java.lang.Object ref = message_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        message_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * 状态描述或错误信息。
     * </pre>
     *
     * <code>string message = 4;</code>
     * @return The bytes for message.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getMessageBytes() {
      java.lang.Object ref = message_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        message_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (state_ != 0) {
        output.writeInt32(1, state_);
      }
      if (type_ != 0) {
        output.writeInt32(2, type_);
      }
      if (java.lang.Double.doubleToRawLongBits(progress_) != 0) {
        output.writeDouble(3, progress_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(message_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 4, message_);
      }
      getUnknownFields().writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (state_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, state_);
      }
      if (type_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(2, type_);
      }
      if (java.lang.Double.doubleToRawLongBits(progress_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(3, progress_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(message_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, message_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof cmvr.msgs.Agv.AgvNavigationStatus)) {
        return super.equals(obj);
      }
      cmvr.msgs.Agv.AgvNavigationStatus other = (cmvr.msgs.Agv.AgvNavigationStatus) obj;

      if (getState()
          != other.getState()) return false;
      if (getType()
          != other.getType()) return false;
      if (java.lang.Double.doubleToLongBits(getProgress())
          != java.lang.Double.doubleToLongBits(
              other.getProgress())) return false;
      if (!getMessage()
          .equals(other.getMessage())) return false;
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + STATE_FIELD_NUMBER;
      hash = (53 * hash) + getState();
      hash = (37 * hash) + TYPE_FIELD_NUMBER;
      hash = (53 * hash) + getType();
      hash = (37 * hash) + PROGRESS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getProgress()));
      hash = (37 * hash) + MESSAGE_FIELD_NUMBER;
      hash = (53 * hash) + getMessage().hashCode();
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static cmvr.msgs.Agv.AgvNavigationStatus parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.msgs.Agv.AgvNavigationStatus parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvNavigationStatus parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.msgs.Agv.AgvNavigationStatus parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvNavigationStatus parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cmvr.msgs.Agv.AgvNavigationStatus parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvNavigationStatus parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cmvr.msgs.Agv.AgvNavigationStatus parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvNavigationStatus parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static cmvr.msgs.Agv.AgvNavigationStatus parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static cmvr.msgs.Agv.AgvNavigationStatus parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cmvr.msgs.Agv.AgvNavigationStatus parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(cmvr.msgs.Agv.AgvNavigationStatus prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * 当前导航任务状态。
     * </pre>
     *
     * Protobuf type {@code cmvr.msgs.AgvNavigationStatus}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:cmvr.msgs.AgvNavigationStatus)
        cmvr.msgs.Agv.AgvNavigationStatusOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvNavigationStatus_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvNavigationStatus_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                cmvr.msgs.Agv.AgvNavigationStatus.class, cmvr.msgs.Agv.AgvNavigationStatus.Builder.class);
      }

      // Construct using cmvr.msgs.Agv.AgvNavigationStatus.newBuilder()
      private Builder() {

      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        state_ = 0;

        type_ = 0;

        progress_ = 0D;

        message_ = "";

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return cmvr.msgs.Agv.internal_static_cmvr_msgs_AgvNavigationStatus_descriptor;
      }

      @java.lang.Override
      public cmvr.msgs.Agv.AgvNavigationStatus getDefaultInstanceForType() {
        return cmvr.msgs.Agv.AgvNavigationStatus.getDefaultInstance();
      }

      @java.lang.Override
      public cmvr.msgs.Agv.AgvNavigationStatus build() {
        cmvr.msgs.Agv.AgvNavigationStatus result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public cmvr.msgs.Agv.AgvNavigationStatus buildPartial() {
        cmvr.msgs.Agv.AgvNavigationStatus result = new cmvr.msgs.Agv.AgvNavigationStatus(this);
        result.state_ = state_;
        result.type_ = type_;
        result.progress_ = progress_;
        result.message_ = message_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof cmvr.msgs.Agv.AgvNavigationStatus) {
          return mergeFrom((cmvr.msgs.Agv.AgvNavigationStatus)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(cmvr.msgs.Agv.AgvNavigationStatus other) {
        if (other == cmvr.msgs.Agv.AgvNavigationStatus.getDefaultInstance()) return this;
        if (other.getState() != 0) {
          setState(other.getState());
        }
        if (other.getType() != 0) {
          setType(other.getType());
        }
        if (other.getProgress() != 0D) {
          setProgress(other.getProgress());
        }
        if (!other.getMessage().isEmpty()) {
          message_ = other.message_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 8: {
                state_ = input.readInt32();

                break;
              } // case 8
              case 16: {
                type_ = input.readInt32();

                break;
              } // case 16
              case 25: {
                progress_ = input.readDouble();

                break;
              } // case 25
              case 34: {
                message_ = input.readStringRequireUtf8();

                break;
              } // case 34
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }

      private int state_ ;
      /**
       * <pre>
       * 导航状态，取值对应服务端内部 AgvTaskState 枚举的整数值。
       * </pre>
       *
       * <code>int32 state = 1;</code>
       * @return The state.
       */
      @java.lang.Override
      public int getState() {
        return state_;
      }
      /**
       * <pre>
       * 导航状态，取值对应服务端内部 AgvTaskState 枚举的整数值。
       * </pre>
       *
       * <code>int32 state = 1;</code>
       * @param value The state to set.
       * @return This builder for chaining.
       */
      public Builder setState(int value) {
        
        state_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 导航状态，取值对应服务端内部 AgvTaskState 枚举的整数值。
       * </pre>
       *
       * <code>int32 state = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearState() {
        
        state_ = 0;
        onChanged();
        return this;
      }

      private int type_ ;
      /**
       * <pre>
       * 导航任务类型，取值对应服务端内部 AgvTaskType 枚举的整数值。
       * </pre>
       *
       * <code>int32 type = 2;</code>
       * @return The type.
       */
      @java.lang.Override
      public int getType() {
        return type_;
      }
      /**
       * <pre>
       * 导航任务类型，取值对应服务端内部 AgvTaskType 枚举的整数值。
       * </pre>
       *
       * <code>int32 type = 2;</code>
       * @param value The type to set.
       * @return This builder for chaining.
       */
      public Builder setType(int value) {
        
        type_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 导航任务类型，取值对应服务端内部 AgvTaskType 枚举的整数值。
       * </pre>
       *
       * <code>int32 type = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearType() {
        
        type_ = 0;
        onChanged();
        return this;
      }

      private double progress_ ;
      /**
       * <pre>
       * 当前任务进度，范围：[0, 1]；未知时置为 0。
       * </pre>
       *
       * <code>double progress = 3;</code>
       * @return The progress.
       */
      @java.lang.Override
      public double getProgress() {
        return progress_;
      }
      /**
       * <pre>
       * 当前任务进度，范围：[0, 1]；未知时置为 0。
       * </pre>
       *
       * <code>double progress = 3;</code>
       * @param value The progress to set.
       * @return This builder for chaining.
       */
      public Builder setProgress(double value) {
        
        progress_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 当前任务进度，范围：[0, 1]；未知时置为 0。
       * </pre>
       *
       * <code>double progress = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearProgress() {
        
        progress_ = 0D;
        onChanged();
        return this;
      }

      private java.lang.Object message_ = "";
      /**
       * <pre>
       * 状态描述或错误信息。
       * </pre>
       *
       * <code>string message = 4;</code>
       * @return The message.
       */
      public java.lang.String getMessage() {
        java.lang.Object ref = message_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          message_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * 状态描述或错误信息。
       * </pre>
       *
       * <code>string message = 4;</code>
       * @return The bytes for message.
       */
      public com.google.protobuf.ByteString
          getMessageBytes() {
        java.lang.Object ref = message_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          message_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * 状态描述或错误信息。
       * </pre>
       *
       * <code>string message = 4;</code>
       * @param value The message to set.
       * @return This builder for chaining.
       */
      public Builder setMessage(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        message_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 状态描述或错误信息。
       * </pre>
       *
       * <code>string message = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearMessage() {
        
        message_ = getDefaultInstance().getMessage();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 状态描述或错误信息。
       * </pre>
       *
       * <code>string message = 4;</code>
       * @param value The bytes for message to set.
       * @return This builder for chaining.
       */
      public Builder setMessageBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        message_ = value;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:cmvr.msgs.AgvNavigationStatus)
    }

    // @@protoc_insertion_point(class_scope:cmvr.msgs.AgvNavigationStatus)
    private static final cmvr.msgs.Agv.AgvNavigationStatus DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new cmvr.msgs.Agv.AgvNavigationStatus();
    }

    public static cmvr.msgs.Agv.AgvNavigationStatus getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<AgvNavigationStatus>
        PARSER = new com.google.protobuf.AbstractParser<AgvNavigationStatus>() {
      @java.lang.Override
      public AgvNavigationStatus parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (com.google.protobuf.UninitializedMessageException e) {
          throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(e)
              .setUnfinishedMessage(builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

    public static com.google.protobuf.Parser<AgvNavigationStatus> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<AgvNavigationStatus> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public cmvr.msgs.Agv.AgvNavigationStatus getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_cmvr_msgs_AgvPose2d_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_cmvr_msgs_AgvPose2d_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_cmvr_msgs_AgvVelocity_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_cmvr_msgs_AgvVelocity_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_cmvr_msgs_AgvBatteryState_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_cmvr_msgs_AgvBatteryState_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_cmvr_msgs_AgvMotionOptions_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_cmvr_msgs_AgvMotionOptions_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_cmvr_msgs_AgvAdapterParams_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_cmvr_msgs_AgvAdapterParams_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_cmvr_msgs_AgvAdapterParams_ValuesEntry_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_cmvr_msgs_AgvAdapterParams_ValuesEntry_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_cmvr_msgs_AgvRuntimeState_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_cmvr_msgs_AgvRuntimeState_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_cmvr_msgs_AgvStation_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_cmvr_msgs_AgvStation_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_cmvr_msgs_AgvPathSegment_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_cmvr_msgs_AgvPathSegment_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_cmvr_msgs_AgvMapPoint3D_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_cmvr_msgs_AgvMapPoint3D_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_cmvr_msgs_AgvUnifiedMap2D_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_cmvr_msgs_AgvUnifiedMap2D_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_cmvr_msgs_AgvMapPointSample3D_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_cmvr_msgs_AgvMapPointSample3D_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_cmvr_msgs_AgvMapVoxel3D_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_cmvr_msgs_AgvMapVoxel3D_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_cmvr_msgs_AgvMapPlane3D_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_cmvr_msgs_AgvMapPlane3D_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_cmvr_msgs_AgvMapObject_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_cmvr_msgs_AgvMapObject_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_cmvr_msgs_AgvMapObject_PropertiesEntry_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_cmvr_msgs_AgvMapObject_PropertiesEntry_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_cmvr_msgs_AgvUnifiedMap3D_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_cmvr_msgs_AgvUnifiedMap3D_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_cmvr_msgs_AgvUnifiedMapUpdate_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_cmvr_msgs_AgvUnifiedMapUpdate_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_cmvr_msgs_AgvNavigationStatus_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_cmvr_msgs_AgvNavigationStatus_fieldAccessorTable;

  public static com.google.protobuf.Descriptors.FileDescriptor
      getDescriptor() {
    return descriptor;
  }
  private static  com.google.protobuf.Descriptors.FileDescriptor
      descriptor;
  static {
    java.lang.String[] descriptorData = {
      "\n\023cmvr/msgs/agv.proto\022\tcmvr.msgs\"0\n\tAgvP" +
      "ose2d\022\t\n\001x\030\001 \001(\001\022\t\n\001y\030\002 \001(\001\022\r\n\005theta\030\003 \001" +
      "(\001\"1\n\013AgvVelocity\022\n\n\002vx\030\001 \001(\001\022\n\n\002vy\030\002 \001(" +
      "\001\022\n\n\002wz\030\003 \001(\001\"n\n\017AgvBatteryState\022\022\n\nperc" +
      "entage\030\001 \001(\001\022\017\n\007voltage\030\002 \001(\001\022\017\n\007current" +
      "\030\003 \001(\001\022\023\n\013temperature\030\004 \001(\001\022\020\n\010charging\030" +
      "\005 \001(\010\"\324\001\n\020AgvMotionOptions\022\021\n\tmax_speed\030" +
      "\001 \001(\001\022\031\n\021max_angular_speed\030\002 \001(\001\022\030\n\020max_" +
      "acceleration\030\003 \001(\001\022 \n\030max_angular_accele" +
      "ration\030\004 \001(\001\022\026\n\016reach_distance\030\005 \001(\001\022\023\n\013" +
      "reach_angle\030\006 \001(\001\022\023\n\013speed_ratio\030\007 \001(\001\022\024" +
      "\n\014asynchronous\030\010 \001(\010\"z\n\020AgvAdapterParams" +
      "\0227\n\006values\030\001 \003(\0132\'.cmvr.msgs.AgvAdapterP" +
      "arams.ValuesEntry\032-\n\013ValuesEntry\022\013\n\003key\030" +
      "\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"\317\002\n\017AgvRuntimeS" +
      "tate\022\021\n\ttimestamp\030\001 \001(\001\022\014\n\004mode\030\002 \001(\005\022\021\n" +
      "\tconnected\030\003 \001(\010\022\021\n\tlocalized\030\004 \001(\010\022\016\n\006m" +
      "oving\030\005 \001(\010\022\r\n\005fault\030\006 \001(\010\022\031\n\021emergency_" +
      "stopped\030\007 \001(\010\022\"\n\004pose\030\010 \001(\0132\024.cmvr.msgs." +
      "AgvPose2d\022(\n\010velocity\030\t \001(\0132\026.cmvr.msgs." +
      "AgvVelocity\022+\n\007battery\030\n \001(\0132\032.cmvr.msgs" +
      ".AgvBatteryState\022\023\n\013current_map\030\013 \001(\t\022\027\n" +
      "\017current_station\030\014 \001(\t\022\022\n\nlast_error\030\r \001" +
      "(\t\"_\n\nAgvStation\022\n\n\002id\030\001 \001(\t\022\014\n\004type\030\002 \001" +
      "(\t\022\"\n\004pose\030\003 \001(\0132\024.cmvr.msgs.AgvPose2d\022\023" +
      "\n\013description\030\004 \001(\t\"@\n\016AgvPathSegment\022\026\n" +
      "\016source_station\030\001 \001(\t\022\026\n\016target_station\030" +
      "\002 \001(\t\"0\n\rAgvMapPoint3D\022\t\n\001x\030\001 \001(\001\022\t\n\001y\030\002" +
      " \001(\001\022\t\n\001z\030\003 \001(\001\"\307\001\n\017AgvUnifiedMap2D\022\020\n\010f" +
      "rame_id\030\001 \001(\t\022\021\n\ttimestamp\030\002 \001(\001\022\022\n\nreso" +
      "lution\030\003 \001(\001\022\r\n\005width\030\004 \001(\r\022\016\n\006height\030\005 " +
      "\001(\r\022$\n\006origin\030\006 \001(\0132\024.cmvr.msgs.AgvPose2" +
      "d\022\014\n\004data\030\007 \003(\005\022(\n\007objects\030\010 \003(\0132\027.cmvr." +
      "msgs.AgvMapObject\"l\n\023AgvMapPointSample3D" +
      "\022\t\n\001x\030\001 \001(\001\022\t\n\001y\030\002 \001(\001\022\t\n\001z\030\003 \001(\001\022\021\n\tint" +
      "ensity\030\004 \001(\002\022\014\n\004ring\030\005 \001(\r\022\023\n\013time_offse" +
      "t\030\006 \001(\001\"E\n\rAgvMapVoxel3D\022\t\n\001x\030\001 \001(\005\022\t\n\001y" +
      "\030\002 \001(\005\022\t\n\001z\030\003 \001(\005\022\023\n\013probability\030\004 \001(\002\"~" +
      "\n\rAgvMapPlane3D\022(\n\006center\030\001 \001(\0132\030.cmvr.m" +
      "sgs.AgvMapPoint3D\022(\n\006normal\030\002 \001(\0132\030.cmvr" +
      ".msgs.AgvMapPoint3D\022\t\n\001d\030\003 \001(\001\022\016\n\006radius" +
      "\030\004 \001(\001\"\360\001\n\014AgvMapObject\022\n\n\002id\030\001 \001(\t\022)\n\004t" +
      "ype\030\002 \001(\0162\033.cmvr.msgs.AgvMapObjectType\022(" +
      "\n\006points\030\003 \003(\0132\030.cmvr.msgs.AgvMapPoint3D" +
      "\022\017\n\007heading\030\004 \001(\001\022;\n\nproperties\030\005 \003(\0132\'." +
      "cmvr.msgs.AgvMapObject.PropertiesEntry\0321" +
      "\n\017PropertiesEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030" +
      "\002 \001(\t:\0028\001\"\376\001\n\017AgvUnifiedMap3D\022\020\n\010frame_i" +
      "d\030\001 \001(\t\022\021\n\ttimestamp\030\002 \001(\001\022\030\n\020voxel_reso" +
      "lution\030\003 \001(\001\022.\n\006points\030\004 \003(\0132\036.cmvr.msgs" +
      ".AgvMapPointSample3D\022(\n\006voxels\030\005 \003(\0132\030.c" +
      "mvr.msgs.AgvMapVoxel3D\022(\n\006planes\030\006 \003(\0132\030" +
      ".cmvr.msgs.AgvMapPlane3D\022(\n\007objects\030\007 \003(" +
      "\0132\027.cmvr.msgs.AgvMapObject\"\246\003\n\023AgvUnifie" +
      "dMapUpdate\022\016\n\006map_id\030\001 \001(\t\022\022\n\nsession_id" +
      "\030\002 \001(\t\022\020\n\010sequence\030\003 \001(\004\022\024\n\014resume_token" +
      "\030\004 \001(\t\022-\n\tdimension\030\005 \001(\0162\032.cmvr.msgs.Ag" +
      "vMapDimension\0220\n\013update_type\030\006 \001(\0162\033.cmv" +
      "r.msgs.AgvMapUpdateType\022\020\n\010frame_id\030\007 \001(" +
      "\t\022\021\n\ttimestamp\030\010 \001(\001\022\026\n\016snapshot_begin\030\t" +
      " \001(\010\022\024\n\014snapshot_end\030\n \001(\010\022\023\n\013chunk_inde" +
      "x\030\013 \001(\r\022\023\n\013chunk_count\030\014 \001(\r\022,\n\006map_2d\030\024" +
      " \001(\0132\032.cmvr.msgs.AgvUnifiedMap2DH\000\022,\n\006ma" +
      "p_3d\030\025 \001(\0132\032.cmvr.msgs.AgvUnifiedMap3DH\000" +
      "B\t\n\007payload\"U\n\023AgvNavigationStatus\022\r\n\005st" +
      "ate\030\001 \001(\005\022\014\n\004type\030\002 \001(\005\022\020\n\010progress\030\003 \001(" +
      "\001\022\017\n\007message\030\004 \001(\t*k\n\017AgvMapDimension\022!\n" +
      "\035AGV_MAP_DIMENSION_UNSPECIFIED\020\000\022\016\n\nAGV_" +
      "MAP_2D\020\001\022\016\n\nAGV_MAP_3D\020\002\022\025\n\021AGV_MAP_2D_A" +
      "ND_3D\020\003*\211\001\n\020AgvMapUpdateType\022\036\n\032AGV_MAP_" +
      "UPDATE_UNSPECIFIED\020\000\022\033\n\027AGV_MAP_UPDATE_S" +
      "NAPSHOT\020\001\022\036\n\032AGV_MAP_UPDATE_INCREMENTAL\020" +
      "\002\022\030\n\024AGV_MAP_UPDATE_RESET\020\003*\376\001\n\020AgvMapOb" +
      "jectType\022\036\n\032AGV_MAP_OBJECT_UNSPECIFIED\020\000" +
      "\022\032\n\026AGV_MAP_OBJECT_STATION\020\001\022\027\n\023AGV_MAP_" +
      "OBJECT_LINE\020\002\022\027\n\023AGV_MAP_OBJECT_AREA\020\003\022\031" +
      "\n\025AGV_MAP_OBJECT_QR_TAG\020\004\022\034\n\030AGV_MAP_OBJ" +
      "ECT_REFLECTOR\020\005\022\037\n\033AGV_MAP_OBJECT_BIN_LO" +
      "CATION\020\006\022\"\n\036AGV_MAP_OBJECT_EXTERNAL_DEVI" +
      "CE\020\007b\006proto3"
    };
    descriptor = com.google.protobuf.Descriptors.FileDescriptor
      .internalBuildGeneratedFileFrom(descriptorData,
        new com.google.protobuf.Descriptors.FileDescriptor[] {
        });
    internal_static_cmvr_msgs_AgvPose2d_descriptor =
      getDescriptor().getMessageTypes().get(0);
    internal_static_cmvr_msgs_AgvPose2d_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_cmvr_msgs_AgvPose2d_descriptor,
        new java.lang.String[] { "X", "Y", "Theta", });
    internal_static_cmvr_msgs_AgvVelocity_descriptor =
      getDescriptor().getMessageTypes().get(1);
    internal_static_cmvr_msgs_AgvVelocity_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_cmvr_msgs_AgvVelocity_descriptor,
        new java.lang.String[] { "Vx", "Vy", "Wz", });
    internal_static_cmvr_msgs_AgvBatteryState_descriptor =
      getDescriptor().getMessageTypes().get(2);
    internal_static_cmvr_msgs_AgvBatteryState_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_cmvr_msgs_AgvBatteryState_descriptor,
        new java.lang.String[] { "Percentage", "Voltage", "Current", "Temperature", "Charging", });
    internal_static_cmvr_msgs_AgvMotionOptions_descriptor =
      getDescriptor().getMessageTypes().get(3);
    internal_static_cmvr_msgs_AgvMotionOptions_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_cmvr_msgs_AgvMotionOptions_descriptor,
        new java.lang.String[] { "MaxSpeed", "MaxAngularSpeed", "MaxAcceleration", "MaxAngularAcceleration", "ReachDistance", "ReachAngle", "SpeedRatio", "Asynchronous", });
    internal_static_cmvr_msgs_AgvAdapterParams_descriptor =
      getDescriptor().getMessageTypes().get(4);
    internal_static_cmvr_msgs_AgvAdapterParams_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_cmvr_msgs_AgvAdapterParams_descriptor,
        new java.lang.String[] { "Values", });
    internal_static_cmvr_msgs_AgvAdapterParams_ValuesEntry_descriptor =
      internal_static_cmvr_msgs_AgvAdapterParams_descriptor.getNestedTypes().get(0);
    internal_static_cmvr_msgs_AgvAdapterParams_ValuesEntry_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_cmvr_msgs_AgvAdapterParams_ValuesEntry_descriptor,
        new java.lang.String[] { "Key", "Value", });
    internal_static_cmvr_msgs_AgvRuntimeState_descriptor =
      getDescriptor().getMessageTypes().get(5);
    internal_static_cmvr_msgs_AgvRuntimeState_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_cmvr_msgs_AgvRuntimeState_descriptor,
        new java.lang.String[] { "Timestamp", "Mode", "Connected", "Localized", "Moving", "Fault", "EmergencyStopped", "Pose", "Velocity", "Battery", "CurrentMap", "CurrentStation", "LastError", });
    internal_static_cmvr_msgs_AgvStation_descriptor =
      getDescriptor().getMessageTypes().get(6);
    internal_static_cmvr_msgs_AgvStation_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_cmvr_msgs_AgvStation_descriptor,
        new java.lang.String[] { "Id", "Type", "Pose", "Description", });
    internal_static_cmvr_msgs_AgvPathSegment_descriptor =
      getDescriptor().getMessageTypes().get(7);
    internal_static_cmvr_msgs_AgvPathSegment_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_cmvr_msgs_AgvPathSegment_descriptor,
        new java.lang.String[] { "SourceStation", "TargetStation", });
    internal_static_cmvr_msgs_AgvMapPoint3D_descriptor =
      getDescriptor().getMessageTypes().get(8);
    internal_static_cmvr_msgs_AgvMapPoint3D_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_cmvr_msgs_AgvMapPoint3D_descriptor,
        new java.lang.String[] { "X", "Y", "Z", });
    internal_static_cmvr_msgs_AgvUnifiedMap2D_descriptor =
      getDescriptor().getMessageTypes().get(9);
    internal_static_cmvr_msgs_AgvUnifiedMap2D_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_cmvr_msgs_AgvUnifiedMap2D_descriptor,
        new java.lang.String[] { "FrameId", "Timestamp", "Resolution", "Width", "Height", "Origin", "Data", "Objects", });
    internal_static_cmvr_msgs_AgvMapPointSample3D_descriptor =
      getDescriptor().getMessageTypes().get(10);
    internal_static_cmvr_msgs_AgvMapPointSample3D_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_cmvr_msgs_AgvMapPointSample3D_descriptor,
        new java.lang.String[] { "X", "Y", "Z", "Intensity", "Ring", "TimeOffset", });
    internal_static_cmvr_msgs_AgvMapVoxel3D_descriptor =
      getDescriptor().getMessageTypes().get(11);
    internal_static_cmvr_msgs_AgvMapVoxel3D_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_cmvr_msgs_AgvMapVoxel3D_descriptor,
        new java.lang.String[] { "X", "Y", "Z", "Probability", });
    internal_static_cmvr_msgs_AgvMapPlane3D_descriptor =
      getDescriptor().getMessageTypes().get(12);
    internal_static_cmvr_msgs_AgvMapPlane3D_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_cmvr_msgs_AgvMapPlane3D_descriptor,
        new java.lang.String[] { "Center", "Normal", "D", "Radius", });
    internal_static_cmvr_msgs_AgvMapObject_descriptor =
      getDescriptor().getMessageTypes().get(13);
    internal_static_cmvr_msgs_AgvMapObject_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_cmvr_msgs_AgvMapObject_descriptor,
        new java.lang.String[] { "Id", "Type", "Points", "Heading", "Properties", });
    internal_static_cmvr_msgs_AgvMapObject_PropertiesEntry_descriptor =
      internal_static_cmvr_msgs_AgvMapObject_descriptor.getNestedTypes().get(0);
    internal_static_cmvr_msgs_AgvMapObject_PropertiesEntry_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_cmvr_msgs_AgvMapObject_PropertiesEntry_descriptor,
        new java.lang.String[] { "Key", "Value", });
    internal_static_cmvr_msgs_AgvUnifiedMap3D_descriptor =
      getDescriptor().getMessageTypes().get(14);
    internal_static_cmvr_msgs_AgvUnifiedMap3D_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_cmvr_msgs_AgvUnifiedMap3D_descriptor,
        new java.lang.String[] { "FrameId", "Timestamp", "VoxelResolution", "Points", "Voxels", "Planes", "Objects", });
    internal_static_cmvr_msgs_AgvUnifiedMapUpdate_descriptor =
      getDescriptor().getMessageTypes().get(15);
    internal_static_cmvr_msgs_AgvUnifiedMapUpdate_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_cmvr_msgs_AgvUnifiedMapUpdate_descriptor,
        new java.lang.String[] { "MapId", "SessionId", "Sequence", "ResumeToken", "Dimension", "UpdateType", "FrameId", "Timestamp", "SnapshotBegin", "SnapshotEnd", "ChunkIndex", "ChunkCount", "Map2D", "Map3D", "Payload", });
    internal_static_cmvr_msgs_AgvNavigationStatus_descriptor =
      getDescriptor().getMessageTypes().get(16);
    internal_static_cmvr_msgs_AgvNavigationStatus_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_cmvr_msgs_AgvNavigationStatus_descriptor,
        new java.lang.String[] { "State", "Type", "Progress", "Message", });
  }

  // @@protoc_insertion_point(outer_class_scope)
}
