gpio_controller.cpp
Go to the documentation of this file.
1 //
2 // Created by muyuexin on 2022/4/29.
3 //
4 
8 
9 namespace gpio_controller
10 {
12 {
13  XmlRpc::XmlRpcValue xml_rpc_value;
14  controller_nh.getParam("gpios", xml_rpc_value);
16 
17  // realtime publisher
18  gpio_state_pub_.reset(new realtime_tools::RealtimePublisher<rm_msgs::GpioData>(controller_nh, "gpio_states", 100));
19 
20  for (int i = 0; i < xml_rpc_value.size(); ++i)
21  {
22  ROS_ASSERT(xml_rpc_value[i].getType() == XmlRpc::XmlRpcValue::TypeString);
23  std::string gpioName = xml_rpc_value[i];
24  rm_control::GpioStateHandle state_handle_ = robot_hw->get<rm_control::GpioStateInterface>()->getHandle(gpioName);
25  gpio_state_handles_.push_back(state_handle_);
26  gpio_state_pub_->msg_.gpio_name.push_back(state_handle_.getName());
27  gpio_state_pub_->msg_.gpio_state.push_back(state_handle_.getValue());
28  if (state_handle_.getType() == rm_control::OUTPUT)
29  {
30  gpio_state_pub_->msg_.gpio_type.push_back("out");
31  }
32  else
33  {
34  gpio_state_pub_->msg_.gpio_type.push_back("in");
35  }
36  ROS_INFO("Got state_gpio %s", gpioName.c_str());
37  if (state_handle_.getType() == rm_control::OUTPUT)
38  {
39  rm_control::GpioCommandHandle command_handle_ =
40  robot_hw->get<rm_control::GpioCommandInterface>()->getHandle(gpioName);
41  gpio_command_handles_.push_back(command_handle_);
42  ROS_INFO("Got command_gpio %s", gpioName.c_str());
43  }
44  }
45 
46  cmd_subscriber_ = controller_nh.subscribe<rm_msgs::GpioData>("command", 1, &Controller::setGpioCmd, this);
47  return true;
48 }
49 
50 void Controller::update(const ros::Time& time, const ros::Duration& period)
51 {
52  if (gpio_state_pub_->trylock())
53  {
54  for (unsigned i = 0; i < gpio_state_handles_.size(); i++)
55  {
56  gpio_state_pub_->msg_.gpio_state[i] = gpio_state_handles_[i].getValue();
57  }
58  gpio_state_pub_->msg_.header.stamp = time;
59  gpio_state_pub_->unlockAndPublish();
60  }
61 }
62 
63 void Controller::setGpioCmd(const rm_msgs::GpioDataConstPtr& msg)
64 {
65  for (unsigned i = 0; i < gpio_command_handles_.size(); i++)
66  {
67  for (unsigned j = 0; j < msg->gpio_name.size(); j++)
68  {
69  if ((msg->gpio_name[j].find(gpio_command_handles_[i].getName()) != std::string::npos))
70  {
71  gpio_command_handles_[i].setCommand(msg->gpio_state[j]);
72  }
73  }
74  }
75  return;
76 }
77 
78 } // namespace gpio_controller
79 
XmlRpc::XmlRpcValue::size
int size() const
rm_control::OUTPUT
OUTPUT
gpio_controller::Controller::gpio_state_handles_
std::vector< rm_control::GpioStateHandle > gpio_state_handles_
Definition: gpio_controller.h:28
hardware_interface::InterfaceManager::get
T * get()
ros::NodeHandle::getParam
bool getParam(const std::string &key, bool &b) const
gpio_controller::Controller::cmd_subscriber_
ros::Subscriber cmd_subscriber_
Definition: gpio_controller.h:31
rm_control::GpioStateHandle::getType
GpioType getType() const
getHandle
ROSCONSOLE_CONSOLE_IMPL_DECL void * getHandle(const std::string &name)
rm_control::GpioStateInterface
realtime_tools::RealtimePublisher
controller_interface::ControllerBase
rm_control::GpioCommandInterface
gpio_controller::Controller::gpio_state_pub_
RtpublisherPtr gpio_state_pub_
Definition: gpio_controller.h:33
PLUGINLIB_EXPORT_CLASS
#define PLUGINLIB_EXPORT_CLASS(class_type, base_class_type)
hardware_interface::RobotHW
gpio_controller.h
XmlRpc::XmlRpcValue::TypeString
TypeString
ros::NodeHandle::subscribe
Subscriber subscribe(const std::string &topic, uint32_t queue_size, const boost::function< void(C)> &callback, const VoidConstPtr &tracked_object=VoidConstPtr(), const TransportHints &transport_hints=TransportHints())
gpio_controller::Controller
Definition: gpio_controller.h:15
XmlRpc::XmlRpcValue::getType
const Type & getType() const
gpio_controller::Controller::init
bool init(hardware_interface::RobotHW *robot_hw, ros::NodeHandle &root_nh, ros::NodeHandle &controller_nh) override
Definition: gpio_controller.cpp:11
XmlRpc::XmlRpcValue::TypeArray
TypeArray
rm_control::GpioStateHandle::getName
std::string getName() const
ros::Time
gpio_controller::Controller::setGpioCmd
void setGpioCmd(const rm_msgs::GpioDataConstPtr &msg)
Definition: gpio_controller.cpp:63
rm_control::GpioCommandHandle
gpio_controller::Controller::update
void update(const ros::Time &time, const ros::Duration &period) override
Definition: gpio_controller.cpp:50
gpio_controller
Definition: gpio_controller.h:13
class_list_macros.hpp
rm_control::GpioStateHandle
ros_utilities.h
gpio_controller::Controller::gpio_command_handles_
std::vector< rm_control::GpioCommandHandle > gpio_command_handles_
Definition: gpio_controller.h:29
ROS_INFO
#define ROS_INFO(...)
rm_control::GpioStateHandle::getValue
bool getValue() const
ROS_ASSERT
#define ROS_ASSERT(cond)
ros::Duration
XmlRpc::XmlRpcValue
ros::NodeHandle


gpio_controller
Author(s):
autogenerated on Sun May 4 2025 02:57:09