mirror of
https://gitlab.com/obbart/universal_robots_ros_driver.git
synced 2026-04-10 18:10:47 +02:00
add parameters to URScript program
Fill parameters on PC side
This commit is contained in:
@@ -68,5 +68,9 @@ private:
|
|||||||
comm::INotifier notifier_;
|
comm::INotifier notifier_;
|
||||||
std::unique_ptr<rtde_interface::RTDEClient> rtde_client_;
|
std::unique_ptr<rtde_interface::RTDEClient> rtde_client_;
|
||||||
std::unique_ptr<comm::ReverseInterface> reverse_interface_;
|
std::unique_ptr<comm::ReverseInterface> reverse_interface_;
|
||||||
|
|
||||||
|
double servoj_time_;
|
||||||
|
uint32_t servoj_gain_;
|
||||||
|
double servoj_lookahead_time_;
|
||||||
};
|
};
|
||||||
} // namespace ur_driver
|
} // namespace ur_driver
|
||||||
|
|||||||
@@ -14,6 +14,11 @@
|
|||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
//
|
||||||
|
// Many parts from this (Most of the URScript program) comes from the ur_modern_driver
|
||||||
|
// Copyright 2017, 2018 Simon Rasmussen (refactor)
|
||||||
|
// Copyright 2015, 2016 Thomas Timm Andersen (original version)
|
||||||
|
//
|
||||||
// -- END LICENSE BLOCK ------------------------------------------------
|
// -- END LICENSE BLOCK ------------------------------------------------
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
@@ -30,10 +35,15 @@
|
|||||||
|
|
||||||
namespace ur_driver
|
namespace ur_driver
|
||||||
{
|
{
|
||||||
|
static const int32_t MULT_JOINTSTATE_ = 1000000;
|
||||||
|
static const std::string JOINT_STATE_REPLACE("{{JOINT_STATE_REPLACE}}");
|
||||||
|
static const std::string SERVO_J_REPLACE("{{SERVO_J_REPLACE}}");
|
||||||
|
static const std::string SERVER_IP_REPLACE("{{SERVER_IP_REPLACE}}");
|
||||||
|
static const std::string SERVER_PORT_REPLACE("{{SERVER_PORT_REPLACE}}");
|
||||||
static const std::string POSITION_PROGRAM = R"(
|
static const std::string POSITION_PROGRAM = R"(
|
||||||
def myProg():
|
def myProg():
|
||||||
textmsg("hello")
|
textmsg("hello")
|
||||||
MULT_jointstate = 1000000
|
MULT_jointstate = {{JOINT_STATE_REPLACE}}
|
||||||
|
|
||||||
SERVO_IDLE = 0
|
SERVO_IDLE = 0
|
||||||
SERVO_RUNNING = 1
|
SERVO_RUNNING = 1
|
||||||
@@ -62,13 +72,14 @@ def myProg():
|
|||||||
stopj(1.0)
|
stopj(1.0)
|
||||||
sync()
|
sync()
|
||||||
elif state == SERVO_RUNNING:
|
elif state == SERVO_RUNNING:
|
||||||
|
servoj(q, {{SERVO_J_REPLACE}})
|
||||||
servoj(q, t=0.008, lookahead_time=0.03, gain=750)
|
servoj(q, t=0.008, lookahead_time=0.03, gain=750)
|
||||||
else:
|
else:
|
||||||
sync()
|
sync()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
socket_open("192.168.56.1", 50001)
|
socket_open("{{SERVER_IP_REPLACE}}", {{SERVER_PORT_REPLACE}})
|
||||||
|
|
||||||
thread_servo = run servoThread()
|
thread_servo = run servoThread()
|
||||||
keepalive = -2
|
keepalive = -2
|
||||||
@@ -91,6 +102,7 @@ end
|
|||||||
)";
|
)";
|
||||||
|
|
||||||
ur_driver::UrDriver::UrDriver(const std::string& ROBOT_IP)
|
ur_driver::UrDriver::UrDriver(const std::string& ROBOT_IP)
|
||||||
|
: servoj_time_(0.002), servoj_gain_(750), servoj_lookahead_time_(0.03)
|
||||||
{
|
{
|
||||||
ROS_INFO_STREAM("Initializing RTDE client");
|
ROS_INFO_STREAM("Initializing RTDE client");
|
||||||
rtde_client_.reset(new rtde_interface::RTDEClient(ROBOT_IP, notifier_));
|
rtde_client_.reset(new rtde_interface::RTDEClient(ROBOT_IP, notifier_));
|
||||||
@@ -101,12 +113,24 @@ ur_driver::UrDriver::UrDriver(const std::string& ROBOT_IP)
|
|||||||
}
|
}
|
||||||
|
|
||||||
rtde_frequency_ = rtde_client_->getMaxFrequency();
|
rtde_frequency_ = rtde_client_->getMaxFrequency();
|
||||||
|
servoj_time_ = 1.0 / rtde_frequency_;
|
||||||
|
|
||||||
comm::URStream<rtde_interface::PackageHeader> stream(ROBOT_IP, 30001);
|
comm::URStream<rtde_interface::PackageHeader> stream(ROBOT_IP, 30001);
|
||||||
stream.connect();
|
stream.connect();
|
||||||
|
std::string local_ip = stream.getIP();
|
||||||
|
|
||||||
size_t len = POSITION_PROGRAM.size();
|
uint32_t reverse_port = 50001; // TODO: Make this a parameter
|
||||||
const uint8_t* data = reinterpret_cast<const uint8_t*>(POSITION_PROGRAM.c_str());
|
|
||||||
|
std::string prog = POSITION_PROGRAM;
|
||||||
|
prog.replace(prog.find(JOINT_STATE_REPLACE), JOINT_STATE_REPLACE.length(), std::to_string(MULT_JOINTSTATE_));
|
||||||
|
std::ostringstream out;
|
||||||
|
out << "t=" << std::fixed << std::setprecision(4) << servoj_time_;
|
||||||
|
out << ", lookahead_time=" << servoj_lookahead_time_ << ", gain=" << servoj_gain_;
|
||||||
|
prog.replace(prog.find(SERVO_J_REPLACE), SERVO_J_REPLACE.length(), out.str());
|
||||||
|
prog.replace(prog.find(SERVER_IP_REPLACE), SERVER_IP_REPLACE.length(), local_ip);
|
||||||
|
prog.replace(prog.find(SERVER_PORT_REPLACE), SERVER_PORT_REPLACE.length(), std::to_string(reverse_port));
|
||||||
|
size_t len = prog.size();
|
||||||
|
const uint8_t* data = reinterpret_cast<const uint8_t*>(prog.c_str());
|
||||||
size_t written;
|
size_t written;
|
||||||
|
|
||||||
if (stream.write(data, len, written))
|
if (stream.write(data, len, written))
|
||||||
@@ -118,7 +142,6 @@ ur_driver::UrDriver::UrDriver(const std::string& ROBOT_IP)
|
|||||||
LOG_ERROR("Could not send program to robot");
|
LOG_ERROR("Could not send program to robot");
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t reverse_port = 50001; // TODO: Make this a parameter
|
|
||||||
reverse_interface_.reset(new comm::ReverseInterface(reverse_port));
|
reverse_interface_.reset(new comm::ReverseInterface(reverse_port));
|
||||||
|
|
||||||
ROS_INFO_STREAM("Created reverse interface");
|
ROS_INFO_STREAM("Created reverse interface");
|
||||||
|
|||||||
Reference in New Issue
Block a user