30 #ifndef _MIRA_TOOLBOXES_PYTHON_UNITWRAPPERY_H_ 31 #define _MIRA_TOOLBOXES_PYTHON_UNITWRAPPERY_H_ 46 namespace mira {
namespace python {
62 Unit(cycleTime, flags)
82 return boost::python::extract<PyUnitWrapper&>(
mUnitObject);
85 template<
class Reflector>
116 MIRA_THROW(XRuntime,
"Unit is not properly initialized")
126 bool isValid()
const {
return mUnit != NULL; }
143 boost::python::detail::initialize_wrapper(
self,
this);
150 boost::python::detail::initialize_wrapper(
self,
this);
158 boost::python::detail::initialize_wrapper(
self,
this);
166 boost::python::detail::initialize_wrapper(
self,
this);
174 void checkin(
const std::string& ns,
const std::string& name)
181 boost::python::handle<>
self()
183 return boost::python::handle<>(boost::python::borrowed(
mSelf));
191 void bootup(
const std::string& message);
192 void warning(
const std::string& category,
const std::string& message);
193 void error(
const std::string& category,
const std::string& message);
194 void ok(
const std::string& category);
241 const std::string& targetID,
242 const std::string& sourceID,
243 const Pose2& transform);
245 const std::string& targetID,
246 const std::string& sourceID,
247 const Pose2& transform,
248 const Time& timestamp);
250 const std::string& targetID,
251 const std::string& sourceID,
252 const Pose3& transform);
254 const std::string& targetID,
255 const std::string& sourceID,
256 const Pose3& transform,
257 const Time& timestamp);
258 void addTransformLink(
const std::string& childID,
const std::string& parentID);
265 boost::python::object
channelPublish(
const std::string& channelID,
266 boost::python::object
type);
290 catch(boost::python::error_already_set&)
292 MIRA_THROW(mira::XRuntime,
"Failed to call callback: " <<
317 catch(boost::python::error_already_set&)
319 MIRA_THROW(mira::XRuntime,
"Failed to call callback: " <<
335 boost::python::object
subscribe(
const std::string& channelID,
336 boost::python::object
type);
341 boost::python::object
subscribeCb(
const std::string& channelID,
342 boost::python::object
type,
343 boost::python::object callable);
349 boost::python::object
type,
350 boost::python::object callable,
356 void unsubscribe(
const std::string& channelID, boost::python::object
type);
371 boost::python::object callable,
374 using namespace boost::python;
386 boost::python::object callable)
388 using namespace boost::python;
389 boost::shared_ptr<Callback<T>> callback(
new Callback<T>(callable));
435 boost::python::object callable);
439 boost::python::object callable,
452 template<
class Reflector>
455 using namespace boost::python;
465 catch (
const error_already_set&)
493 boost::python::object callable) {
505 boost::python::object callable,
534 template <
typename T>
545 return channel.
get();
556 return channel.
get(time);
568 return channel.
get(time, tolerance);
579 return channel.
read();
590 return channel.
read(time);
602 return channel.
read(time, tolerance);
614 const std::string& frameID)
616 auto w = channel.
write();
619 w->frameID = frameID;
624 channel.
post(value, time);
633 template <
typename T>
663 return read->timestamp;
667 return read->frameID;
671 return read->sequenceID;
678 return read->value();
717 return boost::python::object(obj);
742 #define MIRA_PYTHON_COMMA_HELPER , 747 #define MIRA_PYTHONCONNECTOR_ALL_TYPES(MACRO) \ 748 MACRO(bool, "Bool"); \ 750 MACRO(int64, "Int64"); \ 751 MACRO(float, "Float"); \ 752 MACRO(std::string, "String"); 754 #define MIRA_PYTHONCONNECTOR_ALL_TYPES_2_HELPER(MACRO, TYPE, PREFIX) \ 755 MACRO(TYPE, bool, PREFIX, "Bool"); \ 756 MACRO(TYPE, int, PREFIX, "Int"); \ 757 MACRO(TYPE, int64, PREFIX, "Int64"); \ 758 MACRO(TYPE, float, PREFIX, "Float"); \ 759 MACRO##_STRING(TYPE, std::string, PREFIX, "String"); 761 #define MIRA_PYTHONCONNECTOR_ALL_TYPES_2(MACRO) \ 762 MIRA_PYTHONCONNECTOR_ALL_TYPES_2_HELPER(MACRO, bool, "Bool"); \ 763 MIRA_PYTHONCONNECTOR_ALL_TYPES_2_HELPER(MACRO, int, "Int"); \ 764 MIRA_PYTHONCONNECTOR_ALL_TYPES_2_HELPER(MACRO, int64, "Int64"); \ 765 MIRA_PYTHONCONNECTOR_ALL_TYPES_2_HELPER(MACRO, float, "Float"); \ 766 MIRA_PYTHONCONNECTOR_ALL_TYPES_2_HELPER(MACRO, std::string, "String"); 773 #define MIRA_PYTHONCONNECTOR_NAMED_TYPE_FOOTER(type, name) \ 774 .def("subscribeInterval", &mira::python::subscribeIntervalCb<type>) \ 775 .staticmethod("subscribeInterval") \ 776 .def("subscribe", &mira::python::subscribeCb<type>) \ 777 .def("subscribe", &mira::python::subscribe<type>) \ 778 .staticmethod("subscribe") \ 779 .def("unsubscribe", &mira::python::unsubscribe<type>) \ 780 .staticmethod("unsubscribe") \ 781 .def("publish", &mira::python::publish<type>) \ 782 .staticmethod("publish") \ 783 .def("convertJSONtoObject", &mira::python::convertJSONtoObject<type>) \ 784 .staticmethod("convertJSONtoObject") \ 785 .def("convertObjectToJSON", &mira::python::convertObjectToJSON<type>) \ 787 class_<mira::Channel<type> >((std::string("Channel")+name).c_str()) \ 788 .def("post", &mira::python::ChannelAccessWrapper<type>::postTimeFrame) \ 789 .def("post", &mira::python::ChannelAccessWrapper<type>::postTime) \ 790 .def("post", &mira::python::ChannelAccessWrapper<type>::post) \ 791 .def("get", &mira::python::ChannelAccessWrapper<type>::get) \ 792 .def("get", &mira::python::ChannelAccessWrapper<type>::getTime) \ 793 .def("read", &mira::python::ChannelAccessWrapper<type>::read) \ 794 .def("read", &mira::python::ChannelAccessWrapper<type>::readTime) \ 795 .def("read", &mira::python::ChannelAccessWrapper<type>::readTimeDuration) \ 796 .def("hasPublisher", &Channel<type>::hasPublisher) \ 797 .def("hasSubscriber", &Channel<type>::hasSubscriber) \ 798 .def("isValid", &Channel<type>::isValid) \ 799 .def("waitForPublisher", &mira::python::ChannelWaitWrapper<type>::waitForPublisherTime) \ 800 .def("waitForPublisher", &mira::python::ChannelWaitWrapper<type>::waitForPublisher) \ 801 .def("waitForData", &mira::python::ChannelWaitWrapper<type>::waitForDataTime) \ 802 .def("waitForData", &mira::python::ChannelWaitWrapper<type>::waitForData) \ 804 class_<mira::ChannelRead<type> >((std::string("ChannelRead")+name).c_str())\ 805 .add_property("Value", make_function(&mira::python::ChannelReadWrapper<type>::getValue, \ 806 return_value_policy<reference_existing_object>())) \ 807 .add_property("Timestamp", &mira::python::ChannelReadWrapper<type>::getTimestamp) \ 808 .add_property("FrameID", &mira::python::ChannelReadWrapper<type>::getFrameID) \ 809 .add_property("SequenceID", &mira::python::ChannelReadWrapper<type>::getSequenceID) \ 811 class_<mira::ChannelReadInterval<type> >((std::string("ChannelReadInterval")+name).c_str())\ 812 .def("__len__", &mira::ChannelReadInterval<type>::size) \ 813 .def("__iter__", boost::python::range<return_value_policy<return_by_value> >(&mira::python::ChannelReadIntervalWrapper<type>::begin, &mira::python::ChannelReadIntervalWrapper<type>::end)) \ 822 #define MIRA_PYTHONCONNECTOR_TYPE_FOOTER(type) \ 823 MIRA_PYTHONCONNECTOR_NAMED_TYPE_FOOTER(type,#type) 829 #define MIRA_PYTHONCONNECTOR_PRIMITIVE_CHANNEL_WRAPPER(type, name) \ 830 class_<mira::Channel<type> >("Channel" name) \ 831 .def("post", &mira::python::ChannelAccessWrapper<type>::postTimeFrame) \ 832 .def("post", &mira::python::ChannelAccessWrapper<type>::postTime) \ 833 .def("post", &mira::python::ChannelAccessWrapper<type>::post) \ 834 .def("get", &mira::python::ChannelAccessWrapper<type>::get) \ 835 .def("get", &mira::python::ChannelAccessWrapper<type>::getTime) \ 836 .def("get", &mira::python::ChannelAccessWrapper<type>::getTimeDuration) \ 837 .def("read", &mira::python::ChannelAccessWrapper<type>::read) \ 838 .def("read", &mira::python::ChannelAccessWrapper<type>::readTime) \ 839 .def("read", &mira::python::ChannelAccessWrapper<type>::readTimeDuration) \ 840 .def("hasPublisher", &Channel<type>::hasPublisher) \ 841 .def("hasSubscriber", &Channel<type>::hasSubscriber) \ 842 .def("isValid", &Channel<type>::isValid) \ 843 .def("waitForPublisher", &mira::python::ChannelWaitWrapper<type>::waitForPublisherTime) \ 844 .def("waitForPublisher", &mira::python::ChannelWaitWrapper<type>::waitForPublisher) \ 845 .def("waitForData", &mira::python::ChannelWaitWrapper<type>::waitForDataTime) \ 846 .def("waitForData", &mira::python::ChannelWaitWrapper<type>::waitForData) \ 848 class_<mira::ChannelRead<type> >((std::string("ChannelRead")+name).c_str())\ 849 .add_property("Value", make_function(&mira::python::ChannelReadWrapper<type>::getValue, \ 850 return_value_policy<return_by_value>())) \ 851 .add_property("Timestamp", &mira::python::ChannelReadWrapper<type>::getTimestamp) \ 852 .add_property("FrameID", &mira::python::ChannelReadWrapper<type>::getFrameID) \ 853 .add_property("SequenceID", &mira::python::ChannelReadWrapper<type>::getSequenceID) \ 855 class_<mira::ChannelReadInterval<type> >((std::string("ChannelReadInterval")+name).c_str())\ 856 .def("__len__", &mira::ChannelReadInterval<type>::size) \ 857 .def("__iter__", range<return_value_policy<return_by_value> >(&mira::python::ChannelReadIntervalWrapper<type>::begin, &mira::python::ChannelReadIntervalWrapper<type>::end)) \ 860 #define MIRA_PYTHONCONNECTOR_PRIMITIVE_VECTOR_CHANNEL_WRAPPER(type, name) \ 861 class_<std::vector<type> >("Vector" name) \ 862 .def(vector_indexing_suite<std::vector<type> >()) \ 863 MIRA_PYTHONCONNECTOR_NAMED_TYPE_FOOTER(std::vector<type>, "Vector" name) 865 #define MIRA_PYTHONCONNECTOR_PRIMITIVE_SET_CHANNEL_WRAPPER(type, name) \ 866 MIRA_PYTHONCONNECTOR_PYTHONSET_FUNCTIONS(type, "Set" name, \ 867 MIRA_PYTHONCONNECTOR_NAMED_TYPE_FOOTER(std::set<type>, "Set" name)) 869 #define MIRA_PYTHONCONNECTOR_PRIMITIVE_MAP_CHANNEL_WRAPPER(type1, type2, name1, name2) \ 870 class_<std::map<type1, type2> >("Map" name1 name2) \ 871 .def(map_indexing_suite<std::map<type1, type2> >()) \ 872 MIRA_PYTHONCONNECTOR_NAMED_TYPE_FOOTER(std::map<type1 MIRA_PYTHON_COMMA_HELPER type2>, "Map" name1 name2) 874 #define MIRA_PYTHONCONNECTOR_PRIMITIVE_MAP_CHANNEL_WRAPPER_STRING(type1, type2, name1, name2) \ 875 class_<std::map<type1, type2> >("Map" name1 name2) \ 876 .def(map_indexing_suite<std::map<type1, type2>, true>()) \ 877 MIRA_PYTHONCONNECTOR_NAMED_TYPE_FOOTER(std::map<type1 MIRA_PYTHON_COMMA_HELPER type2>, "Map" name1 name2) 879 #define MIRA_PYTHONCONNECTOR_PRIMITIVE_MAP_OF_VECTORS_CHANNEL_WRAPPER(type1, type2, name1, name2) \ 880 class_<std::map<type1, std::vector<type2> > >("Map" name1 "Vector" name2) \ 881 .def(map_indexing_suite<std::map<type1, std::vector<type2> > >()) \ 882 MIRA_PYTHONCONNECTOR_NAMED_TYPE_FOOTER(std::map<type1 MIRA_PYTHON_COMMA_HELPER std::vector<type2> >, "Map" name1 "Vector" name2) 884 #define MIRA_PYTHONCONNECTOR_PRIMITIVE_MAP_OF_VECTORS_CHANNEL_WRAPPER_STRING(type1, type2, name1, name2) \ 885 class_<std::map<type1, std::vector<type2> > >("Map" name1 "Vector" name2) \ 886 .def(map_indexing_suite<std::map<type1, std::vector<type2> >, true>()) \ 887 MIRA_PYTHONCONNECTOR_NAMED_TYPE_FOOTER(std::map<type1 MIRA_PYTHON_COMMA_HELPER std::vector<type2> >, "Map" name1 "Vector" name2) PyUnitWrapper(PyObject *self, const Duration &cycleTime)
Definition: UnitWrapper.h:153
void deserialize(T &value)
boost::python::object subscribeIntervalCb(const std::string &channelID, boost::python::object type, boost::python::object callable, const Duration &storageDuration)
See above.
boost::python::object channelPublish(const std::string &channelID, boost::python::object type)
Untyped publish method that is called from the unit or from the entity that wants to publish directly...
static ChannelRead< T > readTimeDuration(Channel< T > &channel, const Time &time, const Duration &tolerance)
Typed get method for typed channel which must be declared for every wrapped type. ...
Definition: UnitWrapper.h:599
static bool waitForDataTime(Channel< T > &channel, const Duration &d)
Definition: UnitWrapper.h:647
void post(const Stamped< T > &value)
PyUnit & getUnit()
Definition: UnitWrapper.h:113
CallbackInterval(const boost::python::object &callable)
Definition: UnitWrapper.h:305
void addTransformLink(const std::string &childID, const std::string &parentID)
static IntervalListIterator begin(ChannelReadInterval< T > &rv)
Definition: UnitWrapper.h:692
Channel< T > subscribe_internal(const std::string &channelID, boost::python::object callable)
Typed subscribe method that is called from within the subscribe methods contained in the type wrapper...
Definition: UnitWrapper.h:385
PyUnitWrapper(PyObject *self, uint32 flags)
Definition: UnitWrapper.h:145
Definition: UnitWrapper.h:275
void publishTransformIndirect3(const std::string &frameID, const std::string &targetID, const std::string &sourceID, const Pose3 &transform, const Time ×tamp)
static bool waitForPublisherTime(Channel< T > &channel, const Duration &d)
Definition: UnitWrapper.h:636
bool existsService(const std::string &service)
static T getTimeDuration(Channel< T > &channel, const Time &time, const Duration &tolerance)
Typed get method for typed channel which must be declared for every wrapped type. ...
Definition: UnitWrapper.h:565
json::Value convertObjectToJSON(const T &obj)
Generate a JSON representation using MIRA's JSON serialization capabilities.
Definition: UnitWrapper.h:728
void unsubscribe_internal(const std::string &channelID)
Typed unsubscribe method that is called from within the unsubscribe methods contained in the type wra...
Definition: UnitWrapper.h:410
bool doesChannelExist(const std::string &channelID)
void ok(const std::string &category)
void setUnitObject(boost::python::object unit)
Definition: UnitWrapper.h:75
void publishTransform3(const std::string &node, const Pose3 &t, const Time ×tamp)
Definition: UnitWrapper.h:535
void read(const std::string &s, Value &oValue)
#define MIRA_REFLECT_BASE(reflector, BaseClass)
Channel< T > publish_internal(const std::string &channelID)
Typed publish method that is called from within the subscribe methods contained in the type wrappers...
Definition: UnitWrapper.h:420
void checkinCycleTime(const std::string &ns, const std::string &name, const Duration &cycleTime)
boost::python::list queryServicesForInterface(const std::string &interface)
PyUnitWrapper(PyObject *self)
Definition: UnitWrapper.h:138
PyUnitWrapper(PyObject *self, const Duration &cycleTime, uint32 flags)
Definition: UnitWrapper.h:161
std::string getGlobalID()
void publishTransform2(const std::string &node, const Pose2 &t, const Time ×tamp)
static IntervalListIterator end(ChannelReadInterval< T > &rv)
Definition: UnitWrapper.h:697
static Time getTimestamp(ChannelRead< T > &read)
Definition: UnitWrapper.h:662
std::string waitForServiceInterfaceDuration(const std::string &service, const Duration &d)
void serialize(const std::string &name, const T &value, const std::string &comment="")
const Authority::Flags & getAuthorityFlags()
void unsubscribe(const std::string &channelID)
Pose2 getTransform2(const std::string &target, const std::string &source, const Time &time)
Duration mCycleTime
Definition: UnitWrapper.h:426
void publishTransformIndirect3Now(const std::string &frameID, const std::string &targetID, const std::string &sourceID, const Pose3 &transform)
#define MIRA_THROW(ex, msg)
Channel< T > publish(const std::string &channelID)
Pose3 getTransform3(const std::string &target, const std::string &source, const Time &time)
std::string getGlobalName()
static const T & getValue(ChannelRead< T > &read)
Definition: UnitWrapper.h:677
boost::python::handle self()
Definition: UnitWrapper.h:181
const Duration & getCycleTime()
const_iterator end() const
std::vector< boost::shared_ptr< BaseCallback > > mCallbacks
Definition: UnitWrapper.h:428
Callback(const boost::python::object &callable)
Definition: UnitWrapper.h:278
static void postTimeFrame(Channel< T > &channel, const T &value, const Time &time, const std::string &frameID)
Typed post method for typed channel which must be declared for every wrapped type.
Definition: UnitWrapper.h:613
boost::python::object subscribe(const std::string &channelID, boost::python::object type)
Untyped subscribe method that is called from the unit or from the entity that wants to subscribe dire...
bool waitForService(const std::string &service)
const_iterator begin() const
bool waitForChannelDuration(const std::string &channelID, const Duration &d)
Definition: UnitWrapper.h:268
void bootup(const std::string &message)
friend Channel< T > publish(PyUnitWrapper &unit, const std::string &channelID)
Typed publish method every wrapped type must contain.
Definition: UnitWrapper.h:529
bool waitForServiceDuration(const std::string &service, const Duration &d)
#define MIRA_REFLECT_CALL(ReflectorType, reflector, context, COMMAND)
friend class PythonUnitLoader
Definition: UnitWrapper.h:57
bool waitForChannel(const std::string &channelID)
void publishTransformIndirect2Now(const std::string &frameID, const std::string &targetID, const std::string &sourceID, const Pose2 &transform)
virtual void initialize()=0
PropertyHint type(const std::string &t)
Exception handling for python exceptions.
static ChannelRead< T > readTime(Channel< T > &channel, const Time &time)
Typed get method for typed channel which must be declared for every wrapped type. ...
Definition: UnitWrapper.h:588
PyUnitWrapperBase()
Definition: UnitWrapper.h:99
boost::python::object mUnitObject
Definition: UnitWrapper.h:93
void setPropertyNode(boost::shared_ptr< PropertyNode > node)
Definition: ReflectorWrapper.h:133
Channel< T > subscribe_internal(const std::string &channelID, boost::python::object callable, const Duration &storageDuration)
Typed subscribe method that is called from within the subscribe methods contained in the type wrapper...
Definition: UnitWrapper.h:370
Definition: UnitWrapper.h:676
PyObject * mSelf
Definition: UnitWrapper.h:425
Definition: UnitWrapper.h:661
void process(const mira::Timer &timer)
virtual void finalize()=0
static std::string getFrameID(ChannelRead< T > &read)
Definition: UnitWrapper.h:666
void error(const std::string &category, const std::string &message)
static uint32 getSequenceID(ChannelRead< T > &read)
Definition: UnitWrapper.h:670
PyUnit * getUnitPtr()
Definition: UnitWrapper.h:121
boost::python::object mCallable
Definition: UnitWrapper.h:298
void checkin(const std::string &ns, const std::string &name)
Definition: UnitWrapper.h:174
static T get(Channel< T > &channel)
Typed get method for typed channel which must be declared for every wrapped type. ...
Definition: UnitWrapper.h:543
#define MIRA_OBJECT(classIdentifier)
void publishTransform2Now(const std::string &node, const Pose2 &t)
bool isValid() const
Definition: UnitWrapper.h:126
Interface for exporting std::set to python Most of the code taken from Andreas Beyer <mail <at> a-bey...
A scoped global interpreter (GIL) lock.
Definition: ScopedGIL.h:54
Definition: UnitWrapper.h:634
static Duration infinity()
json_spirit::mValue Value
virtual ~PyUnitWrapperBase()
Definition: UnitWrapper.h:101
bool isSubscribedOn(const std::string &channelID)
Check if subscribed on the channel.
static T getTime(Channel< T > &channel, const Time &time)
Typed get method for typed channel which must be declared for every wrapped type. ...
Definition: UnitWrapper.h:554
#define MIRA_NO_PUBLIC_DEFAULT_CONSTRUCTOR(CLASS)
ChannelRead< T > waitForData(const Duration &timeout=Duration::infinity()) const
void reflect(BaseReflectorWrapper &r)
ChannelWrite< T > write()
std::string resolveName(const std::string &name)
Include this instead of boost/python.hpp to reduce compile time warning spam from Boost internal inco...
void publishTransformIndirect2(const std::string &frameID, const std::string &targetID, const std::string &sourceID, const Pose2 &transform, const Time ×tamp)
Definition: UnitWrapper.h:52
static bool waitForData(Channel< T > &channel)
Definition: UnitWrapper.h:654
void operator()(ChannelReadInterval< T > read)
Definition: UnitWrapper.h:310
boost::python::object subscribeCb(const std::string &channelID, boost::python::object type, boost::python::object callable)
See above.
Also wrap ChannelReadInterval<T>::begin and ChannelReadInterval<T>::end to return the ChannelReadInte...
Definition: UnitWrapper.h:689
Channel< T > subscribeInterval(const std::string &channelID, boost::function< void(ChannelReadInterval< T >)> fn, const Duration &storageDuration, bool independentThread=false, const Time &startAfter=Time::unixEpoch())
std::string getLastExceptionString()
Extract the message from the last python exception.
Pose2 getTransform2Latest(const std::string &target, const std::string &source)
boost::python::object convertJSONtoObject(const json::Value &value)
Create an object instance from JSON data MIRA's JSON deserialization capabilities.
Definition: UnitWrapper.h:712
void operator()(ChannelRead< T > read)
Definition: UnitWrapper.h:283
Definition: UnitWrapper.h:135
uint32 getAuthorityFlagsAsUInt32()
static void post(Channel< T > &channel, const T &value)
Definition: UnitWrapper.h:627
Authority::Flags mFlags
Definition: UnitWrapper.h:427
Definition: ReflectorWrapper.h:168
void publishTransform3Now(const std::string &node, const Pose3 &t)
Definition: UnitWrapper.h:302
mira::Channel< void > getChannel(const std::string &channelID)
Channel< T > subscribe_internal(const std::string &channelID)
Typed subscribe method that is called from within the subscribe methods contained in the type wrapper...
Definition: UnitWrapper.h:400
Definition: UnitWrapper.h:96
void warning(const std::string &category, const std::string &message)
virtual ~PyUnit()
Definition: UnitWrapper.h:66
static bool waitForPublisher(Channel< T > &channel)
Definition: UnitWrapper.h:642
PyUnitWrapper & unit()
Definition: UnitWrapper.h:80
virtual ~BaseCallback()
Definition: UnitWrapper.h:271
A scoped global interpreter (GIL) lock.
Definition: ScopedGIL.h:99
boost::python::object mCallable
Definition: UnitWrapper.h:325
static ChannelRead< T > read(Channel< T > &channel)
Typed get method for typed channel which must be declared for every wrapped type. ...
Definition: UnitWrapper.h:577
Channel< T > subscribe(const std::string &channelID, const Duration &storageDuration=Duration::seconds(0))
void unsubscribe(const std::string &channelID, boost::python::object type)
Untyped unsubscribe method that is called from the unit.
virtual void reflect(BaseReflectorWrapper &r)=0
A python interpreter singleton.
void setUnit(PyUnit *unit)
Definition: UnitWrapper.h:111
Pose3 getTransform3Latest(const std::string &target, const std::string &source)
bool waitForPublisher(const Duration &timeout=Duration::infinity()) const
static void postTime(Channel< T > &channel, const T &value, const Time &time)
Definition: UnitWrapper.h:622
std::string waitForServiceInterface(const std::string &service)
std::string getNamespace()
ChannelReadInterval< T >::IntervalList::const_iterator IntervalListIterator
Definition: UnitWrapper.h:690
void reflect(Reflector &r)
Definition: UnitWrapper.h:453