init
This commit is contained in:
21
arm/src/arm_zero_control.cpp
Normal file
21
arm/src/arm_zero_control.cpp
Normal file
@@ -0,0 +1,21 @@
|
||||
#include <unitree/robot/channel/channel_publisher.hpp>
|
||||
#include <unitree/common/time/time_tool.hpp>
|
||||
#include "msg/ArmString_.hpp"
|
||||
|
||||
#define TOPIC "rt/arm_Command"
|
||||
|
||||
using namespace unitree::robot;
|
||||
using namespace unitree::common;
|
||||
|
||||
int main()
|
||||
{
|
||||
ChannelFactory::Instance()->Init(0);
|
||||
ChannelPublisher<unitree_arm::msg::dds_::ArmString_> publisher(TOPIC);
|
||||
publisher.InitChannel();
|
||||
|
||||
unitree_arm::msg::dds_::ArmString_ msg{};
|
||||
msg.data_() = "{\"seq\":4,\"address\":1,\"funcode\":7}";
|
||||
publisher.Write(msg);
|
||||
|
||||
return 0;
|
||||
}
|
41
arm/src/get_arm_joint_angle.cpp
Normal file
41
arm/src/get_arm_joint_angle.cpp
Normal file
@@ -0,0 +1,41 @@
|
||||
#include <unitree/robot/channel/channel_subscriber.hpp>
|
||||
#include <unitree/common/time/time_tool.hpp>
|
||||
#include "msg/PubServoInfo_.hpp"
|
||||
#include "msg/ArmString_.hpp"
|
||||
|
||||
#define TOPIC "current_servo_angle"
|
||||
#define TOPIC1 "rt/arm_Feedback"
|
||||
|
||||
using namespace unitree::robot;
|
||||
using namespace unitree::common;
|
||||
|
||||
void Handler(const void* msg)
|
||||
{
|
||||
const unitree_arm::msg::dds_::PubServoInfo_* pm = (const unitree_arm::msg::dds_::PubServoInfo_*)msg;
|
||||
|
||||
std::cout << "servo0_data:" << pm->servo0_data_() << ", servo1_data:" << pm->servo1_data_() << ", servo2_data:" << pm->servo2_data_()<< ", servo3_data:" << pm->servo3_data_()<< ", servo4_data:" << pm->servo4_data_()<< ", servo5_data:" << pm->servo5_data_()<< ", servo6_data:" << pm->servo6_data_() << std::endl;
|
||||
}
|
||||
|
||||
void Handler1(const void* msg)
|
||||
{
|
||||
const unitree_arm::msg::dds_::ArmString_* pm = (const unitree_arm::msg::dds_::ArmString_*)msg;
|
||||
|
||||
std::cout << "armFeedback_data:" << pm->data_() << std::endl;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
ChannelFactory::Instance()->Init(0);
|
||||
ChannelSubscriber<unitree_arm::msg::dds_::PubServoInfo_> subscriber(TOPIC);
|
||||
subscriber.InitChannel(Handler);
|
||||
|
||||
ChannelSubscriber<unitree_arm::msg::dds_::ArmString_> subscriber1(TOPIC1);
|
||||
subscriber1.InitChannel(Handler1);
|
||||
|
||||
while (true)
|
||||
{
|
||||
sleep(10);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
21
arm/src/joint_angle_control.cpp
Normal file
21
arm/src/joint_angle_control.cpp
Normal file
@@ -0,0 +1,21 @@
|
||||
#include <unitree/robot/channel/channel_publisher.hpp>
|
||||
#include <unitree/common/time/time_tool.hpp>
|
||||
#include "msg/ArmString_.hpp"
|
||||
|
||||
#define TOPIC "rt/arm_Command"
|
||||
|
||||
using namespace unitree::robot;
|
||||
using namespace unitree::common;
|
||||
|
||||
int main()
|
||||
{
|
||||
ChannelFactory::Instance()->Init(0);
|
||||
ChannelPublisher<unitree_arm::msg::dds_::ArmString_> publisher(TOPIC);
|
||||
publisher.InitChannel();
|
||||
|
||||
unitree_arm::msg::dds_::ArmString_ msg{};
|
||||
msg.data_() = "{\"seq\":4,\"address\":1,\"funcode\":1,\"data\":{\"id\":5,\"angle\":60,\"delay_ms\":0}}";
|
||||
publisher.Write(msg);
|
||||
|
||||
return 0;
|
||||
}
|
21
arm/src/joint_enable_control.cpp
Normal file
21
arm/src/joint_enable_control.cpp
Normal file
@@ -0,0 +1,21 @@
|
||||
#include <unitree/robot/channel/channel_publisher.hpp>
|
||||
#include <unitree/common/time/time_tool.hpp>
|
||||
#include "msg/ArmString_.hpp"
|
||||
|
||||
#define TOPIC "rt/arm_Command"
|
||||
|
||||
using namespace unitree::robot;
|
||||
using namespace unitree::common;
|
||||
|
||||
int main()
|
||||
{
|
||||
ChannelFactory::Instance()->Init(0);
|
||||
ChannelPublisher<unitree_arm::msg::dds_::ArmString_> publisher(TOPIC);
|
||||
publisher.InitChannel();
|
||||
|
||||
unitree_arm::msg::dds_::ArmString_ msg{};
|
||||
msg.data_() = "{\"seq\":4,\"address\":1,\"funcode\":5,\"data\":{\"mode\":0}}";
|
||||
publisher.Write(msg);
|
||||
|
||||
return 0;
|
||||
}
|
53
arm/src/msg/ArmString_.cpp
Normal file
53
arm/src/msg/ArmString_.cpp
Normal file
@@ -0,0 +1,53 @@
|
||||
/****************************************************************
|
||||
|
||||
Generated by Eclipse Cyclone DDS IDL to CXX Translator
|
||||
File name: ArmString_.idl
|
||||
Source: ArmString_.cpp
|
||||
Cyclone DDS: v0.10.2
|
||||
|
||||
*****************************************************************/
|
||||
#include "ArmString_.hpp"
|
||||
|
||||
namespace org{
|
||||
namespace eclipse{
|
||||
namespace cyclonedds{
|
||||
namespace core{
|
||||
namespace cdr{
|
||||
|
||||
template<>
|
||||
propvec &get_type_props<::unitree_arm::msg::dds_::ArmString_>() {
|
||||
static thread_local std::mutex mtx;
|
||||
static thread_local propvec props;
|
||||
static thread_local entity_properties_t *props_end = nullptr;
|
||||
static thread_local std::atomic_bool initialized {false};
|
||||
key_endpoint keylist;
|
||||
if (initialized.load(std::memory_order_relaxed)) {
|
||||
auto ptr = props.data();
|
||||
while (ptr < props_end)
|
||||
(ptr++)->is_present = false;
|
||||
return props;
|
||||
}
|
||||
std::lock_guard<std::mutex> lock(mtx);
|
||||
if (initialized.load(std::memory_order_relaxed)) {
|
||||
auto ptr = props.data();
|
||||
while (ptr < props_end)
|
||||
(ptr++)->is_present = false;
|
||||
return props;
|
||||
}
|
||||
props.clear();
|
||||
|
||||
props.push_back(entity_properties_t(0, 0, false, bb_unset, extensibility::ext_final)); //root
|
||||
props.push_back(entity_properties_t(1, 0, false, bb_unset, extensibility::ext_final, false)); //::data_
|
||||
|
||||
entity_properties_t::finish(props, keylist);
|
||||
props_end = props.data() + props.size();
|
||||
initialized.store(true, std::memory_order_release);
|
||||
return props;
|
||||
}
|
||||
|
||||
} //namespace cdr
|
||||
} //namespace core
|
||||
} //namespace cyclonedds
|
||||
} //namespace eclipse
|
||||
} //namespace org
|
||||
|
232
arm/src/msg/ArmString_.hpp
Normal file
232
arm/src/msg/ArmString_.hpp
Normal file
@@ -0,0 +1,232 @@
|
||||
/****************************************************************
|
||||
|
||||
Generated by Eclipse Cyclone DDS IDL to CXX Translator
|
||||
File name: ArmString_.idl
|
||||
Source: ArmString_.hpp
|
||||
Cyclone DDS: v0.10.2
|
||||
|
||||
*****************************************************************/
|
||||
#ifndef DDSCXX_ARMSTRING__HPP
|
||||
#define DDSCXX_ARMSTRING__HPP
|
||||
|
||||
#include <string>
|
||||
|
||||
namespace unitree_arm
|
||||
{
|
||||
namespace msg
|
||||
{
|
||||
namespace dds_
|
||||
{
|
||||
class ArmString_
|
||||
{
|
||||
private:
|
||||
std::string data__;
|
||||
|
||||
public:
|
||||
ArmString_() = default;
|
||||
|
||||
explicit ArmString_(
|
||||
const std::string& data_) :
|
||||
data__(data_) { }
|
||||
|
||||
const std::string& data_() const { return this->data__; }
|
||||
std::string& data_() { return this->data__; }
|
||||
void data_(const std::string& _val_) { this->data__ = _val_; }
|
||||
void data_(std::string&& _val_) { this->data__ = _val_; }
|
||||
|
||||
bool operator==(const ArmString_& _other) const
|
||||
{
|
||||
(void) _other;
|
||||
return data__ == _other.data__;
|
||||
}
|
||||
|
||||
bool operator!=(const ArmString_& _other) const
|
||||
{
|
||||
return !(*this == _other);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#include "dds/topic/TopicTraits.hpp"
|
||||
#include "org/eclipse/cyclonedds/topic/datatopic.hpp"
|
||||
|
||||
namespace org {
|
||||
namespace eclipse {
|
||||
namespace cyclonedds {
|
||||
namespace topic {
|
||||
|
||||
template <> constexpr const char* TopicTraits<::unitree_arm::msg::dds_::ArmString_>::getTypeName()
|
||||
{
|
||||
return "unitree_arm::msg::dds_::ArmString_";
|
||||
}
|
||||
|
||||
template <> constexpr bool TopicTraits<::unitree_arm::msg::dds_::ArmString_>::isSelfContained()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
template <> constexpr bool TopicTraits<::unitree_arm::msg::dds_::ArmString_>::isKeyless()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
} //namespace topic
|
||||
} //namespace cyclonedds
|
||||
} //namespace eclipse
|
||||
} //namespace org
|
||||
|
||||
namespace dds {
|
||||
namespace topic {
|
||||
|
||||
template <>
|
||||
struct topic_type_name<::unitree_arm::msg::dds_::ArmString_>
|
||||
{
|
||||
static std::string value()
|
||||
{
|
||||
return org::eclipse::cyclonedds::topic::TopicTraits<::unitree_arm::msg::dds_::ArmString_>::getTypeName();
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
REGISTER_TOPIC_TYPE(::unitree_arm::msg::dds_::ArmString_)
|
||||
|
||||
namespace org{
|
||||
namespace eclipse{
|
||||
namespace cyclonedds{
|
||||
namespace core{
|
||||
namespace cdr{
|
||||
|
||||
template<>
|
||||
propvec &get_type_props<::unitree_arm::msg::dds_::ArmString_>();
|
||||
|
||||
template<typename T, std::enable_if_t<std::is_base_of<cdr_stream, T>::value, bool> = true >
|
||||
bool write(T& streamer, const ::unitree_arm::msg::dds_::ArmString_& instance, entity_properties_t *props) {
|
||||
(void)instance;
|
||||
if (!streamer.start_struct(*props))
|
||||
return false;
|
||||
auto prop = streamer.first_entity(props);
|
||||
while (prop) {
|
||||
switch (prop->m_id) {
|
||||
case 0:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!write_string(streamer, instance.data_(), 0))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
prop = streamer.next_entity(prop);
|
||||
}
|
||||
return streamer.finish_struct(*props);
|
||||
}
|
||||
|
||||
template<typename S, std::enable_if_t<std::is_base_of<cdr_stream, S>::value, bool> = true >
|
||||
bool write(S& str, const ::unitree_arm::msg::dds_::ArmString_& instance, bool as_key) {
|
||||
auto &props = get_type_props<::unitree_arm::msg::dds_::ArmString_>();
|
||||
str.set_mode(cdr_stream::stream_mode::write, as_key);
|
||||
return write(str, instance, props.data());
|
||||
}
|
||||
|
||||
template<typename T, std::enable_if_t<std::is_base_of<cdr_stream, T>::value, bool> = true >
|
||||
bool read(T& streamer, ::unitree_arm::msg::dds_::ArmString_& instance, entity_properties_t *props) {
|
||||
(void)instance;
|
||||
if (!streamer.start_struct(*props))
|
||||
return false;
|
||||
auto prop = streamer.first_entity(props);
|
||||
while (prop) {
|
||||
switch (prop->m_id) {
|
||||
case 0:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!read_string(streamer, instance.data_(), 0))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
prop = streamer.next_entity(prop);
|
||||
}
|
||||
return streamer.finish_struct(*props);
|
||||
}
|
||||
|
||||
template<typename S, std::enable_if_t<std::is_base_of<cdr_stream, S>::value, bool> = true >
|
||||
bool read(S& str, ::unitree_arm::msg::dds_::ArmString_& instance, bool as_key) {
|
||||
auto &props = get_type_props<::unitree_arm::msg::dds_::ArmString_>();
|
||||
str.set_mode(cdr_stream::stream_mode::read, as_key);
|
||||
return read(str, instance, props.data());
|
||||
}
|
||||
|
||||
template<typename T, std::enable_if_t<std::is_base_of<cdr_stream, T>::value, bool> = true >
|
||||
bool move(T& streamer, const ::unitree_arm::msg::dds_::ArmString_& instance, entity_properties_t *props) {
|
||||
(void)instance;
|
||||
if (!streamer.start_struct(*props))
|
||||
return false;
|
||||
auto prop = streamer.first_entity(props);
|
||||
while (prop) {
|
||||
switch (prop->m_id) {
|
||||
case 0:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!move_string(streamer, instance.data_(), 0))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
prop = streamer.next_entity(prop);
|
||||
}
|
||||
return streamer.finish_struct(*props);
|
||||
}
|
||||
|
||||
template<typename S, std::enable_if_t<std::is_base_of<cdr_stream, S>::value, bool> = true >
|
||||
bool move(S& str, const ::unitree_arm::msg::dds_::ArmString_& instance, bool as_key) {
|
||||
auto &props = get_type_props<::unitree_arm::msg::dds_::ArmString_>();
|
||||
str.set_mode(cdr_stream::stream_mode::move, as_key);
|
||||
return move(str, instance, props.data());
|
||||
}
|
||||
|
||||
template<typename T, std::enable_if_t<std::is_base_of<cdr_stream, T>::value, bool> = true >
|
||||
bool max(T& streamer, const ::unitree_arm::msg::dds_::ArmString_& instance, entity_properties_t *props) {
|
||||
(void)instance;
|
||||
if (!streamer.start_struct(*props))
|
||||
return false;
|
||||
auto prop = streamer.first_entity(props);
|
||||
while (prop) {
|
||||
switch (prop->m_id) {
|
||||
case 0:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!max_string(streamer, instance.data_(), 0))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
prop = streamer.next_entity(prop);
|
||||
}
|
||||
return streamer.finish_struct(*props);
|
||||
}
|
||||
|
||||
template<typename S, std::enable_if_t<std::is_base_of<cdr_stream, S>::value, bool> = true >
|
||||
bool max(S& str, const ::unitree_arm::msg::dds_::ArmString_& instance, bool as_key) {
|
||||
auto &props = get_type_props<::unitree_arm::msg::dds_::ArmString_>();
|
||||
str.set_mode(cdr_stream::stream_mode::max, as_key);
|
||||
return max(str, instance, props.data());
|
||||
}
|
||||
|
||||
} //namespace cdr
|
||||
} //namespace core
|
||||
} //namespace cyclonedds
|
||||
} //namespace eclipse
|
||||
} //namespace org
|
||||
|
||||
#endif // DDSCXX_ARMSTRING__HPP
|
59
arm/src/msg/PubServoInfo_.cpp
Normal file
59
arm/src/msg/PubServoInfo_.cpp
Normal file
@@ -0,0 +1,59 @@
|
||||
/****************************************************************
|
||||
|
||||
Generated by Eclipse Cyclone DDS IDL to CXX Translator
|
||||
File name: PubServoInfo_.idl
|
||||
Source: PubServoInfo_.cpp
|
||||
Cyclone DDS: v0.10.2
|
||||
|
||||
*****************************************************************/
|
||||
#include "PubServoInfo_.hpp"
|
||||
|
||||
namespace org{
|
||||
namespace eclipse{
|
||||
namespace cyclonedds{
|
||||
namespace core{
|
||||
namespace cdr{
|
||||
|
||||
template<>
|
||||
propvec &get_type_props<::unitree_arm::msg::dds_::PubServoInfo_>() {
|
||||
static thread_local std::mutex mtx;
|
||||
static thread_local propvec props;
|
||||
static thread_local entity_properties_t *props_end = nullptr;
|
||||
static thread_local std::atomic_bool initialized {false};
|
||||
key_endpoint keylist;
|
||||
if (initialized.load(std::memory_order_relaxed)) {
|
||||
auto ptr = props.data();
|
||||
while (ptr < props_end)
|
||||
(ptr++)->is_present = false;
|
||||
return props;
|
||||
}
|
||||
std::lock_guard<std::mutex> lock(mtx);
|
||||
if (initialized.load(std::memory_order_relaxed)) {
|
||||
auto ptr = props.data();
|
||||
while (ptr < props_end)
|
||||
(ptr++)->is_present = false;
|
||||
return props;
|
||||
}
|
||||
props.clear();
|
||||
|
||||
props.push_back(entity_properties_t(0, 0, false, bb_unset, extensibility::ext_final)); //root
|
||||
props.push_back(entity_properties_t(1, 0, false, get_bit_bound<float>(), extensibility::ext_final, false)); //::servo0_data_
|
||||
props.push_back(entity_properties_t(1, 1, false, get_bit_bound<float>(), extensibility::ext_final, false)); //::servo1_data_
|
||||
props.push_back(entity_properties_t(1, 2, false, get_bit_bound<float>(), extensibility::ext_final, false)); //::servo2_data_
|
||||
props.push_back(entity_properties_t(1, 3, false, get_bit_bound<float>(), extensibility::ext_final, false)); //::servo3_data_
|
||||
props.push_back(entity_properties_t(1, 4, false, get_bit_bound<float>(), extensibility::ext_final, false)); //::servo4_data_
|
||||
props.push_back(entity_properties_t(1, 5, false, get_bit_bound<float>(), extensibility::ext_final, false)); //::servo5_data_
|
||||
props.push_back(entity_properties_t(1, 6, false, get_bit_bound<float>(), extensibility::ext_final, false)); //::servo6_data_
|
||||
|
||||
entity_properties_t::finish(props, keylist);
|
||||
props_end = props.data() + props.size();
|
||||
initialized.store(true, std::memory_order_release);
|
||||
return props;
|
||||
}
|
||||
|
||||
} //namespace cdr
|
||||
} //namespace core
|
||||
} //namespace cyclonedds
|
||||
} //namespace eclipse
|
||||
} //namespace org
|
||||
|
459
arm/src/msg/PubServoInfo_.hpp
Normal file
459
arm/src/msg/PubServoInfo_.hpp
Normal file
@@ -0,0 +1,459 @@
|
||||
/****************************************************************
|
||||
|
||||
Generated by Eclipse Cyclone DDS IDL to CXX Translator
|
||||
File name: PubServoInfo_.idl
|
||||
Source: PubServoInfo_.hpp
|
||||
Cyclone DDS: v0.10.2
|
||||
|
||||
*****************************************************************/
|
||||
#ifndef DDSCXX_PUBSERVOINFO__HPP
|
||||
#define DDSCXX_PUBSERVOINFO__HPP
|
||||
|
||||
|
||||
namespace unitree_arm
|
||||
{
|
||||
namespace msg
|
||||
{
|
||||
namespace dds_
|
||||
{
|
||||
class PubServoInfo_
|
||||
{
|
||||
private:
|
||||
float servo0_data__ = 0.0f;
|
||||
float servo1_data__ = 0.0f;
|
||||
float servo2_data__ = 0.0f;
|
||||
float servo3_data__ = 0.0f;
|
||||
float servo4_data__ = 0.0f;
|
||||
float servo5_data__ = 0.0f;
|
||||
float servo6_data__ = 0.0f;
|
||||
|
||||
public:
|
||||
PubServoInfo_() = default;
|
||||
|
||||
explicit PubServoInfo_(
|
||||
float servo0_data_,
|
||||
float servo1_data_,
|
||||
float servo2_data_,
|
||||
float servo3_data_,
|
||||
float servo4_data_,
|
||||
float servo5_data_,
|
||||
float servo6_data_) :
|
||||
servo0_data__(servo0_data_),
|
||||
servo1_data__(servo1_data_),
|
||||
servo2_data__(servo2_data_),
|
||||
servo3_data__(servo3_data_),
|
||||
servo4_data__(servo4_data_),
|
||||
servo5_data__(servo5_data_),
|
||||
servo6_data__(servo6_data_) { }
|
||||
|
||||
float servo0_data_() const { return this->servo0_data__; }
|
||||
float& servo0_data_() { return this->servo0_data__; }
|
||||
void servo0_data_(float _val_) { this->servo0_data__ = _val_; }
|
||||
float servo1_data_() const { return this->servo1_data__; }
|
||||
float& servo1_data_() { return this->servo1_data__; }
|
||||
void servo1_data_(float _val_) { this->servo1_data__ = _val_; }
|
||||
float servo2_data_() const { return this->servo2_data__; }
|
||||
float& servo2_data_() { return this->servo2_data__; }
|
||||
void servo2_data_(float _val_) { this->servo2_data__ = _val_; }
|
||||
float servo3_data_() const { return this->servo3_data__; }
|
||||
float& servo3_data_() { return this->servo3_data__; }
|
||||
void servo3_data_(float _val_) { this->servo3_data__ = _val_; }
|
||||
float servo4_data_() const { return this->servo4_data__; }
|
||||
float& servo4_data_() { return this->servo4_data__; }
|
||||
void servo4_data_(float _val_) { this->servo4_data__ = _val_; }
|
||||
float servo5_data_() const { return this->servo5_data__; }
|
||||
float& servo5_data_() { return this->servo5_data__; }
|
||||
void servo5_data_(float _val_) { this->servo5_data__ = _val_; }
|
||||
float servo6_data_() const { return this->servo6_data__; }
|
||||
float& servo6_data_() { return this->servo6_data__; }
|
||||
void servo6_data_(float _val_) { this->servo6_data__ = _val_; }
|
||||
|
||||
bool operator==(const PubServoInfo_& _other) const
|
||||
{
|
||||
(void) _other;
|
||||
return servo0_data__ == _other.servo0_data__ &&
|
||||
servo1_data__ == _other.servo1_data__ &&
|
||||
servo2_data__ == _other.servo2_data__ &&
|
||||
servo3_data__ == _other.servo3_data__ &&
|
||||
servo4_data__ == _other.servo4_data__ &&
|
||||
servo5_data__ == _other.servo5_data__ &&
|
||||
servo6_data__ == _other.servo6_data__;
|
||||
}
|
||||
|
||||
bool operator!=(const PubServoInfo_& _other) const
|
||||
{
|
||||
return !(*this == _other);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#include "dds/topic/TopicTraits.hpp"
|
||||
#include "org/eclipse/cyclonedds/topic/datatopic.hpp"
|
||||
|
||||
namespace org {
|
||||
namespace eclipse {
|
||||
namespace cyclonedds {
|
||||
namespace topic {
|
||||
|
||||
template <> constexpr const char* TopicTraits<::unitree_arm::msg::dds_::PubServoInfo_>::getTypeName()
|
||||
{
|
||||
return "unitree_arm::msg::dds_::PubServoInfo_";
|
||||
}
|
||||
|
||||
template <> constexpr bool TopicTraits<::unitree_arm::msg::dds_::PubServoInfo_>::isKeyless()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
} //namespace topic
|
||||
} //namespace cyclonedds
|
||||
} //namespace eclipse
|
||||
} //namespace org
|
||||
|
||||
namespace dds {
|
||||
namespace topic {
|
||||
|
||||
template <>
|
||||
struct topic_type_name<::unitree_arm::msg::dds_::PubServoInfo_>
|
||||
{
|
||||
static std::string value()
|
||||
{
|
||||
return org::eclipse::cyclonedds::topic::TopicTraits<::unitree_arm::msg::dds_::PubServoInfo_>::getTypeName();
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
REGISTER_TOPIC_TYPE(::unitree_arm::msg::dds_::PubServoInfo_)
|
||||
|
||||
namespace org{
|
||||
namespace eclipse{
|
||||
namespace cyclonedds{
|
||||
namespace core{
|
||||
namespace cdr{
|
||||
|
||||
template<>
|
||||
propvec &get_type_props<::unitree_arm::msg::dds_::PubServoInfo_>();
|
||||
|
||||
template<typename T, std::enable_if_t<std::is_base_of<cdr_stream, T>::value, bool> = true >
|
||||
bool write(T& streamer, const ::unitree_arm::msg::dds_::PubServoInfo_& instance, entity_properties_t *props) {
|
||||
(void)instance;
|
||||
if (!streamer.start_struct(*props))
|
||||
return false;
|
||||
auto prop = streamer.first_entity(props);
|
||||
while (prop) {
|
||||
switch (prop->m_id) {
|
||||
case 0:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!write(streamer, instance.servo0_data_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
case 1:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!write(streamer, instance.servo1_data_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
case 2:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!write(streamer, instance.servo2_data_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
case 3:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!write(streamer, instance.servo3_data_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
case 4:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!write(streamer, instance.servo4_data_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
case 5:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!write(streamer, instance.servo5_data_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
case 6:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!write(streamer, instance.servo6_data_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
prop = streamer.next_entity(prop);
|
||||
}
|
||||
return streamer.finish_struct(*props);
|
||||
}
|
||||
|
||||
template<typename S, std::enable_if_t<std::is_base_of<cdr_stream, S>::value, bool> = true >
|
||||
bool write(S& str, const ::unitree_arm::msg::dds_::PubServoInfo_& instance, bool as_key) {
|
||||
auto &props = get_type_props<::unitree_arm::msg::dds_::PubServoInfo_>();
|
||||
str.set_mode(cdr_stream::stream_mode::write, as_key);
|
||||
return write(str, instance, props.data());
|
||||
}
|
||||
|
||||
template<typename T, std::enable_if_t<std::is_base_of<cdr_stream, T>::value, bool> = true >
|
||||
bool read(T& streamer, ::unitree_arm::msg::dds_::PubServoInfo_& instance, entity_properties_t *props) {
|
||||
(void)instance;
|
||||
if (!streamer.start_struct(*props))
|
||||
return false;
|
||||
auto prop = streamer.first_entity(props);
|
||||
while (prop) {
|
||||
switch (prop->m_id) {
|
||||
case 0:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!read(streamer, instance.servo0_data_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
case 1:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!read(streamer, instance.servo1_data_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
case 2:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!read(streamer, instance.servo2_data_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
case 3:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!read(streamer, instance.servo3_data_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
case 4:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!read(streamer, instance.servo4_data_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
case 5:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!read(streamer, instance.servo5_data_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
case 6:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!read(streamer, instance.servo6_data_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
prop = streamer.next_entity(prop);
|
||||
}
|
||||
return streamer.finish_struct(*props);
|
||||
}
|
||||
|
||||
template<typename S, std::enable_if_t<std::is_base_of<cdr_stream, S>::value, bool> = true >
|
||||
bool read(S& str, ::unitree_arm::msg::dds_::PubServoInfo_& instance, bool as_key) {
|
||||
auto &props = get_type_props<::unitree_arm::msg::dds_::PubServoInfo_>();
|
||||
str.set_mode(cdr_stream::stream_mode::read, as_key);
|
||||
return read(str, instance, props.data());
|
||||
}
|
||||
|
||||
template<typename T, std::enable_if_t<std::is_base_of<cdr_stream, T>::value, bool> = true >
|
||||
bool move(T& streamer, const ::unitree_arm::msg::dds_::PubServoInfo_& instance, entity_properties_t *props) {
|
||||
(void)instance;
|
||||
if (!streamer.start_struct(*props))
|
||||
return false;
|
||||
auto prop = streamer.first_entity(props);
|
||||
while (prop) {
|
||||
switch (prop->m_id) {
|
||||
case 0:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!move(streamer, instance.servo0_data_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
case 1:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!move(streamer, instance.servo1_data_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
case 2:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!move(streamer, instance.servo2_data_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
case 3:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!move(streamer, instance.servo3_data_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
case 4:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!move(streamer, instance.servo4_data_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
case 5:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!move(streamer, instance.servo5_data_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
case 6:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!move(streamer, instance.servo6_data_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
prop = streamer.next_entity(prop);
|
||||
}
|
||||
return streamer.finish_struct(*props);
|
||||
}
|
||||
|
||||
template<typename S, std::enable_if_t<std::is_base_of<cdr_stream, S>::value, bool> = true >
|
||||
bool move(S& str, const ::unitree_arm::msg::dds_::PubServoInfo_& instance, bool as_key) {
|
||||
auto &props = get_type_props<::unitree_arm::msg::dds_::PubServoInfo_>();
|
||||
str.set_mode(cdr_stream::stream_mode::move, as_key);
|
||||
return move(str, instance, props.data());
|
||||
}
|
||||
|
||||
template<typename T, std::enable_if_t<std::is_base_of<cdr_stream, T>::value, bool> = true >
|
||||
bool max(T& streamer, const ::unitree_arm::msg::dds_::PubServoInfo_& instance, entity_properties_t *props) {
|
||||
(void)instance;
|
||||
if (!streamer.start_struct(*props))
|
||||
return false;
|
||||
auto prop = streamer.first_entity(props);
|
||||
while (prop) {
|
||||
switch (prop->m_id) {
|
||||
case 0:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!max(streamer, instance.servo0_data_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
case 1:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!max(streamer, instance.servo1_data_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
case 2:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!max(streamer, instance.servo2_data_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
case 3:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!max(streamer, instance.servo3_data_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
case 4:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!max(streamer, instance.servo4_data_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
case 5:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!max(streamer, instance.servo5_data_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
case 6:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!max(streamer, instance.servo6_data_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
prop = streamer.next_entity(prop);
|
||||
}
|
||||
return streamer.finish_struct(*props);
|
||||
}
|
||||
|
||||
template<typename S, std::enable_if_t<std::is_base_of<cdr_stream, S>::value, bool> = true >
|
||||
bool max(S& str, const ::unitree_arm::msg::dds_::PubServoInfo_& instance, bool as_key) {
|
||||
auto &props = get_type_props<::unitree_arm::msg::dds_::PubServoInfo_>();
|
||||
str.set_mode(cdr_stream::stream_mode::max, as_key);
|
||||
return max(str, instance, props.data());
|
||||
}
|
||||
|
||||
} //namespace cdr
|
||||
} //namespace core
|
||||
} //namespace cyclonedds
|
||||
} //namespace eclipse
|
||||
} //namespace org
|
||||
|
||||
#endif // DDSCXX_PUBSERVOINFO__HPP
|
56
arm/src/msg/SetServoAngle_.cpp
Normal file
56
arm/src/msg/SetServoAngle_.cpp
Normal file
@@ -0,0 +1,56 @@
|
||||
/****************************************************************
|
||||
|
||||
Generated by Eclipse Cyclone DDS IDL to CXX Translator
|
||||
File name: SetServoAngle_.idl
|
||||
Source: SetServoAngle_.cpp
|
||||
Cyclone DDS: v0.10.2
|
||||
|
||||
*****************************************************************/
|
||||
#include "SetServoAngle_.hpp"
|
||||
|
||||
namespace org{
|
||||
namespace eclipse{
|
||||
namespace cyclonedds{
|
||||
namespace core{
|
||||
namespace cdr{
|
||||
|
||||
template<>
|
||||
propvec &get_type_props<::unitree_arm::msg::dds_::SetServoAngle_>() {
|
||||
static thread_local std::mutex mtx;
|
||||
static thread_local propvec props;
|
||||
static thread_local entity_properties_t *props_end = nullptr;
|
||||
static thread_local std::atomic_bool initialized {false};
|
||||
key_endpoint keylist;
|
||||
if (initialized.load(std::memory_order_relaxed)) {
|
||||
auto ptr = props.data();
|
||||
while (ptr < props_end)
|
||||
(ptr++)->is_present = false;
|
||||
return props;
|
||||
}
|
||||
std::lock_guard<std::mutex> lock(mtx);
|
||||
if (initialized.load(std::memory_order_relaxed)) {
|
||||
auto ptr = props.data();
|
||||
while (ptr < props_end)
|
||||
(ptr++)->is_present = false;
|
||||
return props;
|
||||
}
|
||||
props.clear();
|
||||
|
||||
props.push_back(entity_properties_t(0, 0, false, bb_unset, extensibility::ext_final)); //root
|
||||
props.push_back(entity_properties_t(1, 0, false, get_bit_bound<int32_t>(), extensibility::ext_final, false)); //::seq_
|
||||
props.push_back(entity_properties_t(1, 1, false, get_bit_bound<uint8_t>(), extensibility::ext_final, false)); //::id_
|
||||
props.push_back(entity_properties_t(1, 2, false, get_bit_bound<float>(), extensibility::ext_final, false)); //::angle_
|
||||
props.push_back(entity_properties_t(1, 3, false, get_bit_bound<int16_t>(), extensibility::ext_final, false)); //::delay_ms_
|
||||
|
||||
entity_properties_t::finish(props, keylist);
|
||||
props_end = props.data() + props.size();
|
||||
initialized.store(true, std::memory_order_release);
|
||||
return props;
|
||||
}
|
||||
|
||||
} //namespace cdr
|
||||
} //namespace core
|
||||
} //namespace cyclonedds
|
||||
} //namespace eclipse
|
||||
} //namespace org
|
||||
|
343
arm/src/msg/SetServoAngle_.hpp
Normal file
343
arm/src/msg/SetServoAngle_.hpp
Normal file
@@ -0,0 +1,343 @@
|
||||
/****************************************************************
|
||||
|
||||
Generated by Eclipse Cyclone DDS IDL to CXX Translator
|
||||
File name: SetServoAngle_.idl
|
||||
Source: SetServoAngle_.hpp
|
||||
Cyclone DDS: v0.10.2
|
||||
|
||||
*****************************************************************/
|
||||
#ifndef DDSCXX_SETSERVOANGLE__HPP
|
||||
#define DDSCXX_SETSERVOANGLE__HPP
|
||||
|
||||
#include <cstdint>
|
||||
|
||||
namespace unitree_arm
|
||||
{
|
||||
namespace msg
|
||||
{
|
||||
namespace dds_
|
||||
{
|
||||
class SetServoAngle_
|
||||
{
|
||||
private:
|
||||
int32_t seq__ = 0;
|
||||
uint8_t id__ = 0;
|
||||
float angle__ = 0.0f;
|
||||
int16_t delay_ms__ = 0;
|
||||
|
||||
public:
|
||||
SetServoAngle_() = default;
|
||||
|
||||
explicit SetServoAngle_(
|
||||
int32_t seq_,
|
||||
uint8_t id_,
|
||||
float angle_,
|
||||
int16_t delay_ms_) :
|
||||
seq__(seq_),
|
||||
id__(id_),
|
||||
angle__(angle_),
|
||||
delay_ms__(delay_ms_) { }
|
||||
|
||||
int32_t seq_() const { return this->seq__; }
|
||||
int32_t& seq_() { return this->seq__; }
|
||||
void seq_(int32_t _val_) { this->seq__ = _val_; }
|
||||
uint8_t id_() const { return this->id__; }
|
||||
uint8_t& id_() { return this->id__; }
|
||||
void id_(uint8_t _val_) { this->id__ = _val_; }
|
||||
float angle_() const { return this->angle__; }
|
||||
float& angle_() { return this->angle__; }
|
||||
void angle_(float _val_) { this->angle__ = _val_; }
|
||||
int16_t delay_ms_() const { return this->delay_ms__; }
|
||||
int16_t& delay_ms_() { return this->delay_ms__; }
|
||||
void delay_ms_(int16_t _val_) { this->delay_ms__ = _val_; }
|
||||
|
||||
bool operator==(const SetServoAngle_& _other) const
|
||||
{
|
||||
(void) _other;
|
||||
return seq__ == _other.seq__ &&
|
||||
id__ == _other.id__ &&
|
||||
angle__ == _other.angle__ &&
|
||||
delay_ms__ == _other.delay_ms__;
|
||||
}
|
||||
|
||||
bool operator!=(const SetServoAngle_& _other) const
|
||||
{
|
||||
return !(*this == _other);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#include "dds/topic/TopicTraits.hpp"
|
||||
#include "org/eclipse/cyclonedds/topic/datatopic.hpp"
|
||||
|
||||
namespace org {
|
||||
namespace eclipse {
|
||||
namespace cyclonedds {
|
||||
namespace topic {
|
||||
|
||||
template <> constexpr const char* TopicTraits<::unitree_arm::msg::dds_::SetServoAngle_>::getTypeName()
|
||||
{
|
||||
return "unitree_arm::msg::dds_::SetServoAngle_";
|
||||
}
|
||||
|
||||
template <> constexpr bool TopicTraits<::unitree_arm::msg::dds_::SetServoAngle_>::isKeyless()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
} //namespace topic
|
||||
} //namespace cyclonedds
|
||||
} //namespace eclipse
|
||||
} //namespace org
|
||||
|
||||
namespace dds {
|
||||
namespace topic {
|
||||
|
||||
template <>
|
||||
struct topic_type_name<::unitree_arm::msg::dds_::SetServoAngle_>
|
||||
{
|
||||
static std::string value()
|
||||
{
|
||||
return org::eclipse::cyclonedds::topic::TopicTraits<::unitree_arm::msg::dds_::SetServoAngle_>::getTypeName();
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
REGISTER_TOPIC_TYPE(::unitree_arm::msg::dds_::SetServoAngle_)
|
||||
|
||||
namespace org{
|
||||
namespace eclipse{
|
||||
namespace cyclonedds{
|
||||
namespace core{
|
||||
namespace cdr{
|
||||
|
||||
template<>
|
||||
propvec &get_type_props<::unitree_arm::msg::dds_::SetServoAngle_>();
|
||||
|
||||
template<typename T, std::enable_if_t<std::is_base_of<cdr_stream, T>::value, bool> = true >
|
||||
bool write(T& streamer, const ::unitree_arm::msg::dds_::SetServoAngle_& instance, entity_properties_t *props) {
|
||||
(void)instance;
|
||||
if (!streamer.start_struct(*props))
|
||||
return false;
|
||||
auto prop = streamer.first_entity(props);
|
||||
while (prop) {
|
||||
switch (prop->m_id) {
|
||||
case 0:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!write(streamer, instance.seq_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
case 1:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!write(streamer, instance.id_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
case 2:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!write(streamer, instance.angle_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
case 3:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!write(streamer, instance.delay_ms_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
prop = streamer.next_entity(prop);
|
||||
}
|
||||
return streamer.finish_struct(*props);
|
||||
}
|
||||
|
||||
template<typename S, std::enable_if_t<std::is_base_of<cdr_stream, S>::value, bool> = true >
|
||||
bool write(S& str, const ::unitree_arm::msg::dds_::SetServoAngle_& instance, bool as_key) {
|
||||
auto &props = get_type_props<::unitree_arm::msg::dds_::SetServoAngle_>();
|
||||
str.set_mode(cdr_stream::stream_mode::write, as_key);
|
||||
return write(str, instance, props.data());
|
||||
}
|
||||
|
||||
template<typename T, std::enable_if_t<std::is_base_of<cdr_stream, T>::value, bool> = true >
|
||||
bool read(T& streamer, ::unitree_arm::msg::dds_::SetServoAngle_& instance, entity_properties_t *props) {
|
||||
(void)instance;
|
||||
if (!streamer.start_struct(*props))
|
||||
return false;
|
||||
auto prop = streamer.first_entity(props);
|
||||
while (prop) {
|
||||
switch (prop->m_id) {
|
||||
case 0:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!read(streamer, instance.seq_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
case 1:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!read(streamer, instance.id_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
case 2:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!read(streamer, instance.angle_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
case 3:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!read(streamer, instance.delay_ms_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
prop = streamer.next_entity(prop);
|
||||
}
|
||||
return streamer.finish_struct(*props);
|
||||
}
|
||||
|
||||
template<typename S, std::enable_if_t<std::is_base_of<cdr_stream, S>::value, bool> = true >
|
||||
bool read(S& str, ::unitree_arm::msg::dds_::SetServoAngle_& instance, bool as_key) {
|
||||
auto &props = get_type_props<::unitree_arm::msg::dds_::SetServoAngle_>();
|
||||
str.set_mode(cdr_stream::stream_mode::read, as_key);
|
||||
return read(str, instance, props.data());
|
||||
}
|
||||
|
||||
template<typename T, std::enable_if_t<std::is_base_of<cdr_stream, T>::value, bool> = true >
|
||||
bool move(T& streamer, const ::unitree_arm::msg::dds_::SetServoAngle_& instance, entity_properties_t *props) {
|
||||
(void)instance;
|
||||
if (!streamer.start_struct(*props))
|
||||
return false;
|
||||
auto prop = streamer.first_entity(props);
|
||||
while (prop) {
|
||||
switch (prop->m_id) {
|
||||
case 0:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!move(streamer, instance.seq_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
case 1:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!move(streamer, instance.id_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
case 2:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!move(streamer, instance.angle_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
case 3:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!move(streamer, instance.delay_ms_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
prop = streamer.next_entity(prop);
|
||||
}
|
||||
return streamer.finish_struct(*props);
|
||||
}
|
||||
|
||||
template<typename S, std::enable_if_t<std::is_base_of<cdr_stream, S>::value, bool> = true >
|
||||
bool move(S& str, const ::unitree_arm::msg::dds_::SetServoAngle_& instance, bool as_key) {
|
||||
auto &props = get_type_props<::unitree_arm::msg::dds_::SetServoAngle_>();
|
||||
str.set_mode(cdr_stream::stream_mode::move, as_key);
|
||||
return move(str, instance, props.data());
|
||||
}
|
||||
|
||||
template<typename T, std::enable_if_t<std::is_base_of<cdr_stream, T>::value, bool> = true >
|
||||
bool max(T& streamer, const ::unitree_arm::msg::dds_::SetServoAngle_& instance, entity_properties_t *props) {
|
||||
(void)instance;
|
||||
if (!streamer.start_struct(*props))
|
||||
return false;
|
||||
auto prop = streamer.first_entity(props);
|
||||
while (prop) {
|
||||
switch (prop->m_id) {
|
||||
case 0:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!max(streamer, instance.seq_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
case 1:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!max(streamer, instance.id_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
case 2:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!max(streamer, instance.angle_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
case 3:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!max(streamer, instance.delay_ms_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
prop = streamer.next_entity(prop);
|
||||
}
|
||||
return streamer.finish_struct(*props);
|
||||
}
|
||||
|
||||
template<typename S, std::enable_if_t<std::is_base_of<cdr_stream, S>::value, bool> = true >
|
||||
bool max(S& str, const ::unitree_arm::msg::dds_::SetServoAngle_& instance, bool as_key) {
|
||||
auto &props = get_type_props<::unitree_arm::msg::dds_::SetServoAngle_>();
|
||||
str.set_mode(cdr_stream::stream_mode::max, as_key);
|
||||
return max(str, instance, props.data());
|
||||
}
|
||||
|
||||
} //namespace cdr
|
||||
} //namespace core
|
||||
} //namespace cyclonedds
|
||||
} //namespace eclipse
|
||||
} //namespace org
|
||||
|
||||
#endif // DDSCXX_SETSERVOANGLE__HPP
|
55
arm/src/msg/SetServoDumping_.cpp
Normal file
55
arm/src/msg/SetServoDumping_.cpp
Normal file
@@ -0,0 +1,55 @@
|
||||
/****************************************************************
|
||||
|
||||
Generated by Eclipse Cyclone DDS IDL to CXX Translator
|
||||
File name: SetServoDumping_.idl
|
||||
Source: SetServoDumping_.cpp
|
||||
Cyclone DDS: v0.10.2
|
||||
|
||||
*****************************************************************/
|
||||
#include "SetServoDumping_.hpp"
|
||||
|
||||
namespace org{
|
||||
namespace eclipse{
|
||||
namespace cyclonedds{
|
||||
namespace core{
|
||||
namespace cdr{
|
||||
|
||||
template<>
|
||||
propvec &get_type_props<::unitree_arm::msg::dds_::SetServoDumping_>() {
|
||||
static thread_local std::mutex mtx;
|
||||
static thread_local propvec props;
|
||||
static thread_local entity_properties_t *props_end = nullptr;
|
||||
static thread_local std::atomic_bool initialized {false};
|
||||
key_endpoint keylist;
|
||||
if (initialized.load(std::memory_order_relaxed)) {
|
||||
auto ptr = props.data();
|
||||
while (ptr < props_end)
|
||||
(ptr++)->is_present = false;
|
||||
return props;
|
||||
}
|
||||
std::lock_guard<std::mutex> lock(mtx);
|
||||
if (initialized.load(std::memory_order_relaxed)) {
|
||||
auto ptr = props.data();
|
||||
while (ptr < props_end)
|
||||
(ptr++)->is_present = false;
|
||||
return props;
|
||||
}
|
||||
props.clear();
|
||||
|
||||
props.push_back(entity_properties_t(0, 0, false, bb_unset, extensibility::ext_final)); //root
|
||||
props.push_back(entity_properties_t(1, 0, false, get_bit_bound<int32_t>(), extensibility::ext_final, false)); //::seq_
|
||||
props.push_back(entity_properties_t(1, 1, false, get_bit_bound<uint8_t>(), extensibility::ext_final, false)); //::id_
|
||||
props.push_back(entity_properties_t(1, 2, false, get_bit_bound<uint16_t>(), extensibility::ext_final, false)); //::power_
|
||||
|
||||
entity_properties_t::finish(props, keylist);
|
||||
props_end = props.data() + props.size();
|
||||
initialized.store(true, std::memory_order_release);
|
||||
return props;
|
||||
}
|
||||
|
||||
} //namespace cdr
|
||||
} //namespace core
|
||||
} //namespace cyclonedds
|
||||
} //namespace eclipse
|
||||
} //namespace org
|
||||
|
304
arm/src/msg/SetServoDumping_.hpp
Normal file
304
arm/src/msg/SetServoDumping_.hpp
Normal file
@@ -0,0 +1,304 @@
|
||||
/****************************************************************
|
||||
|
||||
Generated by Eclipse Cyclone DDS IDL to CXX Translator
|
||||
File name: SetServoDumping_.idl
|
||||
Source: SetServoDumping_.hpp
|
||||
Cyclone DDS: v0.10.2
|
||||
|
||||
*****************************************************************/
|
||||
#ifndef DDSCXX_SETSERVODUMPING__HPP
|
||||
#define DDSCXX_SETSERVODUMPING__HPP
|
||||
|
||||
#include <cstdint>
|
||||
|
||||
namespace unitree_arm
|
||||
{
|
||||
namespace msg
|
||||
{
|
||||
namespace dds_
|
||||
{
|
||||
class SetServoDumping_
|
||||
{
|
||||
private:
|
||||
int32_t seq__ = 0;
|
||||
uint8_t id__ = 0;
|
||||
uint16_t power__ = 0;
|
||||
|
||||
public:
|
||||
SetServoDumping_() = default;
|
||||
|
||||
explicit SetServoDumping_(
|
||||
int32_t seq_,
|
||||
uint8_t id_,
|
||||
uint16_t power_) :
|
||||
seq__(seq_),
|
||||
id__(id_),
|
||||
power__(power_) { }
|
||||
|
||||
int32_t seq_() const { return this->seq__; }
|
||||
int32_t& seq_() { return this->seq__; }
|
||||
void seq_(int32_t _val_) { this->seq__ = _val_; }
|
||||
uint8_t id_() const { return this->id__; }
|
||||
uint8_t& id_() { return this->id__; }
|
||||
void id_(uint8_t _val_) { this->id__ = _val_; }
|
||||
uint16_t power_() const { return this->power__; }
|
||||
uint16_t& power_() { return this->power__; }
|
||||
void power_(uint16_t _val_) { this->power__ = _val_; }
|
||||
|
||||
bool operator==(const SetServoDumping_& _other) const
|
||||
{
|
||||
(void) _other;
|
||||
return seq__ == _other.seq__ &&
|
||||
id__ == _other.id__ &&
|
||||
power__ == _other.power__;
|
||||
}
|
||||
|
||||
bool operator!=(const SetServoDumping_& _other) const
|
||||
{
|
||||
return !(*this == _other);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#include "dds/topic/TopicTraits.hpp"
|
||||
#include "org/eclipse/cyclonedds/topic/datatopic.hpp"
|
||||
|
||||
namespace org {
|
||||
namespace eclipse {
|
||||
namespace cyclonedds {
|
||||
namespace topic {
|
||||
|
||||
template <> constexpr const char* TopicTraits<::unitree_arm::msg::dds_::SetServoDumping_>::getTypeName()
|
||||
{
|
||||
return "unitree_arm::msg::dds_::SetServoDumping_";
|
||||
}
|
||||
|
||||
template <> constexpr bool TopicTraits<::unitree_arm::msg::dds_::SetServoDumping_>::isKeyless()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
} //namespace topic
|
||||
} //namespace cyclonedds
|
||||
} //namespace eclipse
|
||||
} //namespace org
|
||||
|
||||
namespace dds {
|
||||
namespace topic {
|
||||
|
||||
template <>
|
||||
struct topic_type_name<::unitree_arm::msg::dds_::SetServoDumping_>
|
||||
{
|
||||
static std::string value()
|
||||
{
|
||||
return org::eclipse::cyclonedds::topic::TopicTraits<::unitree_arm::msg::dds_::SetServoDumping_>::getTypeName();
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
REGISTER_TOPIC_TYPE(::unitree_arm::msg::dds_::SetServoDumping_)
|
||||
|
||||
namespace org{
|
||||
namespace eclipse{
|
||||
namespace cyclonedds{
|
||||
namespace core{
|
||||
namespace cdr{
|
||||
|
||||
template<>
|
||||
propvec &get_type_props<::unitree_arm::msg::dds_::SetServoDumping_>();
|
||||
|
||||
template<typename T, std::enable_if_t<std::is_base_of<cdr_stream, T>::value, bool> = true >
|
||||
bool write(T& streamer, const ::unitree_arm::msg::dds_::SetServoDumping_& instance, entity_properties_t *props) {
|
||||
(void)instance;
|
||||
if (!streamer.start_struct(*props))
|
||||
return false;
|
||||
auto prop = streamer.first_entity(props);
|
||||
while (prop) {
|
||||
switch (prop->m_id) {
|
||||
case 0:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!write(streamer, instance.seq_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
case 1:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!write(streamer, instance.id_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
case 2:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!write(streamer, instance.power_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
prop = streamer.next_entity(prop);
|
||||
}
|
||||
return streamer.finish_struct(*props);
|
||||
}
|
||||
|
||||
template<typename S, std::enable_if_t<std::is_base_of<cdr_stream, S>::value, bool> = true >
|
||||
bool write(S& str, const ::unitree_arm::msg::dds_::SetServoDumping_& instance, bool as_key) {
|
||||
auto &props = get_type_props<::unitree_arm::msg::dds_::SetServoDumping_>();
|
||||
str.set_mode(cdr_stream::stream_mode::write, as_key);
|
||||
return write(str, instance, props.data());
|
||||
}
|
||||
|
||||
template<typename T, std::enable_if_t<std::is_base_of<cdr_stream, T>::value, bool> = true >
|
||||
bool read(T& streamer, ::unitree_arm::msg::dds_::SetServoDumping_& instance, entity_properties_t *props) {
|
||||
(void)instance;
|
||||
if (!streamer.start_struct(*props))
|
||||
return false;
|
||||
auto prop = streamer.first_entity(props);
|
||||
while (prop) {
|
||||
switch (prop->m_id) {
|
||||
case 0:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!read(streamer, instance.seq_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
case 1:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!read(streamer, instance.id_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
case 2:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!read(streamer, instance.power_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
prop = streamer.next_entity(prop);
|
||||
}
|
||||
return streamer.finish_struct(*props);
|
||||
}
|
||||
|
||||
template<typename S, std::enable_if_t<std::is_base_of<cdr_stream, S>::value, bool> = true >
|
||||
bool read(S& str, ::unitree_arm::msg::dds_::SetServoDumping_& instance, bool as_key) {
|
||||
auto &props = get_type_props<::unitree_arm::msg::dds_::SetServoDumping_>();
|
||||
str.set_mode(cdr_stream::stream_mode::read, as_key);
|
||||
return read(str, instance, props.data());
|
||||
}
|
||||
|
||||
template<typename T, std::enable_if_t<std::is_base_of<cdr_stream, T>::value, bool> = true >
|
||||
bool move(T& streamer, const ::unitree_arm::msg::dds_::SetServoDumping_& instance, entity_properties_t *props) {
|
||||
(void)instance;
|
||||
if (!streamer.start_struct(*props))
|
||||
return false;
|
||||
auto prop = streamer.first_entity(props);
|
||||
while (prop) {
|
||||
switch (prop->m_id) {
|
||||
case 0:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!move(streamer, instance.seq_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
case 1:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!move(streamer, instance.id_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
case 2:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!move(streamer, instance.power_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
prop = streamer.next_entity(prop);
|
||||
}
|
||||
return streamer.finish_struct(*props);
|
||||
}
|
||||
|
||||
template<typename S, std::enable_if_t<std::is_base_of<cdr_stream, S>::value, bool> = true >
|
||||
bool move(S& str, const ::unitree_arm::msg::dds_::SetServoDumping_& instance, bool as_key) {
|
||||
auto &props = get_type_props<::unitree_arm::msg::dds_::SetServoDumping_>();
|
||||
str.set_mode(cdr_stream::stream_mode::move, as_key);
|
||||
return move(str, instance, props.data());
|
||||
}
|
||||
|
||||
template<typename T, std::enable_if_t<std::is_base_of<cdr_stream, T>::value, bool> = true >
|
||||
bool max(T& streamer, const ::unitree_arm::msg::dds_::SetServoDumping_& instance, entity_properties_t *props) {
|
||||
(void)instance;
|
||||
if (!streamer.start_struct(*props))
|
||||
return false;
|
||||
auto prop = streamer.first_entity(props);
|
||||
while (prop) {
|
||||
switch (prop->m_id) {
|
||||
case 0:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!max(streamer, instance.seq_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
case 1:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!max(streamer, instance.id_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
case 2:
|
||||
if (!streamer.start_member(*prop))
|
||||
return false;
|
||||
if (!max(streamer, instance.power_()))
|
||||
return false;
|
||||
if (!streamer.finish_member(*prop))
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
prop = streamer.next_entity(prop);
|
||||
}
|
||||
return streamer.finish_struct(*props);
|
||||
}
|
||||
|
||||
template<typename S, std::enable_if_t<std::is_base_of<cdr_stream, S>::value, bool> = true >
|
||||
bool max(S& str, const ::unitree_arm::msg::dds_::SetServoDumping_& instance, bool as_key) {
|
||||
auto &props = get_type_props<::unitree_arm::msg::dds_::SetServoDumping_>();
|
||||
str.set_mode(cdr_stream::stream_mode::max, as_key);
|
||||
return max(str, instance, props.data());
|
||||
}
|
||||
|
||||
} //namespace cdr
|
||||
} //namespace core
|
||||
} //namespace cyclonedds
|
||||
} //namespace eclipse
|
||||
} //namespace org
|
||||
|
||||
#endif // DDSCXX_SETSERVODUMPING__HPP
|
21
arm/src/multiple_joint_angle_control.cpp
Normal file
21
arm/src/multiple_joint_angle_control.cpp
Normal file
@@ -0,0 +1,21 @@
|
||||
#include <unitree/robot/channel/channel_publisher.hpp>
|
||||
#include <unitree/common/time/time_tool.hpp>
|
||||
#include "msg/ArmString_.hpp"
|
||||
|
||||
#define TOPIC "rt/arm_Command"
|
||||
|
||||
using namespace unitree::robot;
|
||||
using namespace unitree::common;
|
||||
|
||||
int main()
|
||||
{
|
||||
ChannelFactory::Instance()->Init(0);
|
||||
ChannelPublisher<unitree_arm::msg::dds_::ArmString_> publisher(TOPIC);
|
||||
publisher.InitChannel();
|
||||
|
||||
unitree_arm::msg::dds_::ArmString_ msg{};
|
||||
msg.data_() = "{\"seq\":4,\"address\":1,\"funcode\":2,\"data\":{\"mode\":1,\"angle0\":0,\"angle1\":-60,\"angle2\":60,\"angle3\":0,\"angle4\":30,\"angle5\":0,\"angle6\":0}}";
|
||||
publisher.Write(msg);
|
||||
|
||||
return 0;
|
||||
}
|
Reference in New Issue
Block a user