fawkes-robotino-2016のgazebo9以降への対応
Ubuntu 18.04へのfawkes-robotino のインストール(試行錯誤版)にて,
gazebo 関係はgazebo5からgazebo9まで上がっていて,gazebo::physics:World のGetName などなどがなくなっているため,対応が面倒なのでいったんインストールリストから削除しました.
とありましたが,その部分の答え合わせです(2016と2019のdiff)
diff -r fawkes-robotino/fawkes/src/plugins/gazebo/aspect/gazebo.cpp fawkes-robotino-2016/fawkes/src/plugins/gazebo/aspect/gazebo.cpp 68c64,65 < GazeboAspect::init_GazeboAspect(gazebo::transport::NodePtr gazebonode , gazebo::transport::NodePtr gazebo_world_node) --- > GazeboAspect::init_GazeboAspect(gazebo::transport::NodePtr gazebonode, > gazebo::transport::NodePtr gazebo_world_node) 70,71c67,68 < this->gazebonode = gazebonode; < this->gazebo_world_node = gazebo_world_node; --- > this->gazebonode = gazebonode; > this->gazebo_world_node = gazebo_world_node; 80c77 < gazebonode.reset(); --- > gazebonode.reset(); diff -r fawkes-robotino/fawkes/src/plugins/gazebo/aspect/gazebo.h fawkes-robotino-2016/fawkes/src/plugins/gazebo/aspect/gazebo.h 24,25c24,25 < #ifndef __PLUGINS_GAZEBO_ASPECT_GAZEBO_H_ < #define __PLUGINS_GAZEBO_ASPECT_GAZEBO_H_ --- > #ifndef _PLUGINS_GAZEBO_ASPECT_GAZEBO_H_ > #define _PLUGINS_GAZEBO_ASPECT_GAZEBO_H_ 33,35c33,34 < #if 0 /* just to make Emacs auto-indent happy */ < } < #endif --- > > class GazeboAspectIniFin; 39c38 < friend class GazeboAspectIniFin; --- > friend GazeboAspectIniFin; 41,48c40,47 < public: < GazeboAspect(); < virtual ~GazeboAspect(); < < protected: < /// Gazebo Node for communication with a robot < gazebo::transport::NodePtr gazebonode; < /** --- > public: > GazeboAspect(); > virtual ~GazeboAspect(); > > protected: > /// Gazebo Node for communication with a robot > gazebo::transport::NodePtr gazebonode; > /** 52c51 < gazebo::transport::NodePtr gazebo_world_node; --- > gazebo::transport::NodePtr gazebo_world_node; 54,56c53,56 < private: < void init_GazeboAspect(gazebo::transport::NodePtr gazebonode, gazebo::transport::NodePtr gazebo_world_node); < void finalize_GazeboAspect(); --- > private: > void init_GazeboAspect(gazebo::transport::NodePtr gazebonode, > gazebo::transport::NodePtr gazebo_world_node); > void finalize_GazeboAspect(); diff -r fawkes-robotino/fawkes/src/plugins/gazebo/aspect/gazebo_inifin.cpp fawkes-robotino-2016/fawkes/src/plugins/gazebo/aspect/gazebo_inifin.cpp 24d23 < #include <plugins/gazebo/aspect/gazebo_inifin.h> 25a25,26 > #include <plugins/gazebo/aspect/gazebo_inifin.h> > 29,31d29 < #if 0 /* just to make Emacs auto-indent happy */ < } < #endif 41,42c39 < GazeboAspectIniFin::GazeboAspectIniFin() < : AspectIniFin("GazeboAspect") --- > GazeboAspectIniFin::GazeboAspectIniFin() : AspectIniFin("GazeboAspect") 52,61c49,59 < GazeboAspect *gazebo_thread; < gazebo_thread = dynamic_cast<GazeboAspect *>(thread); < if (gazebo_thread == NULL) { < throw CannotInitializeThreadException("Thread '%s' claims to have the " < "GazeboAspect, but RTTI says it " < "has not. ", thread->name()); < } < if (! __gazebonode) { < throw CannotInitializeThreadException("Gazebo node handle has not been set."); < } --- > GazeboAspect *gazebo_thread; > gazebo_thread = dynamic_cast<GazeboAspect *>(thread); > if (gazebo_thread == NULL) { > throw CannotInitializeThreadException("Thread '%s' claims to have the " > "GazeboAspect, but RTTI says it " > "has not. ", > thread->name()); > } > if (!gazebonode_) { > throw CannotInitializeThreadException("Gazebo node handle has not been set."); > } 63c61 < gazebo_thread->init_GazeboAspect(__gazebonode, __gazebo_world_node); --- > gazebo_thread->init_GazeboAspect(gazebonode_, gazebo_world_node_); 72,79c70,78 < GazeboAspect *gazebo_thread; < gazebo_thread = dynamic_cast<GazeboAspect *>(thread); < if (gazebo_thread == NULL) { < throw CannotFinalizeThreadException("Thread '%s' claims to have the " < "GazeboAspect, but RTTI says it " < "has not. ", thread->name()); < } < gazebo_thread->finalize_GazeboAspect(); --- > GazeboAspect *gazebo_thread; > gazebo_thread = dynamic_cast<GazeboAspect *>(thread); > if (gazebo_thread == NULL) { > throw CannotFinalizeThreadException("Thread '%s' claims to have the " > "GazeboAspect, but RTTI says it " > "has not. ", > thread->name()); > } > gazebo_thread->finalize_GazeboAspect(); 82d80 < 90c88 < __gazebonode = gazebonode; --- > gazebonode_ = gazebonode; 99c97 < __gazebo_world_node = gazebo_world_node; --- > gazebo_world_node_ = gazebo_world_node; diff -r fawkes-robotino/fawkes/src/plugins/gazebo/aspect/gazebo_inifin.h fawkes-robotino-2016/fawkes/src/plugins/gazebo/aspect/gazebo_inifin.h 24,25c24,25 < #ifndef __PLUGINS_GAZEBO_ASPECT_GAZEBO_INIFIN_H_ < #define __PLUGINS_GAZEBO_ASPECT_GAZEBO_INIFIN_H_ --- > #ifndef _PLUGINS_GAZEBO_ASPECT_GAZEBO_INIFIN_H_ > #define _PLUGINS_GAZEBO_ASPECT_GAZEBO_INIFIN_H_ 34,36d33 < #if 0 /* just to make Emacs auto-indent happy */ < } < #endif 40,41c37,38 < public: < GazeboAspectIniFin(); --- > public: > GazeboAspectIniFin(); 43,52c40,41 < virtual void init(Thread *thread); < virtual void finalize(Thread *thread); < < //setters for the node_thread < void set_gazebonode(gazebo::transport::NodePtr gazebonode); < void set_gazebo_world_node(gazebo::transport::NodePtr gazebo_world_node); < < private: < gazebo::transport::NodePtr __gazebonode; < gazebo::transport::NodePtr __gazebo_world_node; --- > virtual void init(Thread *thread); > virtual void finalize(Thread *thread); 53a43,49 > //setters for the node_thread > void set_gazebonode(gazebo::transport::NodePtr gazebonode); > void set_gazebo_world_node(gazebo::transport::NodePtr gazebo_world_node); > > private: > gazebo::transport::NodePtr gazebonode_; > gazebo::transport::NodePtr gazebo_world_node_; diff -r fawkes-robotino/fawkes/src/plugins/gazebo/aspect/Makefile fawkes-robotino-2016/fawkes/src/plugins/gazebo/aspect/Makefile 30c30,31 < OBJS_all = $(OBJS_libfawkesgazeboaspect) --- > OBJS_all = $(OBJS_libfawkesgazeboaspect) > LIBS_all = $(LIBDIR)/libfawkesgazeboaspect.so 33c34 < LIBS_all = $(LIBDIR)/libfawkesgazeboaspect.so --- > LIBS_build = $(LIBS_all) diff -r fawkes-robotino/fawkes/src/plugins/gazebo/gazebo.mk fawkes-robotino-2016/fawkes/src/plugins/gazebo/gazebo.mk 15a16,17 > include $(BUILDSYSDIR)/boost.mk > 25a28 > HAVE_GAZEBO_96 = $(if $(shell $(PKGCONFIG) --atleast-version=9.6.0 'gazebo'; echo $${?/1/}),1,0) 29c32,35 < CFLAGS_GAZEBO = -DHAVE_GAZEBO $(shell $(PKGCONFIG) --cflags 'gazebo') --- > # Gazebo 8 declared several symbols as deprecated but still uses them. > # Disable the deprecated declarations warning until this is fixed. > CFLAGS_GAZEBO = -DHAVE_GAZEBO $(shell $(PKGCONFIG) --cflags 'gazebo') \ > -Wno-deprecated-declarations 30a37,40 > > ifeq ($(HAVE_GAZEBO_96)$(boost-have-lib system),11) > LDFLAGS_GAZEBO += $(boost-lib-ldflags system) > endif diff -r fawkes-robotino/fawkes/src/plugins/gazebo/gazebo_plugin.cpp fawkes-robotino-2016/fawkes/src/plugins/gazebo/gazebo_plugin.cpp 26d25 < #include <gazebo/transport/TransportIface.hh> 28a28,29 > #include <gazebo/transport/TransportIface.hh> > 41,42c42 < GazeboPlugin::GazeboPlugin(Configuration *config) < : Plugin(config) --- > GazeboPlugin::GazeboPlugin(Configuration *config) : Plugin(config) 44c44 < thread_list.push_back(new GazeboNodeThread()); --- > thread_list.push_back(new GazeboNodeThread()); 46d45 < diff -r fawkes-robotino/fawkes/src/plugins/gazebo/gazebo_plugin.h fawkes-robotino-2016/fawkes/src/plugins/gazebo/gazebo_plugin.h 23,24c23,24 < #ifndef __PLUGINS_GAZEBO_GAZEBO_PLUGIN_H_ < #define __PLUGINS_GAZEBO_GAZEBO_PLUGIN_H_ --- > #ifndef _PLUGINS_GAZEBO_GAZEBO_PLUGIN_H_ > #define _PLUGINS_GAZEBO_GAZEBO_PLUGIN_H_ 30,31c30,31 < public: < GazeboPlugin(fawkes::Configuration *config); --- > public: > explicit GazeboPlugin(fawkes::Configuration *config); diff -r fawkes-robotino/fawkes/src/plugins/gazebo/gazsim-comm/gazsim_comm_plugin.cpp fawkes-robotino-2016/fawkes/src/plugins/gazebo/gazsim-comm/gazsim_comm_plugin.cpp 25a26 > 35,36c36,37 < public: < /** Constructor. --- > public: > /** Constructor. 39,42c40,43 < GazsimCommPlugin(Configuration *config) : Plugin(config) < { < thread_list.push_back(new GazsimCommThread()); < } --- > explicit GazsimCommPlugin(Configuration *config) : Plugin(config) > { > thread_list.push_back(new GazsimCommThread()); > } 44d44 < diff -r fawkes-robotino/fawkes/src/plugins/gazebo/gazsim-comm/gazsim_comm_thread.cpp fawkes-robotino-2016/fawkes/src/plugins/gazebo/gazsim-comm/gazsim_comm_thread.cpp 24a25,26 > #include "gazsim_comm_thread.h" > 26d27 < #include <protobuf_comm/peer.h> 28,29c29,30 < #include <stdlib.h> < #include "gazsim_comm_thread.h" --- > #include <protobuf_comm/peer.h> > 30a32 > #include <stdlib.h> 41,42c43,44 < : Thread("GazsimCommThread", Thread::OPMODE_WAITFORWAKEUP), < BlockedTimingAspect(BlockedTimingAspect::WAKEUP_HOOK_WORLDSTATE) --- > : Thread("GazsimCommThread", Thread::OPMODE_WAITFORWAKEUP), > BlockedTimingAspect(BlockedTimingAspect::WAKEUP_HOOK_WORLDSTATE) 50d51 < 54,55c55,56 < //logger->log_info(name(), "GazsimComm initializing"); < initialized_ = false; --- > //logger->log_info(name(), "GazsimComm initializing"); > initialized_ = false; 57,128c58,136 < //read config values < proto_dirs_ = config->get_strings("/gazsim/proto-dirs"); < package_loss_ = config->get_float("/gazsim/comm/package-loss"); < addresses_ = config->get_strings("/gazsim/comm/addresses"); < send_ports_ = config->get_uints("/gazsim/comm/send-ports"); < recv_ports_ = config->get_uints("/gazsim/comm/recv-ports"); < use_crypto1_ = config->get_bool("/gazsim/comm/use-crypto1"); < use_crypto2_ = config->get_bool("/gazsim/comm/use-crypto1"); < send_ports_crypto1_ = config->get_uints("/gazsim/comm/send-ports-crypto1"); < recv_ports_crypto1_ = config->get_uints("/gazsim/comm/recv-ports-crypto1"); < send_ports_crypto2_ = config->get_uints("/gazsim/comm/send-ports-crypto2"); < recv_ports_crypto2_ = config->get_uints("/gazsim/comm/recv-ports-crypto2"); < if(addresses_.size() != send_ports_.size() || addresses_.size() != recv_ports_.size() < || ( use_crypto1_ && addresses_.size() != send_ports_crypto1_.size()) < || ( use_crypto1_ && addresses_.size() != recv_ports_crypto1_.size()) < || ( use_crypto2_ && addresses_.size() != send_ports_crypto2_.size()) < || ( use_crypto2_ && addresses_.size() != recv_ports_crypto2_.size())) < { < logger->log_warn(name(), "/gazsim/comm/ has an invalid configuration!"); < } < < < < //resolve proto paths < try { < proto_dirs_ = config->get_strings("/clips-protobuf/proto-dirs"); < for (size_t i = 0; i < proto_dirs_.size(); ++i) { < std::string::size_type pos; < if ((pos = proto_dirs_[i].find("@BASEDIR@")) != std::string::npos) { < proto_dirs_[i].replace(pos, 9, BASEDIR); < } < if ((pos = proto_dirs_[i].find("@FAWKES_BASEDIR@")) != std::string::npos) { < proto_dirs_[i].replace(pos, 16, FAWKES_BASEDIR); < } < if ((pos = proto_dirs_[i].find("@RESDIR@")) != std::string::npos) { < proto_dirs_[i].replace(pos, 8, RESDIR); < } < if ((pos = proto_dirs_[i].find("@CONFDIR@")) != std::string::npos) { < proto_dirs_[i].replace(pos, 9, CONFDIR); < } < if (proto_dirs_[i][proto_dirs_.size()-1] != '/') { < proto_dirs_[i] += "/"; < } < } < } catch (Exception &e) { < logger->log_warn(name(), "Failed to load proto paths from config, exception follows"); < logger->log_warn(name(), e); < } < < //create peer connections < peers_.resize(addresses_.size()); < peers_crypto1_.resize(addresses_.size()); < peers_crypto2_.resize(addresses_.size()); < for(unsigned int i = 0; i < addresses_.size(); i++) < { < peers_[i] = new ProtobufBroadcastPeer(addresses_[i], send_ports_[i], < recv_ports_[i], proto_dirs_); < peers_[i]->signal_received_raw().connect(boost::bind(&GazsimCommThread::receive_raw_msg, this, _1, _2, _3, _4)); < if(use_crypto1_) < { < peers_crypto1_[i] = new ProtobufBroadcastPeer(addresses_[i], send_ports_crypto1_[i], < recv_ports_crypto1_[i], proto_dirs_); < peers_crypto1_[i]->signal_received_raw().connect(boost::bind(&GazsimCommThread::receive_raw_msg, this, _1, _2, _3, _4)); < } < if(use_crypto2_) < { < peers_crypto2_[i] = new ProtobufBroadcastPeer(addresses_[i], send_ports_crypto2_[i], < recv_ports_crypto2_[i], proto_dirs_); < peers_crypto2_[i]->signal_received_raw().connect(boost::bind(&GazsimCommThread::receive_raw_msg, this, _1, _2, _3, _4)); < } < } < initialized_ = true; --- > //read config values > proto_dirs_ = config->get_strings("/gazsim/proto-dirs"); > package_loss_ = config->get_float("/gazsim/comm/package-loss"); > addresses_ = config->get_strings("/gazsim/comm/addresses"); > send_ports_ = config->get_uints("/gazsim/comm/send-ports"); > recv_ports_ = config->get_uints("/gazsim/comm/recv-ports"); > use_crypto1_ = config->get_bool("/gazsim/comm/use-crypto1"); > use_crypto2_ = config->get_bool("/gazsim/comm/use-crypto1"); > send_ports_crypto1_ = config->get_uints("/gazsim/comm/send-ports-crypto1"); > recv_ports_crypto1_ = config->get_uints("/gazsim/comm/recv-ports-crypto1"); > send_ports_crypto2_ = config->get_uints("/gazsim/comm/send-ports-crypto2"); > recv_ports_crypto2_ = config->get_uints("/gazsim/comm/recv-ports-crypto2"); > if (addresses_.size() != send_ports_.size() || addresses_.size() != recv_ports_.size() > || (use_crypto1_ && addresses_.size() != send_ports_crypto1_.size()) > || (use_crypto1_ && addresses_.size() != recv_ports_crypto1_.size()) > || (use_crypto2_ && addresses_.size() != send_ports_crypto2_.size()) > || (use_crypto2_ && addresses_.size() != recv_ports_crypto2_.size())) { > logger->log_warn(name(), "/gazsim/comm/ has an invalid configuration!"); > } > > //resolve proto paths > try { > proto_dirs_ = config->get_strings("/clips-protobuf/proto-dirs"); > for (size_t i = 0; i < proto_dirs_.size(); ++i) { > std::string::size_type pos; > if ((pos = proto_dirs_[i].find("@BASEDIR@")) != std::string::npos) { > proto_dirs_[i].replace(pos, 9, BASEDIR); > } > if ((pos = proto_dirs_[i].find("@FAWKES_BASEDIR@")) != std::string::npos) { > proto_dirs_[i].replace(pos, 16, FAWKES_BASEDIR); > } > if ((pos = proto_dirs_[i].find("@RESDIR@")) != std::string::npos) { > proto_dirs_[i].replace(pos, 8, RESDIR); > } > if ((pos = proto_dirs_[i].find("@CONFDIR@")) != std::string::npos) { > proto_dirs_[i].replace(pos, 9, CONFDIR); > } > if (proto_dirs_[i][proto_dirs_.size() - 1] != '/') { > proto_dirs_[i] += "/"; > } > } > } catch (Exception &e) { > logger->log_warn(name(), "Failed to load proto paths from config, exception follows"); > logger->log_warn(name(), e); > } > > //create peer connections > peers_.resize(addresses_.size()); > peers_crypto1_.resize(addresses_.size()); > peers_crypto2_.resize(addresses_.size()); > for (unsigned int i = 0; i < addresses_.size(); i++) { > peers_[i] = > new ProtobufBroadcastPeer(addresses_[i], send_ports_[i], recv_ports_[i], proto_dirs_); > peers_[i]->signal_received_raw().connect( > boost::bind(&GazsimCommThread::receive_raw_msg, this, _1, _2, _3, _4)); > peers_[i]->signal_send_error().connect( > boost::bind(&GazsimCommThread::peer_send_error, this, addresses_[i], send_ports_[i], _1)); > if (use_crypto1_) { > peers_crypto1_[i] = new ProtobufBroadcastPeer(addresses_[i], > send_ports_crypto1_[i], > recv_ports_crypto1_[i], > proto_dirs_); > peers_crypto1_[i]->signal_received_raw().connect( > boost::bind(&GazsimCommThread::receive_raw_msg, this, _1, _2, _3, _4)); > peers_crypto1_[i]->signal_send_error().connect(boost::bind( > &GazsimCommThread::peer_send_error, this, addresses_[i], send_ports_crypto1_[i], _1)); > } > if (use_crypto2_) { > peers_crypto2_[i] = new ProtobufBroadcastPeer(addresses_[i], > send_ports_crypto2_[i], > recv_ports_crypto2_[i], > proto_dirs_); > peers_crypto2_[i]->signal_received_raw().connect( > boost::bind(&GazsimCommThread::receive_raw_msg, this, _1, _2, _3, _4)); > peers_crypto2_[i]->signal_send_error().connect(boost::bind( > &GazsimCommThread::peer_send_error, this, addresses_[i], send_ports_crypto2_[i], _1)); > } > } > initialized_ = true; 131d138 < 135,138c142,144 < for(unsigned int i = 0; i < peers_.size(); i++) < { < delete peers_[i]; < } --- > for (unsigned int i = 0; i < peers_.size(); i++) { > delete peers_[i]; > } 141d146 < 148,183d152 < * Receive and forward msg < * @param endpoint port msg received from < * @param component_id message_component_id < * @param msg_type msg_type < * @param msg Message < */ < void < GazsimCommThread::receive_msg(boost::asio::ip::udp::endpoint &endpoint, < uint16_t component_id, uint16_t msg_type, < std::shared_ptr<google::protobuf::Message> msg) < { < //logger->log_info(name(), "Got Peer Message from port %d", endpoint.port()); < unsigned int incoming_peer_port = endpoint.port(); //this is suprisingly the send-port < < if(!initialized_) < { < return; < } < < //simulate package loss < double rnd = ((double) rand()) / ((double) RAND_MAX); //0.0 <= rnd <= 1.0 < if(rnd < package_loss_) < { < return; < } < //send message to all other peers < for(unsigned int i = 0; i < peers_.size(); i++) < { < if(send_ports_[i] != incoming_peer_port) < { < peers_[i]->send(msg); < } < } < } < < /** 192,193c161,209 < protobuf_comm::frame_header_t &header, void * data, < size_t length) --- > protobuf_comm::frame_header_t & header, > void * data, > size_t length) > { > //logger->log_info(name(), "Got raw Message from port %d", endpoint.port()); > unsigned int incoming_peer_port = endpoint.port(); //this is suprisingly the send-port > > if (!initialized_) { > return; > } > > //simulate package loss > double rnd = ((double)rand()) / ((double)RAND_MAX); //0.0 <= rnd <= 1.0 > if (rnd < package_loss_) { > return; > } > > //check which set of peers the message comes from > std::vector<protobuf_comm::ProtobufBroadcastPeer *> peers; > std::vector<unsigned int> send_ports; > if (std::find(send_ports_.begin(), send_ports_.end(), incoming_peer_port) != send_ports_.end()) { > peers = peers_; > send_ports = send_ports_; > } else if (use_crypto1_ > && std::find(send_ports_crypto1_.begin(), > send_ports_crypto1_.end(), > incoming_peer_port) > != send_ports_crypto1_.end()) { > peers = peers_crypto1_; > send_ports = send_ports_crypto1_; > } else if (use_crypto2_ > && std::find(send_ports_crypto2_.begin(), > send_ports_crypto2_.end(), > incoming_peer_port) > != send_ports_crypto2_.end()) { > peers = peers_crypto2_; > send_ports = send_ports_crypto2_; > } > > //send message to all other peers > for (unsigned int i = 0; i < peers.size(); i++) { > if (send_ports[i] != incoming_peer_port) { > peers[i]->send_raw(header, data, length); > } > } > } > > void > GazsimCommThread::peer_send_error(std::string address, unsigned int port, std::string err) 195,236c211 < //logger->log_info(name(), "Got raw Message from port %d", endpoint.port()); < unsigned int incoming_peer_port = endpoint.port(); //this is suprisingly the send-port < < if(!initialized_) < { < return; < } < < //simulate package loss < double rnd = ((double) rand()) / ((double) RAND_MAX); //0.0 <= rnd <= 1.0 < if(rnd < package_loss_) < { < return; < } < < //check which set of peers the message comes from < std::vector<protobuf_comm::ProtobufBroadcastPeer*> peers; < std::vector<unsigned int> send_ports; < if(std::find(send_ports_.begin(), send_ports_.end(), incoming_peer_port) != send_ports_.end()) < { < peers = peers_; < send_ports = send_ports_; < } < else if(use_crypto1_ && std::find(send_ports_crypto1_.begin(), send_ports_crypto1_.end(), incoming_peer_port) != send_ports_crypto1_.end()) < { < peers = peers_crypto1_; < send_ports = send_ports_crypto1_; < } < else if(use_crypto2_ && std::find(send_ports_crypto2_.begin(), send_ports_crypto2_.end(), incoming_peer_port) != send_ports_crypto1_.end()) < { < peers = peers_crypto2_; < send_ports = send_ports_crypto2_; < } < < //send message to all other peers < for(unsigned int i = 0; i < peers.size(); i++) < { < if(send_ports[i] != incoming_peer_port) < { < peers[i]->send_raw(header, data, length); < } < } --- > logger->log_warn(name(), "Peer send error for %s:%u: %s", address.c_str(), port, err.c_str()); diff -r fawkes-robotino/fawkes/src/plugins/gazebo/gazsim-comm/gazsim_comm_thread.h fawkes-robotino-2016/fawkes/src/plugins/gazebo/gazsim-comm/gazsim_comm_thread.h 25,26c25,26 < #ifndef __PLUGINS_GAZSIM_COMM_COMM_THREAD_H_ < #define __PLUGINS_GAZSIM_COMM_COMM_THREAD_H_ --- > #ifndef _PLUGINS_GAZSIM_COMM_COMM_THREAD_H_ > #define _PLUGINS_GAZSIM_COMM_COMM_THREAD_H_ 28,30d27 < #include <core/threading/thread.h> < #include <aspect/logging.h> < #include <aspect/configurable.h> 32c29,31 < #include <boost/asio.hpp> --- > #include <aspect/configurable.h> > #include <aspect/logging.h> > #include <core/threading/thread.h> 34d32 < #include <protobuf_comm/peer.h> 36c34 < #include <list> --- > #include <protobuf_comm/peer.h> 37a36,37 > #include <boost/asio.hpp> > #include <list> 40c40 < class ProtobufStreamClient; --- > class ProtobufStreamClient; 43,47c43,46 < class GazsimCommThread < : public fawkes::Thread, < public fawkes::BlockedTimingAspect, < public fawkes::ConfigurableAspect, < public fawkes::LoggingAspect --- > class GazsimCommThread : public fawkes::Thread, > public fawkes::BlockedTimingAspect, > public fawkes::ConfigurableAspect, > public fawkes::LoggingAspect 49,81c48,85 < public: < GazsimCommThread(); < ~GazsimCommThread(); < < virtual void init(); < virtual void loop(); < virtual void finalize(); < < void receive_msg(boost::asio::ip::udp::endpoint &endpoint, < uint16_t component_id, uint16_t msg_type, < std::shared_ptr<google::protobuf::Message> msg); < void receive_raw_msg(boost::asio::ip::udp::endpoint &endpoint, < protobuf_comm::frame_header_t &header, void * data, < size_t length); < < /** Stub to see name in backtrace for easier debugging. @see Thread::run() */ < protected: virtual void run() { Thread::run(); } < < private: < std::vector<protobuf_comm::ProtobufBroadcastPeer*> peers_; < std::vector<protobuf_comm::ProtobufBroadcastPeer*> peers_crypto1_; < std::vector<protobuf_comm::ProtobufBroadcastPeer*> peers_crypto2_; < < //config values < std::vector<std::string> addresses_; < std::vector<unsigned int> send_ports_; < std::vector<unsigned int> recv_ports_; < std::vector<unsigned int> send_ports_crypto1_; < std::vector<unsigned int> recv_ports_crypto1_; < std::vector<unsigned int> send_ports_crypto2_; < std::vector<unsigned int> recv_ports_crypto2_; < < bool use_crypto1_, use_crypto2_; --- > public: > GazsimCommThread(); > ~GazsimCommThread(); > > virtual void init(); > virtual void loop(); > virtual void finalize(); > > /** Stub to see name in backtrace for easier debugging. @see Thread::run() */ > protected: > virtual void > run() > { > Thread::run(); > } > > private: > void peer_send_error(std::string address, unsigned int port, std::string err); > void receive_raw_msg(boost::asio::ip::udp::endpoint &endpoint, > protobuf_comm::frame_header_t & header, > void * data, > size_t length); > > private: > std::vector<protobuf_comm::ProtobufBroadcastPeer *> peers_; > std::vector<protobuf_comm::ProtobufBroadcastPeer *> peers_crypto1_; > std::vector<protobuf_comm::ProtobufBroadcastPeer *> peers_crypto2_; > > //config values > std::vector<std::string> addresses_; > std::vector<unsigned int> send_ports_; > std::vector<unsigned int> recv_ports_; > std::vector<unsigned int> send_ports_crypto1_; > std::vector<unsigned int> recv_ports_crypto1_; > std::vector<unsigned int> send_ports_crypto2_; > std::vector<unsigned int> recv_ports_crypto2_; > > bool use_crypto1_, use_crypto2_; 83,84c87,88 < std::vector<std::string> proto_dirs_; < double package_loss_; --- > std::vector<std::string> proto_dirs_; > double package_loss_; 86,87c90,91 < //helper variables < bool initialized_; --- > //helper variables > bool initialized_; diff -r fawkes-robotino/fawkes/src/plugins/gazebo/gazsim-comm/Makefile fawkes-robotino-2016/fawkes/src/plugins/gazebo/gazsim-comm/Makefile 28c28,29 < LIBS_gazsim_comm = fawkescore fawkesutils fawkesaspects fawkes_protobuf_comm fawkesgazeboaspect gazsim_msgs --- > LIBS_gazsim_comm = fawkescore fawkesutils fawkesaspects fawkes_protobuf_comm \ > fawkesgazeboaspect gazsim_msgs 31c32,33 < OBJS_all = $(OBJS_gazsim_comm) --- > OBJS_all = $(OBJS_gazsim_comm) > PLUGINS_all = $(PLUGINDIR)/gazsim-comm.so 42c44 < PLUGINS_all = $(PLUGINDIR)/gazsim-comm.so --- > PLUGINS_build = $(PLUGINS_all) diff -r fawkes-robotino/fawkes/src/plugins/gazebo/gazsim-depthcam/gazsim_depthcam_plugin.cpp fawkes-robotino-2016/fawkes/src/plugins/gazebo/gazsim-depthcam/gazsim_depthcam_plugin.cpp 22,23d21 < #include <core/plugin.h> < 25a24,25 > #include <core/plugin.h> > 35,37c35,36 < public: < < /** Constructor. --- > public: > /** Constructor. 40,44c39,42 < GazsimDepthcamPlugin(Configuration *config) < : Plugin(config) < { < thread_list.push_back(new DepthcamSimThread()); < } --- > explicit GazsimDepthcamPlugin(Configuration *config) : Plugin(config) > { > thread_list.push_back(new DepthcamSimThread()); > } diff -r fawkes-robotino/fawkes/src/plugins/gazebo/gazsim-depthcam/gazsim_depthcam_thread.cpp fawkes-robotino-2016/fawkes/src/plugins/gazebo/gazsim-depthcam/gazsim_depthcam_thread.cpp 23a24 > #include <aspect/logging.h> 25,26d25 < #include <stdio.h> < #include <math.h> 29d27 < #include <gazebo/transport/Node.hh> 30a29 > #include <gazebo/transport/Node.hh> 32c31,32 < #include <aspect/logging.h> --- > #include <math.h> > #include <stdio.h> 44,45c44,45 < : Thread("DepthcamSimThread", Thread::OPMODE_WAITFORWAKEUP), < BlockedTimingAspect(BlockedTimingAspect::WAKEUP_HOOK_SENSOR_PROCESS) --- > : Thread("DepthcamSimThread", Thread::OPMODE_WAITFORWAKEUP), > BlockedTimingAspect(BlockedTimingAspect::WAKEUP_HOOK_SENSOR_PROCESS) 49c49,50 < void DepthcamSimThread::init() --- > void > DepthcamSimThread::init() 51,66c52,68 < logger->log_debug(name(), "Initializing Simulation of the Depthcam"); < topic_name_ = config->get_string("/gazsim/depthcam/topic"); < width_ = config->get_float("/gazsim/depthcam/width"); < height_ = config->get_float("/gazsim/depthcam/height"); < frame_ = config->get_string("/gazsim/depthcam/frame"); < pcl_id_ = config->get_string("/gazsim/depthcam/pointcloud-id"); < < depthcam_sub_ = gazebo_world_node->Subscribe(topic_name_, &DepthcamSimThread::on_depthcam_data_msg, this); < < //create pointcloud: < pcl_ = new pcl::PointCloud<pcl::PointXYZ>(); < pcl_->is_dense = false; < pcl_->width = width_; < pcl_->height = height_; < pcl_->points.resize(width_ * height_); < pcl_->header.frame_id = frame_; --- > logger->log_debug(name(), "Initializing Simulation of the Depthcam"); > topic_name_ = config->get_string("/gazsim/depthcam/topic"); > width_ = config->get_float("/gazsim/depthcam/width"); > height_ = config->get_float("/gazsim/depthcam/height"); > frame_ = config->get_string("/gazsim/depthcam/frame"); > pcl_id_ = config->get_string("/gazsim/depthcam/pointcloud-id"); > > depthcam_sub_ = > gazebo_world_node->Subscribe(topic_name_, &DepthcamSimThread::on_depthcam_data_msg, this); > > //create pointcloud: > pcl_ = new pcl::PointCloud<pcl::PointXYZ>(); > pcl_->is_dense = false; > pcl_->width = width_; > pcl_->height = height_; > pcl_->points.resize((size_t)width_ * (size_t)height_); > pcl_->header.frame_id = frame_; 68c70 < pcl_manager->add_pointcloud(pcl_id_.c_str(), pcl_); --- > pcl_manager->add_pointcloud(pcl_id_.c_str(), pcl_); 71c73,74 < void DepthcamSimThread::finalize() --- > void > DepthcamSimThread::finalize() 73c76 < pcl_manager->remove_pointcloud(pcl_id_.c_str()); --- > pcl_manager->remove_pointcloud(pcl_id_.c_str()); 76c79,80 < void DepthcamSimThread::loop() --- > void > DepthcamSimThread::loop() 78c82 < //The interesting stuff happens in the callback of the depthcam --- > //The interesting stuff happens in the callback of the depthcam 81,104c85,109 < void DepthcamSimThread::on_depthcam_data_msg(ConstPointCloudPtr &msg) < { < // logger->log_info(name(), "Got Point Cloud!"); < < //only write when pcl is used < // if (pcl_.use_count() > 1) < // { < fawkes::Time capture_time = clock->now(); < < pcl::PointCloud<pcl::PointXYZ> &pcl = **pcl_; < pcl.header.seq += 1; < pcl_utils::set_time(pcl_, capture_time); < < //insert or update points in pointcloud < unsigned int idx = 0; < for (unsigned int h = 0; h < height_; ++h) { < for (unsigned int w = 0; w < width_; ++w, ++idx) { < // Fill in XYZ < pcl.points[idx].x = msg->points(idx).z(); < pcl.points[idx].y = -msg->points(idx).x(); < pcl.points[idx].z = msg->points(idx).y(); < } < } < // } --- > void > DepthcamSimThread::on_depthcam_data_msg(ConstPointCloudPtr &msg) > { > // logger->log_info(name(), "Got Point Cloud!"); > > //only write when pcl is used > // if (pcl_.use_count() > 1) > // { > fawkes::Time capture_time = clock->now(); > > pcl::PointCloud<pcl::PointXYZ> &pcl = **pcl_; > pcl.header.seq += 1; > pcl_utils::set_time(pcl_, capture_time); > > //insert or update points in pointcloud > unsigned int idx = 0; > for (unsigned int h = 0; h < height_; ++h) { > for (unsigned int w = 0; w < width_; ++w, ++idx) { > // Fill in XYZ > pcl.points[idx].x = msg->points(idx).z(); > pcl.points[idx].y = -msg->points(idx).x(); > pcl.points[idx].z = msg->points(idx).y(); > } > } > // } diff -r fawkes-robotino/fawkes/src/plugins/gazebo/gazsim-depthcam/gazsim_depthcam_thread.h fawkes-robotino-2016/fawkes/src/plugins/gazebo/gazsim-depthcam/gazsim_depthcam_thread.h 22,23c22,23 < #ifndef __PLUGINS_GAZSIM_DEPTHCAM_THREAD_H_ < #define __PLUGINS_GAZSIM_DEPTHCAM_THREAD_H_ --- > #ifndef _PLUGINS_GAZSIM_DEPTHCAM_THREAD_H_ > #define _PLUGINS_GAZSIM_DEPTHCAM_THREAD_H_ 25c25,26 < #include <core/threading/thread.h> --- > #include <aspect/blackboard.h> > #include <aspect/blocked_timing.h> 29,33d29 < #include <aspect/blackboard.h> < #include <aspect/blocked_timing.h> < #include <plugins/gazebo/aspect/gazebo.h> < #include <string.h> < 34a31 > #include <core/threading/thread.h> 36a34 > #include <plugins/gazebo/aspect/gazebo.h> 37a36 > #include <string.h> 40d38 < #include <gazebo/transport/TransportTypes.hh> 41a40 > #include <gazebo/transport/TransportTypes.hh> 44,52c43,50 < class DepthcamSimThread < : public fawkes::Thread, < public fawkes::ClockAspect, < public fawkes::LoggingAspect, < public fawkes::ConfigurableAspect, < public fawkes::BlackBoardAspect, < public fawkes::BlockedTimingAspect, < public fawkes::GazeboAspect, < public fawkes::PointCloudAspect --- > class DepthcamSimThread : public fawkes::Thread, > public fawkes::ClockAspect, > public fawkes::LoggingAspect, > public fawkes::ConfigurableAspect, > public fawkes::BlackBoardAspect, > public fawkes::BlockedTimingAspect, > public fawkes::GazeboAspect, > public fawkes::PointCloudAspect 54,55c52,53 < public: < DepthcamSimThread(); --- > public: > DepthcamSimThread(); 57,75c55,73 < virtual void init(); < virtual void loop(); < virtual void finalize(); < < private: < gazebo::transport::SubscriberPtr depthcam_sub_; < < //handler function for incoming depthcam data messages < void on_depthcam_data_msg(ConstPointCloudPtr &msg); < < //config values < //topic name of the gazebo message publisher < std::string topic_name_; < unsigned int width_; < unsigned int height_; < //id of the shared memory object < std::string shm_id_; < std::string frame_; < std::string pcl_id_; --- > virtual void init(); > virtual void loop(); > virtual void finalize(); > > private: > gazebo::transport::SubscriberPtr depthcam_sub_; > > //handler function for incoming depthcam data messages > void on_depthcam_data_msg(ConstPointCloudPtr &msg); > > //config values > //topic name of the gazebo message publisher > std::string topic_name_; > unsigned int width_; > unsigned int height_; > //id of the shared memory object > std::string shm_id_; > std::string frame_; > std::string pcl_id_; 77c75 < fawkes::RefPtr<pcl::PointCloud<pcl::PointXYZ> > pcl_; --- > fawkes::RefPtr<pcl::PointCloud<pcl::PointXYZ>> pcl_; diff -r fawkes-robotino/fawkes/src/plugins/gazebo/gazsim-depthcam/Makefile fawkes-robotino-2016/fawkes/src/plugins/gazebo/gazsim-depthcam/Makefile 26,28c26,28 < LIBS_gazsim_depthcam = fawkescore fawkesutils fawkesaspects fvutils \ < fawkestf fawkesinterface fawkesblackboard \ < fawkesgazeboaspect --- > LIBS_gazsim_depthcam = m fawkescore fawkesutils fawkesaspects fvutils \ > fawkestf fawkesinterface fawkesblackboard \ > fawkesgazeboaspect 31a32 > PLUGINS_all = $(PLUGINDIR)/gazsim-depthcam.so 37c38,39 < LDFLAGS += $(LDFLAGS_GAZEBO) $(LDFLAGS_PROTOBUF) $(LDFLAGS_PCL) -lm $(call boost-libs-ldflags,system) -lboost_system --- > LDFLAGS += $(LDFLAGS_GAZEBO) $(LDFLAGS_PROTOBUF) $(LDFLAGS_PCL) \ > $(call boost-libs-ldflags,system) 39c41 < PLUGINS_all = $(PLUGINDIR)/gazsim-depthcam.so --- > PLUGINS_build = $(PLUGINS_all) diff -r fawkes-robotino/fawkes/src/plugins/gazebo/gazsim-laser/gazsim_laser_plugin.cpp fawkes-robotino-2016/fawkes/src/plugins/gazebo/gazsim-laser/gazsim_laser_plugin.cpp 21,22d20 < #include <core/plugin.h> < 24a23,24 > #include <core/plugin.h> > 34,36c34,35 < public: < < /** Constructor. --- > public: > /** Constructor. 39,43c38,41 < GazsimLaserPlugin(Configuration *config) < : Plugin(config) < { < thread_list.push_back(new LaserSimThread()); < } --- > explicit GazsimLaserPlugin(Configuration *config) : Plugin(config) > { > thread_list.push_back(new LaserSimThread()); > } diff -r fawkes-robotino/fawkes/src/plugins/gazebo/gazsim-laser/gazsim_laser_thread.cpp fawkes-robotino-2016/fawkes/src/plugins/gazebo/gazsim-laser/gazsim_laser_thread.cpp 24,25c24 < #include <tf/types.h> < #include <utils/math/angle.h> --- > #include <aspect/logging.h> 27d25 < 28a27,28 > #include <tf/types.h> > #include <utils/math/angle.h> 30c30,31 < #include <gazebo/transport/Node.hh> --- > #include <cmath> > #include <cstdio> 31a33 > #include <gazebo/transport/Node.hh> 33,36d34 < #include <aspect/logging.h> < < #include <cstdio> < #include <cmath> 48,49c46,47 < : Thread("LaserSimThread", Thread::OPMODE_WAITFORWAKEUP), < BlockedTimingAspect(BlockedTimingAspect::WAKEUP_HOOK_SENSOR_PROCESS) --- > : Thread("LaserSimThread", Thread::OPMODE_WAITFORWAKEUP), > BlockedTimingAspect(BlockedTimingAspect::WAKEUP_HOOK_SENSOR_PROCESS) 53c51,52 < void LaserSimThread::init() --- > void > LaserSimThread::init() 55c54 < logger->log_debug(name(), "Initializing Simulation of the Laser Sensor"); --- > logger->log_debug(name(), "Initializing Simulation of the Laser Sensor"); 57,73c56,72 < //read config values < max_range_ = config->get_float("/gazsim/laser/max_range"); < laser_topic_ = config->get_string("/gazsim/topics/laser"); < interface_id_ = config->get_string("/gazsim/laser/interface-id"); < frame_id_ = config->get_string("/gazsim/laser/frame-id"); < < //open interface < laser_if_ = blackboard->open_for_writing<Laser360Interface>(interface_id_.c_str()); < laser_if_->set_auto_timestamping(false); < < //subscribing to gazebo publisher < laser_sub_ = gazebonode->Subscribe(laser_topic_, &LaserSimThread::on_laser_data_msg, this); < < //initialize laser data < laser_data_ = (float *)malloc(sizeof(float) * 360); < laser_time_ = new Time(clock); < new_data_ = false; --- > //read config values > max_range_ = config->get_float("/gazsim/laser/max_range"); > laser_topic_ = config->get_string("/gazsim/topics/laser"); > interface_id_ = config->get_string("/gazsim/laser/interface-id"); > frame_id_ = config->get_string("/gazsim/laser/frame-id"); > > //open interface > laser_if_ = blackboard->open_for_writing<Laser360Interface>(interface_id_.c_str()); > laser_if_->set_auto_timestamping(false); > > //subscribing to gazebo publisher > laser_sub_ = gazebonode->Subscribe(laser_topic_, &LaserSimThread::on_laser_data_msg, this); > > //initialize laser data > laser_data_ = (float *)malloc(sizeof(float) * 360); > laser_time_ = new Time(clock); > new_data_ = false; 75,76c74,75 < //set frame in the interface < laser_if_->set_frame(frame_id_.c_str()); --- > //set frame in the interface > laser_if_->set_frame(frame_id_.c_str()); 79c78,79 < void LaserSimThread::finalize() --- > void > LaserSimThread::finalize() 81,83c81,83 < blackboard->close(laser_if_); < free(laser_data_); < delete laser_time_; --- > blackboard->close(laser_if_); > free(laser_data_); > delete laser_time_; 86c86,87 < void LaserSimThread::loop() --- > void > LaserSimThread::loop() 88,93c89,93 < if(new_data_) < { < //write interface < laser_if_->set_distances(laser_data_); < laser_if_->set_timestamp(laser_time_); < laser_if_->write(); --- > if (new_data_) { > //write interface > laser_if_->set_distances(laser_data_); > laser_if_->set_timestamp(laser_time_); > laser_if_->write(); 95,96c95,96 < new_data_ = false; < } --- > new_data_ = false; > } 99c99,100 < void LaserSimThread::on_laser_data_msg(ConstLaserScanStampedPtr &msg) --- > void > LaserSimThread::on_laser_data_msg(ConstLaserScanStampedPtr &msg) 101c102,106 < //logger->log_info(name(), "Got new Laser data.\n"); --- > //logger->log_info(name(), "Got new Laser data.\n"); > > MutexLocker lock(loop_mutex); > > const gazebo::msgs::LaserScan &scan = msg->scan(); 103c108,109 < MutexLocker lock(loop_mutex); --- > //calculate start angle > int start_index = (scan.angle_min() + 2 * M_PI) / M_PI * 180; 105c111 < const gazebo::msgs::LaserScan &scan = msg->scan(); --- > int number_beams = scan.ranges_size(); 107,125c113 < //calculate start angle < int start_index = (scan.angle_min() + 2* M_PI) / M_PI * 180; < < int number_beams = scan.ranges_size(); < < *laser_time_ = clock->now(); < < //copy laser data < for(int i = 0; i < number_beams; i++) < { < const float range = scan.ranges(i); < if(range < max_range_) < { < laser_data_[(start_index + i) % 360] = range; < } < else < { < laser_data_[(start_index + i) % 360] = NAN; < } --- > *laser_time_ = clock->now(); 127,128c115,124 < } < new_data_ = true; --- > //copy laser data > for (int i = 0; i < number_beams; i++) { > const float range = scan.ranges(i); > if (range < max_range_) { > laser_data_[(start_index + i) % 360] = range; > } else { > laser_data_[(start_index + i) % 360] = NAN; > } > } > new_data_ = true; diff -r fawkes-robotino/fawkes/src/plugins/gazebo/gazsim-laser/gazsim_laser_thread.h fawkes-robotino-2016/fawkes/src/plugins/gazebo/gazsim-laser/gazsim_laser_thread.h 21,22c21,22 < #ifndef __PLUGINS_GAZSIM_LASER_THREAD_H_ < #define __PLUGINS_GAZSIM_LASER_THREAD_H_ --- > #ifndef _PLUGINS_GAZSIM_LASER_THREAD_H_ > #define _PLUGINS_GAZSIM_LASER_THREAD_H_ 24c24,25 < #include <core/threading/thread.h> --- > #include <aspect/blackboard.h> > #include <aspect/blocked_timing.h> 28,29c29 < #include <aspect/blackboard.h> < #include <aspect/blocked_timing.h> --- > #include <core/threading/thread.h> 33d32 < #include <gazebo/transport/TransportTypes.hh> 34a34 > #include <gazebo/transport/TransportTypes.hh> 37d36 < 39,50c38,48 < class Laser360Interface; < class Time; < } < < class LaserSimThread < : public fawkes::Thread, < public fawkes::ClockAspect, < public fawkes::LoggingAspect, < public fawkes::ConfigurableAspect, < public fawkes::BlackBoardAspect, < public fawkes::BlockedTimingAspect, < public fawkes::GazeboAspect --- > class Laser360Interface; > class Time; > } // namespace fawkes > > class LaserSimThread : public fawkes::Thread, > public fawkes::ClockAspect, > public fawkes::LoggingAspect, > public fawkes::ConfigurableAspect, > public fawkes::BlackBoardAspect, > public fawkes::BlockedTimingAspect, > public fawkes::GazeboAspect 52,53c50,51 < public: < LaserSimThread(); --- > public: > LaserSimThread(); 55,57c53,55 < virtual void init(); < virtual void loop(); < virtual void finalize(); --- > virtual void init(); > virtual void loop(); > virtual void finalize(); 59,62c57,60 < private: < ///Subscriber to receive laser data from gazebo < gazebo::transport::SubscriberPtr laser_sub_; < std::string laser_topic_; --- > private: > ///Subscriber to receive laser data from gazebo > gazebo::transport::SubscriberPtr laser_sub_; > std::string laser_topic_; 64,65c62,63 < ///provided interface < fawkes::Laser360Interface *laser_if_; --- > ///provided interface > fawkes::Laser360Interface *laser_if_; 67,69c65,67 < ///storage for laser data < float *laser_data_; < fawkes::Time *laser_time_; --- > ///storage for laser data > float * laser_data_; > fawkes::Time *laser_time_; 71,72c69,70 < ///is there new information to write in the interface? < bool new_data_; --- > ///is there new information to write in the interface? > bool new_data_; 74,75c72,73 < ///handler function for incoming laser data messages < void on_laser_data_msg(ConstLaserScanStampedPtr &msg); --- > ///handler function for incoming laser data messages > void on_laser_data_msg(ConstLaserScanStampedPtr &msg); 77,78c75,76 < ///maximal range of the laser sensor < float max_range_; --- > ///maximal range of the laser sensor > float max_range_; 80,81c78,79 < std::string interface_id_; < std::string frame_id_; --- > std::string interface_id_; > std::string frame_id_; diff -r fawkes-robotino/fawkes/src/plugins/gazebo/gazsim-laser/Makefile fawkes-robotino-2016/fawkes/src/plugins/gazebo/gazsim-laser/Makefile 31a32 > PLUGINS_all = $(PLUGINDIR)/gazsim-laser.so 39c40 < PLUGINS_all = $(PLUGINDIR)/gazsim-laser.so --- > PLUGINS_build = $(PLUGINS_all) diff -r fawkes-robotino/fawkes/src/plugins/gazebo/gazsim-localization/gazebo-plugin/gps.cpp fawkes-robotino-2016/fawkes/src/plugins/gazebo/gazsim-localization/gazebo-plugin/gps.cpp 21,22d20 < #include <math.h> < 24a23,26 > #include <utils/misc/gazebo_api_wrappers.h> > > #include <math.h> > 37c39 < printf("Destructing Gps Plugin!\n"); --- > printf("Destructing Gps Plugin!\n"); 43c45,46 < void Gps::Load(physics::ModelPtr _parent, sdf::ElementPtr /*_sdf*/) --- > void > Gps::Load(physics::ModelPtr _parent, sdf::ElementPtr /*_sdf*/) 45,46c48,49 < // Store the pointer to the model < this->model_ = _parent; --- > // Store the pointer to the model > this->model_ = _parent; 48,50c51,65 < //get the model-name < this->name_ = model_->GetName(); < printf("Loading Gps Plugin of model %s\n", name_.c_str()); --- > //get the model-name > this->name_ = model_->GetName(); > printf("Loading Gps Plugin of model %s\n", name_.c_str()); > > // Listen to the update event. This event is broadcast every > // simulation iteration. > this->update_connection_ = > event::Events::ConnectWorldUpdateBegin(boost::bind(&Gps::OnUpdate, this, _1)); > > //Create the communication Node for communication with fawkes > this->node_ = transport::NodePtr(new transport::Node()); > > //set namespace to the model name & init last sent time > this->node_->Init(model_->GetWorld()->GZWRAP_NAME() + "/" + name_); > last_sent_time_ = model_->GetWorld()->GZWRAP_SIM_TIME().Double(); 52,65c67,68 < // Listen to the update event. This event is broadcast every < // simulation iteration. < this->update_connection_ = event::Events::ConnectWorldUpdateBegin(boost::bind(&Gps::OnUpdate, this, _1)); < < //Create the communication Node for communication with fawkes < this->node_ = transport::NodePtr(new transport::Node()); < //the namespace is set to the model name! < this->node_->Init(model_->GetWorld()->GetName()+"/"+name_); < < //init last sent time < last_sent_time_ = model_->GetWorld()->GetSimTime().Double(); < < //create publisher < this->gps_pub_ = this->node_->Advertise<msgs::Pose>("~/gazsim/gps/"); --- > //create publisher > this->gps_pub_ = this->node_->Advertise<msgs::Pose>("~/gazsim/gps/"); 68d70 < 71c73,74 < void Gps::OnUpdate(const common::UpdateInfo & /*_info*/) --- > void > Gps::OnUpdate(const common::UpdateInfo & /*_info*/) 73,79c76,82 < //Send position information to Fawkes < double time = model_->GetWorld()->GetSimTime().Double(); < if(time - last_sent_time_ > (1.0 / 10.0)) < { < last_sent_time_ = time; < send_position(); < } --- > //Send position information to Fawkes > double time = model_->GetWorld()->GZWRAP_SIM_TIME().Double(); > > if (time - last_sent_time_ > (1.0 / 10.0)) { > last_sent_time_ = time; > send_position(); > } 84c87,88 < void Gps::Reset() --- > void > Gps::Reset() 91c95,96 < void Gps::send_position() --- > void > Gps::send_position() 93,107c98,111 < if(gps_pub_->HasConnections()) < { < //build message < msgs::Pose posMsg; < posMsg.mutable_position()->set_x(this->model_->GetWorldPose().pos.x); < posMsg.mutable_position()->set_y(this->model_->GetWorldPose().pos.y); < posMsg.mutable_position()->set_z(this->model_->GetWorldPose().pos.z); < posMsg.mutable_orientation()->set_x(this->model_->GetWorldPose().rot.x); < posMsg.mutable_orientation()->set_y(this->model_->GetWorldPose().rot.y); < posMsg.mutable_orientation()->set_z(this->model_->GetWorldPose().rot.z); < posMsg.mutable_orientation()->set_w(this->model_->GetWorldPose().rot.w); < < //send < gps_pub_->Publish(posMsg); < } --- > if (gps_pub_->HasConnections()) { > //build message > msgs::Pose posMsg; > posMsg.mutable_position()->set_x(this->model_->GZWRAP_WORLD_POSE().GZWRAP_POS_X); > posMsg.mutable_position()->set_y(this->model_->GZWRAP_WORLD_POSE().GZWRAP_POS_Y); > posMsg.mutable_position()->set_z(this->model_->GZWRAP_WORLD_POSE().GZWRAP_POS_Z); > posMsg.mutable_orientation()->set_x(this->model_->GZWRAP_WORLD_POSE().GZWRAP_ROT_X); > posMsg.mutable_orientation()->set_y(this->model_->GZWRAP_WORLD_POSE().GZWRAP_ROT_Y); > posMsg.mutable_orientation()->set_z(this->model_->GZWRAP_WORLD_POSE().GZWRAP_ROT_Z); > posMsg.mutable_orientation()->set_w(this->model_->GZWRAP_WORLD_POSE().GZWRAP_ROT_W); > > //send > gps_pub_->Publish(posMsg); > } diff -r fawkes-robotino/fawkes/src/plugins/gazebo/gazsim-localization/gazebo-plugin/gps.h fawkes-robotino-2016/fawkes/src/plugins/gazebo/gazsim-localization/gazebo-plugin/gps.h 21a22 > #include <gazebo/common/common.hh> 24,25d24 < #include <gazebo/common/common.hh> < #include <stdio.h> 27a27 > #include <stdio.h> 30,32c30,31 < namespace gazebo < { < /** --- > namespace gazebo { > /** 36,67c35,66 < class Gps : public ModelPlugin < { < public: < Gps(); < ~Gps(); < < //Overridden ModelPlugin-Functions < virtual void Load(physics::ModelPtr _parent, sdf::ElementPtr /*_sdf*/); < virtual void OnUpdate(const common::UpdateInfo &); < virtual void Reset(); < < private: < /// Pointer to the gazbeo model < physics::ModelPtr model_; < /// Pointer to the update event connection < event::ConnectionPtr update_connection_; < ///Node for communication to fawkes < transport::NodePtr node_; < ///name of the gps and the communication channel < std::string name_; < < ///time variable to send in intervals < double last_sent_time_; < < //Gps Stuff: < ///Functions for sending information to fawkes: < void send_position(); < < ///Publisher for GyroAngle < transport::PublisherPtr gps_pub_; < }; < } --- > class Gps : public ModelPlugin > { > public: > Gps(); > ~Gps(); > > //Overridden ModelPlugin-Functions > virtual void Load(physics::ModelPtr _parent, sdf::ElementPtr /*_sdf*/); > virtual void OnUpdate(const common::UpdateInfo &); > virtual void Reset(); > > private: > /// Pointer to the gazbeo model > physics::ModelPtr model_; > /// Pointer to the update event connection > event::ConnectionPtr update_connection_; > ///Node for communication to fawkes > transport::NodePtr node_; > ///name of the gps and the communication channel > std::string name_; > > ///time variable to send in intervals > double last_sent_time_; > > //Gps Stuff: > ///Functions for sending information to fawkes: > void send_position(); > > ///Publisher for GyroAngle > transport::PublisherPtr gps_pub_; > }; > } // namespace gazebo diff -r fawkes-robotino/fawkes/src/plugins/gazebo/gazsim-localization/gazebo-plugin/Makefile fawkes-robotino-2016/fawkes/src/plugins/gazebo/gazsim-localization/gazebo-plugin/Makefile 26c26 < LIBS_gazebo_libgps = gazsim_msgs --- > LIBS_gazebo_libgps = m gazsim_msgs 32c32,33 < OBJS_all = $(OBJS_gazebo_libgps) --- > OBJS_all = $(OBJS_gazebo_libgps) > LIBS_all = $(LIBDIR)/gazebo/libgps.so 36c37,38 < LDFLAGS += $(LDFLAGS_GAZEBO) $(LDFLAGS_PROTOBUF) -lm $(call boost-libs-ldflags,system) -lboost_system --- > LDFLAGS += $(LDFLAGS_GAZEBO) $(LDFLAGS_PROTOBUF) \ > $(call boost-libs-ldflags,system) 38c40 < LIBS_all = $(LIBDIR)/gazebo/libgps.so --- > LIBS_build = $(LIBS_all) diff -r fawkes-robotino/fawkes/src/plugins/gazebo/gazsim-localization/gazsim_localization_plugin.cpp fawkes-robotino-2016/fawkes/src/plugins/gazebo/gazsim-localization/gazsim_localization_plugin.cpp 22,23d21 < #include <core/plugin.h> < 25a24,25 > #include <core/plugin.h> > 35,37c35,36 < public: < < /** Constructor. --- > public: > /** Constructor. 40,44c39,42 < GazsimLocalizationPlugin(Configuration *config) < : Plugin(config) < { < thread_list.push_back(new LocalizationSimThread()); < } --- > explicit GazsimLocalizationPlugin(Configuration *config) : Plugin(config) > { > thread_list.push_back(new LocalizationSimThread()); > } diff -r fawkes-robotino/fawkes/src/plugins/gazebo/gazsim-localization/gazsim_localization_thread.cpp fawkes-robotino-2016/fawkes/src/plugins/gazebo/gazsim-localization/gazsim_localization_thread.cpp 24,27c24 < #include <tf/types.h> < #include <stdio.h> < #include <math.h> < #include <utils/math/angle.h> --- > #include <aspect/logging.h> 29d25 < 30a27,30 > #include <tf/transform_publisher.h> > #include <tf/types.h> > #include <utils/math/angle.h> > #include <utils/time/clock.h> 32d31 < #include <gazebo/transport/Node.hh> 33a33 > #include <gazebo/transport/Node.hh> 35,37c35,36 < #include <aspect/logging.h> < #include <tf/transform_publisher.h> < #include <utils/time/clock.h> --- > #include <math.h> > #include <stdio.h> 49,51c48,50 < : Thread("LocalizationSimThread", Thread::OPMODE_WAITFORWAKEUP), < BlockedTimingAspect(BlockedTimingAspect::WAKEUP_HOOK_SENSOR_PROCESS), < TransformAspect(TransformAspect::BOTH, "Pose") --- > : Thread("LocalizationSimThread", Thread::OPMODE_WAITFORWAKEUP), > BlockedTimingAspect(BlockedTimingAspect::WAKEUP_HOOK_SENSOR_PROCESS), > TransformAspect(TransformAspect::BOTH, "Pose") 55c54,55 < void LocalizationSimThread::init() --- > void > LocalizationSimThread::init() 57,60c57 < logger->log_debug(name(), "Initializing Simulation of the Localization"); < < //open interface < localization_if_ = blackboard->open_for_writing<Position3DInterface>("Pose"); --- > logger->log_debug(name(), "Initializing Simulation of the Localization"); 62,66c59,60 < //read cofig values < gps_topic_ = config->get_string("/gazsim/topics/gps"); < transform_tolerance_ = config->get_float("/plugins/amcl/transform_tolerance"); < global_frame_id_ = config->get_string("/plugins/amcl/global_frame_id"); < odom_frame_id_ = config->get_string("/plugins/amcl/odom_frame_id"); --- > //open interface > localization_if_ = blackboard->open_for_writing<Position3DInterface>("Pose"); 68,69c62,70 < //subscribing to gazebo publisher < localization_sub_ = gazebonode->Subscribe(gps_topic_, &LocalizationSimThread::on_localization_msg, this); --- > //read cofig values > gps_topic_ = config->get_string("/gazsim/topics/gps"); > transform_tolerance_ = config->get_float("/plugins/amcl/transform_tolerance"); > global_frame_id_ = config->get_string("/plugins/amcl/global_frame_id"); > odom_frame_id_ = config->get_string("/plugins/amcl/odom_frame_id"); > > //subscribing to gazebo publisher > localization_sub_ = > gazebonode->Subscribe(gps_topic_, &LocalizationSimThread::on_localization_msg, this); 71c72 < new_data_ = false; --- > new_data_ = false; 74c75,76 < void LocalizationSimThread::finalize() --- > void > LocalizationSimThread::finalize() 76c78 < blackboard->close(localization_if_); --- > blackboard->close(localization_if_); 79c81,82 < void LocalizationSimThread::loop() --- > void > LocalizationSimThread::loop() 81,102c84,105 < if(new_data_) < { < //write interface < localization_if_->set_frame(global_frame_id_.c_str()); < localization_if_->set_visibility_history(100); < localization_if_->set_translation(0, x_); < localization_if_->set_translation(1, y_); < localization_if_->set_translation(2, z_); < localization_if_->set_rotation(0, quat_x_); < localization_if_->set_rotation(1, quat_y_); < localization_if_->set_rotation(2, quat_z_); < localization_if_->set_rotation(3, quat_w_); < localization_if_->write(); < < //publish transform (similar as in amcl_thread.cpp) < tf::Quaternion rotation = tf::Quaternion(quat_x_, quat_y_, quat_z_, quat_w_); < tf::Point position = tf::Point(x_, y_, z_); < tf::Transform latest_tf_ = tf::Transform(rotation,position); < Time transform_expiration = < (clock->now() + transform_tolerance_); < tf_publisher->send_transform(latest_tf_, transform_expiration, < global_frame_id_, odom_frame_id_); --- > if (new_data_) { > //write interface > localization_if_->set_frame(global_frame_id_.c_str()); > localization_if_->set_visibility_history(100); > localization_if_->set_translation(0, x_); > localization_if_->set_translation(1, y_); > localization_if_->set_translation(2, z_); > localization_if_->set_rotation(0, quat_x_); > localization_if_->set_rotation(1, quat_y_); > localization_if_->set_rotation(2, quat_z_); > localization_if_->set_rotation(3, quat_w_); > localization_if_->write(); > > //publish transform (similar as in amcl_thread.cpp) > tf::Quaternion rotation = tf::Quaternion(quat_x_, quat_y_, quat_z_, quat_w_); > tf::Point position = tf::Point(x_, y_, z_); > tf::Transform latest_tf_ = tf::Transform(rotation, position); > Time transform_expiration = (clock->now() + transform_tolerance_); > tf_publisher->send_transform(latest_tf_, > transform_expiration, > global_frame_id_, > odom_frame_id_); 104,105c107,108 < new_data_ = false; < } --- > new_data_ = false; > } 108c111,112 < void LocalizationSimThread::on_localization_msg(ConstPosePtr &msg) --- > void > LocalizationSimThread::on_localization_msg(ConstPosePtr &msg) 110,123c114,127 < //logger->log_info(name(), "Got new Localization data.\n"); < < MutexLocker lock(loop_mutex); < < //read data from message < x_ = msg->position().x(); < y_ = msg->position().y(); < z_ = msg->position().z(); < quat_x_ = msg->orientation().x(); < quat_y_ = msg->orientation().y(); < quat_z_ = msg->orientation().z(); < quat_w_ = msg->orientation().w(); < < new_data_ = true; --- > //logger->log_info(name(), "Got new Localization data.\n"); > > MutexLocker lock(loop_mutex); > > //read data from message > x_ = msg->position().x(); > y_ = msg->position().y(); > z_ = msg->position().z(); > quat_x_ = msg->orientation().x(); > quat_y_ = msg->orientation().y(); > quat_z_ = msg->orientation().z(); > quat_w_ = msg->orientation().w(); > > new_data_ = true; diff -r fawkes-robotino/fawkes/src/plugins/gazebo/gazsim-localization/gazsim_localization_thread.h fawkes-robotino-2016/fawkes/src/plugins/gazebo/gazsim-localization/gazsim_localization_thread.h 22,23c22,23 < #ifndef __PLUGINS_GAZSIM_LOCALIZATION_THREAD_H_ < #define __PLUGINS_GAZSIM_LOCALIZATION_THREAD_H_ --- > #ifndef _PLUGINS_GAZSIM_LOCALIZATION_THREAD_H_ > #define _PLUGINS_GAZSIM_LOCALIZATION_THREAD_H_ 25c25,26 < #include <core/threading/thread.h> --- > #include <aspect/blackboard.h> > #include <aspect/blocked_timing.h> 29,30d29 < #include <aspect/blackboard.h> < #include <aspect/blocked_timing.h> 31a31 > #include <core/threading/thread.h> 35d34 < #include <gazebo/transport/TransportTypes.hh> 36a36 > #include <gazebo/transport/TransportTypes.hh> 39d38 < 41c40 < class Position3DInterface; --- > class Position3DInterface; 44,52c43,50 < class LocalizationSimThread < : public fawkes::Thread, < public fawkes::ClockAspect, < public fawkes::LoggingAspect, < public fawkes::ConfigurableAspect, < public fawkes::BlackBoardAspect, < public fawkes::BlockedTimingAspect, < public fawkes::GazeboAspect, < public fawkes::TransformAspect --- > class LocalizationSimThread : public fawkes::Thread, > public fawkes::ClockAspect, > public fawkes::LoggingAspect, > public fawkes::ConfigurableAspect, > public fawkes::BlackBoardAspect, > public fawkes::BlockedTimingAspect, > public fawkes::GazeboAspect, > public fawkes::TransformAspect 54,55c52,53 < public: < LocalizationSimThread(); --- > public: > LocalizationSimThread(); 57,89c55,87 < virtual void init(); < virtual void loop(); < virtual void finalize(); < < private: < //Subscriber to receive localization data from gazebo < gazebo::transport::SubscriberPtr localization_sub_; < std::string gps_topic_; < < //provided interface < fawkes::Position3DInterface *localization_if_; < < //handler function for incoming localization data messages < void on_localization_msg(ConstPosePtr &msg); < < //is there new information to write in the interface? < bool new_data_; < < //localization data < double x_; < double y_; < double z_; < double quat_x_; < double quat_y_; < double quat_z_; < double quat_w_; < < //time the transform should be up to date < double transform_tolerance_; < < //frame ids for transform < std::string odom_frame_id_; < std::string global_frame_id_; --- > virtual void init(); > virtual void loop(); > virtual void finalize(); > > private: > //Subscriber to receive localization data from gazebo > gazebo::transport::SubscriberPtr localization_sub_; > std::string gps_topic_; > > //provided interface > fawkes::Position3DInterface *localization_if_; > > //handler function for incoming localization data messages > void on_localization_msg(ConstPosePtr &msg); > > //is there new information to write in the interface? > bool new_data_; > > //localization data > double x_; > double y_; > double z_; > double quat_x_; > double quat_y_; > double quat_z_; > double quat_w_; > > //time the transform should be up to date > double transform_tolerance_; > > //frame ids for transform > std::string odom_frame_id_; > std::string global_frame_id_; diff -r fawkes-robotino/fawkes/src/plugins/gazebo/gazsim-localization/Makefile fawkes-robotino-2016/fawkes/src/plugins/gazebo/gazsim-localization/Makefile 33a34 > PLUGINS_all = $(PLUGINDIR)/gazsim-localization.so 41c42 < PLUGINS_all = $(PLUGINDIR)/gazsim-localization.so --- > PLUGINS_build = $(PLUGINS_all) diff -r fawkes-robotino/fawkes/src/plugins/gazebo/gazsim-robotino/gazebo-plugin-gyro/gyro.cpp fawkes-robotino-2016/fawkes/src/plugins/gazebo/gazsim-robotino/gazebo-plugin-gyro/gyro.cpp 21,22d20 < #include <math.h> < 24a23,26 > #include <utils/misc/gazebo_api_wrappers.h> > > #include <math.h> > 30c32 < Gyro::Gyro() --- > Gyro::Gyro() : last_sent_time_(0.0), send_interval_(0.0) 36c38 < printf("Destructing Gyro Plugin!\n"); --- > printf("Destructing Gyro Plugin!\n"); 42c44,45 < void Gyro::Load(physics::ModelPtr _parent, sdf::ElementPtr /*_sdf*/) --- > void > Gyro::Load(physics::ModelPtr _parent, sdf::ElementPtr /*_sdf*/) 44,62c47,48 < // Store the pointer to the model < this->model_ = _parent; < < //get the model-name < this->name_ = model_->GetName(); < printf("Loading Gyro Plugin of model %s\n", name_.c_str()); < < // Listen to the update event. This event is broadcast every < // simulation iteration. < this->update_connection_ = event::Events::ConnectWorldUpdateBegin(boost::bind(&Gyro::OnUpdate, this, _1)); < < //Create the communication Node for communication with fawkes < this->node_ = transport::NodePtr(new transport::Node()); < //the namespace is set to the model name! < this->node_->Init(model_->GetWorld()->GetName()+"/"+name_); < < < //create publisher < this->gyro_pub_ = this->node_->Advertise<msgs::Vector3d>("~/RobotinoSim/Gyro/"); --- > // Store the pointer to the model > this->model_ = _parent; 64,66c50,69 < //init last sent time < last_sent_time_ = model_->GetWorld()->GetSimTime().Double(); < this->send_interval_ = 0.05; --- > //get the model-name > this->name_ = model_->GetName(); > printf("Loading Gyro Plugin of model %s\n", name_.c_str()); > > // Listen to the update event. This event is broadcast every > // simulation iteration. > this->update_connection_ = > event::Events::ConnectWorldUpdateBegin(boost::bind(&Gyro::OnUpdate, this, _1)); > > //Create the communication Node for communication with fawkes > this->node_ = transport::NodePtr(new transport::Node()); > //the namespace is set to the model name! > this->node_->Init(model_->GetWorld()->GZWRAP_NAME() + "/" + name_); > > //create publisher > this->gyro_pub_ = this->node_->Advertise<msgs::Vector3d>("~/RobotinoSim/Gyro/"); > > //init last sent time > last_sent_time_ = model_->GetWorld()->GZWRAP_SIM_TIME().Double(); > this->send_interval_ = 0.05; 71c74,75 < void Gyro::OnUpdate(const common::UpdateInfo & /*_info*/) --- > void > Gyro::OnUpdate(const common::UpdateInfo & /*_info*/) 73,79c77,82 < //Send gyro information to Fawkes < double time = model_->GetWorld()->GetSimTime().Double(); < if(time - last_sent_time_ > send_interval_) < { < last_sent_time_ = time; < send_gyro(); < } --- > //Send gyro information to Fawkes > double time = model_->GetWorld()->GZWRAP_SIM_TIME().Double(); > if (time - last_sent_time_ > send_interval_) { > last_sent_time_ = time; > send_gyro(); > } 84c87,88 < void Gyro::Reset() --- > void > Gyro::Reset() 88c92,93 < void Gyro::send_gyro() --- > void > Gyro::send_gyro() 90,105c95,109 < if(gyro_pub_->HasConnections()) < { < //Read gyro from simulation < float roll = this->model_->GetWorldPose().rot.GetAsEuler().x; < float pitch = this->model_->GetWorldPose().rot.GetAsEuler().y; < float yaw = this->model_->GetWorldPose().rot.GetAsEuler().z; < < //build message < msgs::Vector3d gyroMsg; < gyroMsg.set_x(roll); < gyroMsg.set_y(pitch); < gyroMsg.set_z(yaw); < < //send < gyro_pub_->Publish(gyroMsg); < } --- > if (gyro_pub_->HasConnections()) { > //Read gyro from simulation > float roll = this->model_->GZWRAP_WORLD_POSE().GZWRAP_ROT_EULER_X; > float pitch = this->model_->GZWRAP_WORLD_POSE().GZWRAP_ROT_EULER_Y; > float yaw = this->model_->GZWRAP_WORLD_POSE().GZWRAP_ROT_EULER_Z; > > //build message > msgs::Vector3d gyroMsg; > gyroMsg.set_x(roll); > gyroMsg.set_y(pitch); > gyroMsg.set_z(yaw); > > //send > gyro_pub_->Publish(gyroMsg); > } diff -r fawkes-robotino/fawkes/src/plugins/gazebo/gazsim-robotino/gazebo-plugin-gyro/gyro.h fawkes-robotino-2016/fawkes/src/plugins/gazebo/gazsim-robotino/gazebo-plugin-gyro/gyro.h 21a22 > #include <gazebo/common/common.hh> 24,25d24 < #include <gazebo/common/common.hh> < #include <stdio.h> 27a27 > #include <stdio.h> 30,32c30,31 < namespace gazebo < { < /** @class Gyro --- > namespace gazebo { > /** @class Gyro 36,74c35,72 < class Gyro : public ModelPlugin < { < public: < ///Constructor < Gyro(); < < ///Destructor < ~Gyro(); < < //Overridden ModelPlugin-Functions < virtual void Load(physics::ModelPtr _parent, sdf::ElementPtr /*_sdf*/); < virtual void OnUpdate(const common::UpdateInfo &); < virtual void Reset(); < < private: < /// Pointer to the model < physics::ModelPtr model_; < /// Pointer to the update event connection < event::ConnectionPtr update_connection_; < ///Node for communication to fawkes < transport::NodePtr node_; < ///name of the gyro and the communication channel < std::string name_; < < ///time variable to send in intervals < double last_sent_time_; < < ///time interval between to gyro msgs < double send_interval_; < < < //Gyro Stuff: < ///Sending Gyro-angle to fawkes: < void send_gyro(); < < ///Publisher for GyroAngle < transport::PublisherPtr gyro_pub_; < }; < } --- > class Gyro : public ModelPlugin > { > public: > ///Constructor > Gyro(); > > ///Destructor > ~Gyro(); > > //Overridden ModelPlugin-Functions > virtual void Load(physics::ModelPtr _parent, sdf::ElementPtr /*_sdf*/); > virtual void OnUpdate(const common::UpdateInfo &); > virtual void Reset(); > > private: > /// Pointer to the model > physics::ModelPtr model_; > /// Pointer to the update event connection > event::ConnectionPtr update_connection_; > ///Node for communication to fawkes > transport::NodePtr node_; > ///name of the gyro and the communication channel > std::string name_; > > ///time variable to send in intervals > double last_sent_time_; > > ///time interval between to gyro msgs > double send_interval_; > > //Gyro Stuff: > ///Sending Gyro-angle to fawkes: > void send_gyro(); > > ///Publisher for GyroAngle > transport::PublisherPtr gyro_pub_; > }; > } // namespace gazebo diff -r fawkes-robotino/fawkes/src/plugins/gazebo/gazsim-robotino/gazebo-plugin-gyro/Makefile fawkes-robotino-2016/fawkes/src/plugins/gazebo/gazsim-robotino/gazebo-plugin-gyro/Makefile 26c26 < LIBS_gazebo_libgyro = gazsim_msgs --- > LIBS_gazebo_libgyro = m gazsim_msgs 32c32,33 < OBJS_all = $(OBJS_gazebo_libgyro) --- > OBJS_all = $(OBJS_gazebo_libgyro) > LIBS_all = $(LIBDIR)/gazebo/libgyro.so 36c37,38 < LDFLAGS += $(LDFLAGS_GAZEBO) $(LDFLAGS_PROTOBUF) -lm $(call boost-libs-ldflags,system) -lboost_system --- > LDFLAGS += $(LDFLAGS_GAZEBO) $(LDFLAGS_PROTOBUF) \ > $(call boost-libs-ldflags,system) 38c40 < LIBS_all = $(LIBDIR)/gazebo/libgyro.so --- > LIBS_build = $(LIBS_all) diff -r fawkes-robotino/fawkes/src/plugins/gazebo/gazsim-robotino/gazebo-plugin-motor/Makefile fawkes-robotino-2016/fawkes/src/plugins/gazebo/gazsim-robotino/gazebo-plugin-motor/Makefile 26c26 < LIBS_gazebo_libmotor = gazsim_msgs --- > LIBS_gazebo_libmotor = m gazsim_msgs 32c32,33 < OBJS_all = $(OBJS_gazebo_libmotor) --- > OBJS_all = $(OBJS_gazebo_libmotor) > LIBS_all = $(LIBDIR)/gazebo/libmotor.so 36c37,38 < LDFLAGS += $(LDFLAGS_GAZEBO) $(LDFLAGS_PROTOBUF) -lm $(call boost-libs-ldflags,system) -lboost_system --- > LDFLAGS += $(LDFLAGS_GAZEBO) $(LDFLAGS_PROTOBUF) \ > $(call boost-libs-ldflags,system) 38c40 < LIBS_all = $(LIBDIR)/gazebo/libmotor.so --- > LIBS_build = $(LIBS_all) diff -r fawkes-robotino/fawkes/src/plugins/gazebo/gazsim-robotino/gazebo-plugin-motor/motor.cpp fawkes-robotino-2016/fawkes/src/plugins/gazebo/gazsim-robotino/gazebo-plugin-motor/motor.cpp 21,22d20 < #include <math.h> < 24a23,26 > #include <utils/misc/gazebo_api_wrappers.h> > > #include <math.h> > 30c32 < Motor::Motor() --- > Motor::Motor() : vx_(0), vy_(0), vomega_(0) 36c38 < printf("Destructing Motor Plugin!\n"); --- > printf("Destructing Motor Plugin!\n"); 42c44,45 < void Motor::Load(physics::ModelPtr _parent, sdf::ElementPtr /*_sdf*/) --- > void > Motor::Load(physics::ModelPtr _parent, sdf::ElementPtr /*_sdf*/) 44,49c47,48 < // Store the pointer to the model < this->model_ = _parent; < < //get the model-name < this->name_ = model_->GetName(); < printf("Loading Motor Plugin of model %s\n", name_.c_str()); --- > // Store the pointer to the model > this->model_ = _parent; 51,67c50,72 < // Listen to the update event. This event is broadcast every < // simulation iteration. < this->update_connection_ = event::Events::ConnectWorldUpdateBegin(boost::bind(&Motor::OnUpdate, this, _1)); < < //Create the communication Node for communication with fawkes < this->node_ = transport::NodePtr(new transport::Node()); < //the namespace is set to the model name! < this->node_->Init(model_->GetWorld()->GetName()+"/"+name_); < < < //initialize movement commands: < vx_ = 0.0; < vy_ = 0.0; < vomega_ = 0.0; < < //create subscriber < this->motor_move_sub_ = this->node_->Subscribe(std::string("~/RobotinoSim/MotorMove/"), &Motor::on_motor_move_msg, this); --- > //get the model-name > this->name_ = model_->GetName(); > printf("Loading Motor Plugin of model %s\n", name_.c_str()); > > // Listen to the update event. This event is broadcast every > // simulation iteration. > this->update_connection_ = > event::Events::ConnectWorldUpdateBegin(boost::bind(&Motor::OnUpdate, this, _1)); > > //Create the communication Node for communication with fawkes > this->node_ = transport::NodePtr(new transport::Node()); > //the namespace is set to the model name! > this->node_->Init(model_->GetWorld()->GZWRAP_NAME() + "/" + name_); > > //initialize movement commands: > vx_ = 0.0; > vy_ = 0.0; > vomega_ = 0.0; > > //create subscriber > this->motor_move_sub_ = this->node_->Subscribe(std::string("~/RobotinoSim/MotorMove/"), > &Motor::on_motor_move_msg, > this); 72c77,78 < void Motor::OnUpdate(const common::UpdateInfo & /*_info*/) --- > void > Motor::OnUpdate(const common::UpdateInfo & /*_info*/) 74,85c80,91 < //Apply movement command < float x,y; < float yaw = this->model_->GetWorldPose().rot.GetAsEuler().z; < //foward part < x = cos(yaw) * vx_; < y = sin(yaw) * vx_; < //sideways part < x += cos(yaw + 3.1415926f / 2) * vy_; < y += sin(yaw + 3.1415926f / 2) * vy_; < // Apply velocity to the model. < this->model_->SetLinearVel(math::Vector3(x, y, 0)); < this->model_->SetAngularVel(math::Vector3(0, 0, vomega_)); --- > //Apply movement command > float x, y; > float yaw = this->model_->GZWRAP_WORLD_POSE().GZWRAP_ROT_EULER_Z; > //foward part > x = cos(yaw) * vx_; > y = sin(yaw) * vx_; > //sideways part > x += cos(yaw + 3.1415926f / 2) * vy_; > y += sin(yaw + 3.1415926f / 2) * vy_; > // Apply velocity to the model. > this->model_->SetLinearVel(gzwrap::Vector3d(x, y, 0)); > this->model_->SetAngularVel(gzwrap::Vector3d(0, 0, vomega_)); 90c96,97 < void Motor::Reset() --- > void > Motor::Reset() 96,97c103,105 < */ < void Motor::on_motor_move_msg(ConstVector3dPtr &msg) --- > */ > void > Motor::on_motor_move_msg(ConstVector3dPtr &msg) 99,103c107,111 < //printf("Got MotorMove Msg!!! %f %f %f\n", msg->x(), msg->y(), msg->z()); < //Transform relative motion into ablosulte motion < vx_ = msg->x(); < vy_ = msg->y(); < vomega_ = msg->z(); --- > //printf("Got MotorMove Msg!!! %f %f %f\n", msg->x(), msg->y(), msg->z()); > //Transform relative motion into ablosulte motion > vx_ = msg->x(); > vy_ = msg->y(); > vomega_ = msg->z(); diff -r fawkes-robotino/fawkes/src/plugins/gazebo/gazsim-robotino/gazebo-plugin-motor/motor.h fawkes-robotino-2016/fawkes/src/plugins/gazebo/gazsim-robotino/gazebo-plugin-motor/motor.h 21a22 > #include <gazebo/common/common.hh> 24,25d24 < #include <gazebo/common/common.hh> < #include <stdio.h> 27a27 > #include <stdio.h> 30,32c30,31 < namespace gazebo < { < /** @class Motor --- > namespace gazebo { > /** @class Motor 36,73c35,70 < class Motor : public ModelPlugin < { < public: < ///Constructor < Motor(); < < ///Destructor < ~Motor(); < < //Overridden ModelPlugin-Functions < virtual void Load(physics::ModelPtr _parent, sdf::ElementPtr /*_sdf*/); < virtual void OnUpdate(const common::UpdateInfo &); < virtual void Reset(); < < private: < /// Pointer to the Gazebo model < physics::ModelPtr model_; < /// Pointer to the update event connection < event::ConnectionPtr update_connection_; < ///Node for communication to fawkes < transport::NodePtr node_; < ///name of the motor and the communication channel < std::string name_; < < < //Motor Stuff: < void on_motor_move_msg(ConstVector3dPtr &msg); < < ///Suscriber for MotorMove Interfaces from Fawkes < transport::SubscriberPtr motor_move_sub_; < < < //current movement commands: < float vx_; < float vy_; < float vomega_; < }; < } --- > class Motor : public ModelPlugin > { > public: > ///Constructor > Motor(); > > ///Destructor > ~Motor(); > > //Overridden ModelPlugin-Functions > virtual void Load(physics::ModelPtr _parent, sdf::ElementPtr /*_sdf*/); > virtual void OnUpdate(const common::UpdateInfo &); > virtual void Reset(); > > private: > /// Pointer to the Gazebo model > physics::ModelPtr model_; > /// Pointer to the update event connection > event::ConnectionPtr update_connection_; > ///Node for communication to fawkes > transport::NodePtr node_; > ///name of the motor and the communication channel > std::string name_; > > //Motor Stuff: > void on_motor_move_msg(ConstVector3dPtr &msg); > > ///Suscriber for MotorMove Interfaces from Fawkes > transport::SubscriberPtr motor_move_sub_; > > //current movement commands: > float vx_; > float vy_; > float vomega_; > }; > } // namespace gazebo diff -r fawkes-robotino/fawkes/src/plugins/gazebo/gazsim-robotino/gazsim_robotino_plugin.cpp fawkes-robotino-2016/fawkes/src/plugins/gazebo/gazsim-robotino/gazsim_robotino_plugin.cpp 21,22d20 < #include <core/plugin.h> < 24a23,24 > #include <core/plugin.h> > 34,36c34,35 < public: < < /** Constructor. --- > public: > /** Constructor. 39,43c38,41 < GazsimRobotinoPlugin(Configuration *config) < : Plugin(config) < { < thread_list.push_back(new RobotinoSimThread()); < } --- > explicit GazsimRobotinoPlugin(Configuration *config) : Plugin(config) > { > thread_list.push_back(new RobotinoSimThread()); > } diff -r fawkes-robotino/fawkes/src/plugins/gazebo/gazsim-robotino/gazsim_robotino_thread.cpp fawkes-robotino-2016/fawkes/src/plugins/gazebo/gazsim-robotino/gazsim_robotino_thread.cpp 23,28d22 < #include <tf/types.h> < #include <core/threading/mutex_locker.h> < < #include <gazebo/transport/Node.hh> < #include <gazebo/msgs/msgs.hh> < #include <gazebo/transport/transport.hh> 30c24,25 < --- > #include <core/threading/mutex_locker.h> > #include <interfaces/IMUInterface.h> 34,35d28 < #include <interfaces/IMUInterface.h> < 37c30 < #include <utils/time/clock.h> --- > #include <tf/types.h> 38a32 > #include <utils/time/clock.h> 40a35,37 > #include <gazebo/msgs/msgs.hh> > #include <gazebo/transport/Node.hh> > #include <gazebo/transport/transport.hh> 55,57c52,54 < : Thread("RobotinoSimThread", Thread::OPMODE_WAITFORWAKEUP), < BlockedTimingAspect(BlockedTimingAspect::WAKEUP_HOOK_WORLDSTATE), //sonsor and act here < TransformAspect(TransformAspect::DEFER_PUBLISHER) --- > : Thread("RobotinoSimThread", Thread::OPMODE_WAITFORWAKEUP), > BlockedTimingAspect(BlockedTimingAspect::WAKEUP_HOOK_WORLDSTATE), //sonsor and act here > TransformAspect(TransformAspect::DEFER_PUBLISHER) 64,146c61,62 < //get a connection to gazebo (copied from gazeboscene) < logger->log_debug(name(), "Creating Gazebo publishers"); < < //read config values < cfg_frame_odom_ = config->get_string("/frames/odom"); < cfg_frame_base_ = config->get_string("/frames/base"); < slippery_wheels_enabled_ = config->get_bool("gazsim/robotino/motor/slippery-wheels-enabled"); < slippery_wheels_threshold_ = config->get_float("gazsim/robotino/motor/slippery-wheels-threshold"); < moving_speed_factor_ = config->get_float("gazsim/robotino/motor/moving-speed-factor"); < rotation_speed_factor_ = config->get_float("gazsim/robotino/motor/rotation-speed-factor"); < gripper_laser_threshold_ = config->get_float("/gazsim/robotino/gripper-laser-threshold"); < gripper_laser_value_far_ = config->get_float("/gazsim/robotino/gripper-laser-value-far"); < gripper_laser_value_near_ = config->get_float("/gazsim/robotino/gripper-laser-value-near"); < have_gripper_sensors_ = config->exists("/hardware/robotino/sensors/right_ir_id") < && config->exists("/hardware/robotino/sensors/left_ir_id"); < if(have_gripper_sensors_) < { < gripper_laser_right_pos_ = config->get_int("/hardware/robotino/sensors/right_ir_id"); < gripper_laser_left_pos_ = config->get_int("/hardware/robotino/sensors/left_ir_id"); < } < gyro_buffer_size_ = config->get_int("/gazsim/robotino/gyro-buffer-size"); < gyro_delay_ = config->get_float("/gazsim/robotino/gyro-delay"); < infrared_sensor_index_ = config->get_int("/gazsim/robotino/infrared-sensor-index"); < < tf_enable_publisher(cfg_frame_base_.c_str()); < < //Open interfaces < motor_if_ = blackboard->open_for_writing<MotorInterface>("Robotino"); < switch_if_ = blackboard->open_for_writing<fawkes::SwitchInterface>("Robotino Motor"); < sens_if_ = blackboard->open_for_writing<RobotinoSensorInterface>("Robotino"); < imu_if_ = blackboard->open_for_writing<IMUInterface>("IMU Robotino"); < < //Create suscribers < pos_sub_ = gazebonode->Subscribe(config->get_string("/gazsim/topics/gps"), &RobotinoSimThread::on_pos_msg, this); < gyro_sub_ = gazebonode->Subscribe(config->get_string("/gazsim/topics/gyro"), &RobotinoSimThread::on_gyro_msg, this); < infrared_puck_sensor_sub_ = gazebonode->Subscribe(config->get_string("/gazsim/topics/infrared-puck-sensor"), &RobotinoSimThread::on_infrared_puck_sensor_msg, this); < if(have_gripper_sensors_) < { < gripper_laser_left_sensor_sub_ = gazebonode->Subscribe(config->get_string("/gazsim/topics/gripper-laser-left"), &RobotinoSimThread::on_gripper_laser_left_sensor_msg, this); < gripper_laser_right_sensor_sub_ = gazebonode->Subscribe(config->get_string("/gazsim/topics/gripper-laser-right"), &RobotinoSimThread::on_gripper_laser_right_sensor_msg, this); < } < < //Create publishers < motor_move_pub_ = gazebonode->Advertise<msgs::Vector3d>(config->get_string("/gazsim/topics/motor-move")); < string_pub_ = gazebonode->Advertise<msgs::Header>(config->get_string("/gazsim/topics/message")); < < //enable motor by default < switch_if_->set_enabled(true); < switch_if_->write(); < < imu_if_->set_linear_acceleration(0, -1.); < //imu_if_->set_angular_velocity_covariance(8, deg2rad(0.1)); < // set as not available as we do not currently provide angular velocities. < imu_if_->set_angular_velocity_covariance(0, -1.); < imu_if_->write(); < < //init motor variables < x_ = 0.0; < y_ = 0.0; < ori_ = 0.0; < vx_ = 0.0; < vy_ = 0.0; < vomega_ = 0.0; < des_vx_ = 0.0; < des_vy_ = 0.0; < des_vomega_ = 0.0; < x_offset_ = 0.0; < y_offset_ = 0.0; < ori_offset_ = 0.0; < path_length_ = 0.0; < < gyro_buffer_index_new_ = 0; < gyro_buffer_index_delayed_ = 0; < gyro_timestamp_buffer_ = new fawkes::Time[gyro_buffer_size_]; < gyro_angle_buffer_ = new float[gyro_buffer_size_]; < < new_data_ = false; < < if(string_pub_->HasConnections()) < { < msgs::Header helloMessage; < helloMessage.set_str_id("gazsim-robotino plugin connected"); < string_pub_->Publish(helloMessage); --- > //get a connection to gazebo (copied from gazeboscene) > logger->log_debug(name(), "Creating Gazebo publishers"); 148c64,157 < } --- > //read config values > cfg_frame_odom_ = config->get_string("/frames/odom"); > cfg_frame_base_ = config->get_string("/frames/base"); > cfg_frame_imu_ = config->get_string("/gazsim/robotino/imu/frame"); > slippery_wheels_enabled_ = config->get_bool("gazsim/robotino/motor/slippery-wheels-enabled"); > slippery_wheels_threshold_ = config->get_float("gazsim/robotino/motor/slippery-wheels-threshold"); > moving_speed_factor_ = config->get_float("gazsim/robotino/motor/moving-speed-factor"); > rotation_speed_factor_ = config->get_float("gazsim/robotino/motor/rotation-speed-factor"); > gripper_laser_threshold_ = config->get_float("/gazsim/robotino/gripper-laser-threshold"); > gripper_laser_value_far_ = config->get_float("/gazsim/robotino/gripper-laser-value-far"); > gripper_laser_value_near_ = config->get_float("/gazsim/robotino/gripper-laser-value-near"); > have_gripper_sensors_ = config->exists("/hardware/robotino/sensors/right_ir_id") > && config->exists("/hardware/robotino/sensors/left_ir_id"); > if (have_gripper_sensors_) { > gripper_laser_right_pos_ = config->get_int("/hardware/robotino/sensors/right_ir_id"); > gripper_laser_left_pos_ = config->get_int("/hardware/robotino/sensors/left_ir_id"); > } > gyro_buffer_size_ = config->get_int("/gazsim/robotino/gyro-buffer-size"); > gyro_delay_ = config->get_float("/gazsim/robotino/gyro-delay"); > infrared_sensor_index_ = config->get_int("/gazsim/robotino/infrared-sensor-index"); > > tf_enable_publisher(cfg_frame_base_.c_str()); > > //Open interfaces > motor_if_ = blackboard->open_for_writing<MotorInterface>("Robotino"); > switch_if_ = blackboard->open_for_writing<fawkes::SwitchInterface>("Robotino Motor"); > sens_if_ = blackboard->open_for_writing<RobotinoSensorInterface>("Robotino"); > imu_if_ = blackboard->open_for_writing<IMUInterface>("IMU Robotino"); > > //Create suscribers > pos_sub_ = gazebonode->Subscribe(config->get_string("/gazsim/topics/gps"), > &RobotinoSimThread::on_pos_msg, > this); > gyro_sub_ = gazebonode->Subscribe(config->get_string("/gazsim/topics/gyro"), > &RobotinoSimThread::on_gyro_msg, > this); > infrared_puck_sensor_sub_ = > gazebonode->Subscribe(config->get_string("/gazsim/topics/infrared-puck-sensor"), > &RobotinoSimThread::on_infrared_puck_sensor_msg, > this); > if (have_gripper_sensors_) { > gripper_laser_left_sensor_sub_ = > gazebonode->Subscribe(config->get_string("/gazsim/topics/gripper-laser-left"), > &RobotinoSimThread::on_gripper_laser_left_sensor_msg, > this); > gripper_laser_right_sensor_sub_ = > gazebonode->Subscribe(config->get_string("/gazsim/topics/gripper-laser-right"), > &RobotinoSimThread::on_gripper_laser_right_sensor_msg, > this); > } > > //Create publishers > motor_move_pub_ = > gazebonode->Advertise<msgs::Vector3d>(config->get_string("/gazsim/topics/motor-move")); > string_pub_ = gazebonode->Advertise<msgs::Header>(config->get_string("/gazsim/topics/message")); > > //enable motor by default > switch_if_->set_enabled(true); > switch_if_->write(); > > imu_if_->set_frame(cfg_frame_imu_.c_str()); > imu_if_->set_linear_acceleration(0, -1.); > //imu_if_->set_angular_velocity_covariance(8, deg2rad(0.1)); > // set as not available as we do not currently provide angular velocities. > imu_if_->set_angular_velocity_covariance(0, -1.); > imu_if_->write(); > > //init motor variables > x_ = 0.0; > y_ = 0.0; > ori_ = 0.0; > vx_ = 0.0; > vy_ = 0.0; > vomega_ = 0.0; > des_vx_ = 0.0; > des_vy_ = 0.0; > des_vomega_ = 0.0; > x_offset_ = 0.0; > y_offset_ = 0.0; > ori_offset_ = 0.0; > path_length_ = 0.0; > > gyro_buffer_index_new_ = 0; > gyro_buffer_index_delayed_ = 0; > gyro_timestamp_buffer_ = new fawkes::Time[gyro_buffer_size_]; > gyro_angle_buffer_ = new float[gyro_buffer_size_]; > > new_data_ = false; > > if (string_pub_->HasConnections()) { > msgs::Header helloMessage; > helloMessage.set_str_id("gazsim-robotino plugin connected"); > string_pub_->Publish(helloMessage); > } 154,158c163,167 < //close interfaces < blackboard->close(imu_if_); < blackboard->close(sens_if_); < blackboard->close(motor_if_); < blackboard->close(switch_if_); --- > //close interfaces > blackboard->close(imu_if_); > blackboard->close(sens_if_); > blackboard->close(motor_if_); > blackboard->close(switch_if_); 160,161c169,170 < delete [] gyro_timestamp_buffer_; < delete [] gyro_angle_buffer_; --- > delete[] gyro_timestamp_buffer_; > delete[] gyro_angle_buffer_; 167,168c176,227 < //work off all messages passed to the motor_interfaces < process_motor_messages(); --- > //work off all messages passed to the motor_interfaces > process_motor_messages(); > > //update interfaces > if (new_data_) { > motor_if_->set_odometry_position_x(x_); > motor_if_->set_odometry_position_y(y_); > motor_if_->set_odometry_orientation(ori_); > motor_if_->set_odometry_path_length(path_length_); > motor_if_->write(); > > if (gyro_available_) { > //update gyro (with delay) > fawkes::Time now(clock); > while ((now - gyro_timestamp_buffer_[(gyro_buffer_index_delayed_ + 1) % gyro_buffer_size_]) > .in_sec() > >= gyro_delay_ > && gyro_buffer_index_delayed_ < gyro_buffer_index_new_) { > gyro_buffer_index_delayed_++; > } > > tf::Quaternion q = > tf::create_quaternion_from_yaw(gyro_angle_buffer_[gyro_buffer_index_delayed_]); > imu_if_->set_orientation(0, q.x()); > imu_if_->set_orientation(1, q.y()); > imu_if_->set_orientation(2, q.z()); > imu_if_->set_orientation(3, q.w()); > for (uint i = 0; i < 9u; i += 4) { > imu_if_->set_orientation_covariance(i, 1e-3); > imu_if_->set_angular_velocity_covariance(i, 1e-3); > imu_if_->set_linear_acceleration_covariance(i, 1e-3); > } > } else { > imu_if_->set_angular_velocity(0, -1.); > imu_if_->set_orientation(0, -1.); > imu_if_->set_orientation(1, 0.); > imu_if_->set_orientation(2, 0.); > imu_if_->set_orientation(3, 0.); > } > imu_if_->write(); > > sens_if_->set_distance(infrared_sensor_index_, infrared_puck_sensor_dist_); > > if (have_gripper_sensors_) { > sens_if_->set_analog_in(gripper_laser_left_pos_, analog_in_left_); > sens_if_->set_analog_in(gripper_laser_right_pos_, analog_in_right_); > } > sens_if_->write(); > > new_data_ = false; > } > } 170,292c229,236 < //update interfaces < if(new_data_) < { < motor_if_->set_odometry_position_x(x_); < motor_if_->set_odometry_position_y(y_); < motor_if_->set_odometry_orientation(ori_); < motor_if_->set_odometry_path_length(path_length_); < motor_if_->write(); < < if(gyro_available_) < { < //update gyro (with delay) < fawkes::Time now(clock); < while ((now - gyro_timestamp_buffer_[(gyro_buffer_index_delayed_ + 1) % gyro_buffer_size_]).in_sec() >= gyro_delay_ < && gyro_buffer_index_delayed_ < gyro_buffer_index_new_) < { < gyro_buffer_index_delayed_++; < } < < tf::Quaternion q = < tf::create_quaternion_from_yaw(gyro_angle_buffer_[gyro_buffer_index_delayed_]); < imu_if_->set_orientation(0, q.x()); < imu_if_->set_orientation(1, q.y()); < imu_if_->set_orientation(2, q.z()); < imu_if_->set_orientation(3, q.w()); < } else { < imu_if_->set_angular_velocity(0, -1.); < imu_if_->set_orientation(0, -1.); < imu_if_->set_orientation(1, 0.); < imu_if_->set_orientation(2, 0.); < imu_if_->set_orientation(3, 0.); < } < imu_if_->write(); < < sens_if_->set_distance(infrared_sensor_index_, infrared_puck_sensor_dist_); < < if(have_gripper_sensors_) < { < sens_if_->set_analog_in(gripper_laser_left_pos_, analog_in_left_); < sens_if_->set_analog_in(gripper_laser_right_pos_, analog_in_right_); < } < sens_if_->write(); < < new_data_ = false; < } < } < < void RobotinoSimThread::send_transroot(double vx, double vy, double omega) < { < msgs::Vector3d motorMove; < motorMove.set_x(vx_); < motorMove.set_y(vy_); < motorMove.set_z(vomega_); < motor_move_pub_->Publish(motorMove); < } < < void RobotinoSimThread::process_motor_messages() < { < //check messages of the switch interface < while (!switch_if_->msgq_empty()) { < if (SwitchInterface::DisableSwitchMessage *msg = < switch_if_->msgq_first_safe(msg)) { < switch_if_->set_enabled(false); < //pause movement < send_transroot(0, 0, 0); < } else if (SwitchInterface::EnableSwitchMessage *msg = < switch_if_->msgq_first_safe(msg)) { < switch_if_->set_enabled(true); < //unpause movement < send_transroot(vx_, vy_, vomega_); < } < switch_if_->msgq_pop(); < switch_if_->write(); < } < < //do not do anything if the motor is disabled < if(!switch_if_->is_enabled()) < { < return; < } < < //check messages of the motor interface < while(motor_move_pub_->HasConnections() && !motor_if_->msgq_empty()) < { < if (MotorInterface::TransRotMessage *msg = < motor_if_->msgq_first_safe(msg)) < { < //send command only if changed < if(vel_changed(msg->vx(), vx_, 0.01) || vel_changed(msg->vy(), vy_, 0.01) || vel_changed(msg->omega(), vomega_, 0.01)) < { < vx_ = msg->vx(); < vy_ = msg->vy(); < vomega_ = msg->omega(); < des_vx_ = vx_; < des_vy_ = vy_; < des_vomega_ = vomega_; < < //send message to gazebo (apply movement_factor to compensate friction) < send_transroot(vx_ * moving_speed_factor_, vy_ * moving_speed_factor_, vomega_ * rotation_speed_factor_); < < //update interface < motor_if_->set_vx(vx_); < motor_if_->set_vy(vy_); < motor_if_->set_omega(vomega_); < motor_if_->set_des_vx(des_vx_); < motor_if_->set_des_vy(des_vy_); < motor_if_->set_des_omega(des_vomega_); < //update interface < motor_if_->write(); < } < } < else if (motor_if_->msgq_first_is<MotorInterface::ResetOdometryMessage>()) < { < x_offset_ += x_; < y_offset_ += y_; < ori_offset_ += ori_; < x_ = 0.0; < y_ = 0.0; < ori_ = 0.0; < last_vel_set_time_ = clock->now(); < } < motor_if_->msgq_pop(); < } --- > void > RobotinoSimThread::send_transroot(double vx, double vy, double omega) > { > msgs::Vector3d motorMove; > motorMove.set_x(vx_); > motorMove.set_y(vy_); > motorMove.set_z(vomega_); > motor_move_pub_->Publish(motorMove); 295c239,240 < bool RobotinoSimThread::vel_changed(float before, float after, float relativeThreashold) --- > void > RobotinoSimThread::process_motor_messages() 297c242,300 < return(before == 0.0 || after == 0.0 || fabs((before-after)/before) > relativeThreashold); --- > //check messages of the switch interface > while (!switch_if_->msgq_empty()) { > if (SwitchInterface::DisableSwitchMessage *msg = switch_if_->msgq_first_safe(msg)) { > switch_if_->set_enabled(false); > //pause movement > send_transroot(0, 0, 0); > } else if (SwitchInterface::EnableSwitchMessage *msg = switch_if_->msgq_first_safe(msg)) { > switch_if_->set_enabled(true); > //unpause movement > send_transroot(vx_, vy_, vomega_); > } > switch_if_->msgq_pop(); > switch_if_->write(); > } > > //do not do anything if the motor is disabled > if (!switch_if_->is_enabled()) { > return; > } > > //check messages of the motor interface > while (motor_move_pub_->HasConnections() && !motor_if_->msgq_empty()) { > if (MotorInterface::TransRotMessage *msg = motor_if_->msgq_first_safe(msg)) { > //send command only if changed > if (vel_changed(msg->vx(), vx_, 0.01) || vel_changed(msg->vy(), vy_, 0.01) > || vel_changed(msg->omega(), vomega_, 0.01)) { > vx_ = msg->vx(); > vy_ = msg->vy(); > vomega_ = msg->omega(); > des_vx_ = vx_; > des_vy_ = vy_; > des_vomega_ = vomega_; > > //send message to gazebo (apply movement_factor to compensate friction) > send_transroot(vx_ * moving_speed_factor_, > vy_ * moving_speed_factor_, > vomega_ * rotation_speed_factor_); > > //update interface > motor_if_->set_vx(vx_); > motor_if_->set_vy(vy_); > motor_if_->set_omega(vomega_); > motor_if_->set_des_vx(des_vx_); > motor_if_->set_des_vy(des_vy_); > motor_if_->set_des_omega(des_vomega_); > //update interface > motor_if_->write(); > } > } else if (motor_if_->msgq_first_is<MotorInterface::ResetOdometryMessage>()) { > x_offset_ += x_; > y_offset_ += y_; > ori_offset_ += ori_; > x_ = 0.0; > y_ = 0.0; > ori_ = 0.0; > last_vel_set_time_ = clock->now(); > } > motor_if_->msgq_pop(); > } 299a303,307 > bool > RobotinoSimThread::vel_changed(float before, float after, float relativeThreashold) > { > return (before == 0.0 || after == 0.0 || fabs((before - after) / before) > relativeThreashold); > } 302c310,311 < void RobotinoSimThread::on_pos_msg(ConstPosePtr &msg) --- > void > RobotinoSimThread::on_pos_msg(ConstPosePtr &msg) 304c313 < //logger_->log_debug(name_, "Got Position MSG from gazebo with ori: %f", msg->z()); --- > //logger_->log_debug(name_, "Got Position MSG from gazebo with ori: %f", msg->z()); 306c315,403 < MutexLocker lock(loop_mutex); --- > MutexLocker lock(loop_mutex); > > //read out values + substract offset > float new_x = msg->position().x() - x_offset_; > float new_y = msg->position().y() - y_offset_; > //calculate ori from quaternion > float new_ori = tf::get_yaw(tf::Quaternion(msg->orientation().x(), > msg->orientation().y(), > msg->orientation().z(), > msg->orientation().w())); > new_ori -= ori_offset_; > > //estimate path-length > float length_driven = sqrt((new_x - x_) * (new_x - x_) + (new_y - y_) * (new_y - y_)); > > if (slippery_wheels_enabled_) { > //simulate slipping wheels when driving against an obstacle > fawkes::Time new_time = clock->now(); > double duration = new_time.in_sec() - last_pos_time_.in_sec(); > //calculate duration since the velocity was last set to filter slipping while accelerating > double velocity_set_duration = new_time.in_sec() - last_vel_set_time_.in_sec(); > > last_pos_time_ = new_time; > > double total_speed = sqrt(vx_ * vx_ + vy_ * vy_); > if (length_driven < total_speed * duration * slippery_wheels_threshold_ > && velocity_set_duration > duration) { > double speed_abs_x = vx_ * cos(ori_) - vy_ * sin(ori_); > double speed_abs_y = vx_ * sin(ori_) + vy_ * cos(ori_); > double slipped_x = speed_abs_x * duration * slippery_wheels_threshold_; > double slipped_y = speed_abs_y * duration * slippery_wheels_threshold_; > //logger_->log_debug(name_, "Wheels are slipping (%f, %f)", slipped_x, slipped_y); > new_x = x_ + slipped_x; > new_y = y_ + slipped_y; > //update the offset (otherwise the slippery error would be corrected in the next iteration) > x_offset_ -= slipped_x; > y_offset_ -= slipped_y; > > length_driven = sqrt((new_x - x_) * (new_x - x_) + (new_y - y_) * (new_y - y_)); > } > } > > //update stored values > x_ = new_x; > y_ = new_y; > ori_ = new_ori; > path_length_ += length_driven; > new_data_ = true; > > //publish transform (otherwise the transform can not convert /base_link to /odom) > fawkes::Time now(clock); > tf::Transform t(tf::Quaternion(tf::Vector3(0, 0, 1), ori_), tf::Vector3(x_, y_, 0.0)); > > tf_publisher->send_transform(t, now, cfg_frame_odom_, cfg_frame_base_); > } > void > RobotinoSimThread::on_gyro_msg(ConstVector3dPtr &msg) > { > MutexLocker lock(loop_mutex); > gyro_buffer_index_new_ = (gyro_buffer_index_new_ + 1) % gyro_buffer_size_; > gyro_angle_buffer_[gyro_buffer_index_new_] = msg->z(); > gyro_timestamp_buffer_[gyro_buffer_index_new_] = clock->now(); > gyro_available_ = true; > new_data_ = true; > } > void > RobotinoSimThread::on_infrared_puck_sensor_msg(ConstLaserScanStampedPtr &msg) > { > MutexLocker lock(loop_mutex); > //make sure that the config values for fetch_puck are set right > infrared_puck_sensor_dist_ = msg->scan().ranges(0); > new_data_ = true; > } > void > RobotinoSimThread::on_gripper_laser_right_sensor_msg(ConstFloatPtr &msg) > { > MutexLocker lock(loop_mutex); > > if (msg->value() < gripper_laser_threshold_) { > analog_in_right_ = gripper_laser_value_near_; > } else { > analog_in_right_ = gripper_laser_value_far_; > } > new_data_ = true; > } > void > RobotinoSimThread::on_gripper_laser_left_sensor_msg(ConstFloatPtr &msg) > { > MutexLocker lock(loop_mutex); 308,404c405,410 < //read out values + substract offset < float new_x = msg->position().x() - x_offset_; < float new_y = msg->position().y() - y_offset_; < //calculate ori from quaternion < float new_ori = tf::get_yaw(tf::Quaternion(msg->orientation().x(), msg->orientation().y() < , msg->orientation().z(), msg->orientation().w())); < new_ori -= ori_offset_; < < //estimate path-length < float length_driven = sqrt((new_x-x_) * (new_x-x_) + (new_y-y_) * (new_y-y_)); < < if(slippery_wheels_enabled_) < { < //simulate slipping wheels when driving against an obstacle < fawkes::Time new_time = clock->now(); < double duration = new_time.in_sec() - last_pos_time_.in_sec(); < //calculate duration since the velocity was last set to filter slipping while accelerating < double velocity_set_duration = new_time.in_sec() - last_vel_set_time_.in_sec(); < < last_pos_time_ = new_time; < < < double total_speed = sqrt(vx_ * vx_ + vy_ * vy_); < if(length_driven < total_speed * duration * slippery_wheels_threshold_ && velocity_set_duration > duration) < { < double speed_abs_x = vx_ * cos(ori_) - vy_ * sin(ori_); < double speed_abs_y = vx_ * sin(ori_) + vy_ * cos(ori_); < double slipped_x = speed_abs_x * duration * slippery_wheels_threshold_; < double slipped_y = speed_abs_y * duration * slippery_wheels_threshold_; < //logger_->log_debug(name_, "Wheels are slipping (%f, %f)", slipped_x, slipped_y); < new_x = x_ + slipped_x; < new_y = y_ + slipped_y; < //update the offset (otherwise the slippery error would be corrected in the next iteration) < x_offset_ -= slipped_x; < y_offset_ -= slipped_y; < < length_driven = sqrt((new_x-x_) * (new_x-x_) + (new_y-y_) * (new_y-y_)); < } < } < < //update stored values < x_ = new_x; < y_ = new_y; < ori_ = new_ori; < path_length_ += length_driven; < new_data_ = true; < < //publish transform (otherwise the transform can not convert /base_link to /odom) < fawkes::Time now(clock); < tf::Transform t(tf::Quaternion(tf::Vector3(0,0,1),ori_), < tf::Vector3(x_, y_, 0.0)); < < tf_publisher->send_transform(t, now, cfg_frame_odom_, cfg_frame_base_); < } < void RobotinoSimThread::on_gyro_msg(ConstVector3dPtr &msg) < { < MutexLocker lock(loop_mutex); < gyro_buffer_index_new_ = (gyro_buffer_index_new_ + 1) % gyro_buffer_size_; < gyro_angle_buffer_[gyro_buffer_index_new_] = msg->z(); < gyro_timestamp_buffer_[gyro_buffer_index_new_] = clock->now(); < gyro_available_ = true; < new_data_ = true; < } < void RobotinoSimThread::on_infrared_puck_sensor_msg(ConstLaserScanStampedPtr &msg) < { < MutexLocker lock(loop_mutex); < //make sure that the config values for fetch_puck are set right < infrared_puck_sensor_dist_ = msg->scan().ranges(0); < new_data_ = true; < } < void RobotinoSimThread::on_gripper_laser_right_sensor_msg(ConstFloatPtr &msg) < { < MutexLocker lock(loop_mutex); < < if(msg->value() < gripper_laser_threshold_) < { < analog_in_right_ = gripper_laser_value_near_; < } < else < { < analog_in_right_ = gripper_laser_value_far_; < } < new_data_ = true; < } < void RobotinoSimThread::on_gripper_laser_left_sensor_msg(ConstFloatPtr &msg) < { < MutexLocker lock(loop_mutex); < < if(msg->value() < gripper_laser_threshold_) < { < analog_in_left_ = gripper_laser_value_near_; < } < else < { < analog_in_left_ = gripper_laser_value_far_; < } < new_data_ = true; --- > if (msg->value() < gripper_laser_threshold_) { > analog_in_left_ = gripper_laser_value_near_; > } else { > analog_in_left_ = gripper_laser_value_far_; > } > new_data_ = true; diff -r fawkes-robotino/fawkes/src/plugins/gazebo/gazsim-robotino/gazsim_robotino_thread.h fawkes-robotino-2016/fawkes/src/plugins/gazebo/gazsim-robotino/gazsim_robotino_thread.h 23,24c23,24 < #ifndef __PLUGINS_GAZSIM_ROBOTINO_THREAD_H_ < #define __PLUGINS_GAZSIM_ROBOTINO_THREAD_H_ --- > #ifndef _PLUGINS_GAZSIM_ROBOTINO_THREAD_H_ > #define _PLUGINS_GAZSIM_ROBOTINO_THREAD_H_ 26c26 < #include <list> --- > #include "../msgs/Float.pb.h" 28c28,29 < #include <core/threading/thread.h> --- > #include <aspect/blackboard.h> > #include <aspect/blocked_timing.h> 32,34d32 < #include <aspect/blackboard.h> < #include <aspect/blocked_timing.h> < #include <plugins/gazebo/aspect/gazebo.h> 36c34,37 < #include "../msgs/Float.pb.h" --- > #include <core/threading/thread.h> > #include <plugins/gazebo/aspect/gazebo.h> > > #include <list> 39d39 < #include <gazebo/transport/TransportTypes.hh> 40a41 > #include <gazebo/transport/TransportTypes.hh> 43d43 < 47,62c47,61 < class BatteryInterface; < class IMUInterface; < class MotorInterface; < class RobotinoSensorInterface; < class SwitchInterface; < } < < class RobotinoSimThread < : public fawkes::Thread, < public fawkes::ClockAspect, < public fawkes::LoggingAspect, < public fawkes::ConfigurableAspect, < public fawkes::BlackBoardAspect, < public fawkes::BlockedTimingAspect, < public fawkes::TransformAspect, < public fawkes::GazeboAspect --- > class BatteryInterface; > class IMUInterface; > class MotorInterface; > class RobotinoSensorInterface; > class SwitchInterface; > } // namespace fawkes > > class RobotinoSimThread : public fawkes::Thread, > public fawkes::ClockAspect, > public fawkes::LoggingAspect, > public fawkes::ConfigurableAspect, > public fawkes::BlackBoardAspect, > public fawkes::BlockedTimingAspect, > public fawkes::TransformAspect, > public fawkes::GazeboAspect 64,65c63,64 < public: < RobotinoSimThread(); --- > public: > RobotinoSimThread(); 67,151c66,152 < virtual void init(); < virtual void loop(); < virtual void finalize(); < private: < //Publisher to send messages to gazebo < gazebo::transport::PublisherPtr string_pub_; < gazebo::transport::PublisherPtr motor_move_pub_; < < //Suscribers to recieve messages from gazebo < gazebo::transport::SubscriberPtr gyro_sub_; < gazebo::transport::SubscriberPtr infrared_puck_sensor_sub_; < gazebo::transport::SubscriberPtr gripper_laser_left_sensor_sub_; < gazebo::transport::SubscriberPtr gripper_laser_right_sensor_sub_; < gazebo::transport::SubscriberPtr pos_sub_; < < //Handler functions for incoming messages < void on_gyro_msg(ConstVector3dPtr &msg); < void on_infrared_puck_sensor_msg(ConstLaserScanStampedPtr &msg); < void on_gripper_laser_left_sensor_msg(ConstFloatPtr &msg); < void on_gripper_laser_right_sensor_msg(ConstFloatPtr &msg); < void on_pos_msg(ConstPosePtr &msg); < < //provided interfaces < fawkes::RobotinoSensorInterface *sens_if_; < fawkes::MotorInterface *motor_if_; < fawkes::SwitchInterface *switch_if_; < fawkes::IMUInterface *imu_if_; < < //config values < std::string cfg_frame_odom_; < std::string cfg_frame_base_; < double gripper_laser_threshold_; < double gripper_laser_value_far_; < double gripper_laser_value_near_; < bool slippery_wheels_enabled_; < double slippery_wheels_threshold_; < double moving_speed_factor_; < double rotation_speed_factor_; < bool have_gripper_sensors_; < int gripper_laser_left_pos_; < int gripper_laser_right_pos_; < int infrared_sensor_index_; < < //Helper variables for motor: < < //current motorMovements < float vx_; < float vy_; < float vomega_; < float des_vx_; < float des_vy_; < float des_vomega_; < //last received odom position < float x_; < float y_; < float ori_; < float path_length_; < < //RobotinoSensorInterface values (stored here to write the interfaces only in the loop) < bool gyro_available_; < int gyro_buffer_size_; < int gyro_buffer_index_new_; < int gyro_buffer_index_delayed_; < fawkes::Time *gyro_timestamp_buffer_; < float *gyro_angle_buffer_; < float gyro_delay_; < float infrared_puck_sensor_dist_; < float analog_in_left_; < float analog_in_right_; < < //are there new values to write in the interfaces? < bool new_data_; < < fawkes::Time last_pos_time_; < fawkes::Time last_vel_set_time_; < < //Odometry offset < float x_offset_; < float y_offset_; < float ori_offset_; < < //Helper functions: < void process_motor_messages(); < void send_transroot(double vx, double vy, double omega); < bool vel_changed(float before, float after, float relativeThreashold); --- > virtual void init(); > virtual void loop(); > virtual void finalize(); > > private: > //Publisher to send messages to gazebo > gazebo::transport::PublisherPtr string_pub_; > gazebo::transport::PublisherPtr motor_move_pub_; > > //Suscribers to recieve messages from gazebo > gazebo::transport::SubscriberPtr gyro_sub_; > gazebo::transport::SubscriberPtr infrared_puck_sensor_sub_; > gazebo::transport::SubscriberPtr gripper_laser_left_sensor_sub_; > gazebo::transport::SubscriberPtr gripper_laser_right_sensor_sub_; > gazebo::transport::SubscriberPtr pos_sub_; > > //Handler functions for incoming messages > void on_gyro_msg(ConstVector3dPtr &msg); > void on_infrared_puck_sensor_msg(ConstLaserScanStampedPtr &msg); > void on_gripper_laser_left_sensor_msg(ConstFloatPtr &msg); > void on_gripper_laser_right_sensor_msg(ConstFloatPtr &msg); > void on_pos_msg(ConstPosePtr &msg); > > //provided interfaces > fawkes::RobotinoSensorInterface *sens_if_; > fawkes::MotorInterface * motor_if_; > fawkes::SwitchInterface * switch_if_; > fawkes::IMUInterface * imu_if_; > > //config values > std::string cfg_frame_odom_; > std::string cfg_frame_base_; > std::string cfg_frame_imu_; > double gripper_laser_threshold_; > double gripper_laser_value_far_; > double gripper_laser_value_near_; > bool slippery_wheels_enabled_; > double slippery_wheels_threshold_; > double moving_speed_factor_; > double rotation_speed_factor_; > bool have_gripper_sensors_; > int gripper_laser_left_pos_; > int gripper_laser_right_pos_; > int infrared_sensor_index_; > > //Helper variables for motor: > > //current motorMovements > float vx_; > float vy_; > float vomega_; > float des_vx_; > float des_vy_; > float des_vomega_; > //last received odom position > float x_; > float y_; > float ori_; > float path_length_; > > //RobotinoSensorInterface values (stored here to write the interfaces only in the loop) > bool gyro_available_; > int gyro_buffer_size_; > int gyro_buffer_index_new_; > int gyro_buffer_index_delayed_; > fawkes::Time *gyro_timestamp_buffer_; > float * gyro_angle_buffer_; > float gyro_delay_; > float infrared_puck_sensor_dist_; > float analog_in_left_; > float analog_in_right_; > > //are there new values to write in the interfaces? > bool new_data_; > > fawkes::Time last_pos_time_; > fawkes::Time last_vel_set_time_; > > //Odometry offset > float x_offset_; > float y_offset_; > float ori_offset_; > > //Helper functions: > void process_motor_messages(); > void send_transroot(double vx, double vy, double omega); > bool vel_changed(float before, float after, float relativeThreashold); diff -r fawkes-robotino/fawkes/src/plugins/gazebo/gazsim-robotino/Makefile fawkes-robotino-2016/fawkes/src/plugins/gazebo/gazsim-robotino/Makefile 27,31c27,31 < LIBS_gazsim_robotino = fawkescore fawkesutils fawkesaspects fvutils \ < fawkestf fawkesinterface fawkesblackboard \ < BatteryInterface RobotinoSensorInterface MotorInterface \ < Position3DInterface IMUInterface SwitchInterface \ < fawkesgazeboaspect gazsim_msgs \ --- > LIBS_gazsim_robotino = m fawkescore fawkesutils fawkesaspects fvutils \ > fawkestf fawkesinterface fawkesblackboard \ > BatteryInterface RobotinoSensorInterface MotorInterface \ > Position3DInterface IMUInterface SwitchInterface \ > fawkesgazeboaspect gazsim_msgs \ 35a36 > PLUGINS_all = $(PLUGINDIR)/gazsim-robotino.so 43c44 < PLUGINS_all = $(PLUGINDIR)/gazsim-robotino.so --- > PLUGINS_build = $(PLUGINS_all) diff -r fawkes-robotino/fawkes/src/plugins/gazebo/gazsim-timesource/gazsim_timesource_plugin.cpp fawkes-robotino-2016/fawkes/src/plugins/gazebo/gazsim-timesource/gazsim_timesource_plugin.cpp 23a24 > 33,34c34,35 < public: < /** Constructor. --- > public: > /** Constructor. 37,40c38,41 < GazsimTimesourcePlugin(Configuration *config) : Plugin(config) < { < thread_list.push_back(new GazsimTimesourceThread()); < } --- > explicit GazsimTimesourcePlugin(Configuration *config) : Plugin(config) > { > thread_list.push_back(new GazsimTimesourceThread()); > } 42d42 < diff -r fawkes-robotino/fawkes/src/plugins/gazebo/gazsim-timesource/gazsim_timesource_source.cpp fawkes-robotino-2016/fawkes/src/plugins/gazebo/gazsim-timesource/gazsim_timesource_source.cpp 31c31 < GazsimTimesource::GazsimTimesource(Clock* clock) --- > GazsimTimesource::GazsimTimesource(Clock *clock) 33c33 < clock_ = clock; --- > clock_ = clock; 35,38c35,38 < last_sim_time_ = get_system_time(); < last_real_time_factor_ = 1.0; < clock_->get_systime(&last_sys_recv_time_); < //registration will be done by plugin --- > last_sim_time_ = get_system_time(); > last_real_time_factor_ = 1.0; > clock_->get_systime(&last_sys_recv_time_); > //registration will be done by plugin 43d42 < 52c51 < GazsimTimesource::get_time(timeval* tv) const --- > GazsimTimesource::get_time(timeval *tv) const 54,62c53,62 < //I do not use the Time - operator here because this would recursively call get_time < timeval now = get_system_time(); < timeval interval = subtract(now, last_sys_recv_time_); < < //doing this: timeval estimated_sim_interval = interval * last_real_time_factor_; < timeval estimated_sim_interval; < estimated_sim_interval.tv_usec = last_real_time_factor_ * (interval.tv_sec * 1000000 + interval.tv_usec); < estimated_sim_interval.tv_sec = estimated_sim_interval.tv_usec / 1000000; < estimated_sim_interval.tv_usec -= estimated_sim_interval.tv_sec * 1000000; --- > //I do not use the Time - operator here because this would recursively call get_time > timeval now = get_system_time(); > timeval interval = subtract(now, last_sys_recv_time_); > > //doing this: timeval estimated_sim_interval = interval * last_real_time_factor_; > timeval estimated_sim_interval; > estimated_sim_interval.tv_usec = > last_real_time_factor_ * (interval.tv_sec * 1000000 + interval.tv_usec); > estimated_sim_interval.tv_sec = estimated_sim_interval.tv_usec / 1000000; > estimated_sim_interval.tv_usec -= estimated_sim_interval.tv_sec * 1000000; 64c64 < timeval estimated_sim_now = add(last_sim_time_, estimated_sim_interval); --- > timeval estimated_sim_now = add(last_sim_time_, estimated_sim_interval); 66,67c66,67 < //return < *tv = estimated_sim_now; --- > //return > *tv = estimated_sim_now; 71c71 < GazsimTimesource::conv_to_realtime(const timeval* tv) const --- > GazsimTimesource::conv_to_realtime(const timeval *tv) const 73c73 < timeval interval = subtract(*tv, last_sim_time_); --- > timeval interval = subtract(*tv, last_sim_time_); 75,79c75,80 < //doing this: timeval est_real_interval = interval / last_real_time_factor_; < timeval est_real_interval; < est_real_interval.tv_usec = (interval.tv_sec * 1000000 + interval.tv_usec) / last_real_time_factor_; < est_real_interval.tv_sec = est_real_interval.tv_usec / 1000000; < est_real_interval.tv_usec -= est_real_interval.tv_sec * 1000000; --- > //doing this: timeval est_real_interval = interval / last_real_time_factor_; > timeval est_real_interval; > est_real_interval.tv_usec = > (interval.tv_sec * 1000000 + interval.tv_usec) / last_real_time_factor_; > est_real_interval.tv_sec = est_real_interval.tv_usec / 1000000; > est_real_interval.tv_usec -= est_real_interval.tv_sec * 1000000; 81,82c82,83 < timeval result = add(last_sys_recv_time_, est_real_interval); < return result; --- > timeval result = add(last_sys_recv_time_, est_real_interval); > return result; 86c87 < GazsimTimesource::conv_native_to_exttime(const timeval* tv) const --- > GazsimTimesource::conv_native_to_exttime(const timeval *tv) const 88,95c89,96 < timeval t_offset = subtract(*tv, last_native_sim_time_); < double offset = t_offset.tv_sec + t_offset.tv_usec / 1000000.f; < long offset_sec = ::ceil(offset); < long offset_usec = ::round(offset - offset_sec) * 1000000; < < timeval rv; < rv.tv_sec = last_sim_time_.tv_sec + offset_sec; < rv.tv_usec = last_sim_time_.tv_usec + offset_usec; --- > timeval t_offset = subtract(*tv, last_native_sim_time_); > double offset = t_offset.tv_sec + t_offset.tv_usec / 1000000.f; > long offset_sec = ::ceil(offset); > long offset_usec = ::round(offset - offset_sec) * 1000000; > > timeval rv; > rv.tv_sec = last_sim_time_.tv_sec + offset_sec; > rv.tv_usec = last_sim_time_.tv_usec + offset_usec; 97c98 < return rv; --- > return rv; 106,111c107,112 < //we do not want to correct time back < get_time(&last_sim_time_); < last_real_time_factor_ = msg->real_time_factor(); < clock_->get_systime(&last_sys_recv_time_); < last_native_sim_time_.tv_sec = msg->sim_time_sec(); < last_native_sim_time_.tv_usec = msg->sim_time_nsec() / 1000; --- > //we do not want to correct time back > get_time(&last_sim_time_); > last_real_time_factor_ = msg->real_time_factor(); > clock_->get_systime(&last_sys_recv_time_); > last_native_sim_time_.tv_sec = msg->sim_time_sec(); > last_native_sim_time_.tv_usec = msg->sim_time_nsec() / 1000; 117,119c118,120 < timeval now_timeval; < gettimeofday(&now_timeval,NULL); < return now_timeval; --- > timeval now_timeval; > gettimeofday(&now_timeval, NULL); > return now_timeval; 125,133c126,133 < timeval res; < res.tv_sec = a.tv_sec + b.tv_sec; < res.tv_usec = a.tv_usec + b.tv_usec; < if(res.tv_usec > 1000000) < { < res.tv_usec -= 1000000; < res.tv_sec++; < } < return res; --- > timeval res; > res.tv_sec = a.tv_sec + b.tv_sec; > res.tv_usec = a.tv_usec + b.tv_usec; > if (res.tv_usec > 1000000) { > res.tv_usec -= 1000000; > res.tv_sec++; > } > return res; 139,150c139,147 < timeval res; < res.tv_sec = a.tv_sec - b.tv_sec; < if(a.tv_usec >= b.tv_usec) < { < res.tv_usec = a.tv_usec - b.tv_usec; < } < else < { < res.tv_usec = 1000000 + a.tv_usec - b.tv_usec; < res.tv_sec--; < } < return res; --- > timeval res; > res.tv_sec = a.tv_sec - b.tv_sec; > if (a.tv_usec >= b.tv_usec) { > res.tv_usec = a.tv_usec - b.tv_usec; > } else { > res.tv_usec = 1000000 + a.tv_usec - b.tv_usec; > res.tv_sec--; > } > return res; diff -r fawkes-robotino/fawkes/src/plugins/gazebo/gazsim-timesource/gazsim_timesource_source.h fawkes-robotino-2016/fawkes/src/plugins/gazebo/gazsim-timesource/gazsim_timesource_source.h 23,26d22 < #include <boost/asio.hpp> < #include <utils/time/timesource.h> < #include <utils/time/clock.h> < 29,30c25,26 < #ifndef __GAZEBO_TIMESOURCE_H_ < #define __GAZEBO_TIMESOURCE_H_ --- > #include <utils/time/clock.h> > #include <utils/time/timesource.h> 31a28,31 > #include <boost/asio.hpp> > > #ifndef _GAZEBO_TIMESOURCE_H_ > # define _GAZEBO_TIMESOURCE_H_ 35,37c35,36 < namespace fawkes < { < /** @class GazsimTimesource --- > namespace fawkes { > /** @class GazsimTimesource 41,70c40,68 < class GazsimTimesource : public TimeSource < { < public: < //Constructor < GazsimTimesource(Clock* clock); < ///Destructor < ~GazsimTimesource(); < < virtual void get_time(timeval* tv) const; < virtual timeval conv_to_realtime(const timeval* tv) const; < virtual timeval conv_native_to_exttime(const timeval* tv) const; < < /// store data from gazebo time message < void on_time_sync_msg(ConstSimTimePtr &msg); < < private: < timeval get_system_time() const; < timeval add(timeval a, timeval b) const; < timeval subtract(timeval a, timeval b) const; < < private: < Clock* clock_; < < //from last msg all in sec < timeval last_sim_time_; < timeval last_sys_recv_time_; < double last_real_time_factor_; < timeval last_native_sim_time_; < < }; --- > class GazsimTimesource : public TimeSource > { > public: > //Constructor > GazsimTimesource(Clock *clock); > ///Destructor > ~GazsimTimesource(); > > virtual void get_time(timeval *tv) const; > virtual timeval conv_to_realtime(const timeval *tv) const; > virtual timeval conv_native_to_exttime(const timeval *tv) const; > > /// store data from gazebo time message > void on_time_sync_msg(ConstSimTimePtr &msg); > > private: > timeval get_system_time() const; > timeval add(timeval a, timeval b) const; > timeval subtract(timeval a, timeval b) const; > > private: > Clock *clock_; > > //from last msg all in sec > timeval last_sim_time_; > timeval last_sys_recv_time_; > double last_real_time_factor_; > timeval last_native_sim_time_; > }; 72c70 < } --- > } // namespace fawkes diff -r fawkes-robotino/fawkes/src/plugins/gazebo/gazsim-timesource/gazsim_timesource_thread.cpp fawkes-robotino-2016/fawkes/src/plugins/gazebo/gazsim-timesource/gazsim_timesource_thread.cpp 33,34c33,34 < : Thread("GazsimTimesourceThread", Thread::OPMODE_WAITFORWAKEUP), < BlockedTimingAspect(BlockedTimingAspect::WAKEUP_HOOK_WORLDSTATE) --- > : Thread("GazsimTimesourceThread", Thread::OPMODE_WAITFORWAKEUP), > BlockedTimingAspect(BlockedTimingAspect::WAKEUP_HOOK_WORLDSTATE) 42,43c42,43 < < void GazsimTimesourceThread::init() --- > void > GazsimTimesourceThread::init() 45c45 < logger->log_info(name(), "GazsimTimesource initializing"); --- > logger->log_info(name(), "GazsimTimesource initializing"); 47,48c47,50 < //Create Subscriber < time_sync_sub_ = gazebo_world_node->Subscribe(config->get_string("/gazsim/topics/time"), &GazsimTimesourceThread::on_time_sync_msg, this); --- > //Create Subscriber > time_sync_sub_ = gazebo_world_node->Subscribe(config->get_string("/gazsim/topics/time"), > &GazsimTimesourceThread::on_time_sync_msg, > this); 50,51c52,53 < //Create Time Source < time_source_ = new GazsimTimesource(clock); --- > //Create Time Source > time_source_ = new GazsimTimesource(clock); 53,54c55,56 < //register timesource and make it default < clock->register_ext_timesource(time_source_, true); --- > //register timesource and make it default > clock->register_ext_timesource(time_source_, true); 57,58c59,60 < < void GazsimTimesourceThread::finalize() --- > void > GazsimTimesourceThread::finalize() 60,62c62,64 < //remove time source < clock->remove_ext_timesource(time_source_); < delete time_source_; --- > //remove time source > clock->remove_ext_timesource(time_source_); > delete time_source_; 65,66c67,68 < < void GazsimTimesourceThread::loop() --- > void > GazsimTimesourceThread::loop() 68c70 < //nothing interesting --- > //nothing interesting 71c73,74 < void GazsimTimesourceThread::on_time_sync_msg(ConstSimTimePtr &msg) --- > void > GazsimTimesourceThread::on_time_sync_msg(ConstSimTimePtr &msg) 73,76c76,79 < // logger->log_info(name(), "Got Simulation Time"); < < //provide time source with newest message < time_source_->on_time_sync_msg(msg); --- > // logger->log_info(name(), "Got Simulation Time"); > > //provide time source with newest message > time_source_->on_time_sync_msg(msg); diff -r fawkes-robotino/fawkes/src/plugins/gazebo/gazsim-timesource/gazsim_timesource_thread.h fawkes-robotino-2016/fawkes/src/plugins/gazebo/gazsim-timesource/gazsim_timesource_thread.h 23,24c23,24 < #ifndef __PLUGINS_GAZSIM__TIMESOURCE_THREAD_H_ < #define __PLUGINS_GAZSIM__TIMESOURCE_THREAD_H_ --- > #ifndef _PLUGINS_GAZSIMTIMESOURCE_THREAD_H__ > #define _PLUGINS_GAZSIMTIMESOURCE_THREAD_H__ 26c26,29 < #include <core/threading/thread.h> --- > #include "../msgs/SimTime.pb.h" > #include "gazsim_timesource_source.h" > > #include <aspect/blocked_timing.h> 28d30 < #include <aspect/logging.h> 30,31c32,33 < #include <aspect/blocked_timing.h> < #include <boost/asio.hpp> --- > #include <aspect/logging.h> > #include <core/threading/thread.h> 33d34 < #include <gazebo/physics/physics.hh> 36,37c37,38 < #include "gazsim_timesource_source.h" < #include "../msgs/SimTime.pb.h" --- > #include <boost/asio.hpp> > #include <gazebo/physics/physics.hh> 41,47c42,47 < class GazsimTimesourceThread < : public fawkes::Thread, < public fawkes::ClockAspect, < public fawkes::BlockedTimingAspect, < public fawkes::ConfigurableAspect, < public fawkes::LoggingAspect, < public fawkes::GazeboAspect --- > class GazsimTimesourceThread : public fawkes::Thread, > public fawkes::ClockAspect, > public fawkes::BlockedTimingAspect, > public fawkes::ConfigurableAspect, > public fawkes::LoggingAspect, > public fawkes::GazeboAspect 49,62c49,59 < public: < GazsimTimesourceThread(); < ~GazsimTimesourceThread(); < < virtual void init(); < virtual void loop(); < virtual void finalize(); < < private: < //Timesource to give the fawkes clock < fawkes::GazsimTimesource* time_source_; < < //subscriber to get time msgs from < gazebo::transport::SubscriberPtr time_sync_sub_; --- > public: > GazsimTimesourceThread(); > ~GazsimTimesourceThread(); > > virtual void init(); > virtual void loop(); > virtual void finalize(); > > private: > //Timesource to give the fawkes clock > fawkes::GazsimTimesource *time_source_; 64,65c61,62 < //handler < void on_time_sync_msg(ConstSimTimePtr &msg); --- > //subscriber to get time msgs from > gazebo::transport::SubscriberPtr time_sync_sub_; 66a64,65 > //handler > void on_time_sync_msg(ConstSimTimePtr &msg); diff -r fawkes-robotino/fawkes/src/plugins/gazebo/gazsim-timesource/Makefile fawkes-robotino-2016/fawkes/src/plugins/gazebo/gazsim-timesource/Makefile 25d24 < 31c30,31 < OBJS_all = $(OBJS_gazsim_timesource) --- > OBJS_all = $(OBJS_gazsim_timesource) > PLUGINS_all = $(PLUGINDIR)/gazsim-timesource.so 38,39c38,39 < $(call boost-libs-cflags,$(REQ_BOOST_LIBS)) \ < $(CFLAGS_GAZEBO) --- > $(call boost-libs-cflags,$(REQ_BOOST_LIBS)) \ > $(CFLAGS_GAZEBO) 41,42c41,42 < $(call boost-libs-ldflags,$(REQ_BOOST_LIBS)) \ < $(LDFLAGS_GAZEBO) --- > $(call boost-libs-ldflags,$(REQ_BOOST_LIBS)) \ > $(LDFLAGS_GAZEBO) 44c44 < PLUGINS_all = $(PLUGINDIR)/gazsim-timesource.so --- > PLUGINS_build = $(PLUGINS_all) diff -r fawkes-robotino/fawkes/src/plugins/gazebo/gazsim-vis-localization/gazsim_vis_localization_plugin.cpp fawkes-robotino-2016/fawkes/src/plugins/gazebo/gazsim-vis-localization/gazsim_vis_localization_plugin.cpp 21,22d20 < #include <core/plugin.h> < 24a23,24 > #include <core/plugin.h> > 34,36c34,35 < public: < < /** Constructor. --- > public: > /** Constructor. 39,43c38,41 < GazsimVisLocalizationPlugin(Configuration *config) < : Plugin(config) < { < thread_list.push_back(new VisLocalizationThread()); < } --- > explicit GazsimVisLocalizationPlugin(Configuration *config) : Plugin(config) > { > thread_list.push_back(new VisLocalizationThread()); > } diff -r fawkes-robotino/fawkes/src/plugins/gazebo/gazsim-vis-localization/gazsim_vis_localization_thread.cpp fawkes-robotino-2016/fawkes/src/plugins/gazebo/gazsim-vis-localization/gazsim_vis_localization_thread.cpp 22a23,24 > #include <aspect/logging.h> > #include <interfaces/Position3DInterface.h> 24,25d25 < #include <stdio.h> < #include <cmath> 28,30c28 < #include <interfaces/Position3DInterface.h> < < #include <gazebo/transport/Node.hh> --- > #include <cmath> 31a30 > #include <gazebo/transport/Node.hh> 33c32 < #include <aspect/logging.h> --- > #include <stdio.h> 45,46c44,45 < : Thread("VisLocalizationThread", Thread::OPMODE_WAITFORWAKEUP), < BlockedTimingAspect(BlockedTimingAspect::WAKEUP_HOOK_WORLDSTATE) --- > : Thread("VisLocalizationThread", Thread::OPMODE_WAITFORWAKEUP), > BlockedTimingAspect(BlockedTimingAspect::WAKEUP_HOOK_WORLDSTATE) 50c49,50 < void VisLocalizationThread::init() --- > void > VisLocalizationThread::init() 52c52 < logger->log_debug(name(), "Initializing Visualization of the Localization"); --- > logger->log_debug(name(), "Initializing Visualization of the Localization"); 54,63c54,63 < //read config values < update_rate_ = config->get_float("/gazsim/visualization/localization/update-rate"); < robot_name_ = config->get_string("/gazsim/robot-name"); < label_script_name_ = config->get_string("/gazsim/visualization/label-script-name"); < arrow_script_name_ = config->get_string("/gazsim/visualization/label-arrow-name"); < location_scripts_ = config->get_string("/gazsim/visualization/location-scripts"); < location_textures_ = config->get_string("/gazsim/visualization/location-textures"); < parent_name_ = config->get_string("/gazsim/visualization/localization/parent-name"); < label_size_ = config->get_float("/gazsim/visualization/localization/label-size"); < label_height_ = config->get_float("/gazsim/visualization/localization/label-height"); --- > //read config values > update_rate_ = config->get_float("/gazsim/visualization/localization/update-rate"); > robot_name_ = config->get_string("/gazsim/robot-name"); > label_script_name_ = config->get_string("/gazsim/visualization/label-script-name"); > arrow_script_name_ = config->get_string("/gazsim/visualization/label-arrow-name"); > location_scripts_ = config->get_string("/gazsim/visualization/location-scripts"); > location_textures_ = config->get_string("/gazsim/visualization/location-textures"); > parent_name_ = config->get_string("/gazsim/visualization/localization/parent-name"); > label_size_ = config->get_float("/gazsim/visualization/localization/label-size"); > label_height_ = config->get_float("/gazsim/visualization/localization/label-height"); 65c65 < last_update_time_ = clock->now().in_sec(); --- > last_update_time_ = clock->now().in_sec(); 67,68c67,68 < //open interface < pose_if_ = blackboard->open_for_reading<Position3DInterface>("Pose"); --- > //open interface > pose_if_ = blackboard->open_for_reading<Position3DInterface>("Pose"); 70,71c70,71 < //create publisher < visual_publisher_ = gazebo_world_node->Advertise<gazebo::msgs::Visual>("~/visual", 5); --- > //create publisher > visual_publisher_ = gazebo_world_node->Advertise<gazebo::msgs::Visual>("~/visual", 5); 74c74,75 < void VisLocalizationThread::finalize() --- > void > VisLocalizationThread::finalize() 76c77 < blackboard->close(pose_if_); --- > blackboard->close(pose_if_); 79c80,81 < void VisLocalizationThread::loop() --- > void > VisLocalizationThread::loop() 81,105c83,105 < //visualize the estimated position of the robot every few seconds < fawkes::Time new_time = clock->now(); < double time_elapsed = new_time.in_sec() - last_update_time_.in_sec(); < if(time_elapsed > 1 / update_rate_) < { < last_update_time_ = new_time; < < //read pose < pose_if_->read(); < double x = pose_if_->translation(0); < double y = pose_if_->translation(1); < //calculate ori from quaternion in interface < double* quat = pose_if_->rotation(); < double ori = tf::get_yaw(tf::Quaternion(quat[0], quat[1], quat[2], quat[3])); < if(std::isnan(ori)) < { < ori = 0.0; < } < < //create label with number < msgs::Visual msg_number; < msg_number.set_name((robot_name_ + "-localization-label").c_str()); < msg_number.set_parent_name(parent_name_.c_str()); < msgs::Geometry *geomMsg = msg_number.mutable_geometry(); < geomMsg->set_type(msgs::Geometry::PLANE); --- > //visualize the estimated position of the robot every few seconds > fawkes::Time new_time = clock->now(); > double time_elapsed = new_time.in_sec() - last_update_time_.in_sec(); > if (time_elapsed > 1 / update_rate_) { > last_update_time_ = new_time; > > //read pose > pose_if_->read(); > double x = pose_if_->translation(0); > double y = pose_if_->translation(1); > //calculate ori from quaternion in interface > double *quat = pose_if_->rotation(); > double ori = tf::get_yaw(tf::Quaternion(quat[0], quat[1], quat[2], quat[3])); > if (std::isnan(ori)) { > ori = 0.0; > } > > //create label with number > msgs::Visual msg_number; > msg_number.set_name((robot_name_ + "-localization-label").c_str()); > msg_number.set_parent_name(parent_name_.c_str()); > msgs::Geometry *geomMsg = msg_number.mutable_geometry(); > geomMsg->set_type(msgs::Geometry::PLANE); 107,108c107,109 < msgs::Set(geomMsg->mutable_plane()->mutable_normal(), ignition::math::Vector3d(0.0, 0.0, 1.0)); < msgs::Set(geomMsg->mutable_plane()->mutable_size(), ignition::math::Vector2d(label_size_, label_size_)); --- > msgs::Set(geomMsg->mutable_plane()->mutable_normal(), ignition::math::Vector3d(0.0, 0.0, 1.0)); > msgs::Set(geomMsg->mutable_plane()->mutable_size(), > ignition::math::Vector2d(label_size_, label_size_)); 110,112c111,113 < msgs::Set(geomMsg->mutable_plane()->mutable_normal(), math::Vector3(0.0, 0.0, 1.0)); < msgs::Set(geomMsg->mutable_plane()->mutable_size(), math::Vector2d(label_size_, label_size_)); < msg_number.set_transparency(0.2); --- > msgs::Set(geomMsg->mutable_plane()->mutable_normal(), math::Vector3(0.0, 0.0, 1.0)); > msgs::Set(geomMsg->mutable_plane()->mutable_size(), math::Vector2d(label_size_, label_size_)); > msg_number.set_transparency(0.2); 114c115 < msg_number.set_cast_shadows(false); --- > msg_number.set_cast_shadows(false); 116c117 < msgs::Set(msg_number.mutable_pose(), ignition::math::Pose3d(x, y, label_height_, 0, 0, 0)); --- > msgs::Set(msg_number.mutable_pose(), ignition::math::Pose3d(x, y, label_height_, 0, 0, 0)); 118c119 < msgs::Set(msg_number.mutable_pose(), math::Pose(x, y, label_height_, 0, 0, 0)); --- > msgs::Set(msg_number.mutable_pose(), math::Pose(x, y, label_height_, 0, 0, 0)); 120,123c121,124 < msgs::Material::Script* script = msg_number.mutable_material()->mutable_script(); < script->add_uri(location_scripts_.c_str()); < script->add_uri(location_textures_.c_str()); < script->set_name(label_script_name_.c_str()); --- > msgs::Material::Script *script = msg_number.mutable_material()->mutable_script(); > script->add_uri(location_scripts_.c_str()); > script->add_uri(location_textures_.c_str()); > script->set_name(label_script_name_.c_str()); 125c126 < visual_publisher_->Publish(msg_number); --- > visual_publisher_->Publish(msg_number); 127c128 < //create label with direction arrow --- > //create label with direction arrow 129,151c130,156 < msgs::Visual msg_arrow; < msg_arrow.set_name((robot_name_ + "-localization-arrow").c_str()); < msg_arrow.set_parent_name(parent_name_.c_str()); < msgs::Geometry *geomArrowMsg = msg_arrow.mutable_geometry(); < geomArrowMsg->set_type(msgs::Geometry::PLANE); < #if GAZEBO_MAJOR_VERSION > 5 < msgs::Set(geomArrowMsg->mutable_plane()->mutable_normal(), ignition::math::Vector3d(0.0, 0.0, 1.0)); < msgs::Set(geomArrowMsg->mutable_plane()->mutable_size(), ignition::math::Vector2d(0.17, 0.17)); < #else < msgs::Set(geomArrowMsg->mutable_plane()->mutable_normal(), math::Vector3(0.0, 0.0, 1.0)); < msgs::Set(geomArrowMsg->mutable_plane()->mutable_size(), math::Vector2d(0.17, 0.17)); < msg_arrow.set_transparency(0.4); < #endif < msg_arrow.set_cast_shadows(false); < #if GAZEBO_MAJOR_VERSION > 5 < msgs::Set(msg_arrow.mutable_pose(), ignition::math::Pose3d(x, y, label_height_ + 0.01, 0, 0, ori - /*turn image right*/ M_PI / 2)); < #else < msgs::Set(msg_arrow.mutable_pose(), math::Pose(x, y, label_height_ + 0.01, 0, 0, ori - /*turn image right*/ M_PI / 2)); < #endif < msgs::Material::Script* arrow_script = msg_arrow.mutable_material()->mutable_script(); < arrow_script->add_uri(location_scripts_.c_str()); < arrow_script->add_uri(location_textures_.c_str()); < arrow_script->set_name(arrow_script_name_.c_str()); --- > msgs::Visual msg_arrow; > msg_arrow.set_name((robot_name_ + "-localization-arrow").c_str()); > msg_arrow.set_parent_name(parent_name_.c_str()); > msgs::Geometry *geomArrowMsg = msg_arrow.mutable_geometry(); > geomArrowMsg->set_type(msgs::Geometry::PLANE); > # if GAZEBO_MAJOR_VERSION > 5 > msgs::Set(geomArrowMsg->mutable_plane()->mutable_normal(), > ignition::math::Vector3d(0.0, 0.0, 1.0)); > msgs::Set(geomArrowMsg->mutable_plane()->mutable_size(), ignition::math::Vector2d(0.17, 0.17)); > # else > msgs::Set(geomArrowMsg->mutable_plane()->mutable_normal(), math::Vector3(0.0, 0.0, 1.0)); > msgs::Set(geomArrowMsg->mutable_plane()->mutable_size(), math::Vector2d(0.17, 0.17)); > msg_arrow.set_transparency(0.4); > # endif > msg_arrow.set_cast_shadows(false); > # if GAZEBO_MAJOR_VERSION > 5 > msgs::Set(msg_arrow.mutable_pose(), > ignition::math::Pose3d( > x, y, label_height_ + 0.01, 0, 0, ori - /*turn image right*/ M_PI / 2)); > # else > msgs::Set(msg_arrow.mutable_pose(), > math::Pose(x, y, label_height_ + 0.01, 0, 0, ori - /*turn image right*/ M_PI / 2)); > # endif > msgs::Material::Script *arrow_script = msg_arrow.mutable_material()->mutable_script(); > arrow_script->add_uri(location_scripts_.c_str()); > arrow_script->add_uri(location_textures_.c_str()); > arrow_script->set_name(arrow_script_name_.c_str()); 153c158 < visual_publisher_->Publish(msg_arrow); --- > visual_publisher_->Publish(msg_arrow); 155c160 < } --- > } diff -r fawkes-robotino/fawkes/src/plugins/gazebo/gazsim-vis-localization/gazsim_vis_localization_thread.h fawkes-robotino-2016/fawkes/src/plugins/gazebo/gazsim-vis-localization/gazsim_vis_localization_thread.h 21,22c21,22 < #ifndef __PLUGINS_GAZSIM_VIS_LOCALIZATION_THREAD_H_ < #define __PLUGINS_GAZSIM_VIS_LOCALIZATION_THREAD_H_ --- > #ifndef _PLUGINS_GAZSIM_VIS_LOCALIZATION_THREAD_H_ > #define _PLUGINS_GAZSIM_VIS_LOCALIZATION_THREAD_H_ 24c24,25 < #include <core/threading/thread.h> --- > #include <aspect/blackboard.h> > #include <aspect/blocked_timing.h> 28,29c29 < #include <aspect/blackboard.h> < #include <aspect/blocked_timing.h> --- > #include <core/threading/thread.h> 32a33 > 36d36 < #include <gazebo/transport/TransportTypes.hh> 37a38 > #include <gazebo/transport/TransportTypes.hh> 40d40 < 42c42 < class Position3DInterface; --- > class Position3DInterface; 45,52c45,51 < class VisLocalizationThread < : public fawkes::Thread, < public fawkes::ClockAspect, < public fawkes::LoggingAspect, < public fawkes::ConfigurableAspect, < public fawkes::BlackBoardAspect, < public fawkes::BlockedTimingAspect, < public fawkes::GazeboAspect --- > class VisLocalizationThread : public fawkes::Thread, > public fawkes::ClockAspect, > public fawkes::LoggingAspect, > public fawkes::ConfigurableAspect, > public fawkes::BlackBoardAspect, > public fawkes::BlockedTimingAspect, > public fawkes::GazeboAspect 54,55c53,54 < public: < VisLocalizationThread(); --- > public: > VisLocalizationThread(); 57,74c56,74 < virtual void init(); < virtual void loop(); < virtual void finalize(); < < private: < //read pose interface < fawkes::Position3DInterface *pose_if_; < < //Publisher for visual msgs < gazebo::transport::PublisherPtr visual_publisher_; < < double update_rate_; < fawkes::Time last_update_time_; < < //config values < std::string robot_name_, label_script_name_, location_scripts_, location_textures_, parent_name_, arrow_script_name_; < float label_size_; < float label_height_; --- > virtual void init(); > virtual void loop(); > virtual void finalize(); > > private: > //read pose interface > fawkes::Position3DInterface *pose_if_; > > //Publisher for visual msgs > gazebo::transport::PublisherPtr visual_publisher_; > > double update_rate_; > fawkes::Time last_update_time_; > > //config values > std::string robot_name_, label_script_name_, location_scripts_, location_textures_, parent_name_, > arrow_script_name_; > float label_size_; > float label_height_; diff -r fawkes-robotino/fawkes/src/plugins/gazebo/gazsim-vis-localization/Makefile fawkes-robotino-2016/fawkes/src/plugins/gazebo/gazsim-vis-localization/Makefile 25c25 < LIBS_gazsim_vis_localization = fawkescore fawkesutils fawkesaspects fvutils \ --- > LIBS_gazsim_vis_localization = m fawkescore fawkesutils fawkesaspects fvutils \ 31a32 > PLUGINS_all = $(PLUGINDIR)/gazsim-vis-localization.so 37c38,39 < LDFLAGS += $(LDFLAGS_GAZEBO) $(LDFLAGS_PROTOBUF) -lm $(call boost-libs-ldflags,system) -lboost_system --- > LDFLAGS += $(LDFLAGS_GAZEBO) $(LDFLAGS_PROTOBUF) \ > $(call boost-libs-ldflags,system) 39c41 < PLUGINS_all = $(PLUGINDIR)/gazsim-vis-localization.so --- > PLUGINS_build = $(PLUGINS_all) diff -r fawkes-robotino/fawkes/src/plugins/gazebo/gazsim-webcam/gazsim_webcam.cpp fawkes-robotino-2016/fawkes/src/plugins/gazebo/gazsim-webcam/gazsim_webcam.cpp 22a23 > #include <fvutils/color/conversions.h> 24,25d24 < #include <stdio.h> < #include <math.h> 28d26 < #include <gazebo/transport/Node.hh> 29a28 > #include <gazebo/transport/Node.hh> 31,32c30,31 < < #include <fvutils/color/conversions.h> --- > #include <math.h> > #include <stdio.h> 41d39 < 48,50c46,48 < GazsimWebcam::GazsimWebcam(std::string shm_id, < gazebo::transport::NodePtr gazebo_world_node, < Configuration* config) --- > GazsimWebcam::GazsimWebcam(std::string shm_id, > gazebo::transport::NodePtr gazebo_world_node, > Configuration * config) 52,84c50,78 < shm_buffer_ = NULL; < //read config values < std::string robot_name = config->get_string("/gazsim/robot-name"); < shm_id_ = robot_name + "/" + shm_id; < topic_name_ = ("~/" < + robot_name < + config->get_string((std::string("/gazsim/webcam/topic-suffixes/") < + shm_id).c_str())); < width_ = config->get_float((std::string("/gazsim/webcam/widths/") + shm_id).c_str()); < height_ = config->get_float((std::string("/gazsim/webcam/heights/") + shm_id).c_str()); < frame_ = config->get_string((std::string("/gazsim/webcam/frames/") + shm_id).c_str()); < < format_from_ = firevision::RGB; < format_to_ = firevision::YUV422_PLANAR; < < //subscribing to gazebo publisher < //the messages are published by the sensor itself and not by a robot plugin < //therefore we have to use the world node < webcam_sub_ = gazebo_world_node->Subscribe(topic_name_, &GazsimWebcam::on_webcam_data_msg, this); < < //initialize shared memory image buffer < shm_buffer_ = new firevision::SharedMemoryImageBuffer( shm_id_.c_str(), < format_to_, < width_, < height_ < ); < if (!shm_buffer_->is_valid()) { < throw fawkes::Exception("Shared memory segment not valid"); < } < shm_buffer_->set_frame_id(frame_.c_str()); < buffer_ = shm_buffer_->buffer(); < //enable locking < shm_buffer_->add_semaphore(); --- > shm_buffer_ = NULL; > //read config values > std::string robot_name = config->get_string("/gazsim/robot-name"); > shm_id_ = robot_name + "/" + shm_id; > topic_name_ = > ("~/" + robot_name > + config->get_string((std::string("/gazsim/webcam/topic-suffixes/") + shm_id).c_str())); > width_ = config->get_float((std::string("/gazsim/webcam/widths/") + shm_id).c_str()); > height_ = config->get_float((std::string("/gazsim/webcam/heights/") + shm_id).c_str()); > frame_ = config->get_string((std::string("/gazsim/webcam/frames/") + shm_id).c_str()); > > format_from_ = firevision::RGB; > format_to_ = firevision::YUV422_PLANAR; > > //subscribing to gazebo publisher > //the messages are published by the sensor itself and not by a robot plugin > //therefore we have to use the world node > webcam_sub_ = gazebo_world_node->Subscribe(topic_name_, &GazsimWebcam::on_webcam_data_msg, this); > > //initialize shared memory image buffer > shm_buffer_ = > new firevision::SharedMemoryImageBuffer(shm_id_.c_str(), format_to_, width_, height_); > if (!shm_buffer_->is_valid()) { > throw fawkes::Exception("Shared memory segment not valid"); > } > shm_buffer_->set_frame_id(frame_.c_str()); > buffer_ = shm_buffer_->buffer(); > //enable locking > shm_buffer_->add_semaphore(); 89c83 < delete this->shm_buffer_; --- > delete this->shm_buffer_; 92,100c86,98 < void GazsimWebcam::on_webcam_data_msg(ConstImageStampedPtr &msg) < { < //convert image data and write it in the shared memory buffer < //lock the shm so noone can read a half written image < shm_buffer_->lock_for_write(); < convert(format_from_, format_to_, < (const unsigned char*) msg->image().data().data(), buffer_, < width_, height_); < shm_buffer_->unlock(); --- > void > GazsimWebcam::on_webcam_data_msg(ConstImageStampedPtr &msg) > { > //convert image data and write it in the shared memory buffer > //lock the shm so noone can read a half written image > shm_buffer_->lock_for_write(); > convert(format_from_, > format_to_, > (const unsigned char *)msg->image().data().data(), > buffer_, > width_, > height_); > shm_buffer_->unlock(); diff -r fawkes-robotino/fawkes/src/plugins/gazebo/gazsim-webcam/gazsim_webcam.h fawkes-robotino-2016/fawkes/src/plugins/gazebo/gazsim-webcam/gazsim_webcam.h 21,22c21,22 < #ifndef __PLUGINS_GAZSIM_WEBCAM_H_ < #define __PLUGINS_GAZSIM_WEBCAM_H_ --- > #ifndef _PLUGINS_GAZSIM_WEBCAM_H_ > #define _PLUGINS_GAZSIM_WEBCAM_H_ 24c24,25 < #include <core/threading/thread.h> --- > #include <aspect/blackboard.h> > #include <aspect/blocked_timing.h> 28,31d28 < #include <aspect/blackboard.h> < #include <aspect/blocked_timing.h> < #include <plugins/gazebo/aspect/gazebo.h> < #include <string.h> 33c30 < --- > #include <core/threading/thread.h> 34a32,33 > #include <plugins/gazebo/aspect/gazebo.h> > 35a35 > #include <string.h> 38d37 < #include <gazebo/transport/TransportTypes.hh> 39a39 > #include <gazebo/transport/TransportTypes.hh> 42d41 < 45,71c44,70 < public: < GazsimWebcam(std::string shm_id, < gazebo::transport::NodePtr gazebo_world_node, < fawkes::Configuration* config); < ~GazsimWebcam(); < < private: < //Subscriber to receive webcam data from gazebo < gazebo::transport::SubscriberPtr webcam_sub_; < < //handler function for incoming webcam data messages < void on_webcam_data_msg(ConstImageStampedPtr &msg); < < //shared memory buffer < firevision::SharedMemoryImageBuffer *shm_buffer_; < //reference to the buffer of shm_buffer_ < unsigned char *buffer_; < < //config values < //topic name of the gazebo message publisher < std::string topic_name_; < double width_, height_; < //id of the shared memory object < std::string shm_id_; < std::string frame_; < firevision::colorspace_t format_from_; < firevision::colorspace_t format_to_; --- > public: > GazsimWebcam(std::string shm_id, > gazebo::transport::NodePtr gazebo_world_node, > fawkes::Configuration * config); > ~GazsimWebcam(); > > private: > //Subscriber to receive webcam data from gazebo > gazebo::transport::SubscriberPtr webcam_sub_; > > //handler function for incoming webcam data messages > void on_webcam_data_msg(ConstImageStampedPtr &msg); > > //shared memory buffer > firevision::SharedMemoryImageBuffer *shm_buffer_; > //reference to the buffer of shm_buffer_ > unsigned char *buffer_; > > //config values > //topic name of the gazebo message publisher > std::string topic_name_; > double width_, height_; > //id of the shared memory object > std::string shm_id_; > std::string frame_; > firevision::colorspace_t format_from_; > firevision::colorspace_t format_to_; diff -r fawkes-robotino/fawkes/src/plugins/gazebo/gazsim-webcam/gazsim_webcam_plugin.cpp fawkes-robotino-2016/fawkes/src/plugins/gazebo/gazsim-webcam/gazsim_webcam_plugin.cpp 22,23d21 < #include <core/plugin.h> < 25a24,25 > #include <core/plugin.h> > 35,37c35,36 < public: < < /** Constructor. --- > public: > /** Constructor. 40,44c39,42 < GazsimWebcamPlugin(Configuration *config) < : Plugin(config) < { < thread_list.push_back(new WebcamSimThread()); < } --- > explicit GazsimWebcamPlugin(Configuration *config) : Plugin(config) > { > thread_list.push_back(new WebcamSimThread()); > } diff -r fawkes-robotino/fawkes/src/plugins/gazebo/gazsim-webcam/gazsim_webcam_thread.cpp fawkes-robotino-2016/fawkes/src/plugins/gazebo/gazsim-webcam/gazsim_webcam_thread.cpp 23a24,25 > #include <aspect/logging.h> > #include <fvutils/color/conversions.h> 25,26d26 < #include <stdio.h> < #include <math.h> 29d28 < #include <gazebo/transport/Node.hh> 30a30 > #include <gazebo/transport/Node.hh> 32,34c32,33 < #include <aspect/logging.h> < < #include <fvutils/color/conversions.h> --- > #include <math.h> > #include <stdio.h> 46,47c45,46 < : Thread("WebcamSimThread", Thread::OPMODE_WAITFORWAKEUP), < BlockedTimingAspect(BlockedTimingAspect::WAKEUP_HOOK_SENSOR_PROCESS) --- > : Thread("WebcamSimThread", Thread::OPMODE_WAITFORWAKEUP), > BlockedTimingAspect(BlockedTimingAspect::WAKEUP_HOOK_SENSOR_PROCESS) 51c50,51 < void WebcamSimThread::init() --- > void > WebcamSimThread::init() 53,54c53,54 < logger->log_debug(name(), "Initializing Simulation of the Webcams"); < shm_ids_ = config->get_strings("/gazsim/webcam/shm-image-ids"); --- > logger->log_debug(name(), "Initializing Simulation of the Webcams"); > shm_ids_ = config->get_strings("/gazsim/webcam/shm-image-ids"); 56,59c56,58 < for (std::vector<std::string>::iterator it = shm_ids_.begin(); it != shm_ids_.end(); ++it) < { < webcams_.push_back(new GazsimWebcam(*it, gazebo_world_node, config)); < } --- > for (std::vector<std::string>::iterator it = shm_ids_.begin(); it != shm_ids_.end(); ++it) { > webcams_.push_back(new GazsimWebcam(*it, gazebo_world_node, config)); > } 62c61,62 < void WebcamSimThread::finalize() --- > void > WebcamSimThread::finalize() 64,67c64,66 < for (std::vector<GazsimWebcam*>::iterator it = webcams_.begin(); it != webcams_.end(); ++it) < { < delete *it; < } --- > for (std::vector<GazsimWebcam *>::iterator it = webcams_.begin(); it != webcams_.end(); ++it) { > delete *it; > } 70c69,70 < void WebcamSimThread::loop() --- > void > WebcamSimThread::loop() 72c72 < //The interesting stuff happens in the callback of the webcams --- > //The interesting stuff happens in the callback of the webcams diff -r fawkes-robotino/fawkes/src/plugins/gazebo/gazsim-webcam/gazsim_webcam_thread.h fawkes-robotino-2016/fawkes/src/plugins/gazebo/gazsim-webcam/gazsim_webcam_thread.h 22,23c22,23 < #ifndef __PLUGINS_GAZSIM_WEBCAM_THREAD_H_ < #define __PLUGINS_GAZSIM_WEBCAM_THREAD_H_ --- > #ifndef _PLUGINS_GAZSIM_WEBCAM_THREAD_H_ > #define _PLUGINS_GAZSIM_WEBCAM_THREAD_H_ 25c25,26 < #include <core/threading/thread.h> --- > #include <aspect/blackboard.h> > #include <aspect/blocked_timing.h> 29,30c30,31 < #include <aspect/blackboard.h> < #include <aspect/blocked_timing.h> --- > #include <core/threading/thread.h> > #include <fvutils/ipc/shm_image.h> 32d32 < #include <string.h> 34d33 < #include <fvutils/ipc/shm_image.h> 35a35 > #include <string.h> 38c38,39 < #include <gazebo/transport/TransportTypes.hh> --- > #include "gazsim_webcam.h" > 39a41 > #include <gazebo/transport/TransportTypes.hh> 42,51c44,50 < #include "gazsim_webcam.h" < < class WebcamSimThread < : public fawkes::Thread, < public fawkes::ClockAspect, < public fawkes::LoggingAspect, < public fawkes::ConfigurableAspect, < public fawkes::BlackBoardAspect, < public fawkes::BlockedTimingAspect, < public fawkes::GazeboAspect --- > class WebcamSimThread : public fawkes::Thread, > public fawkes::ClockAspect, > public fawkes::LoggingAspect, > public fawkes::ConfigurableAspect, > public fawkes::BlackBoardAspect, > public fawkes::BlockedTimingAspect, > public fawkes::GazeboAspect 53,54c52,60 < public: < WebcamSimThread(); --- > public: > WebcamSimThread(); > > virtual void init(); > virtual void loop(); > virtual void finalize(); > > private: > std::vector<GazsimWebcam *> webcams_; 56,64c62,63 < virtual void init(); < virtual void loop(); < virtual void finalize(); < < private: < std::vector<GazsimWebcam*> webcams_; < < //config values < std::vector<std::string> shm_ids_; --- > //config values > std::vector<std::string> shm_ids_; diff -r fawkes-robotino/fawkes/src/plugins/gazebo/gazsim-webcam/Makefile fawkes-robotino-2016/fawkes/src/plugins/gazebo/gazsim-webcam/Makefile 25c25 < LIBS_gazsim_webcam = fawkescore fawkesutils fawkesaspects fvutils \ --- > LIBS_gazsim_webcam = m fawkescore fawkesutils fawkesaspects fvutils \ 30a31 > PLUGINS_all = $(PLUGINDIR)/gazsim-webcam.so 36c37,38 < LDFLAGS += $(LDFLAGS_GAZEBO) $(LDFLAGS_PROTOBUF) -lm $(call boost-libs-ldflags,system) -lboost_system --- > LDFLAGS += $(LDFLAGS_GAZEBO) $(LDFLAGS_PROTOBUF) \ > $(call boost-libs-ldflags,system) 38c40 < PLUGINS_all = $(PLUGINDIR)/gazsim-webcam.so --- > PLUGINS_build = $(PLUGINS_all) diff -r fawkes-robotino/fawkes/src/plugins/gazebo/Makefile fawkes-robotino-2016/fawkes/src/plugins/gazebo/Makefile 26,27c26,27 < gazsim-vis-localization gazsim-webcam gazsim-timesource \ < gazsim-depthcam --- > gazsim-vis-localization gazsim-webcam gazsim-timesource \ > gazsim-depthcam 29c29 < LIBS_gazebo = fawkescore fawkesaspects fawkesgazeboaspect --- > LIBS_gazebo = m fawkescore fawkesaspects fawkesgazeboaspect 32a33 > PLUGINS_all = $(PLUGINDIR)/gazebo.$(SOEXT) 36c37,38 < LDFLAGS += $(LDFLAGS_GAZEBO) $(LDFLAGS_PROTOBUF) -lm $(call boost-libs-ldflags,system) --- > LDFLAGS += $(LDFLAGS_GAZEBO) $(LDFLAGS_PROTOBUF) \ > $(call boost-libs-ldflags,system) 38c40 < PLUGINS_all = $(PLUGINDIR)/gazebo.$(SOEXT) --- > PLUGINS_build = $(PLUGINS_all) diff -r fawkes-robotino/fawkes/src/plugins/gazebo/node_thread.cpp fawkes-robotino-2016/fawkes/src/plugins/gazebo/node_thread.cpp 26,28d25 < #include <gazebo/transport/TransportIface.hh> < #include <gazebo/transport/TransportTypes.hh> < #include <gazebo/transport/Node.hh> 31d27 < #include <gazebo/msgs/msgs.hh> 32a29,32 > #include <gazebo/msgs/msgs.hh> > #include <gazebo/transport/Node.hh> > #include <gazebo/transport/TransportIface.hh> > #include <gazebo/transport/TransportTypes.hh> 46,48c46,48 < : Thread("GazeboNodeThread", Thread::OPMODE_WAITFORWAKEUP), < BlockedTimingAspect(BlockedTimingAspect::WAKEUP_HOOK_POST_LOOP), < AspectProviderAspect(&__gazebo_aspect_inifin) --- > : Thread("GazeboNodeThread", Thread::OPMODE_WAITFORWAKEUP), > BlockedTimingAspect(BlockedTimingAspect::WAKEUP_HOOK_POST_LOOP), > AspectProviderAspect(&gazebo_aspect_inifin_) 52d51 < 58d56 < 62,87c60,84 < //read config values < robot_channel = config->get_string("/gazsim/world-name") < + "/" + config->get_string("/gazsim/robot-name"); < < world_name = config->get_string("/gazsim/world-name"); < < if(gazebo::transport::is_stopped()) { < gazebo::transport::init(); < gazebo::transport::run(); < } < else { < logger->log_warn(name(), "Gazebo already running "); < } < < //Initialize Communication nodes: < //the common one for the robot < gazebo::transport::NodePtr node(new gazebo::transport::Node()); < __gazebonode = node; < //initialize node (this node only communicates with nodes that were initialized with the same string) < __gazebonode->Init(robot_channel.c_str()); < __gazebo_aspect_inifin.set_gazebonode(__gazebonode); < < //and the node for world change messages < __gazebo_world_node = gazebo::transport::NodePtr(new gazebo::transport::Node()); < __gazebo_world_node->Init(world_name.c_str()); < __gazebo_aspect_inifin.set_gazebo_world_node(__gazebo_world_node); --- > //read config values > robot_channel = > config->get_string("/gazsim/world-name") + "/" + config->get_string("/gazsim/robot-name"); > > world_name = config->get_string("/gazsim/world-name"); > > if (gazebo::transport::is_stopped()) { > gazebo::transport::init(); > gazebo::transport::run(); > } else { > logger->log_warn(name(), "Gazebo already running "); > } > > //Initialize Communication nodes: > //the common one for the robot > gazebo::transport::NodePtr node(new gazebo::transport::Node()); > gazebonode_ = node; > //initialize node (this node only communicates with nodes that were initialized with the same string) > gazebonode_->Init(robot_channel.c_str()); > gazebo_aspect_inifin_.set_gazebonode(gazebonode_); > > //and the node for world change messages > gazebo_world_node_ = gazebo::transport::NodePtr(new gazebo::transport::Node()); > gazebo_world_node_->Init(world_name.c_str()); > gazebo_aspect_inifin_.set_gazebo_world_node(gazebo_world_node_); 90d86 < 94,99c90,95 < __gazebonode->Fini(); < __gazebonode.reset(); < __gazebo_aspect_inifin.set_gazebonode(__gazebonode); < __gazebo_world_node->Fini(); < __gazebo_world_node.reset(); < __gazebo_aspect_inifin.set_gazebonode(__gazebo_world_node); --- > gazebonode_->Fini(); > gazebonode_.reset(); > gazebo_aspect_inifin_.set_gazebonode(gazebonode_); > gazebo_world_node_->Fini(); > gazebo_world_node_.reset(); > gazebo_aspect_inifin_.set_gazebonode(gazebo_world_node_); 101d96 < diff -r fawkes-robotino/fawkes/src/plugins/gazebo/node_thread.h fawkes-robotino-2016/fawkes/src/plugins/gazebo/node_thread.h 23,24c23,24 < #ifndef __PLUGINS_GAZEBO_NODE_THREAD_H_ < #define __PLUGINS_GAZEBO_NODE_THREAD_H_ --- > #ifndef _PLUGINS_GAZEBO_NODE_THREAD_H_ > #define _PLUGINS_GAZEBO_NODE_THREAD_H_ 26,30d25 < #include <core/threading/thread.h> < #include <aspect/logging.h> < #include <aspect/configurable.h> < #include <aspect/clock.h> < #include <aspect/blocked_timing.h> 31a27,31 > #include <aspect/blocked_timing.h> > #include <aspect/clock.h> > #include <aspect/configurable.h> > #include <aspect/logging.h> > #include <core/threading/thread.h> 32a33 > #include <sys/types.h> 34d34 < #include <string.h> 36c36 < #include <sys/types.h> --- > #include <string.h> 39,41c39,40 < namespace transport { < class Node; < } --- > namespace transport { > class Node; 42a42 > } // namespace gazebo 44,50c44,49 < class GazeboNodeThread < : public fawkes::Thread, < public fawkes::BlockedTimingAspect, < public fawkes::LoggingAspect, < public fawkes::ConfigurableAspect, < public fawkes::ClockAspect, < public fawkes::AspectProviderAspect --- > class GazeboNodeThread : public fawkes::Thread, > public fawkes::BlockedTimingAspect, > public fawkes::LoggingAspect, > public fawkes::ConfigurableAspect, > public fawkes::ClockAspect, > public fawkes::AspectProviderAspect 52,69c51,74 < public: < GazeboNodeThread(); < virtual ~GazeboNodeThread(); < < virtual void init(); < virtual void loop(); < virtual void finalize(); < < /** Stub to see name in backtrace for easier debugging. @see Thread::run() */ < protected: virtual void run() { Thread::run(); } < < private: < //Node for communication to gazebo-robot-plugins < gazebo::transport::NodePtr __gazebonode; < //Node to control the gazebo world (e.g. spawn visual objects) < gazebo::transport::NodePtr __gazebo_world_node; < //Publisher to send Messages: < gazebo::transport::PublisherPtr __visual_publisher, __model_publisher, __request_publisher, __light_publisher; --- > public: > GazeboNodeThread(); > virtual ~GazeboNodeThread(); > > virtual void init(); > virtual void loop(); > virtual void finalize(); > > /** Stub to see name in backtrace for easier debugging. @see Thread::run() */ > protected: > virtual void > run() > { > Thread::run(); > } > > private: > //Node for communication to gazebo-robot-plugins > gazebo::transport::NodePtr gazebonode_; > //Node to control the gazebo world (e.g. spawn visual objects) > gazebo::transport::NodePtr gazebo_world_node_; > //Publisher to send Messages: > gazebo::transport::PublisherPtr visual_publisher_, model_publisher_, request_publisher_, > light_publisher_; 71c76 < fawkes::GazeboAspectIniFin __gazebo_aspect_inifin; --- > fawkes::GazeboAspectIniFin gazebo_aspect_inifin_; 73,74c78,79 < //channel of a specified robot for the gazebo node communication < std::string robot_channel, world_name; --- > //channel of a specified robot for the gazebo node communication > std::string robot_channel, world_name; diff -r fawkes-robotino/src/plugins/gazebo/Makefile fawkes-robotino-2016/src/plugins/gazebo/Makefile 21c21 < gazsim-machine-signal gazsim-gripper \ --- > gazsim-gripper \ 23a24 > # gazsim-machine-signal
コメントを残す