remove IGNORE_ROTATION or make it a runtime configurable parameter
remove IGNORE_ROTATION or make it a runtime configurable parameter
this implementation is a bit hacky, redesign it
separate out grl specific code from general kuka control code
Template on robot driver and create a driver that just reads/writes to/from the simulation, then pass the two templates so the simulation and the real driver can be selected.
probably want to run at least part of this in a separate thread.
evaluate if applyEstimate should not be called by this
allow KukaFRIThreadSeparator parameters to be updated
figure out how to re-enable when .so isn't loaded
move to own header with no vrep dependencies
figure out how the interface for following the motion will work VFControlller stands for "virtual fixtures" controller
allow KukaFRIThreadSeparator parameters to be updated
figure out how to re-enable when .so isn't loaded
R800 velocity limits aren't correct!
find a better design where this can be expanded for more models of robot in the future, maybe a std::unordered_map?
do nothing if in an unsupported command mode? Or do the same as the next else if step?
should this be different if it is in torque mode?
allow copying of data directly between commandmsg and monitoringMsg
should this be different if it is in torque mode?
allow copying of data directly between commandmsg and monitoringMsg
handle dataAvaliable = false case
support tRepeatedIntArguments, and perhaps const versions
create a function that calls simGetObjectHandle and throws an exception when it fails
figure out how to re-enable when .so isn't loaded
implement reading configuration in both FRI and JAVA mode from JAVA interface
perhaps allow user to control this?
support generic read/write
ensure commands stay within machine limits to avoid lockup
reset and resume if lockup occurs whenever possible
in classes that use this driver, make the use of this class templated so that the low level update algorithm can change.
add getter for number of milliseconds between fri updates (1-5) aka sync_period aka send_period aka ms per tick
use runtime calculation of NUM_JOINTS instead of constant
probably only need to set this once
construct new low level command object and pass to KukaFRIClientDataDriver this is where we used to setup a new FRI command
should the results of getlatest state even be possible to call without receiving real data? should the library change?
create a function that calls simGetObjectHandle and throws an exception when it fails
TODO(ahundt) switch from linux socket to boost::asio::ip::udp::socket, see Kuka.hpp and KukaFRIdriver.hpp for examples, and make use of KukaUDP class.
TODO(ahundt) Consider switching to boost::asio synchronous calls (async has high latency)!
TODO(ahundt) Need to switch back to an appropriate exception rather than exiting so VREP isn't taken down.
TODO(ahundt) switch from linux socket to boost::asio::ip::udp::socket, see Kuka.hpp and KukaFRIdriver.hpp for examples, and make use of KukaUDP class.
ADD SUPPORT FOR READING ARM STATE OVER JAVA INTERFACE
make this handled by template driver implementations/extensions
is this the best string to pass for the full arm's name?
when new
TODO(ahundt) eventually run this in a separate thread so we can receive packets asap and minimize dropping
replace with something generic
commandedPosition and commandedPosition_goal are used a bit ambiguously, figure out the difference and clean it up.
make this accessible via a nonmember function
check if duration remaining should be greater than zero or greater than the last tick size
maybe this should be the revolute_joint_angle_interpolated_open_chain_state_tag()?
correctly pass velocity limits from outside, use "copy" fuction in Kuka.hpp, correctly account for differing robot models. This should be in KukaFRIdriver at the end of this file.
Main Loop Update Rate must be supplied to underlying Driver for FRI mode. see KukaLBRiiwaVrepPlugin for reference, particularly kukaDriverP_->set(simulationTimeStep_,time_duration_command_tag());
Main Loop Update Rate must be supplied to underlying Driver for FRI mode. see KukaLBRiiwaVrepPlugin for reference, particularly kukaDriverP_->set(simulationTimeStep_,time_duration_command_tag());
Main Loop Update Rate must be supplied to underlying Driver for FRI mode. see KukaLBRiiwaVrepPlugin for reference, particularly kukaDriverP_->set(simulationTimeStep_,time_duration_command_tag());
Main Loop Update Rate must be supplied to underlying Driver for FRI mode. see KukaLBRiiwaVrepPlugin for reference, particularly kukaDriverP_->set(simulationTimeStep_,time_duration_command_tag());
Main Loop Update Rate must be supplied to underlying Driver for FRI mode. see KukaLBRiiwaVrepPlugin for reference, particularly kukaDriverP_->set(simulationTimeStep_,time_duration_command_tag());
create a function that calls simGetObjectHandle and throws an exception when it fails
properly support passing of io_service
create a function that calls simGetObjectHandle and throws an exception when it fails
properly support passing of io_service
create a function that calls simGetObjectHandle and throws an exception when it fails
properly support passing of io_service
create a function that calls simGetObjectHandle and throws an exception when it fails
properly support passing of io_service
create a function that calls simGetObjectHandle and throws an exception when it fails
properly support passing of io_service
: execute the rest of the trajectory
: execute the rest of the trajectory
: execute the rest of the trajectory
: execute the rest of the trajectory
: execute the rest of the trajectory
: execute the rest of the trajectory
: execute the rest of the trajectory
: execute the rest of the trajectory
: execute the rest of the trajectory
: execute the rest of the trajectory
setting joint position clears joint force in KukaDriverP_. Is this right or should position and force be configurable simultaeously?
setting joint position clears joint force in KukaDriverP_. Is this right or should position and force be configurable simultaeously?
setting joint position clears joint force in KukaDriverP_. Is this right or should position and force be configurable simultaeously?
setting joint position clears joint force in KukaDriverP_. Is this right or should position and force be configurable simultaeously?
setting joint position clears joint force in KukaDriverP_. Is this right or should position and force be configurable simultaeously?
replace all these simJoint elements with simple KukaLBRiiwaROSPlugin::State
replace all these simJoint elements with simple KukaLBRiiwaROSPlugin::State
replace all these simJoint elements with simple KukaLBRiiwaROSPlugin::State
replace all these simJoint elements with simple KukaLBRiiwaROSPlugin::State
replace all these simJoint elements with simple KukaLBRiiwaROSPlugin::State
replace all these simJoint elements with simple KukaLBRiiwaROSPlugin::State
replace all these simJoint elements with simple KukaLBRiiwaROSPlugin::State
replace all these simJoint elements with simple KukaLBRiiwaROSPlugin::State
replace all these simJoint elements with simple KukaLBRiiwaROSPlugin::State
get target position, probably relative to base
do we need to use these options?
FIX HACK jacobianSize include orientation component, should be 7x6 instead of 7x3
do we need to use these options?
FIX HACK jacobianSize include orientation component, should be 7x6 instead of 7x3
TODO(ahundt) accept params for both simulated and measured arms
TODO(ahundt) replace hardcoded joint strings with a vrep tree traversal object that generates an RBDyn MultiBodyGraph
TODO(ahundt) fix hard coded Revolute vs fixed joint https://github.com/ahundt/grl/issues/114
TODO(ahundt) last "joint" RobotMillTip is really fixed...
TODO(ahundt) extract real inertia and center of mass from V-REP with http://www.coppeliarobotics.com/helpFiles/en/regularApi/simGetShapeMassAndInertia.htm
TODO(ahundt) consider the origin of the inertia! https://github.com/jrl-umi3218/Tasks/issues/10#issuecomment-257198604
TODO(ahundt) add real support for links, particularly the respondable aspects, see LBR_iiwa_14_R820_joint1_resp in RoboneSimulation.ttt
verify object lifetimes
read objective rows from vrep
set vrep explicit handling of IK here, plus unset in destructor of this object
TODO(ahundt) change source of current state based on if physical arm is running
TODO(ahundt) move code below here back into separate independent setup and solve functions, move some steps like limits to construct()
TODO(ahundt) rethink where/when/how to send command for the joint angles. Return to LUA? Set Directly? Distribute via vrep send message command?
TODO(ahundt) make solver object a member variable if possible, initialize in constructor
TODO(ahundt) ulimits aren't the same size as jointHandles_, need velocity limits too
TODO(ahundt) hardcoded mill tip joint limits, remove these
TODO(ahundt) replace hardcoded velocity limits with real and useful limits specific to each joint loaded from V-REP or another file.
TODO(ahundt) was this commented correctly?
TODO(ahundt) remove BOOST_VERIFY(), try/catch solver failure, print an error, send a v-rep message, and shut down solver or enter a hand guiding mode
TODO(ahundt) joint to link and joint to respondable only works for v-rep provided scene heirarchy names, modify full class so these workarounds aren't needed in other words this assumes everything is named like the following: joint1: LBR_iiwa_14_R820_joint1 link1: LBR_iiwa_14_R820_link1 link1_respondable: LBR_iiwa_14_R820_link1_resp
TODO(ahundt) FIX HACK! Manually adding last link
TODO(ahundt) FIX HACK! Manually adding last link
TODO(ahundt) HACK joint to link and joint to respondable only works for v-rep provided scene heirarchy names, modify full class so these workarounds aren't needed.
TODO(ahundt) link 1 isn't respondable because it is anchored to the ground, but should there be an empty string so the indexes are consistent or skip it entirely? (currently skipping)
TODO(ahundt) link 1 isn't respondable because it is anchored to the ground, but should there be an empty string so the indexes are consistent or skip it entirely? (currently skipping)
this implementation is a bit hacky, redesign it
separate out grl specific code from general kuka control code
Template on robot driver and create a driver that just reads/writes to/from the simulation, then pass the two templates so the simulation and the real driver can be selected.
allow KukaFRIThreadSeparator parameters to be updated
read ms_per_tick from the java interface
this implementation is a bit hacky, redesign it
separate out grl specific code from general kuka control code
Template on robot driver and create a driver that just reads/writes to/from the simulation, then pass the two templates so the simulation and the real driver can be selected.
add support for links, particularly the respondable aspects, see LBR_iiwa_14_R820_joint1_resp in RoboneSimulation.ttt
write generic getters and setters for this object like in KukaFRIalgorithm.hpp and the member functions of KukaFRIdriver, KukaJAVAdriver
create a function that calls simGetObjectHandle and throws an exception when it fails
TODO(ahundt) move these functions/member variables into params_ object, take as parameters from lua!
handle cyclic joints (see isCyclic below & simGetJointInterval)
TODO(ahundt) is always setting infinity if it is cyclic the right thing to do?
set desiredKinematicsStateP name, INITIALIZE ALL MEMBER OBJECTS, & SET NAMES
verify object lifetimes
read objective rows from vrep
objectiveRows seems to currently be a 3 vector, may eventually want a rotation and translation, perhaps with quaternion rotation
set vrep explicit handling of IK here, plus unset in destructor of this object
does this leak memory when called every time around?
set rotation component of current position
set rotation component of desired position
move code below here back under run_one updateKinematics() call
need to provide tick time in double seconds and get from vrep API call
check the return code, if it doesn't have a result, use the VREP version as a fallback and report an error.
: rethink where/when/how to send command for the joint angles. Return to LUA? Set Directly? Distribute via vrep send message command?
implement and connect up this function Returns the current transform estimate in a format that vrep understands
implement and connect up this function Returns the current transform estimate in a format that vrep understands
report an error?
report an error?
move elsewhere, because it will conflict with others' implementations of outputting vectors
move elsewhere, because it will conflict with others' implementations of outputting vectors
move elsewhere, because it will conflict with others' implementations of outputting vectors
move elsewhere, because it will conflict with others' implementations of outputting vectors
move elsewhere, because it will conflict with others' implementations of outputting vectors
move elsewhere, because it will conflict with others' implementations of outputting vectors
move elsewhere, because it will conflict with others' implementations of outputting vectors
move elsewhere, because it will conflict with others' implementations of outputting vectors
move elsewhere, because it will conflict with others' implementations of outputting vectors
move elsewhere, because it will conflict with others' implementations of outputting vectors
move back to KukaFRIClientDataTest.cpp