宇树科技 文档中心
Source: https://support.unitree.com/home/en/G1_developer/dds_communication_routine
DDS related knowledge and communication interface description, please refer to the above《DDS Services Interface》
The following is an example of message publishing/subscription after unitree_sdk2 has done a layer of encapsulation on DDS.
Message publishing example
Routine path: unitree_sdk2/example/helloworld/publisher.cpp
#include <unitree/robot/channel/channel_publisher.hpp>
#include <unitree/common/time/time_tool.hpp>
#include "HelloWorldData.hpp"
#define TOPIC "TopicHelloWorld"
using namespace unitree::robot;
using namespace unitree::common;
int main(int argc, char **argv)
{
if (argc < 2)
{
std::cout << "Usage: " << argv[0] << " networkInterface" << std::endl;
exit(-1);
}
unitree::robot::ChannelFactory::Instance()->Init(0, argv[1]);
//argv [1] is network interface of the robot
/*
* New ChannelPublisherPtr
*/
ChannelPublisherPtr<HelloWorldData::Msg> publisher = ChannelPublisherPtr<HelloWorldData::Msg>(new ChannelPublisher<HelloWorldData::Msg>(TOPIC));
/*
* Init channel
*/
publisher->InitChannel();
while (true)
{
/*
* Send message
*/
HelloWorldData::Msg msg(unitree::common::GetCurrentTimeMillisecond(), "HelloWorld.");
publisher->Write(msg);
sleep(1);
}
return 0;
}
Message subscription example
Routine path: unitree_sdk2/example/helloworld/subscriber.cpp
#include <unitree/robot/channel/channel_subscriber.hpp>
#include "HelloWorldData.hpp"
#define TOPIC "TopicHelloWorld"
using namespace unitree::robot;
using namespace unitree::common;
void Handler(const void* msg)
{
const HelloWorldData::Msg* pm = (const HelloWorldData::Msg*)msg;
std::cout << "userID:" << pm->userID() << ", message:" << pm->message() << std::endl;
}
int main(int argc, char **argv)
{
if (argc < 2)
{
std::cout << "Usage: " << argv[0] << " networkInterface" << std::endl;
exit(-1);
}
unitree::robot::ChannelFactory::Instance()->Init(0, argv[1]);
//argv [1] is network interface of the robot
/*
* New ChannelSubscriberPtr
*/
ChannelSubscriberPtr<HelloWorldData::Msg> subscriber = ChannelSubscriberPtr<HelloWorldData::Msg>(new ChannelSubscriber<HelloWorldData::Msg>(TOPIC));
/*
* Init channel
*/
subscriber->InitChannel(std::bind(Handler, std::placeholders::_1), 1);
sleep(5);
/*
* Close channel
*/
subscriber->CloseChannel();
std::cout << "reseted. sleep 3" << std::endl;
sleep(3);
/*
* Init channel use last input parameter.
*/
subscriber->InitChannel();
/*
* Loop wait message.
*/
while (true)
{
sleep(10);
}
return 0;
}