10 if (!
nh_->getParam(
"time_step", time_step))
12 ROS_INFO(
"[%s] Could not find the 'time_step' parameter in Parameter Server. Setting it to minimum sampling rate.",
15 int minimumft_sampling_rate = std::numeric_limits<int>::max();
21 rokubimini->getForceTorqueSamplingRate(ft_sampling_rate);
22 auto rokubimini_ethercat = std::dynamic_pointer_cast<RokubiminiEthercat>(
rokubimini);
23 rokubimini_ethercat->setRunsAsync(
true);
24 minimumft_sampling_rate = std::min(minimumft_sampling_rate, ft_sampling_rate);
26 time_step = 1.0 /
static_cast<float>(minimumft_sampling_rate);
31 <<
" Hz, based on time step.");
37 auto rokubimini = std::make_shared<RokubiminiEthercat>(rokubiminiName,
nh_);
42 bus_ = std::unique_ptr<rokubimini::soem_interface::EthercatBusBase>(bus);
53 std::string ethercat_bus_string =
"ethercat_bus";
54 if (
nh_->hasParam(ethercat_bus_string))
60 ROS_ERROR(
"[%s] Could not find ethercat bus in Parameter Server: %s",
name_.c_str(), ethercat_bus_string.c_str());
69 std::string ethercat_address_string =
"rokubiminis/" +
rokubimini->getName() +
"/ethercat_address";
71 if (
nh_->hasParam(ethercat_address_string))
74 nh_->getParam(ethercat_address_string, ethercat_address);
75 if (ethercat_address <= 0)
77 throw ros::Exception(
"The EtherCAT address is not a positive number");
79 ethercat_addr =
static_cast<uint32_t>(ethercat_address);
83 ROS_ERROR(
"Could not find ethercat address in Parameter Server: %s", ethercat_address_string.c_str());
87 auto slave = std::make_shared<RokubiminiEthercatSlave>(
rokubimini->getName(), bus, ethercat_addr, ethercat_pdo_enum);
102 std::this_thread::sleep_for(std::chrono::milliseconds(500));
119 std::lock_guard<std::recursive_mutex> lock(
busMutex_);
126 std::lock_guard<std::recursive_mutex> lock(
busMutex_);
133 std::lock_guard<std::recursive_mutex> lock(
busMutex_);
139 const unsigned int maxRetries,
const double retrySleep)
141 std::lock_guard<std::recursive_mutex> lock(
busMutex_);
142 bus_->waitForState(state,
slave, maxRetries, retrySleep);
147 std::lock_guard<std::recursive_mutex> lock(
busMutex_);
148 if (!
bus_->startup())
158 std::lock_guard<std::recursive_mutex> lock(
busMutex_);
164 std::lock_guard<std::recursive_mutex> lock(
busMutex_);
170 std::lock_guard<std::recursive_mutex> lock(
busMutex_);