noid_lower_controller.cpp
Go to the documentation of this file.
2 
3 using namespace noid;
4 using namespace controller;
5 
6 NoidLowerController::NoidLowerController(const std::string& _port)
7 {
8  ros::param::get("joint_settings/lower/name",name_);
9  ros::param::get("joint_settings/lower/aero_index",aero_index_);
10  ros::param::get("joint_settings/lower/ros_index",ros_index_);
11  ros::param::get("joint_settings/lower/DOF",DOF_);
12  ros::param::get("joint_settings/wheel/aero_index",wheel_aero_index_);
13  ros::param::get("joint_settings/wheel/ros_index",wheel_ros_index_);
14 
15  lower_ = new aero::controller::AeroCommand();
16  if(lower_->openPort(_port,BAUDRATE)){
17  ROS_INFO("%s is connected", _port.c_str());
18  lower_->flushPort();
19  is_open_ = true;
20  }
21  else{
22  ROS_ERROR("%s is not connected", _port.c_str());
23  is_open_ = false;
24  }
25 
26  raw_data_.resize(31);
27  fill(raw_data_.begin(),raw_data_.end(),0);
28 
29 }
30 
32 {
33  if(is_open_)lower_->closePort();
34 }
35 
37 {
38  if(is_open_) raw_data_ = lower_->getPosition(0);
39 
40 }
41 
42 void NoidLowerController::sendPosition(uint16_t _time, std::vector<int16_t>& _data)
43 {
44  if(is_open_) raw_data_ = lower_->actuateByPosition(_time, _data.data());
45  else raw_data_.assign(_data.begin(), _data.end());
46 }
47 
48 void NoidLowerController::remapAeroToRos(std::vector<int16_t>& _before, std::vector<int16_t>& _after)
49 {
50  for(int i=0; i < DOF_; ++i){
51  for(size_t j=0; j < ros_index_.size(); ++j){
52  if(ros_index_[j] == i){
53  _after[i] = _before[aero_index_[j]];
54  break;
55  }
56  }
57  }
58 }
59 
60 void NoidLowerController::remapRosToAero(std::vector<int16_t>& _before, std::vector<int16_t>& _after)
61 {
62  size_t aero_array_size = 30;
63  for(size_t i=0; i < aero_array_size; ++i){
64  for(size_t j=0; j < aero_index_.size(); ++j){
65  if(aero_index_[j] == i){
66  _after[i] = _before[ros_index_[j] + (_before.size()-DOF_)];
67  break;
68  }
69  }
70  }
71 }
72 
73 void NoidLowerController::sendVelocity(std::vector<int16_t>& _data)
74 {
75  size_t aero_array_size = 30;
76  std::vector<int16_t> send_data(aero_array_size);
77  fill(send_data.begin(),send_data.end(),0x7FFF);
78 
79  for(size_t i=0; i < aero_array_size; ++i){
80  for(size_t j=0; j < wheel_aero_index_.size(); ++j){
81  if(wheel_aero_index_[j] == i){
82  send_data[i] = _data[wheel_ros_index_[j]];
83  break;
84  }
85  }
86  }
87 
88  if(is_open_) lower_->actuateBySpeed(send_data.data());
89 }
90 
92 {
93 
94  std::vector<uint16_t> data(30);
95  fill(data.begin(),data.end(),0x7FFF);
96 
97  if(is_open_){
98  for(size_t i=0; i< wheel_aero_index_.size() ; ++i){
99  lower_->onServo(wheel_aero_index_[i] + 1, _value);
100  }
101  }
102 
103 
104 }
105 
NoidLowerController(const std::string &_port)
void remapRosToAero(std::vector< int16_t > &_before, std::vector< int16_t > &_after)
data
void sendVelocity(std::vector< int16_t > &_data)
ROSCPP_DECL bool get(const std::string &key, std::string &s)
#define ROS_INFO(...)
aero::controller::AeroCommand * lower_
void remapAeroToRos(std::vector< int16_t > &_before, std::vector< int16_t > &_after)
#define ROS_ERROR(...)
void sendPosition(uint16_t _time, std::vector< int16_t > &_data)


noid_robot_interface
Author(s):
autogenerated on Sat Jul 20 2019 03:44:26