Joint Control
Selected Joint
The low-level motor controller allows fine-grained control over the robot's joints. You can access various joint states and five commands to your selected joints:
C++
#include <iostream>
#include "bysense_joint.h" // Include the header file for the Joint class
int main() {
// Assuming joint IDs are integers from 1 to 12 for 12 joints
int joint_id = 1; // Change this value to access different joints (1 to 12)
// Create an instance of the Joint class for the specified joint ID
bysense::core::Joint selected_joint;
// Initialize the joint with the provided ID (assuming a constructor or initialization method exists)
myJoint.set_ID(joint_id); // Set the joint ID
// Set joint properties
selected_joint.set_position_rad(1.5); // Set the position to 1.5 radians
selected_joint.set_posmax_rad(2.0); // Set the maximum position to 2.0 radians
selected_joint.set_posmin_rad(0.0); // Set the minimum position to 0.0 radians
selected_joint.set_torque_Nm(10.0); // Set the torque to 10 Nm
selected_joint.set_max_torque_Nm(20.0); // Set the maximum torque to 20 Nm
selected_joint.set_velocity_rads(1.0); // Set the velocity to 1 rad/s
selected_joint.set_max_velocity_rads(5.0); // Set the maximum velocity to 5 rad/s
// Retrieve and display joint properties
std::cout << "Joint ID: " << selected_joint.get_ID() << std::endl;
std::cout << "Joint ID Name: " << selected_joint.get_IDnames() << std::endl;
std::cout << "Current Position (rad): " << selected_joint.get_position_rad() << std::endl;
std::cout << "Max Position (rad): " << selected_joint.get_posmax_rad() << std::endl;
std::cout << "Min Position (rad): " << selected_joint.get_posmin_rad() << std::endl;
std::cout << "Current Torque (Nm): " << selected_joint.get_torque_Nm() << std::endl;
std::cout << "Max Torque (Nm): " << selected_joint.get_max_torque_Nm() << std::endl;
std::cout << "Current Velocity (rad/s): " << selected_joint.get_velocity_rads() << std::endl;
std::cout << "Max Velocity (rad/s): " << selected_joint.get_max_velocity_rads() << std::endl;
std::cout << "Current Controller Temperature (°C): " << selected_joint.get_temp_controller_C() << std::endl;
std::cout << "Max Controller Temperature (°C): " << selected_joint.get_maxtemp_controller_C() << std::endl;
// Set PID controller values
selected_joint.set_kp(0.1); // Set proportional gain
selected_joint.set_ki(0.05); // Set integral gain
selected_joint.set_kd(0.01); // Set derivative gain
// Display PID controller values
std::cout << "Kp: " << selected_joint.get_kp() << std::endl;
std::cout << "Ki: " << selected_joint.get_ki() << std::endl;
std::cout << "Kd: " << selected_joint.get_kd() << std::endl;
return 0;
}
All Joints
bysense has by default 12 joints. If you want to control all of those joints at once you have the change to use the joints class which contains all of the used joints as once.
C++
#include <iostream>
#include "bysense_joints.h" // Include the header file for the Joints class
int main() {
// Create an instance of the Joints class
bysense::core::Joints bysense_joints;
// Example: Set positions for all 12 joints
std::array<double, 12> jointPositions = {0.0, 0.1, 0.2, 0.3, 0.4, 0.5,
0.6, 0.7, 0.8, 0.9, 1.0, 1.1};
bysense_joints.set_JointsPos_rad(jointPositions); // Set positions for all joints
// Example: Set torques for all 12 joints
std::array<double, 12> jointTorques = {5.0, 5.0, 5.0, 5.0, 5.0, 5.0,
5.0, 5.0, 5.0, 5.0, 5.0, 5.0};
bysense_joints.set_JointsTorque(jointTorques); // Set torques for all joints
// Example: Set maximum torques for all 12 joints
std::array<double, 12> jointMaxTorques = {10.0, 10.0, 10.0, 10.0, 10.0, 10.0,
10.0, 10.0, 10.0, 10.0, 10.0, 10.0};
bysense_joints.set_JointsMaxTorque(jointMaxTorques); // Set max torques for all joints
// Example: Set velocities for all 12 joints
std::array<double, 12> jointVelocities = {1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
1.0, 1.0, 1.0, 1.0, 1.0, 1.0};
bysense_joints.set_JointsVel_rads(jointVelocities); // Set velocities for all joints
// Example: Set maximum velocities for all 12 joints
std::array<double, 12> jointMaxVelocities = {2.0, 2.0, 2.0, 2.0, 2.0, 2.0,
2.0, 2.0, 2.0, 2.0, 2.0, 2.0};
bysense_joints.set_JointsMaxVel_rads(jointMaxVelocities); // Set max velocities for all joints
// Example: Retrieve and display current joint positions
std::array<double, 12> currentPositions = bysense_joints.get_JointsPos_rad();
std::cout << "Current Joint Positions (rad): ";
for (const auto& pos : currentPositions) {
std::cout << pos << " ";
}
std::cout << std::endl;
// Example: Retrieve and display current torques
std::array<double, 12> currentTorques = bysense_joints.get_JointsTorque();
std::cout << "Current Joint Torques (Nm): ";
for (const auto& torque : currentTorques) {
std::cout << torque << " ";
}
std::cout << std::endl;
// Example: Retrieve joint temperatures
std::array<double, 12> jointTemperatures = bysense_joints.get_jointTemp_C();
std::cout << "Current Joint Temperatures (°C): ";
for (const auto& temp : jointTemperatures) {
std::cout << temp << " ";
}
std::cout << std::endl;
// Example: Set PID controller gains for all joints
std::array<double, 12> kp = {1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
1.0, 1.0, 1.0, 1.0, 1.0, 1.0};
bysense_joints.set_jointkp(kp); // Set proportional gains for all joints
std::array<double, 12> ki = {0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
0.1, 0.1, 0.1, 0.1, 0.1, 0.1};
bysense_joints.set_jointki(ki); // Set integral gains for all joints
std::array<double, 12> kd = {0.01, 0.01, 0.01, 0.01, 0.01, 0.01,
0.01, 0.01, 0.01, 0.01, 0.01, 0.01};
bysense_joints.set_jointkd(kd); // Set derivative gains for all joints
// Example: Retrieve joint IDs and names
std::array<int, 12> jointIDs = bysense_joints.get_jointsID();
std::cout << "Joint IDs: ";
for (const auto& id : jointIDs) {
std::cout << id << " ";
}
std::cout << std::endl;
std::array<std::string, 12> jointNames = bysense_joints.get_jointsnames();
std::cout << "Joint Names: ";
for (const auto& name : jointNames) {
std::cout << name << " ";
}
std::cout << std::endl;
// Example: Get joint status
std::array<std::string, 12> jointStatus = bysense_joints.get_status();
std::cout << "Joint Status: ";
for (const auto& status : jointStatus) {
std::cout << status << " ";
}
std::cout << std::endl;
return 0;
}
Last updated