Browse Source

修改速度消息从plc获取,待测试

zx 2 năm trước cách đây
mục cha
commit
8d58bb6e0f

+ 290 - 31
MPC/monitor/emqx/message.pb.cc

@@ -23,6 +23,10 @@ class AGVStatuDefaultTypeInternal {
  public:
   ::PROTOBUF_NAMESPACE_ID::internal::ExplicitlyConstructed<AGVStatu> _instance;
 } _AGVStatu_default_instance_;
+class AGVSpeedDefaultTypeInternal {
+ public:
+  ::PROTOBUF_NAMESPACE_ID::internal::ExplicitlyConstructed<AGVSpeed> _instance;
+} _AGVSpeed_default_instance_;
 class SpeedDefaultTypeInternal {
  public:
   ::PROTOBUF_NAMESPACE_ID::internal::ExplicitlyConstructed<Speed> _instance;
@@ -52,6 +56,20 @@ class NavStatuDefaultTypeInternal {
   ::PROTOBUF_NAMESPACE_ID::internal::ExplicitlyConstructed<NavStatu> _instance;
 } _NavStatu_default_instance_;
 }  // namespace NavMessage
+static void InitDefaultsscc_info_AGVSpeed_message_2eproto() {
+  GOOGLE_PROTOBUF_VERIFY_VERSION;
+
+  {
+    void* ptr = &::NavMessage::_AGVSpeed_default_instance_;
+    new (ptr) ::NavMessage::AGVSpeed();
+    ::PROTOBUF_NAMESPACE_ID::internal::OnShutdownDestroyMessage(ptr);
+  }
+  ::NavMessage::AGVSpeed::InitAsDefaultInstance();
+}
+
+::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<0> scc_info_AGVSpeed_message_2eproto =
+    {{ATOMIC_VAR_INIT(::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase::kUninitialized), 0, 0, InitDefaultsscc_info_AGVSpeed_message_2eproto}, {}};
+
 static void InitDefaultsscc_info_AGVStatu_message_2eproto() {
   GOOGLE_PROTOBUF_VERIFY_VERSION;
 
@@ -170,7 +188,7 @@ static void InitDefaultsscc_info_Trajectory_message_2eproto() {
     {{ATOMIC_VAR_INIT(::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase::kUninitialized), 1, 0, InitDefaultsscc_info_Trajectory_message_2eproto}, {
       &scc_info_Pose2d_message_2eproto.base,}};
 
-static ::PROTOBUF_NAMESPACE_ID::Metadata file_level_metadata_message_2eproto[8];
+static ::PROTOBUF_NAMESPACE_ID::Metadata file_level_metadata_message_2eproto[9];
 static constexpr ::PROTOBUF_NAMESPACE_ID::EnumDescriptor const** file_level_enum_descriptors_message_2eproto = nullptr;
 static constexpr ::PROTOBUF_NAMESPACE_ID::ServiceDescriptor const** file_level_service_descriptors_message_2eproto = nullptr;
 
@@ -186,6 +204,13 @@ const ::PROTOBUF_NAMESPACE_ID::uint32 TableStruct_message_2eproto::offsets[] PRO
   PROTOBUF_FIELD_OFFSET(::NavMessage::AGVStatu, v_),
   PROTOBUF_FIELD_OFFSET(::NavMessage::AGVStatu, vth_),
   ~0u,  // no _has_bits_
+  PROTOBUF_FIELD_OFFSET(::NavMessage::AGVSpeed, _internal_metadata_),
+  ~0u,  // no _extensions_
+  ~0u,  // no _oneof_case_
+  ~0u,  // no _weak_field_map_
+  PROTOBUF_FIELD_OFFSET(::NavMessage::AGVSpeed, v_),
+  PROTOBUF_FIELD_OFFSET(::NavMessage::AGVSpeed, w_),
+  ~0u,  // no _has_bits_
   PROTOBUF_FIELD_OFFSET(::NavMessage::Speed, _internal_metadata_),
   ~0u,  // no _extensions_
   ~0u,  // no _oneof_case_
@@ -248,17 +273,19 @@ const ::PROTOBUF_NAMESPACE_ID::uint32 TableStruct_message_2eproto::offsets[] PRO
 };
 static const ::PROTOBUF_NAMESPACE_ID::internal::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = {
   { 0, -1, sizeof(::NavMessage::AGVStatu)},
-  { 10, -1, sizeof(::NavMessage::Speed)},
-  { 20, -1, sizeof(::NavMessage::SpeedLimit)},
-  { 27, -1, sizeof(::NavMessage::Pose2d)},
-  { 35, -1, sizeof(::NavMessage::Trajectory)},
-  { 41, -1, sizeof(::NavMessage::Action)},
-  { 52, -1, sizeof(::NavMessage::NavCmd)},
-  { 60, -1, sizeof(::NavMessage::NavStatu)},
+  { 10, -1, sizeof(::NavMessage::AGVSpeed)},
+  { 17, -1, sizeof(::NavMessage::Speed)},
+  { 27, -1, sizeof(::NavMessage::SpeedLimit)},
+  { 34, -1, sizeof(::NavMessage::Pose2d)},
+  { 42, -1, sizeof(::NavMessage::Trajectory)},
+  { 48, -1, sizeof(::NavMessage::Action)},
+  { 59, -1, sizeof(::NavMessage::NavCmd)},
+  { 67, -1, sizeof(::NavMessage::NavStatu)},
 };
 
 static ::PROTOBUF_NAMESPACE_ID::Message const * const file_default_instances[] = {
   reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::Message*>(&::NavMessage::_AGVStatu_default_instance_),
+  reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::Message*>(&::NavMessage::_AGVSpeed_default_instance_),
   reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::Message*>(&::NavMessage::_Speed_default_instance_),
   reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::Message*>(&::NavMessage::_SpeedLimit_default_instance_),
   reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::Message*>(&::NavMessage::_Pose2d_default_instance_),
@@ -271,29 +298,31 @@ static ::PROTOBUF_NAMESPACE_ID::Message const * const file_default_instances[] =
 const char descriptor_table_protodef_message_2eproto[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) =
   "\n\rmessage.proto\022\nNavMessage\"G\n\010AGVStatu\022"
   "\t\n\001x\030\001 \001(\002\022\t\n\001y\030\002 \001(\002\022\r\n\005theta\030\003 \001(\002\022\t\n\001"
-  "v\030\004 \001(\002\022\013\n\003vth\030\005 \001(\002\"@\n\005Speed\022\t\n\001H\030\001 \001(\005"
-  "\022\t\n\001T\030\002 \001(\005\022\t\n\001V\030\003 \001(\002\022\t\n\001W\030\004 \001(\002\022\013\n\003end"
-  "\030\005 \001(\005\"&\n\nSpeedLimit\022\013\n\003min\030\001 \001(\002\022\013\n\003max"
-  "\030\002 \001(\002\"-\n\006Pose2d\022\t\n\001x\030\001 \001(\002\022\t\n\001y\030\002 \001(\002\022\r"
-  "\n\005theta\030\003 \001(\002\"/\n\nTrajectory\022!\n\005poses\030\001 \003"
-  "(\0132\022.NavMessage.Pose2d\"\360\001\n\006Action\022\014\n\004typ"
-  "e\030\001 \001(\005\022\"\n\006target\030\002 \001(\0132\022.NavMessage.Pos"
-  "e2d\022\'\n\013target_diff\030\003 \001(\0132\022.NavMessage.Po"
-  "se2d\022.\n\016velocity_limit\030\004 \001(\0132\026.NavMessag"
-  "e.SpeedLimit\022-\n\rangular_limit\030\005 \001(\0132\026.Na"
-  "vMessage.SpeedLimit\022,\n\014horize_limit\030\006 \001("
-  "\0132\026.NavMessage.SpeedLimit\"J\n\006NavCmd\022\016\n\006a"
-  "ction\030\001 \001(\005\022\013\n\003key\030\002 \001(\t\022#\n\007actions\030\003 \003("
-  "\0132\022.NavMessage.Action\"\263\001\n\010NavStatu\022\r\n\005st"
-  "atu\030\001 \001(\010\022\013\n\003key\030\002 \001(\t\022.\n\022unfinished_act"
-  "ions\030\003 \003(\0132\022.NavMessage.Action\022-\n\rselect"
-  "ed_traj\030\004 \001(\0132\026.NavMessage.Trajectory\022,\n"
-  "\014predict_traj\030\005 \001(\0132\026.NavMessage.Traject"
-  "oryb\006proto3"
+  "v\030\004 \001(\002\022\013\n\003vth\030\005 \001(\002\" \n\010AGVSpeed\022\t\n\001v\030\001 "
+  "\001(\002\022\t\n\001w\030\002 \001(\002\"@\n\005Speed\022\t\n\001H\030\001 \001(\005\022\t\n\001T\030"
+  "\002 \001(\005\022\t\n\001V\030\003 \001(\002\022\t\n\001W\030\004 \001(\002\022\013\n\003end\030\005 \001(\005"
+  "\"&\n\nSpeedLimit\022\013\n\003min\030\001 \001(\002\022\013\n\003max\030\002 \001(\002"
+  "\"-\n\006Pose2d\022\t\n\001x\030\001 \001(\002\022\t\n\001y\030\002 \001(\002\022\r\n\005thet"
+  "a\030\003 \001(\002\"/\n\nTrajectory\022!\n\005poses\030\001 \003(\0132\022.N"
+  "avMessage.Pose2d\"\360\001\n\006Action\022\014\n\004type\030\001 \001("
+  "\005\022\"\n\006target\030\002 \001(\0132\022.NavMessage.Pose2d\022\'\n"
+  "\013target_diff\030\003 \001(\0132\022.NavMessage.Pose2d\022."
+  "\n\016velocity_limit\030\004 \001(\0132\026.NavMessage.Spee"
+  "dLimit\022-\n\rangular_limit\030\005 \001(\0132\026.NavMessa"
+  "ge.SpeedLimit\022,\n\014horize_limit\030\006 \001(\0132\026.Na"
+  "vMessage.SpeedLimit\"J\n\006NavCmd\022\016\n\006action\030"
+  "\001 \001(\005\022\013\n\003key\030\002 \001(\t\022#\n\007actions\030\003 \003(\0132\022.Na"
+  "vMessage.Action\"\263\001\n\010NavStatu\022\r\n\005statu\030\001 "
+  "\001(\010\022\013\n\003key\030\002 \001(\t\022.\n\022unfinished_actions\030\003"
+  " \003(\0132\022.NavMessage.Action\022-\n\rselected_tra"
+  "j\030\004 \001(\0132\026.NavMessage.Trajectory\022,\n\014predi"
+  "ct_traj\030\005 \001(\0132\026.NavMessage.Trajectoryb\006p"
+  "roto3"
   ;
 static const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable*const descriptor_table_message_2eproto_deps[1] = {
 };
-static ::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase*const descriptor_table_message_2eproto_sccs[8] = {
+static ::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase*const descriptor_table_message_2eproto_sccs[9] = {
+  &scc_info_AGVSpeed_message_2eproto.base,
   &scc_info_AGVStatu_message_2eproto.base,
   &scc_info_Action_message_2eproto.base,
   &scc_info_NavCmd_message_2eproto.base,
@@ -305,10 +334,10 @@ static ::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase*const descriptor_table_mes
 };
 static ::PROTOBUF_NAMESPACE_ID::internal::once_flag descriptor_table_message_2eproto_once;
 const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_message_2eproto = {
-  false, false, descriptor_table_protodef_message_2eproto, "message.proto", 811,
-  &descriptor_table_message_2eproto_once, descriptor_table_message_2eproto_sccs, descriptor_table_message_2eproto_deps, 8, 0,
+  false, false, descriptor_table_protodef_message_2eproto, "message.proto", 845,
+  &descriptor_table_message_2eproto_once, descriptor_table_message_2eproto_sccs, descriptor_table_message_2eproto_deps, 9, 0,
   schemas, file_default_instances, TableStruct_message_2eproto::offsets,
-  file_level_metadata_message_2eproto, 8, file_level_enum_descriptors_message_2eproto, file_level_service_descriptors_message_2eproto,
+  file_level_metadata_message_2eproto, 9, file_level_enum_descriptors_message_2eproto, file_level_service_descriptors_message_2eproto,
 };
 
 // Force running AddDescriptors() at dynamic initialization time.
@@ -605,6 +634,233 @@ void AGVStatu::InternalSwap(AGVStatu* other) {
 }
 
 
+// ===================================================================
+
+void AGVSpeed::InitAsDefaultInstance() {
+}
+class AGVSpeed::_Internal {
+ public:
+};
+
+AGVSpeed::AGVSpeed(::PROTOBUF_NAMESPACE_ID::Arena* arena)
+  : ::PROTOBUF_NAMESPACE_ID::Message(arena) {
+  SharedCtor();
+  RegisterArenaDtor(arena);
+  // @@protoc_insertion_point(arena_constructor:NavMessage.AGVSpeed)
+}
+AGVSpeed::AGVSpeed(const AGVSpeed& from)
+  : ::PROTOBUF_NAMESPACE_ID::Message() {
+  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+  ::memcpy(&v_, &from.v_,
+    static_cast<size_t>(reinterpret_cast<char*>(&w_) -
+    reinterpret_cast<char*>(&v_)) + sizeof(w_));
+  // @@protoc_insertion_point(copy_constructor:NavMessage.AGVSpeed)
+}
+
+void AGVSpeed::SharedCtor() {
+  ::memset(&v_, 0, static_cast<size_t>(
+      reinterpret_cast<char*>(&w_) -
+      reinterpret_cast<char*>(&v_)) + sizeof(w_));
+}
+
+AGVSpeed::~AGVSpeed() {
+  // @@protoc_insertion_point(destructor:NavMessage.AGVSpeed)
+  SharedDtor();
+  _internal_metadata_.Delete<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
+}
+
+void AGVSpeed::SharedDtor() {
+  GOOGLE_DCHECK(GetArena() == nullptr);
+}
+
+void AGVSpeed::ArenaDtor(void* object) {
+  AGVSpeed* _this = reinterpret_cast< AGVSpeed* >(object);
+  (void)_this;
+}
+void AGVSpeed::RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena*) {
+}
+void AGVSpeed::SetCachedSize(int size) const {
+  _cached_size_.Set(size);
+}
+const AGVSpeed& AGVSpeed::default_instance() {
+  ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&::scc_info_AGVSpeed_message_2eproto.base);
+  return *internal_default_instance();
+}
+
+
+void AGVSpeed::Clear() {
+// @@protoc_insertion_point(message_clear_start:NavMessage.AGVSpeed)
+  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  ::memset(&v_, 0, static_cast<size_t>(
+      reinterpret_cast<char*>(&w_) -
+      reinterpret_cast<char*>(&v_)) + sizeof(w_));
+  _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
+}
+
+const char* AGVSpeed::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) {
+#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
+  ::PROTOBUF_NAMESPACE_ID::Arena* arena = GetArena(); (void)arena;
+  while (!ctx->Done(&ptr)) {
+    ::PROTOBUF_NAMESPACE_ID::uint32 tag;
+    ptr = ::PROTOBUF_NAMESPACE_ID::internal::ReadTag(ptr, &tag);
+    CHK_(ptr);
+    switch (tag >> 3) {
+      // float v = 1;
+      case 1:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 13)) {
+          v_ = ::PROTOBUF_NAMESPACE_ID::internal::UnalignedLoad<float>(ptr);
+          ptr += sizeof(float);
+        } else goto handle_unusual;
+        continue;
+      // float w = 2;
+      case 2:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 21)) {
+          w_ = ::PROTOBUF_NAMESPACE_ID::internal::UnalignedLoad<float>(ptr);
+          ptr += sizeof(float);
+        } else goto handle_unusual;
+        continue;
+      default: {
+      handle_unusual:
+        if ((tag & 7) == 4 || tag == 0) {
+          ctx->SetLastTag(tag);
+          goto success;
+        }
+        ptr = UnknownFieldParse(tag,
+            _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
+            ptr, ctx);
+        CHK_(ptr != nullptr);
+        continue;
+      }
+    }  // switch
+  }  // while
+success:
+  return ptr;
+failure:
+  ptr = nullptr;
+  goto success;
+#undef CHK_
+}
+
+::PROTOBUF_NAMESPACE_ID::uint8* AGVSpeed::_InternalSerialize(
+    ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
+  // @@protoc_insertion_point(serialize_to_array_start:NavMessage.AGVSpeed)
+  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // float v = 1;
+  if (!(this->v() <= 0 && this->v() >= 0)) {
+    target = stream->EnsureSpace(target);
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteFloatToArray(1, this->_internal_v(), target);
+  }
+
+  // float w = 2;
+  if (!(this->w() <= 0 && this->w() >= 0)) {
+    target = stream->EnsureSpace(target);
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteFloatToArray(2, this->_internal_w(), target);
+  }
+
+  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::InternalSerializeUnknownFieldsToArray(
+        _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
+  }
+  // @@protoc_insertion_point(serialize_to_array_end:NavMessage.AGVSpeed)
+  return target;
+}
+
+size_t AGVSpeed::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:NavMessage.AGVSpeed)
+  size_t total_size = 0;
+
+  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  // float v = 1;
+  if (!(this->v() <= 0 && this->v() >= 0)) {
+    total_size += 1 + 4;
+  }
+
+  // float w = 2;
+  if (!(this->w() <= 0 && this->w() >= 0)) {
+    total_size += 1 + 4;
+  }
+
+  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
+    return ::PROTOBUF_NAMESPACE_ID::internal::ComputeUnknownFieldsSize(
+        _internal_metadata_, total_size, &_cached_size_);
+  }
+  int cached_size = ::PROTOBUF_NAMESPACE_ID::internal::ToCachedSize(total_size);
+  SetCachedSize(cached_size);
+  return total_size;
+}
+
+void AGVSpeed::MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) {
+// @@protoc_insertion_point(generalized_merge_from_start:NavMessage.AGVSpeed)
+  GOOGLE_DCHECK_NE(&from, this);
+  const AGVSpeed* source =
+      ::PROTOBUF_NAMESPACE_ID::DynamicCastToGenerated<AGVSpeed>(
+          &from);
+  if (source == nullptr) {
+  // @@protoc_insertion_point(generalized_merge_from_cast_fail:NavMessage.AGVSpeed)
+    ::PROTOBUF_NAMESPACE_ID::internal::ReflectionOps::Merge(from, this);
+  } else {
+  // @@protoc_insertion_point(generalized_merge_from_cast_success:NavMessage.AGVSpeed)
+    MergeFrom(*source);
+  }
+}
+
+void AGVSpeed::MergeFrom(const AGVSpeed& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:NavMessage.AGVSpeed)
+  GOOGLE_DCHECK_NE(&from, this);
+  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  if (!(from.v() <= 0 && from.v() >= 0)) {
+    _internal_set_v(from._internal_v());
+  }
+  if (!(from.w() <= 0 && from.w() >= 0)) {
+    _internal_set_w(from._internal_w());
+  }
+}
+
+void AGVSpeed::CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) {
+// @@protoc_insertion_point(generalized_copy_from_start:NavMessage.AGVSpeed)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+void AGVSpeed::CopyFrom(const AGVSpeed& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:NavMessage.AGVSpeed)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool AGVSpeed::IsInitialized() const {
+  return true;
+}
+
+void AGVSpeed::InternalSwap(AGVSpeed* other) {
+  using std::swap;
+  _internal_metadata_.Swap<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(&other->_internal_metadata_);
+  ::PROTOBUF_NAMESPACE_ID::internal::memswap<
+      PROTOBUF_FIELD_OFFSET(AGVSpeed, w_)
+      + sizeof(AGVSpeed::w_)
+      - PROTOBUF_FIELD_OFFSET(AGVSpeed, v_)>(
+          reinterpret_cast<char*>(&v_),
+          reinterpret_cast<char*>(&other->v_));
+}
+
+::PROTOBUF_NAMESPACE_ID::Metadata AGVSpeed::GetMetadata() const {
+  return GetMetadataStatic();
+}
+
+
 // ===================================================================
 
 void Speed::InitAsDefaultInstance() {
@@ -2625,6 +2881,9 @@ PROTOBUF_NAMESPACE_OPEN
 template<> PROTOBUF_NOINLINE ::NavMessage::AGVStatu* Arena::CreateMaybeMessage< ::NavMessage::AGVStatu >(Arena* arena) {
   return Arena::CreateMessageInternal< ::NavMessage::AGVStatu >(arena);
 }
+template<> PROTOBUF_NOINLINE ::NavMessage::AGVSpeed* Arena::CreateMaybeMessage< ::NavMessage::AGVSpeed >(Arena* arena) {
+  return Arena::CreateMessageInternal< ::NavMessage::AGVSpeed >(arena);
+}
 template<> PROTOBUF_NOINLINE ::NavMessage::Speed* Arena::CreateMaybeMessage< ::NavMessage::Speed >(Arena* arena) {
   return Arena::CreateMessageInternal< ::NavMessage::Speed >(arena);
 }

+ 206 - 8
MPC/monitor/emqx/message.pb.h

@@ -47,7 +47,7 @@ struct TableStruct_message_2eproto {
     PROTOBUF_SECTION_VARIABLE(protodesc_cold);
   static const ::PROTOBUF_NAMESPACE_ID::internal::AuxiliaryParseTableField aux[]
     PROTOBUF_SECTION_VARIABLE(protodesc_cold);
-  static const ::PROTOBUF_NAMESPACE_ID::internal::ParseTable schema[8]
+  static const ::PROTOBUF_NAMESPACE_ID::internal::ParseTable schema[9]
     PROTOBUF_SECTION_VARIABLE(protodesc_cold);
   static const ::PROTOBUF_NAMESPACE_ID::internal::FieldMetadata field_metadata[];
   static const ::PROTOBUF_NAMESPACE_ID::internal::SerializationTable serialization_table[];
@@ -55,6 +55,9 @@ struct TableStruct_message_2eproto {
 };
 extern const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_message_2eproto;
 namespace NavMessage {
+class AGVSpeed;
+class AGVSpeedDefaultTypeInternal;
+extern AGVSpeedDefaultTypeInternal _AGVSpeed_default_instance_;
 class AGVStatu;
 class AGVStatuDefaultTypeInternal;
 extern AGVStatuDefaultTypeInternal _AGVStatu_default_instance_;
@@ -81,6 +84,7 @@ class TrajectoryDefaultTypeInternal;
 extern TrajectoryDefaultTypeInternal _Trajectory_default_instance_;
 }  // namespace NavMessage
 PROTOBUF_NAMESPACE_OPEN
+template<> ::NavMessage::AGVSpeed* Arena::CreateMaybeMessage<::NavMessage::AGVSpeed>(Arena*);
 template<> ::NavMessage::AGVStatu* Arena::CreateMaybeMessage<::NavMessage::AGVStatu>(Arena*);
 template<> ::NavMessage::Action* Arena::CreateMaybeMessage<::NavMessage::Action>(Arena*);
 template<> ::NavMessage::NavCmd* Arena::CreateMaybeMessage<::NavMessage::NavCmd>(Arena*);
@@ -275,6 +279,154 @@ class AGVStatu PROTOBUF_FINAL :
 };
 // -------------------------------------------------------------------
 
+class AGVSpeed PROTOBUF_FINAL :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:NavMessage.AGVSpeed) */ {
+ public:
+  inline AGVSpeed() : AGVSpeed(nullptr) {}
+  virtual ~AGVSpeed();
+
+  AGVSpeed(const AGVSpeed& from);
+  AGVSpeed(AGVSpeed&& from) noexcept
+    : AGVSpeed() {
+    *this = ::std::move(from);
+  }
+
+  inline AGVSpeed& operator=(const AGVSpeed& from) {
+    CopyFrom(from);
+    return *this;
+  }
+  inline AGVSpeed& operator=(AGVSpeed&& from) noexcept {
+    if (GetArena() == from.GetArena()) {
+      if (this != &from) InternalSwap(&from);
+    } else {
+      CopyFrom(from);
+    }
+    return *this;
+  }
+
+  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
+    return GetDescriptor();
+  }
+  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
+    return GetMetadataStatic().descriptor;
+  }
+  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
+    return GetMetadataStatic().reflection;
+  }
+  static const AGVSpeed& default_instance();
+
+  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
+  static inline const AGVSpeed* internal_default_instance() {
+    return reinterpret_cast<const AGVSpeed*>(
+               &_AGVSpeed_default_instance_);
+  }
+  static constexpr int kIndexInFileMessages =
+    1;
+
+  friend void swap(AGVSpeed& a, AGVSpeed& b) {
+    a.Swap(&b);
+  }
+  inline void Swap(AGVSpeed* other) {
+    if (other == this) return;
+    if (GetArena() == other->GetArena()) {
+      InternalSwap(other);
+    } else {
+      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
+    }
+  }
+  void UnsafeArenaSwap(AGVSpeed* other) {
+    if (other == this) return;
+    GOOGLE_DCHECK(GetArena() == other->GetArena());
+    InternalSwap(other);
+  }
+
+  // implements Message ----------------------------------------------
+
+  inline AGVSpeed* New() const final {
+    return CreateMaybeMessage<AGVSpeed>(nullptr);
+  }
+
+  AGVSpeed* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
+    return CreateMaybeMessage<AGVSpeed>(arena);
+  }
+  void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
+  void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
+  void CopyFrom(const AGVSpeed& from);
+  void MergeFrom(const AGVSpeed& from);
+  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
+  bool IsInitialized() const final;
+
+  size_t ByteSizeLong() const final;
+  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
+  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
+      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
+  int GetCachedSize() const final { return _cached_size_.Get(); }
+
+  private:
+  inline void SharedCtor();
+  inline void SharedDtor();
+  void SetCachedSize(int size) const final;
+  void InternalSwap(AGVSpeed* other);
+  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
+  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
+    return "NavMessage.AGVSpeed";
+  }
+  protected:
+  explicit AGVSpeed(::PROTOBUF_NAMESPACE_ID::Arena* arena);
+  private:
+  static void ArenaDtor(void* object);
+  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
+  public:
+
+  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
+  private:
+  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
+    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_message_2eproto);
+    return ::descriptor_table_message_2eproto.file_level_metadata[kIndexInFileMessages];
+  }
+
+  public:
+
+  // nested types ----------------------------------------------------
+
+  // accessors -------------------------------------------------------
+
+  enum : int {
+    kVFieldNumber = 1,
+    kWFieldNumber = 2,
+  };
+  // float v = 1;
+  void clear_v();
+  float v() const;
+  void set_v(float value);
+  private:
+  float _internal_v() const;
+  void _internal_set_v(float value);
+  public:
+
+  // float w = 2;
+  void clear_w();
+  float w() const;
+  void set_w(float value);
+  private:
+  float _internal_w() const;
+  void _internal_set_w(float value);
+  public:
+
+  // @@protoc_insertion_point(class_scope:NavMessage.AGVSpeed)
+ private:
+  class _Internal;
+
+  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
+  typedef void InternalArenaConstructable_;
+  typedef void DestructorSkippable_;
+  float v_;
+  float w_;
+  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
+  friend struct ::TableStruct_message_2eproto;
+};
+// -------------------------------------------------------------------
+
 class Speed PROTOBUF_FINAL :
     public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:NavMessage.Speed) */ {
  public:
@@ -317,7 +469,7 @@ class Speed PROTOBUF_FINAL :
                &_Speed_default_instance_);
   }
   static constexpr int kIndexInFileMessages =
-    1;
+    2;
 
   friend void swap(Speed& a, Speed& b) {
     a.Swap(&b);
@@ -498,7 +650,7 @@ class SpeedLimit PROTOBUF_FINAL :
                &_SpeedLimit_default_instance_);
   }
   static constexpr int kIndexInFileMessages =
-    2;
+    3;
 
   friend void swap(SpeedLimit& a, SpeedLimit& b) {
     a.Swap(&b);
@@ -646,7 +798,7 @@ class Pose2d PROTOBUF_FINAL :
                &_Pose2d_default_instance_);
   }
   static constexpr int kIndexInFileMessages =
-    3;
+    4;
 
   friend void swap(Pose2d& a, Pose2d& b) {
     a.Swap(&b);
@@ -805,7 +957,7 @@ class Trajectory PROTOBUF_FINAL :
                &_Trajectory_default_instance_);
   }
   static constexpr int kIndexInFileMessages =
-    4;
+    5;
 
   friend void swap(Trajectory& a, Trajectory& b) {
     a.Swap(&b);
@@ -951,7 +1103,7 @@ class Action PROTOBUF_FINAL :
                &_Action_default_instance_);
   }
   static constexpr int kIndexInFileMessages =
-    5;
+    6;
 
   friend void swap(Action& a, Action& b) {
     a.Swap(&b);
@@ -1188,7 +1340,7 @@ class NavCmd PROTOBUF_FINAL :
                &_NavCmd_default_instance_);
   }
   static constexpr int kIndexInFileMessages =
-    6;
+    7;
 
   friend void swap(NavCmd& a, NavCmd& b) {
     a.Swap(&b);
@@ -1363,7 +1515,7 @@ class NavStatu PROTOBUF_FINAL :
                &_NavStatu_default_instance_);
   }
   static constexpr int kIndexInFileMessages =
-    7;
+    8;
 
   friend void swap(NavStatu& a, NavStatu& b) {
     a.Swap(&b);
@@ -1647,6 +1799,50 @@ inline void AGVStatu::set_vth(float value) {
 
 // -------------------------------------------------------------------
 
+// AGVSpeed
+
+// float v = 1;
+inline void AGVSpeed::clear_v() {
+  v_ = 0;
+}
+inline float AGVSpeed::_internal_v() const {
+  return v_;
+}
+inline float AGVSpeed::v() const {
+  // @@protoc_insertion_point(field_get:NavMessage.AGVSpeed.v)
+  return _internal_v();
+}
+inline void AGVSpeed::_internal_set_v(float value) {
+  
+  v_ = value;
+}
+inline void AGVSpeed::set_v(float value) {
+  _internal_set_v(value);
+  // @@protoc_insertion_point(field_set:NavMessage.AGVSpeed.v)
+}
+
+// float w = 2;
+inline void AGVSpeed::clear_w() {
+  w_ = 0;
+}
+inline float AGVSpeed::_internal_w() const {
+  return w_;
+}
+inline float AGVSpeed::w() const {
+  // @@protoc_insertion_point(field_get:NavMessage.AGVSpeed.w)
+  return _internal_w();
+}
+inline void AGVSpeed::_internal_set_w(float value) {
+  
+  w_ = value;
+}
+inline void AGVSpeed::set_w(float value) {
+  _internal_set_w(value);
+  // @@protoc_insertion_point(field_set:NavMessage.AGVSpeed.w)
+}
+
+// -------------------------------------------------------------------
+
 // Speed
 
 // int32 H = 1;
@@ -2772,6 +2968,8 @@ inline void NavStatu::set_allocated_predict_traj(::NavMessage::Trajectory* predi
 
 // -------------------------------------------------------------------
 
+// -------------------------------------------------------------------
+
 
 // @@protoc_insertion_point(namespace_scope)
 

+ 16 - 50
MPC/monitor/monitor_emqx.cpp

@@ -3,56 +3,41 @@
 //
 
 #include "monitor_emqx.h"
+#include <math.h>
 #include <unistd.h>
 
-Monitor_emqx::~Monitor_emqx()
+
+Monitor_emqx::Monitor_emqx(std::string nodeId)
+    : Terminator_emqx(nodeId)
 {
-  if(client_!= nullptr){
-    client_->disconnect();
-    delete client_;
-    client_= nullptr;
-  }
+  heat_=0;
 }
 
-bool Monitor_emqx::Connect(std::string ip,int port)
+Monitor_emqx::~Monitor_emqx()
 {
 
-  if(client_!= nullptr)
-  {
-    client_->disconnect();
-    delete client_;
-  }
-  client_=new Paho_client(nodeId_);
-  bool ret= client_->connect(ip,port);
-  if(ret)
-  {
-    while(!client_->isconnected()) usleep(1000);
-    client_->subcribe(subTopic_,1,StatuArrivedCallback,this);
-  }
-  return ret;
-
 }
 
-void Monitor_emqx::set_statu_arrived_callback(StatuCallback callback,void* context)
+
+void Monitor_emqx::set_speedcmd_topic(std::string speedcmd)
 {
-  StatuArrivedCallback_=callback;
-  context_=context;
+  speedcmd_topic_=speedcmd;
 }
+
 void Monitor_emqx::set_speed(SpeedType type,double v,double a)
 {
+  double w=fabs(v)>0.001?v:0.0;
   MqttMsg msg;
   NavMessage::Speed speed;
   heat_=(heat_+1)%255;
   speed.set_h(heat_);
   speed.set_t(type);
   speed.set_v(v);
-  speed.set_w(a);
+  speed.set_w(w);
   speed.set_end(1);
   msg.fromProtoMessage(speed);
-  if(client_)
-    client_->publish(pubTopic_,1,msg);
-  else
-    printf("set speed failed : emqx client disconnected...\n");
+  Publish(speedcmd_topic_,msg);
+
 }
 
 void Monitor_emqx::stop()
@@ -66,28 +51,9 @@ void Monitor_emqx::stop()
   speed.set_w(0);
   speed.set_end(1);
   msg.fromProtoMessage(speed);
-  if(client_)
-    client_->publish(pubTopic_,1,msg);
-  else
-    printf("stop failed : emqx client disconnected...\n");
-}
 
-Monitor_emqx::Monitor_emqx(std::string nodeId,std::string pubTopic,std::string subTopic)
-  :client_(nullptr),nodeId_(nodeId),pubTopic_(pubTopic),subTopic_(subTopic)
-{
-  heat_=0;
-  StatuArrivedCallback_= nullptr;
-  context_= nullptr;
+  Publish(speedcmd_topic_,msg);
 }
 
-void Monitor_emqx::StatuArrivedCallback(std::string topic,int QOS,MqttMsg& msg,void* context)
-{
-  Monitor_emqx* monitor=(Monitor_emqx*)context;
-  NavMessage::AGVStatu statu;
 
-  if(msg.toProtoMessage(statu))
-  {
-    if (monitor->StatuArrivedCallback_)
-      monitor->StatuArrivedCallback_(statu.x(), statu.y(), statu.theta(), statu.v(), statu.vth(),monitor->context_);
-  }
-}
+

+ 5 - 15
MPC/monitor/monitor_emqx.h

@@ -6,11 +6,10 @@
 #define NAVIGATION_MPC_MONITOR_MONITOR_EMQX_H_
 
 #include <mutex>
-#include "emqx/paho_client.h"
+#include "terminator_emqx.h"
 
-typedef void (*StatuCallback)(double x,double y,double theta,double v,double vth,void* context);
 
-class Monitor_emqx
+class Monitor_emqx : public Terminator_emqx
 {
 public:
     enum SpeedType{
@@ -22,28 +21,19 @@ public:
 
     };
  public:
-    Monitor_emqx(std::string nodeId,std::string pubTopic,std::string subTopic);
+    Monitor_emqx(std::string nodeId);
     ~Monitor_emqx();
-    bool Connect(std::string ip,int port);
-    void set_statu_arrived_callback(StatuCallback callback,void* context);
+    void set_speedcmd_topic(std::string speedcmd);
     void set_speed(SpeedType type,double v,double a);
     void stop();
 
  protected:
 
-    StatuCallback StatuArrivedCallback_;
-    static void StatuArrivedCallback(std::string topic,int QOS,MqttMsg& msg,void* context);
 
-    std::mutex mtx_;
+    std::string speedcmd_topic_;
 
-    Paho_client* client_;
-    void* context_;
-    std::string nodeId_;
-    std::string pubTopic_;
-    std::string subTopic_;
  public:
     int heat_=0;
-    MqttMsg msg_;
 
 };
 

+ 2 - 2
MPC/monitor/terminator_emqx.cpp

@@ -44,7 +44,7 @@ bool Terminator_emqx::AddCallback(std::string topic,Callback callback,void* cont
   if(connected_)
   {
     while(!client_->isconnected()) usleep(1000);
-    client_->subcribe(topic,1,StatuArrivedCallback,this);
+    client_->subcribe(topic,1,MessageArrivedCallback,this);
     return true;
   }
   else
@@ -60,7 +60,7 @@ Terminator_emqx::Terminator_emqx(std::string nodeId)
 {
 }
 
-void Terminator_emqx::StatuArrivedCallback(std::string topic,int QOS,MqttMsg& msg,void* context)
+void Terminator_emqx::MessageArrivedCallback(std::string topic,int QOS,MqttMsg& msg,void* context)
 {
   Terminator_emqx* terminator=(Terminator_emqx*)context;
 

+ 2 - 2
MPC/monitor/terminator_emqx.h

@@ -17,14 +17,14 @@ typedef struct{
 class Terminator_emqx {
 public:
     Terminator_emqx(std::string nodeId);
-    ~Terminator_emqx();
+    virtual ~Terminator_emqx();
     bool Connect(std::string ip,int port);
     bool AddCallback(std::string topic,Callback callback,void* context);
     void Publish(std::string topic,const MqttMsg& statu);
 
 protected:
 
-    static void StatuArrivedCallback(std::string topic,int QOS,MqttMsg& msg,void* context);
+    static void MessageArrivedCallback(std::string topic,int QOS,MqttMsg& msg,void* context);
 
     std::mutex mtx_;
 

+ 24 - 8
MPC/navigation.cpp

@@ -37,18 +37,21 @@ double limit(double x,double min,double max){
 
 }
 
+
+
 bool Navigation::Init(const Navigation_parameter& parameter)
 {
   parameter_=parameter;
   AgvEmqx_parameter agv_p=parameter.agv_emqx();
   if(monitor_== nullptr) {
-    monitor_ = new Monitor_emqx(agv_p.nodeid(), agv_p.pubtopic(), agv_p.subtopic());
-    monitor_->set_statu_arrived_callback(Navigation::RobotStatuCallback, this);
+    monitor_ = new Monitor_emqx(agv_p.nodeid());
     if(monitor_->Connect(agv_p.ip(),agv_p.port())==false)
     {
       printf(" agv emqx connected failed\n");
       return false;
     }
+    monitor_->AddCallback(agv_p.subposetopic(),Navigation::RobotPoseCallback,this);
+    monitor_->AddCallback(agv_p.subspeedtopic(),Navigation::RobotSpeedCallback,this);
   }
 
   Emqx_parameter terminal_p=parameter.terminal_emqx();
@@ -81,6 +84,25 @@ bool Navigation::Init(const Navigation_parameter& parameter)
 
 }
 
+void Navigation::RobotPoseCallback(const MqttMsg& msg,void* context)
+{
+  Navigation* navigator=(Navigation*)context;
+  NavMessage::AGVStatu statu;
+  if(msg.toProtoMessage(statu))
+  {
+    navigator->ResetPose(Pose2d(statu.x(),statu.y(),statu.theta()));
+  }
+}
+void Navigation::RobotSpeedCallback(const MqttMsg& msg,void* context)
+{
+  Navigation* navigator=(Navigation*)context;
+  NavMessage::AGVSpeed speed;
+  if(msg.toProtoMessage(speed))
+  {
+    navigator->ResetStatu(speed.v(),speed.w());
+  }
+}
+
 void Navigation::publish_statu() {
   while (exit_ == false)
   {
@@ -256,12 +278,6 @@ void Navigation::NavCmdCallback(const MqttMsg& msg,void* context)
 
   navigator->Start(cmd);
 }
-void Navigation::RobotStatuCallback(double x,double y,double theta,double v,double vth,void* context)
-{
-  Navigation* navigator=(Navigation*)context;
-  navigator->ResetPose(Pose2d(x,y,theta));
-  navigator->ResetStatu(v,vth);
-}
 
 bool Navigation::exec_adjust_action(const Pose2d& target,const Pose2d& target_diff,
                                     stLimit limit_v,stLimit limit_h,stLimit limit_rotate)

+ 2 - 1
MPC/navigation.h

@@ -48,7 +48,8 @@ public:
 
  protected:
 
-    static void RobotStatuCallback(double x,double y,double theta,double v,double vth,void* context);
+    static void RobotPoseCallback(const MqttMsg& msg,void* context);
+    static void RobotSpeedCallback(const MqttMsg& msg,void* context);
     static void NavCmdCallback(const MqttMsg& msg,void* context);
     static void BrotherAgvStatuCallback(const MqttMsg& msg,void* context);
 

+ 95 - 55
MPC/parameter.pb.cc

@@ -85,8 +85,9 @@ const ::PROTOBUF_NAMESPACE_ID::uint32 TableStruct_parameter_2eproto::offsets[] P
   PROTOBUF_FIELD_OFFSET(::AgvEmqx_parameter, nodeid_),
   PROTOBUF_FIELD_OFFSET(::AgvEmqx_parameter, ip_),
   PROTOBUF_FIELD_OFFSET(::AgvEmqx_parameter, port_),
-  PROTOBUF_FIELD_OFFSET(::AgvEmqx_parameter, pubtopic_),
-  PROTOBUF_FIELD_OFFSET(::AgvEmqx_parameter, subtopic_),
+  PROTOBUF_FIELD_OFFSET(::AgvEmqx_parameter, pubspeedtopic_),
+  PROTOBUF_FIELD_OFFSET(::AgvEmqx_parameter, subposetopic_),
+  PROTOBUF_FIELD_OFFSET(::AgvEmqx_parameter, subspeedtopic_),
   ~0u,  // no _has_bits_
   PROTOBUF_FIELD_OFFSET(::Emqx_parameter, _internal_metadata_),
   ~0u,  // no _extensions_
@@ -109,8 +110,8 @@ const ::PROTOBUF_NAMESPACE_ID::uint32 TableStruct_parameter_2eproto::offsets[] P
 };
 static const ::PROTOBUF_NAMESPACE_ID::internal::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = {
   { 0, -1, sizeof(::AgvEmqx_parameter)},
-  { 10, -1, sizeof(::Emqx_parameter)},
-  { 22, -1, sizeof(::Navigation_parameter)},
+  { 11, -1, sizeof(::Emqx_parameter)},
+  { 23, -1, sizeof(::Navigation_parameter)},
 };
 
 static ::PROTOBUF_NAMESPACE_ID::Message const * const file_default_instances[] = {
@@ -120,16 +121,17 @@ static ::PROTOBUF_NAMESPACE_ID::Message const * const file_default_instances[] =
 };
 
 const char descriptor_table_protodef_parameter_2eproto[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) =
-  "\n\017parameter.proto\"a\n\021AgvEmqx_parameter\022\016"
-  "\n\006NodeId\030\001 \001(\t\022\n\n\002ip\030\002 \001(\t\022\014\n\004port\030\003 \001(\005"
-  "\022\020\n\010pubTopic\030\004 \001(\t\022\020\n\010subTopic\030\005 \001(\t\"\241\001\n"
-  "\016Emqx_parameter\022\016\n\006NodeId\030\001 \001(\t\022\n\n\002ip\030\002 "
-  "\001(\t\022\014\n\004port\030\003 \001(\005\022\025\n\rpubStatuTopic\030\004 \001(\t"
-  "\022\030\n\020pubNavStatuTopic\030\005 \001(\t\022\026\n\016subNavCmdT"
-  "opic\030\006 \001(\t\022\034\n\024subBrotherStatuTopic\030\007 \001(\t"
-  "\"d\n\024Navigation_parameter\022$\n\010Agv_emqx\030\001 \001"
-  "(\0132\022.AgvEmqx_parameter\022&\n\rTerminal_emqx\030"
-  "\002 \001(\0132\017.Emqx_parameterb\006proto3"
+  "\n\017parameter.proto\"\201\001\n\021AgvEmqx_parameter\022"
+  "\016\n\006NodeId\030\001 \001(\t\022\n\n\002ip\030\002 \001(\t\022\014\n\004port\030\003 \001("
+  "\005\022\025\n\rpubSpeedTopic\030\004 \001(\t\022\024\n\014subPoseTopic"
+  "\030\005 \001(\t\022\025\n\rsubSpeedTopic\030\006 \001(\t\"\241\001\n\016Emqx_p"
+  "arameter\022\016\n\006NodeId\030\001 \001(\t\022\n\n\002ip\030\002 \001(\t\022\014\n\004"
+  "port\030\003 \001(\005\022\025\n\rpubStatuTopic\030\004 \001(\t\022\030\n\020pub"
+  "NavStatuTopic\030\005 \001(\t\022\026\n\016subNavCmdTopic\030\006 "
+  "\001(\t\022\034\n\024subBrotherStatuTopic\030\007 \001(\t\"d\n\024Nav"
+  "igation_parameter\022$\n\010Agv_emqx\030\001 \001(\0132\022.Ag"
+  "vEmqx_parameter\022&\n\rTerminal_emqx\030\002 \001(\0132\017"
+  ".Emqx_parameterb\006proto3"
   ;
 static const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable*const descriptor_table_parameter_2eproto_deps[1] = {
 };
@@ -140,7 +142,7 @@ static ::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase*const descriptor_table_par
 };
 static ::PROTOBUF_NAMESPACE_ID::internal::once_flag descriptor_table_parameter_2eproto_once;
 const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_parameter_2eproto = {
-  false, false, descriptor_table_protodef_parameter_2eproto, "parameter.proto", 390,
+  false, false, descriptor_table_protodef_parameter_2eproto, "parameter.proto", 423,
   &descriptor_table_parameter_2eproto_once, descriptor_table_parameter_2eproto_sccs, descriptor_table_parameter_2eproto_deps, 3, 0,
   schemas, file_default_instances, TableStruct_parameter_2eproto::offsets,
   file_level_metadata_parameter_2eproto, 3, file_level_enum_descriptors_parameter_2eproto, file_level_service_descriptors_parameter_2eproto,
@@ -176,14 +178,19 @@ AgvEmqx_parameter::AgvEmqx_parameter(const AgvEmqx_parameter& from)
     ip_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from._internal_ip(),
       GetArena());
   }
-  pubtopic_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
-  if (!from._internal_pubtopic().empty()) {
-    pubtopic_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from._internal_pubtopic(),
+  pubspeedtopic_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+  if (!from._internal_pubspeedtopic().empty()) {
+    pubspeedtopic_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from._internal_pubspeedtopic(),
       GetArena());
   }
-  subtopic_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
-  if (!from._internal_subtopic().empty()) {
-    subtopic_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from._internal_subtopic(),
+  subposetopic_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+  if (!from._internal_subposetopic().empty()) {
+    subposetopic_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from._internal_subposetopic(),
+      GetArena());
+  }
+  subspeedtopic_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+  if (!from._internal_subspeedtopic().empty()) {
+    subspeedtopic_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from._internal_subspeedtopic(),
       GetArena());
   }
   port_ = from.port_;
@@ -194,8 +201,9 @@ void AgvEmqx_parameter::SharedCtor() {
   ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&scc_info_AgvEmqx_parameter_parameter_2eproto.base);
   nodeid_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
   ip_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
-  pubtopic_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
-  subtopic_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+  pubspeedtopic_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+  subposetopic_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+  subspeedtopic_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
   port_ = 0;
 }
 
@@ -209,8 +217,9 @@ void AgvEmqx_parameter::SharedDtor() {
   GOOGLE_DCHECK(GetArena() == nullptr);
   nodeid_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
   ip_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
-  pubtopic_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
-  subtopic_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+  pubspeedtopic_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+  subposetopic_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+  subspeedtopic_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
 }
 
 void AgvEmqx_parameter::ArenaDtor(void* object) {
@@ -236,8 +245,9 @@ void AgvEmqx_parameter::Clear() {
 
   nodeid_.ClearToEmpty(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
   ip_.ClearToEmpty(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
-  pubtopic_.ClearToEmpty(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
-  subtopic_.ClearToEmpty(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
+  pubspeedtopic_.ClearToEmpty(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
+  subposetopic_.ClearToEmpty(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
+  subspeedtopic_.ClearToEmpty(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
   port_ = 0;
   _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
 }
@@ -275,21 +285,30 @@ const char* AgvEmqx_parameter::_InternalParse(const char* ptr, ::PROTOBUF_NAMESP
           CHK_(ptr);
         } else goto handle_unusual;
         continue;
-      // string pubTopic = 4;
+      // string pubSpeedTopic = 4;
       case 4:
         if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 34)) {
-          auto str = _internal_mutable_pubtopic();
+          auto str = _internal_mutable_pubspeedtopic();
           ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
-          CHK_(::PROTOBUF_NAMESPACE_ID::internal::VerifyUTF8(str, "AgvEmqx_parameter.pubTopic"));
+          CHK_(::PROTOBUF_NAMESPACE_ID::internal::VerifyUTF8(str, "AgvEmqx_parameter.pubSpeedTopic"));
           CHK_(ptr);
         } else goto handle_unusual;
         continue;
-      // string subTopic = 5;
+      // string subPoseTopic = 5;
       case 5:
         if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 42)) {
-          auto str = _internal_mutable_subtopic();
+          auto str = _internal_mutable_subposetopic();
           ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
-          CHK_(::PROTOBUF_NAMESPACE_ID::internal::VerifyUTF8(str, "AgvEmqx_parameter.subTopic"));
+          CHK_(::PROTOBUF_NAMESPACE_ID::internal::VerifyUTF8(str, "AgvEmqx_parameter.subPoseTopic"));
+          CHK_(ptr);
+        } else goto handle_unusual;
+        continue;
+      // string subSpeedTopic = 6;
+      case 6:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 50)) {
+          auto str = _internal_mutable_subspeedtopic();
+          ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
+          CHK_(::PROTOBUF_NAMESPACE_ID::internal::VerifyUTF8(str, "AgvEmqx_parameter.subSpeedTopic"));
           CHK_(ptr);
         } else goto handle_unusual;
         continue;
@@ -347,24 +366,34 @@ failure:
     target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteInt32ToArray(3, this->_internal_port(), target);
   }
 
-  // string pubTopic = 4;
-  if (this->pubtopic().size() > 0) {
+  // string pubSpeedTopic = 4;
+  if (this->pubspeedtopic().size() > 0) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      this->_internal_pubspeedtopic().data(), static_cast<int>(this->_internal_pubspeedtopic().length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "AgvEmqx_parameter.pubSpeedTopic");
+    target = stream->WriteStringMaybeAliased(
+        4, this->_internal_pubspeedtopic(), target);
+  }
+
+  // string subPoseTopic = 5;
+  if (this->subposetopic().size() > 0) {
     ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
-      this->_internal_pubtopic().data(), static_cast<int>(this->_internal_pubtopic().length()),
+      this->_internal_subposetopic().data(), static_cast<int>(this->_internal_subposetopic().length()),
       ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
-      "AgvEmqx_parameter.pubTopic");
+      "AgvEmqx_parameter.subPoseTopic");
     target = stream->WriteStringMaybeAliased(
-        4, this->_internal_pubtopic(), target);
+        5, this->_internal_subposetopic(), target);
   }
 
-  // string subTopic = 5;
-  if (this->subtopic().size() > 0) {
+  // string subSpeedTopic = 6;
+  if (this->subspeedtopic().size() > 0) {
     ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
-      this->_internal_subtopic().data(), static_cast<int>(this->_internal_subtopic().length()),
+      this->_internal_subspeedtopic().data(), static_cast<int>(this->_internal_subspeedtopic().length()),
       ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
-      "AgvEmqx_parameter.subTopic");
+      "AgvEmqx_parameter.subSpeedTopic");
     target = stream->WriteStringMaybeAliased(
-        5, this->_internal_subtopic(), target);
+        6, this->_internal_subspeedtopic(), target);
   }
 
   if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
@@ -397,18 +426,25 @@ size_t AgvEmqx_parameter::ByteSizeLong() const {
         this->_internal_ip());
   }
 
-  // string pubTopic = 4;
-  if (this->pubtopic().size() > 0) {
+  // string pubSpeedTopic = 4;
+  if (this->pubspeedtopic().size() > 0) {
     total_size += 1 +
       ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
-        this->_internal_pubtopic());
+        this->_internal_pubspeedtopic());
   }
 
-  // string subTopic = 5;
-  if (this->subtopic().size() > 0) {
+  // string subPoseTopic = 5;
+  if (this->subposetopic().size() > 0) {
     total_size += 1 +
       ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
-        this->_internal_subtopic());
+        this->_internal_subposetopic());
+  }
+
+  // string subSpeedTopic = 6;
+  if (this->subspeedtopic().size() > 0) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
+        this->_internal_subspeedtopic());
   }
 
   // int32 port = 3;
@@ -455,11 +491,14 @@ void AgvEmqx_parameter::MergeFrom(const AgvEmqx_parameter& from) {
   if (from.ip().size() > 0) {
     _internal_set_ip(from._internal_ip());
   }
-  if (from.pubtopic().size() > 0) {
-    _internal_set_pubtopic(from._internal_pubtopic());
+  if (from.pubspeedtopic().size() > 0) {
+    _internal_set_pubspeedtopic(from._internal_pubspeedtopic());
+  }
+  if (from.subposetopic().size() > 0) {
+    _internal_set_subposetopic(from._internal_subposetopic());
   }
-  if (from.subtopic().size() > 0) {
-    _internal_set_subtopic(from._internal_subtopic());
+  if (from.subspeedtopic().size() > 0) {
+    _internal_set_subspeedtopic(from._internal_subspeedtopic());
   }
   if (from.port() != 0) {
     _internal_set_port(from._internal_port());
@@ -489,8 +528,9 @@ void AgvEmqx_parameter::InternalSwap(AgvEmqx_parameter* other) {
   _internal_metadata_.Swap<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(&other->_internal_metadata_);
   nodeid_.Swap(&other->nodeid_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
   ip_.Swap(&other->ip_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
-  pubtopic_.Swap(&other->pubtopic_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
-  subtopic_.Swap(&other->subtopic_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
+  pubspeedtopic_.Swap(&other->pubspeedtopic_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
+  subposetopic_.Swap(&other->subposetopic_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
+  subspeedtopic_.Swap(&other->subspeedtopic_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
   swap(port_, other->port_);
 }
 

+ 178 - 98
MPC/parameter.pb.h

@@ -186,8 +186,9 @@ class AgvEmqx_parameter PROTOBUF_FINAL :
   enum : int {
     kNodeIdFieldNumber = 1,
     kIpFieldNumber = 2,
-    kPubTopicFieldNumber = 4,
-    kSubTopicFieldNumber = 5,
+    kPubSpeedTopicFieldNumber = 4,
+    kSubPoseTopicFieldNumber = 5,
+    kSubSpeedTopicFieldNumber = 6,
     kPortFieldNumber = 3,
   };
   // string NodeId = 1;
@@ -222,36 +223,52 @@ class AgvEmqx_parameter PROTOBUF_FINAL :
   std::string* _internal_mutable_ip();
   public:
 
-  // string pubTopic = 4;
-  void clear_pubtopic();
-  const std::string& pubtopic() const;
-  void set_pubtopic(const std::string& value);
-  void set_pubtopic(std::string&& value);
-  void set_pubtopic(const char* value);
-  void set_pubtopic(const char* value, size_t size);
-  std::string* mutable_pubtopic();
-  std::string* release_pubtopic();
-  void set_allocated_pubtopic(std::string* pubtopic);
+  // string pubSpeedTopic = 4;
+  void clear_pubspeedtopic();
+  const std::string& pubspeedtopic() const;
+  void set_pubspeedtopic(const std::string& value);
+  void set_pubspeedtopic(std::string&& value);
+  void set_pubspeedtopic(const char* value);
+  void set_pubspeedtopic(const char* value, size_t size);
+  std::string* mutable_pubspeedtopic();
+  std::string* release_pubspeedtopic();
+  void set_allocated_pubspeedtopic(std::string* pubspeedtopic);
   private:
-  const std::string& _internal_pubtopic() const;
-  void _internal_set_pubtopic(const std::string& value);
-  std::string* _internal_mutable_pubtopic();
+  const std::string& _internal_pubspeedtopic() const;
+  void _internal_set_pubspeedtopic(const std::string& value);
+  std::string* _internal_mutable_pubspeedtopic();
   public:
 
-  // string subTopic = 5;
-  void clear_subtopic();
-  const std::string& subtopic() const;
-  void set_subtopic(const std::string& value);
-  void set_subtopic(std::string&& value);
-  void set_subtopic(const char* value);
-  void set_subtopic(const char* value, size_t size);
-  std::string* mutable_subtopic();
-  std::string* release_subtopic();
-  void set_allocated_subtopic(std::string* subtopic);
+  // string subPoseTopic = 5;
+  void clear_subposetopic();
+  const std::string& subposetopic() const;
+  void set_subposetopic(const std::string& value);
+  void set_subposetopic(std::string&& value);
+  void set_subposetopic(const char* value);
+  void set_subposetopic(const char* value, size_t size);
+  std::string* mutable_subposetopic();
+  std::string* release_subposetopic();
+  void set_allocated_subposetopic(std::string* subposetopic);
   private:
-  const std::string& _internal_subtopic() const;
-  void _internal_set_subtopic(const std::string& value);
-  std::string* _internal_mutable_subtopic();
+  const std::string& _internal_subposetopic() const;
+  void _internal_set_subposetopic(const std::string& value);
+  std::string* _internal_mutable_subposetopic();
+  public:
+
+  // string subSpeedTopic = 6;
+  void clear_subspeedtopic();
+  const std::string& subspeedtopic() const;
+  void set_subspeedtopic(const std::string& value);
+  void set_subspeedtopic(std::string&& value);
+  void set_subspeedtopic(const char* value);
+  void set_subspeedtopic(const char* value, size_t size);
+  std::string* mutable_subspeedtopic();
+  std::string* release_subspeedtopic();
+  void set_allocated_subspeedtopic(std::string* subspeedtopic);
+  private:
+  const std::string& _internal_subspeedtopic() const;
+  void _internal_set_subspeedtopic(const std::string& value);
+  std::string* _internal_mutable_subspeedtopic();
   public:
 
   // int32 port = 3;
@@ -272,8 +289,9 @@ class AgvEmqx_parameter PROTOBUF_FINAL :
   typedef void DestructorSkippable_;
   ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr nodeid_;
   ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr ip_;
-  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr pubtopic_;
-  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr subtopic_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr pubspeedtopic_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr subposetopic_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr subspeedtopic_;
   ::PROTOBUF_NAMESPACE_ID::int32 port_;
   mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
   friend struct ::TableStruct_parameter_2eproto;
@@ -844,128 +862,190 @@ inline void AgvEmqx_parameter::set_port(::PROTOBUF_NAMESPACE_ID::int32 value) {
   // @@protoc_insertion_point(field_set:AgvEmqx_parameter.port)
 }
 
-// string pubTopic = 4;
-inline void AgvEmqx_parameter::clear_pubtopic() {
-  pubtopic_.ClearToEmpty(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
+// string pubSpeedTopic = 4;
+inline void AgvEmqx_parameter::clear_pubspeedtopic() {
+  pubspeedtopic_.ClearToEmpty(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
+}
+inline const std::string& AgvEmqx_parameter::pubspeedtopic() const {
+  // @@protoc_insertion_point(field_get:AgvEmqx_parameter.pubSpeedTopic)
+  return _internal_pubspeedtopic();
+}
+inline void AgvEmqx_parameter::set_pubspeedtopic(const std::string& value) {
+  _internal_set_pubspeedtopic(value);
+  // @@protoc_insertion_point(field_set:AgvEmqx_parameter.pubSpeedTopic)
+}
+inline std::string* AgvEmqx_parameter::mutable_pubspeedtopic() {
+  // @@protoc_insertion_point(field_mutable:AgvEmqx_parameter.pubSpeedTopic)
+  return _internal_mutable_pubspeedtopic();
+}
+inline const std::string& AgvEmqx_parameter::_internal_pubspeedtopic() const {
+  return pubspeedtopic_.Get();
+}
+inline void AgvEmqx_parameter::_internal_set_pubspeedtopic(const std::string& value) {
+  
+  pubspeedtopic_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), value, GetArena());
+}
+inline void AgvEmqx_parameter::set_pubspeedtopic(std::string&& value) {
+  
+  pubspeedtopic_.Set(
+    &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::move(value), GetArena());
+  // @@protoc_insertion_point(field_set_rvalue:AgvEmqx_parameter.pubSpeedTopic)
+}
+inline void AgvEmqx_parameter::set_pubspeedtopic(const char* value) {
+  GOOGLE_DCHECK(value != nullptr);
+  
+  pubspeedtopic_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(value),
+              GetArena());
+  // @@protoc_insertion_point(field_set_char:AgvEmqx_parameter.pubSpeedTopic)
+}
+inline void AgvEmqx_parameter::set_pubspeedtopic(const char* value,
+    size_t size) {
+  
+  pubspeedtopic_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(
+      reinterpret_cast<const char*>(value), size), GetArena());
+  // @@protoc_insertion_point(field_set_pointer:AgvEmqx_parameter.pubSpeedTopic)
+}
+inline std::string* AgvEmqx_parameter::_internal_mutable_pubspeedtopic() {
+  
+  return pubspeedtopic_.Mutable(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
+}
+inline std::string* AgvEmqx_parameter::release_pubspeedtopic() {
+  // @@protoc_insertion_point(field_release:AgvEmqx_parameter.pubSpeedTopic)
+  return pubspeedtopic_.Release(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
+}
+inline void AgvEmqx_parameter::set_allocated_pubspeedtopic(std::string* pubspeedtopic) {
+  if (pubspeedtopic != nullptr) {
+    
+  } else {
+    
+  }
+  pubspeedtopic_.SetAllocated(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), pubspeedtopic,
+      GetArena());
+  // @@protoc_insertion_point(field_set_allocated:AgvEmqx_parameter.pubSpeedTopic)
+}
+
+// string subPoseTopic = 5;
+inline void AgvEmqx_parameter::clear_subposetopic() {
+  subposetopic_.ClearToEmpty(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
 }
-inline const std::string& AgvEmqx_parameter::pubtopic() const {
-  // @@protoc_insertion_point(field_get:AgvEmqx_parameter.pubTopic)
-  return _internal_pubtopic();
+inline const std::string& AgvEmqx_parameter::subposetopic() const {
+  // @@protoc_insertion_point(field_get:AgvEmqx_parameter.subPoseTopic)
+  return _internal_subposetopic();
 }
-inline void AgvEmqx_parameter::set_pubtopic(const std::string& value) {
-  _internal_set_pubtopic(value);
-  // @@protoc_insertion_point(field_set:AgvEmqx_parameter.pubTopic)
+inline void AgvEmqx_parameter::set_subposetopic(const std::string& value) {
+  _internal_set_subposetopic(value);
+  // @@protoc_insertion_point(field_set:AgvEmqx_parameter.subPoseTopic)
 }
-inline std::string* AgvEmqx_parameter::mutable_pubtopic() {
-  // @@protoc_insertion_point(field_mutable:AgvEmqx_parameter.pubTopic)
-  return _internal_mutable_pubtopic();
+inline std::string* AgvEmqx_parameter::mutable_subposetopic() {
+  // @@protoc_insertion_point(field_mutable:AgvEmqx_parameter.subPoseTopic)
+  return _internal_mutable_subposetopic();
 }
-inline const std::string& AgvEmqx_parameter::_internal_pubtopic() const {
-  return pubtopic_.Get();
+inline const std::string& AgvEmqx_parameter::_internal_subposetopic() const {
+  return subposetopic_.Get();
 }
-inline void AgvEmqx_parameter::_internal_set_pubtopic(const std::string& value) {
+inline void AgvEmqx_parameter::_internal_set_subposetopic(const std::string& value) {
   
-  pubtopic_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), value, GetArena());
+  subposetopic_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), value, GetArena());
 }
-inline void AgvEmqx_parameter::set_pubtopic(std::string&& value) {
+inline void AgvEmqx_parameter::set_subposetopic(std::string&& value) {
   
-  pubtopic_.Set(
+  subposetopic_.Set(
     &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::move(value), GetArena());
-  // @@protoc_insertion_point(field_set_rvalue:AgvEmqx_parameter.pubTopic)
+  // @@protoc_insertion_point(field_set_rvalue:AgvEmqx_parameter.subPoseTopic)
 }
-inline void AgvEmqx_parameter::set_pubtopic(const char* value) {
+inline void AgvEmqx_parameter::set_subposetopic(const char* value) {
   GOOGLE_DCHECK(value != nullptr);
   
-  pubtopic_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(value),
+  subposetopic_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(value),
               GetArena());
-  // @@protoc_insertion_point(field_set_char:AgvEmqx_parameter.pubTopic)
+  // @@protoc_insertion_point(field_set_char:AgvEmqx_parameter.subPoseTopic)
 }
-inline void AgvEmqx_parameter::set_pubtopic(const char* value,
+inline void AgvEmqx_parameter::set_subposetopic(const char* value,
     size_t size) {
   
-  pubtopic_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(
+  subposetopic_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(
       reinterpret_cast<const char*>(value), size), GetArena());
-  // @@protoc_insertion_point(field_set_pointer:AgvEmqx_parameter.pubTopic)
+  // @@protoc_insertion_point(field_set_pointer:AgvEmqx_parameter.subPoseTopic)
 }
-inline std::string* AgvEmqx_parameter::_internal_mutable_pubtopic() {
+inline std::string* AgvEmqx_parameter::_internal_mutable_subposetopic() {
   
-  return pubtopic_.Mutable(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
+  return subposetopic_.Mutable(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
 }
-inline std::string* AgvEmqx_parameter::release_pubtopic() {
-  // @@protoc_insertion_point(field_release:AgvEmqx_parameter.pubTopic)
-  return pubtopic_.Release(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
+inline std::string* AgvEmqx_parameter::release_subposetopic() {
+  // @@protoc_insertion_point(field_release:AgvEmqx_parameter.subPoseTopic)
+  return subposetopic_.Release(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
 }
-inline void AgvEmqx_parameter::set_allocated_pubtopic(std::string* pubtopic) {
-  if (pubtopic != nullptr) {
+inline void AgvEmqx_parameter::set_allocated_subposetopic(std::string* subposetopic) {
+  if (subposetopic != nullptr) {
     
   } else {
     
   }
-  pubtopic_.SetAllocated(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), pubtopic,
+  subposetopic_.SetAllocated(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), subposetopic,
       GetArena());
-  // @@protoc_insertion_point(field_set_allocated:AgvEmqx_parameter.pubTopic)
+  // @@protoc_insertion_point(field_set_allocated:AgvEmqx_parameter.subPoseTopic)
 }
 
-// string subTopic = 5;
-inline void AgvEmqx_parameter::clear_subtopic() {
-  subtopic_.ClearToEmpty(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
+// string subSpeedTopic = 6;
+inline void AgvEmqx_parameter::clear_subspeedtopic() {
+  subspeedtopic_.ClearToEmpty(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
 }
-inline const std::string& AgvEmqx_parameter::subtopic() const {
-  // @@protoc_insertion_point(field_get:AgvEmqx_parameter.subTopic)
-  return _internal_subtopic();
+inline const std::string& AgvEmqx_parameter::subspeedtopic() const {
+  // @@protoc_insertion_point(field_get:AgvEmqx_parameter.subSpeedTopic)
+  return _internal_subspeedtopic();
 }
-inline void AgvEmqx_parameter::set_subtopic(const std::string& value) {
-  _internal_set_subtopic(value);
-  // @@protoc_insertion_point(field_set:AgvEmqx_parameter.subTopic)
+inline void AgvEmqx_parameter::set_subspeedtopic(const std::string& value) {
+  _internal_set_subspeedtopic(value);
+  // @@protoc_insertion_point(field_set:AgvEmqx_parameter.subSpeedTopic)
 }
-inline std::string* AgvEmqx_parameter::mutable_subtopic() {
-  // @@protoc_insertion_point(field_mutable:AgvEmqx_parameter.subTopic)
-  return _internal_mutable_subtopic();
+inline std::string* AgvEmqx_parameter::mutable_subspeedtopic() {
+  // @@protoc_insertion_point(field_mutable:AgvEmqx_parameter.subSpeedTopic)
+  return _internal_mutable_subspeedtopic();
 }
-inline const std::string& AgvEmqx_parameter::_internal_subtopic() const {
-  return subtopic_.Get();
+inline const std::string& AgvEmqx_parameter::_internal_subspeedtopic() const {
+  return subspeedtopic_.Get();
 }
-inline void AgvEmqx_parameter::_internal_set_subtopic(const std::string& value) {
+inline void AgvEmqx_parameter::_internal_set_subspeedtopic(const std::string& value) {
   
-  subtopic_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), value, GetArena());
+  subspeedtopic_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), value, GetArena());
 }
-inline void AgvEmqx_parameter::set_subtopic(std::string&& value) {
+inline void AgvEmqx_parameter::set_subspeedtopic(std::string&& value) {
   
-  subtopic_.Set(
+  subspeedtopic_.Set(
     &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::move(value), GetArena());
-  // @@protoc_insertion_point(field_set_rvalue:AgvEmqx_parameter.subTopic)
+  // @@protoc_insertion_point(field_set_rvalue:AgvEmqx_parameter.subSpeedTopic)
 }
-inline void AgvEmqx_parameter::set_subtopic(const char* value) {
+inline void AgvEmqx_parameter::set_subspeedtopic(const char* value) {
   GOOGLE_DCHECK(value != nullptr);
   
-  subtopic_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(value),
+  subspeedtopic_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(value),
               GetArena());
-  // @@protoc_insertion_point(field_set_char:AgvEmqx_parameter.subTopic)
+  // @@protoc_insertion_point(field_set_char:AgvEmqx_parameter.subSpeedTopic)
 }
-inline void AgvEmqx_parameter::set_subtopic(const char* value,
+inline void AgvEmqx_parameter::set_subspeedtopic(const char* value,
     size_t size) {
   
-  subtopic_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(
+  subspeedtopic_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(
       reinterpret_cast<const char*>(value), size), GetArena());
-  // @@protoc_insertion_point(field_set_pointer:AgvEmqx_parameter.subTopic)
+  // @@protoc_insertion_point(field_set_pointer:AgvEmqx_parameter.subSpeedTopic)
 }
-inline std::string* AgvEmqx_parameter::_internal_mutable_subtopic() {
+inline std::string* AgvEmqx_parameter::_internal_mutable_subspeedtopic() {
   
-  return subtopic_.Mutable(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
+  return subspeedtopic_.Mutable(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
 }
-inline std::string* AgvEmqx_parameter::release_subtopic() {
-  // @@protoc_insertion_point(field_release:AgvEmqx_parameter.subTopic)
-  return subtopic_.Release(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
+inline std::string* AgvEmqx_parameter::release_subspeedtopic() {
+  // @@protoc_insertion_point(field_release:AgvEmqx_parameter.subSpeedTopic)
+  return subspeedtopic_.Release(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
 }
-inline void AgvEmqx_parameter::set_allocated_subtopic(std::string* subtopic) {
-  if (subtopic != nullptr) {
+inline void AgvEmqx_parameter::set_allocated_subspeedtopic(std::string* subspeedtopic) {
+  if (subspeedtopic != nullptr) {
     
   } else {
     
   }
-  subtopic_.SetAllocated(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), subtopic,
+  subspeedtopic_.SetAllocated(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), subspeedtopic,
       GetArena());
-  // @@protoc_insertion_point(field_set_allocated:AgvEmqx_parameter.subTopic)
+  // @@protoc_insertion_point(field_set_allocated:AgvEmqx_parameter.subSpeedTopic)
 }
 
 // -------------------------------------------------------------------

+ 3 - 2
config/navigation_child.prototxt

@@ -3,8 +3,9 @@ Agv_emqx
 	NodeId:"agv1-child"
 	ip:"127.0.0.1"
 	port:1883
-	pubTopic:"monitor_child/speedcmd"
-	subTopic:"monitor_child/statu"
+	pubSpeedTopic:"monitor_child/speedcmd"
+	subPoseTopic:"monitor_child/statu"
+	subSpeedTopic:"monitor_child/speed"
 }
 
 Terminal_emqx

+ 5 - 0
message.proto

@@ -8,6 +8,11 @@ message AGVStatu {
   float vth=5;
 }
 
+message AGVSpeed{
+  float v=1;
+  float w=2;
+}
+
 message Speed {
   int32 H=1;  //心跳
   int32 T=2; // 1:原地旋转,2:横移,3:MPC巡线/前进, 其他/未接收到:停止

+ 3 - 2
parameter.proto

@@ -4,8 +4,9 @@ message AgvEmqx_parameter
   string NodeId=1;
   string ip=2;
   int32 port=3;
-  string pubTopic=4;
-  string subTopic=5;
+  string pubSpeedTopic=4;
+  string subPoseTopic=5;
+  string subSpeedTopic=6;
 }
 message Emqx_parameter
 {