Skip to content
Snippets Groups Projects
Commit b3923eff authored by Thomas Moulard's avatar Thomas Moulard
Browse files

Fix implementation.

parent 7480326d
No related branches found
No related tags found
No related merge requests found
...@@ -8,22 +8,22 @@ namespace dynamicgraph ...@@ -8,22 +8,22 @@ namespace dynamicgraph
void converter (D& dst, const S& src); void converter (D& dst, const S& src);
template <> template <>
void converter (SotToRos<double>::ros_t& dst, inline void converter (SotToRos<double>::ros_t& dst,
const SotToRos<double>::sot_t& src) const SotToRos<double>::sot_t& src)
{ {
dst.data = src; dst.data = src;
} }
template <> template <>
void converter (SotToRos<double>::sot_t& dst, inline void converter (SotToRos<double>::sot_t& dst,
const SotToRos<double>::ros_t& src) const SotToRos<double>::ros_const_ptr_t& src)
{ {
dst = src.data; dst = src->data;
} }
template <> template <>
void converter (SotToRos<ml::Matrix>::ros_t& dst, inline void converter (SotToRos<ml::Matrix>::ros_t& dst,
const SotToRos<ml::Matrix>::sot_t& src) const SotToRos<ml::Matrix>::sot_t& src)
{ {
dst.width = src.nbRows (); dst.width = src.nbRows ();
dst.data.resize (src.nbCols () * src.nbRows ()); dst.data.resize (src.nbCols () * src.nbRows ());
...@@ -32,8 +32,8 @@ namespace dynamicgraph ...@@ -32,8 +32,8 @@ namespace dynamicgraph
} }
template <> template <>
void converter (SotToRos<ml::Vector>::ros_t& dst, inline void converter (SotToRos<ml::Vector>::ros_t& dst,
const SotToRos<ml::Vector>::sot_t& src) const SotToRos<ml::Vector>::sot_t& src)
{ {
dst.data.resize (src.size ()); dst.data.resize (src.size ());
for (unsigned i = 0; i < src.size (); ++i) for (unsigned i = 0; i < src.size (); ++i)
......
...@@ -64,11 +64,13 @@ namespace dynamicgraph ...@@ -64,11 +64,13 @@ namespace dynamicgraph
{ {
cmdArgs >> type >> signal >> topic; cmdArgs >> type >> signal >> topic;
if (type == "double") if (type == "double")
; add<double> (signal, topic);
else if (type == "matrix") else if (type == "matrix")
; ;
//add<ml::Matrix> (signal, topic);
else if (type == "vector") else if (type == "vector")
; ;
//add<ml::Vector> (signal, topic);
else else
throw "bad type"; throw "bad type";
} }
......
...@@ -45,9 +45,15 @@ namespace dynamicgraph ...@@ -45,9 +45,15 @@ namespace dynamicgraph
template <typename T> template <typename T>
void add (const std::string& signal, const std::string& topic); void add (const std::string& signal, const std::string& topic);
template <typename T> // template <typename R, typename S>
void callback (boost::shared_ptr<dynamicgraph::SignalBase<int> > signal, // void callback
const T& message); // (boost::shared_ptr<dynamicgraph::SignalTimeDependent<S, int> > signal,
// const R& data);
template <typename R, typename S>
void callback
(boost::shared_ptr<dynamicgraph::SignalTimeDependent<S, int> > signal,
const R& data);
ros::NodeHandle nh_; ros::NodeHandle nh_;
std::map<std::string, bindedSignal_t> bindedSignal_; std::map<std::string, bindedSignal_t> bindedSignal_;
......
...@@ -12,24 +12,37 @@ namespace ml = maal::boost; ...@@ -12,24 +12,37 @@ namespace ml = maal::boost;
namespace dynamicgraph namespace dynamicgraph
{ {
template <typename T> // template <typename R, typename S>
// void
// RosExport::callback
// (boost::shared_ptr<dynamicgraph::SignalTimeDependent<S, int> > signal,
// const R& data)
// {
// // typedef S sot_t;
// // sot_t value;
// // converter (value, data);
// // (*signal) (value);
// }
template <typename R, typename S>
void void
RosExport::callback (boost::shared_ptr<dynamicgraph::SignalBase<int> > signal, RosExport::callback
const T& data) (boost::shared_ptr<dynamicgraph::SignalTimeDependent<S, int> > signal,
const R& data)
{ {
typedef typename SotToRos<T>::sot_t sot_t; typedef S sot_t;
sot_t value; sot_t value;
converter (value, data); converter (value, data);
(*signal) (value); (*signal) (value);
} }
template <typename T> template <typename T>
void RosExport::add (const std::string& signal, const std::string& topic) void RosExport::add (const std::string& signal, const std::string& topic)
{ {
typedef typename SotToRos<T>::sot_t sot_t; typedef typename SotToRos<T>::sot_t sot_t;
typedef typename SotToRos<T>::ros_t ros_t; typedef typename SotToRos<T>::ros_const_ptr_t ros_const_ptr_t;
typedef typename SotToRos<T>::signal_t signal_t; typedef typename SotToRos<T>::signal_t signal_t;
typedef typename SotToRos<T>::callback_t callback_t;
// Initialize the bindedSignal object. // Initialize the bindedSignal object.
bindedSignal_t bindedSignal; bindedSignal_t bindedSignal;
...@@ -38,15 +51,19 @@ namespace dynamicgraph ...@@ -38,15 +51,19 @@ namespace dynamicgraph
boost::format signalName ("RosExport(%1%)::%2%"); boost::format signalName ("RosExport(%1%)::%2%");
signalName % name % signal; signalName % name % signal;
bindedSignal.first = boost::make_shared<signal_t>(0, signalName.str ()); boost::shared_ptr<signal_t> signal_ =
boost::make_shared<signal_t>(0, signalName.str ());
bindedSignal.first = signal_;
signalRegistration (*bindedSignal.first); signalRegistration (*bindedSignal.first);
// Initialize the publisher. // Initialize the publisher.
typedef boost::function<void (const ros_const_ptr_t& data)> callback_t;
callback_t callback = boost::bind
(&RosExport::callback<ros_const_ptr_t, sot_t>,
this, signal_, _1);
bindedSignal.second = bindedSignal.second =
boost::make_shared<ros::Publisher> boost::make_shared<ros::Subscriber> (nh_.subscribe (topic, 1, callback));
(nh_.subscribe
(topic, 1, boost::bind (&RosExport::callback<T>,
this, bindedSignal.first)));
bindedSignal_[signal] = bindedSignal; bindedSignal_[signal] = bindedSignal;
} }
......
...@@ -18,6 +18,7 @@ namespace dynamicgraph ...@@ -18,6 +18,7 @@ namespace dynamicgraph
{ {
typedef double sot_t; typedef double sot_t;
typedef std_msgs::Float64 ros_t; typedef std_msgs::Float64 ros_t;
typedef std_msgs::Float64ConstPtr ros_const_ptr_t;
typedef dynamicgraph::SignalTimeDependent<sot_t, int> signal_t; typedef dynamicgraph::SignalTimeDependent<sot_t, int> signal_t;
typedef boost::function<sot_t& (sot_t&, int)> callback_t; typedef boost::function<sot_t& (sot_t&, int)> callback_t;
}; };
...@@ -27,6 +28,7 @@ namespace dynamicgraph ...@@ -27,6 +28,7 @@ namespace dynamicgraph
{ {
typedef ml::Matrix sot_t; typedef ml::Matrix sot_t;
typedef dynamic_graph::Matrix ros_t; typedef dynamic_graph::Matrix ros_t;
typedef dynamic_graph::MatrixConstPtr ros_const_ptr_t;
typedef dynamicgraph::SignalTimeDependent<sot_t, int> signal_t; typedef dynamicgraph::SignalTimeDependent<sot_t, int> signal_t;
typedef boost::function<sot_t& (sot_t&, int)> callback_t; typedef boost::function<sot_t& (sot_t&, int)> callback_t;
}; };
...@@ -36,6 +38,7 @@ namespace dynamicgraph ...@@ -36,6 +38,7 @@ namespace dynamicgraph
{ {
typedef ml::Vector sot_t; typedef ml::Vector sot_t;
typedef dynamic_graph::Vector ros_t; typedef dynamic_graph::Vector ros_t;
typedef dynamic_graph::VectorConstPtr ros_const_ptr_t;
typedef dynamicgraph::SignalTimeDependent<sot_t, int> signal_t; typedef dynamicgraph::SignalTimeDependent<sot_t, int> signal_t;
typedef boost::function<sot_t& (sot_t&, int)> callback_t; typedef boost::function<sot_t& (sot_t&, int)> callback_t;
}; };
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment