Coder Social home page Coder Social logo

franka_ros's Introduction

franka_ros's People

Contributors

acxz avatar andreaskuhner avatar barisyazici avatar christoph-jaehne avatar dudalu avatar falfab avatar fwalch avatar gavanderhoorn avatar gollth avatar jethrokuan avatar jrmout avatar kmohyeldine avatar marcbone avatar maverobot avatar mlautman avatar pulver22 avatar rhaschke avatar rickstaa avatar sgablfr avatar sjahr avatar user-tgk avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

franka_ros's Issues

Size of Collision Objects

Sometimes i get an self_collision_avoidance_violation, but the robot seems not to be near a collision.
Does somebody can explain how the internal self collision checking of the robot-controller works?

I think that the stl-Files used for collision checking in MoveIt! should be padded to avoid this errors, or the controller must be less conservative in self collision avoidance.
In the Picture you can see a position of the robot, in which the controller throws a collisions-avoidance-error, but the collision model and the real robot is far away from self collision.
kollisionsumgebung_rviz_screenshot_2018_12_07-16_33_29

Perhaps someone already has padded collision files and can provide them?
With my planning scene I get in 10 % of random valid goals in MoveIt! an self collision error from the Robot.

move_to_start Robot semantic description not found

Hi!
We are having a hard time to run the move_to_start.launch example.
We updated our system to 1.0.2 / 3.0.0.
roslaunch franka_example_controllers move_to_start.launch robot_ip:=172.16.0.2 load_gripper:=false
quits with an

Unused args [load_gripper] for include of [..../panda_moveit.launch]

So we simply removed line 10 from the move_to_start.launch file, defining the argument load gripper for panda_moveit.launch.

After this the command runs, till it says

You can start planning now

in green.
But nothing moves - i expect the robot to move to a predifined startpose, correct?

The trace says at

process [move-to-start]: started with pid...
ERROR [huge number] Robot semantic description not found. Did you forget to define or remap '/robot_description_semantic'?

As i'm not the fittest ros-guy I'm pretty stuck here. I checked filepaths twice and i guess everything is in the right place. Any ideas?

Thanks in advance!

Compilation with gcc-8 leads to non-working franka_ros

As part of enabling some C++17 functions in my own code I needed to upgrade gcc as the shipped version with 16.04 is gcc-5 which doesn't support it. Looking at cppreference I can see if I want to have everything from C++17 I need gcc-8. Looking at Porting to GCC 8 to see if there might be issues I figured there were only "nice new things" for me, so nothing that should break anything on my side.

I cleaned the workspace and recompiled after the installation and update-alternatives switch to gcc-8, saw a passing warning on one of the franka_hw functions (from -Wreturn-type, one of the new things in gcc-8, makes sense) but nothing more. The warning is:

Warnings   << franka_hw:make /home/ap/catkin_ws/logs/franka_hw/build.make.000.log                   
/home/ap/catkin_ws/src/franka_ros/franka_hw/src/franka_hw.cpp: In function ‘std::ostream& franka_hw::{anonymous}::operator<<(std::ostream&, franka::ControllerMode)’:
/home/ap/catkin_ws/src/franka_ros/franka_hw/src/franka_hw.cpp:25:1: warning: no return statement in function returning non-void [-Wreturn-type]
 }
 ^

However, upon successful compilation, roslaunching my process fails.

Installing gcc-7 and recompiling shows no warnings and yields a working application, and since the feature I wanted for myself is included already in gcc-7, I'm fine with that at the moment.

I'm assuming it's franka_ros that's failing because my package only depends on source installs from franka_ros and panda_moveit_config, but the latter has no source to compile; all other dependencies are installed from binary, libfranka is not being touched even though it would be a source install as well.

Launching separately the nodes that panda_control_moveit_rviz.launch launches I see this succession of events:

  • franka_control.launch seemingly launches correctly;
  • panda_moveit.launch launches with an exception thrown
[... omitting the summary for brevity ...]

process[controller_spawner-1]: started with pid [10885]
process[move_group-2]: started with pid [10886]
[ INFO] - [/move_group::core::RobotModel::buildModel::93]: Loading robot model 'panda'...
[ INFO] - [/move_group::core::RobotModel::buildModel::93]: Loading robot model 'panda'...
[ INFO] - [/move_group::PlanningSceneMonitor::startPublishingPlanningScene::331]: Publishing maintained planning scene on 'monitored_planning_scene'
[ INFO] - [/move_group::main::210]: MoveGroup debug mode is OFF
Starting context monitors...
[ INFO] - [/move_group::PlanningSceneMonitor::startSceneMonitor::964]: Starting scene monitor
[ INFO] - [/move_group::PlanningSceneMonitor::startSceneMonitor::970]: Listening to '/planning_scene'
[ INFO] - [/move_group::PlanningSceneMonitor::startWorldGeometryMonitor::1041]: Starting world geometry monitor
[ INFO] - [/move_group::PlanningSceneMonitor::startWorldGeometryMonitor::1057]: Listening to '/collision_object' using message notifier with target frame '/panda_link0 '
[ INFO] - [/move_group::PlanningSceneMonitor::startWorldGeometryMonitor::1072]: Listening to '/planning_scene_world' for planning scene world geometry
[ INFO] - [/move_group::PointCloudOctomapUpdater::start::114]: Listening to '/camera/depth_registered/points' using message filter with target frame '/panda_link0 '
[ INFO] - [/move_group::PlanningSceneMonitor::startStateMonitor::1134]: Listening to '/attached_collision_object' for attached collision objects
Context monitors started.
[ INFO] - [/move_group::OMPLInterface::OMPLInterface::55]: Initializing OMPL interface using ROS parameters
[INFO] - [/controller_spawner::main::116]: Controller Spawner: Waiting for service controller_manager/load_controller
[INFO] - [/controller_spawner::main::121]: Controller Spawner: Waiting for service controller_manager/switch_controller
[INFO] - [/controller_spawner::main::129]: Controller Spawner: Waiting for service controller_manager/unload_controller
[INFO] - [/controller_spawner::main::184]: Loading controller: position_joint_trajectory_controller
[ INFO] - [/move_group::PlanningPipeline::configure::119]: Using planning interface 'OMPL'
[ INFO] - [/move_group::FixWorkspaceBounds::FixWorkspaceBounds::53]: Param 'default_workspace_bounds' was not set. Using default value: 10
[ INFO] - [/move_group::FixStartStateBounds::FixStartStateBounds::60]: Param 'start_state_max_bounds_error' was set to 0.1
[ INFO] - [/move_group::FixStartStateBounds::FixStartStateBounds::65]: Param 'start_state_max_dt' was not set. Using default value: 0.5
[ INFO] - [/move_group::FixStartStateCollision::FixStartStateCollision::57]: Param 'start_state_max_dt' was not set. Using default value: 0.5
[ INFO] - [/move_group::FixStartStateCollision::FixStartStateCollision::68]: Param 'jiggle_fraction' was set to 0.05
[ INFO] - [/move_group::FixStartStateCollision::FixStartStateCollision::73]: Param 'max_sampling_attempts' was not set. Using default value: 100
[ INFO] - [/move_group::PlanningPipeline::configure::163]: Using planning request adapter 'Add Time Parameterization'
[ INFO] - [/move_group::PlanningPipeline::configure::163]: Using planning request adapter 'Fix Workspace Bounds'
[ INFO] - [/move_group::PlanningPipeline::configure::163]: Using planning request adapter 'Fix Start State Bounds'
[ INFO] - [/move_group::PlanningPipeline::configure::163]: Using planning request adapter 'Fix Start State In Collision'
[ INFO] - [/move_group::PlanningPipeline::configure::163]: Using planning request adapter 'Fix Start State Path Constraints'
[INFO] - [/controller_spawner::main::192]: Controller Spawner: Loaded controllers: position_joint_trajectory_controller
Traceback (most recent call last):
  File "/opt/ros/kinetic/lib/controller_manager/spawner", line 207, in <module>
    if __name__ == '__main__': main()
  File "/opt/ros/kinetic/lib/controller_manager/spawner", line 199, in main
    resp = switch_controller(loaded, [], 2)
  File "/opt/ros/kinetic/lib/python2.7/dist-packages/rospy/impl/tcpros_service.py", line 435, in __call__
    return self.call(*args, **kwds)
  File "/opt/ros/kinetic/lib/python2.7/dist-packages/rospy/impl/tcpros_service.py", line 525, in call
    raise ServiceException("transport error completing service call: %s"%(str(e)))
rospy.service.ServiceException: transport error completing service call: unable to receive data from sender, check sender's logs for details
[INFO] - [/controller_spawner::shutdown::55]: Shutting down spawner. Stopping and unloading controllers...
[INFO] - [/controller_spawner::shutdown::64]: Stopping all controllers...
[WARN] - [/controller_spawner::shutdown::72]: Controller Spawner error while taking down controllers: unable to connect to service: [Errno 111] Connection refused
[controller_spawner-1] process has died [pid 10885, exit code 1, cmd /opt/ros/kinetic/lib/controller_manager/spawner position_joint_trajectory_controller __name:=controller_spawner __log:=/home/ap/.ros/log/02d8cfb0-1b35-11e9-911f-d45ddf1a2746/controller_spawner-1.log].
log file: /home/ap/.ros/log/02d8cfb0-1b35-11e9-911f-d45ddf1a2746/controller_spawner-1*.log
[ WARN] - [/move_group::ActionBasedControllerHandle<T>::ActionBasedControllerHandle::91]: Waiting for position_joint_trajectory_controller/follow_joint_trajectory to come up
[ WARN] - [/move_group::ActionBasedControllerHandle<T>::ActionBasedControllerHandle::91]: Waiting for position_joint_trajectory_controller/follow_joint_trajectory to come up
[ERROR] - [/move_group::ActionBasedControllerHandle<T>::ActionBasedControllerHandle::97]: Action client not connected: position_joint_trajectory_controller/follow_joint_trajectory
[ WARN] - [/move_group::ActionBasedControllerHandle<T>::ActionBasedControllerHandle::91]: Waiting for franka_gripper/gripper_action to come up
[ WARN] - [/move_group::ActionBasedControllerHandle<T>::ActionBasedControllerHandle::91]: Waiting for franka_gripper/gripper_action to come up
[ERROR] - [/move_group::ActionBasedControllerHandle<T>::ActionBasedControllerHandle::97]: Action client not connected: franka_gripper/gripper_action
[ INFO] - [/move_group::MoveItSimpleControllerManager::getControllersList::197]: Returned 0 controllers in list
[ INFO] - [/move_group::TrajectoryExecutionManager::initialize::188]: Trajectory execution is managing controllers
Loading 'move_group/ApplyPlanningSceneService'...
Loading 'move_group/ClearOctomapService'...
Loading 'move_group/MoveGroupCartesianPathService'...
Loading 'move_group/MoveGroupExecuteTrajectoryAction'...
Loading 'move_group/MoveGroupGetPlanningSceneService'...
Loading 'move_group/MoveGroupKinematicsService'...
Loading 'move_group/MoveGroupMoveAction'...
Loading 'move_group/MoveGroupPickPlaceAction'...
Loading 'move_group/MoveGroupPlanService'...
Loading 'move_group/MoveGroupQueryPlannersService'...
Loading 'move_group/MoveGroupStateValidationService'...
[ INFO] - [/move_group::MoveGroupExe::configureCapabilities::176]: 

********************************************************
* MoveGroup using: 
*     - ApplyPlanningSceneService
*     - ClearOctomapService
*     - CartesianPathService
*     - ExecuteTrajectoryAction
*     - GetPlanningSceneService
*     - KinematicsService
*     - MoveAction
*     - PickPlaceAction
*     - MotionPlanService
*     - QueryPlannersService
*     - StateValidationService
********************************************************

[ INFO] - [/move_group::MoveGroupContext::status::84]: MoveGroup context using planning plugin ompl_interface/OMPLPlanner
[ INFO] - [/move_group::MoveGroupContext::status::85]: MoveGroup context initialization complete

You can start planning now!

  • at the same time the exception is thrown, I get REQUIRED process [franka_control-2] has died! on the other tab;
  • my process dies as soon as code hits the first move command.

Please let me know if I am mistaken in my assumptions or if I can help in some other way, I'd be happy to.

'Missing' install targets?

Haven't checked all pkgs, but the CMakeLists.txt seem to be missing install(..) targets.

Is that on purpose or is it just an oversight?

catkin_make FrankaConfig.cmake, version: 0.2.0 ?

Seid kurzem funktioniert die Anleitung zur Installation von franka_ros für mich nicht mehr.

catkin_make -DCMAKE_BUILD_TYPE=Release -DFranka_DIR:PATH=/path/to/libfranka/build
oder catkin_make bewirken folgende Fehlermeldung.


-- +++ processing catkin package: 'franka_visualization'
-- ==> add_subdirectory(franka_ros/franka_visualization)
CMake Error at franka_ros/franka_visualization/CMakeLists.txt:12 (find_package):
  Could not find a configuration file for package "Franka" that is compatible
  with requested version "0.2.0".

  The following configuration files were considered but not accepted:

    /home/doom/libfranka/build/FrankaConfig.cmake, version: 0.1.1
    /opt/ros/kinetic/lib/x86_64-linux-gnu/cmake/Franka/FrankaConfig.cmake, version: 0.1.0



-- Configuring incomplete, errors occurred!
See also "/home/doom/catkin_ws/build/CMakeFiles/CMakeOutput.log".
See also "/home/doom/catkin_ws/build/CMakeFiles/CMakeError.log".
Invoking "cmake" failed

Grasp action behaviour

Hi,
i'm tryng to use the Grasp Action to grasp a simple cube (width 20mm, weight 300gr) .
The gripper tries to grasp the cube, but as soon as it touches the object, it stops applying pressure and the cube is released .

e.g of parameters :
width : 0.018 [m]
epsilon.inner = 0.005
epsilon.outer = 0.005
speed : 0.01 [m/s]
force: 10 [N]

I tried lots of parameters.

Andrea

edit : was missing a 0 in width

How to write a action client for ErrorRecoveryAction?

Hi everyone,

I am trying to add an action client for ErrorRecoveryAction in my code. Because this kind of error libfranka: Move command rejected: command not possible in the current mode! and other errors will show up.

This is what I define (I am using AsyncSpinner ):

typedef actionlib::SimpleActionClient<franka_control::ErrorRecoveryAction> Errorrecovery;
Errorrecovery ac(node_handle, "errorrecovery", false);
ac.waitForServer();
franka_control::ErrorRecoveryGoal goal;
ac.sendGoal(goal);
bool finished_before_timeout = ac.waitForResult(ros::Duration(30.0));
if (finished_before_timeout)
{
actionlib::SimpleClientGoalState state = ac.getState();
ROS_INFO("Action finished: %s",state.toString().c_str());
}
else
ROS_INFO("Action did not finish before the time out.");

But when I used rostopic echo /franka_control/error_recovery/goal I didn't get anything
Anyone has any idea?
Thanks first
Rachel

real-time cartesian control

Hi all!

I am working on real-time cartesian control of the robot. I am using a joy_node to send new vx vy vz from the cartesian_velocity_example_controller. Previously I have done also modified the joint_velocity_example_controller to send joint velocities from a joy_node. I am moving with maximum speed of 0.02m/s per axis of the end-effector. Currently I am running into the "cartesian_motion_generator_joint_acceleration_discontinuity" which according to the libfranca docs the joint jerk violation caused by motion generation by the internal IK of the robot. I wonder if anyone could tell me what kind of IK solver does franka use internally?

Virtual Wall requires more details

Could you provide more details on how to define the virtual wall? How does it work?

I tried setting the p_frame as an identity matrix (1 on diagonal, rest 0) and "object_world_size" set to x=0.6 y=0.3 z=0.5. I did not encounter any virtual wall while moving around the "object_world_size" position using the cartesian impedance controller example.
Link API

Cannot visualize complete model in Gazebo

This is very possibly a duplicate of this issue, and feel free to close/merge it if that is the case.

I am trying to visualize the robot in Gazebo, but I am only getting the base of the robot, whereas with RViz I can see the whole thing. I'm attaching both MWEs (put in a catkin workspace and it should work, it's an empty package apart from the launch files, the urdf and config stuff), which I am launching with $ roslaunch foo gazebo.launch and $ roslaunch foo display.launch.

In RViz the whole arm is visible on top of the box, whereas in Gazebo only the box and robot base (first link basically) are visible (and it floats, sometimes...).

Simulating the Gripper in ROS

Using the gripper in simulation appears to not be possible in a ROS environment, at the moment. Using MoveIt's pick command in simulation with the demo launch file from the panda_moveit_config package results in the 'No sampler was constructed' issue #17.

As a replacement, I tried to use the grasp action from the franka_gripper_node and interfaced it from Python without problems. However, an action server must be available, obviously, but demo.launch does not provide such one. Only, the gripper node provides it but also requires a connection to the FCI and thus a real robot, to which a have only very limited access in my usecase. So, I set up a dumb (netcat) TCP server on the required port. Then the gripper node is able to start but this it fails to get the (real) gripper state which is not published via UDP as it is required for the gripper node.

As a result, I am stuck. The only thing I can do is to move the gripper via the fake joint state publisher node from demo.launch. Anyways, there should be some way to use gripper in simulation. Just moving the robot around, which works fine with MoveIt by the way, becomes boring at some point ;-)

Moving gripper using Moveit and Rviz

Hi,

In demo.launch when using the 'panda_arm' move group, I can plan a motion using the interactive arrow markers.

But when I use the 'hand' move group, I am not able to interact with the hand to open/close the hand fingers.

Could someone tell me if this is possible in demo.launch, i.e. to manually move the gripper fingers of the 'hand' move group ?

P.s. For the 'hand' move group, in Planning>Select Goal Pose when I choose 'Random' and Execute, the grippers do move to a random position. But, Im not able to find a way to manually move the finger grippers(with arrow markers like with the 'panda_arm' move group)

This image shows robot arm move group with arrow markers moving as expected:
arm_motionplanning_hasarrows

This image shows the hand move group which I cannot interact with to move:
endeffector_noarrows_for_motionplanning

Panda C++ IK Solver?

Does Franka Emika provide, or is anyone aware of, an IK solver we can use locally in our motion planning code, as opposed to hidden in Franka's control software? An customized/optimized IK solver for Panda would greatly speed up MoveIt! integrations and other control needs of our clients. Of course I already know about KDL and IKFast, but IKFast has issues working with Panda according to @mlautman.

Thanks!

Real-time joint space control

Hi all!
I need some information on how the joint space motion commands get executed. For instance in the joint_position_example_controller the joint motion is achieved by set_command on hardware_interface::JointHandle. I am interested to know how the target is achieved, i.e. what joint speeds and accelerations get used. The only hint I have found was in the defaul_controllers.yaml goal time constraint of 0.5. Does that mean that desired joint position must be achieved within 0.5 sec?

find_package(..) error in franka_hw when building from source

Building franka_ros pkgs on Kinetic results in the following error:

CMake Error at /opt/ros/kinetic/share/catkin/cmake/catkinConfig.cmake:83 (find_package):
  Could not find a package configuration file provided by
  "franka_description" with any of the following names:

    franka_descriptionConfig.cmake
    franka_description-config.cmake

  Add the installation prefix of "franka_description" to CMAKE_PREFIX_PATH or
  set "franka_description_DIR" to a directory containing one of the above
  files.  If "franka_description" provides a separate development package or
  SDK, be sure it has been installed.
Call Stack (most recent call first):
  CMakeLists.txt:9 (find_package)

and the build is aborted.

Failed to execute move_to_start .launch

I have Franka Emika arm, I can move the arm and execute many launch files.
But many launch files demands running move_to_start.launch first, and I'm getting this problem once I launch move_to_start launch file:

[ERROR] [1529581739.667286319]: libfranka: Move command rejected: command not possible in the current mode!
================================================================================REQUIRED process [move_to_start-8] has died!
process has died [pid 7208, exit code 1, cmd /home/franka/catkin_ws/src/franka_ros/franka_example_controllers/scripts/move_to_start.py __name:=move_to_start __log:=/home/franka/.ros/log/150e77d0-7549-11e8-80f2-509a4c508bbf/move_to_start-8.log].
log file: /home/franka/.ros/log/150e77d0-7549-11e8-80f2-509a4c508bbf/move_to_start-8*.log
Initiating shutdown!

And also this warning and error:
[WARN] [1529581740.128126]: Controller Spawner error while taking down controllers: unable to connect to service: connection from sender terminated before handshake header received. 0 bytes were received. Please check sender for additional details.
[WARN] [1529581740.129442]: Controller Spawner error while taking down controllers: unable to connect to service: [Errno 104] Connection reset by peer
[move_group-7] escalating to SIGTERM

Interactive marker

Could you please clarify how marker_pose is updated. Here is what I see:
The interactive_marker.py rewrites a new value for the marker_pose each time the interactive marker was moved and then publishes it on Timer to the cartestian impedance controller. At the same time the node is also subscribed to the franka_state and updates the marker_pose from the end-effector transform. Does this mean that the marker_pose that is published in the equilibrium pose keep getting contradicting marker_pose because it is keep getting modified from 2 different sources?

Using MoveIt's MoveGroupCommander.pick results in 'No Sampler was Constructed'

Hi folks,

I am using MoveIt's Python interface to control a Panda. Using set_pose_target, plan and go works fine for moving the arm into a certain pose. However, the pick method does not work at all. A scene was constructed and objects were added to the scene. I tried both the pick method without additional grasps and using a list of grasps as well.

In the result, the error message "No sampler was constructed" is shown. Its origin is deep inside MoveIt (source code, line 147). It is unclear to me, what's the root cause for this problem. I am primarily developing using panda_moveit_config/demo_launch but I also tried it with a real robot. In both cases, the error message is the same. Is there a missing parameter in the configuration/launch files? Do I have to supply any parameter or is franka_ros/panda missing support for MoveIt's interface? Or is this issue related to a point from #13

The gripper didn't really work on the real robot with MoveIt, as the fingers weren't included in the panda_arm_hand group

Do I have to use the GraspAction from the franka_gripper package instead of MoveIt's methods?

BTW: I am using version 0.4.0

PS: This is more a less a cross post of a question from ROS answers

Mesh appearance non-collision geometry

This is not a complaint, but just curiosity: are you planning to release meshes other than STLs for the non-collision geometry? The robot is completely white in RViz for me at the moment, which is almost an offense to the aesthetics of the real robot.

Colladas with perhaps some texturing would be a huge improvement in visual appearance :)

Missing Controller for the Gripper

In relation to #26 and moveit/panda_moveit_config#9 I'd like to add that I was able to use the gripper with MoveIt's pick and place API only when I added a definition for the controller and its joints including timing and goal constraints. The controller must have the same name as in panda_gripper_controllers (taking moveit/panda_moveit_config@a9fa9dc#diff-3ea2eda6749be8544a6f913da5bacd23 into account). I used a position_controllers/JointTrajectoryController.

For getting things work, I changed default_controllers.yaml of the franka_controlpackage. I assume that this is not the perfect place, but it worked for me.

I'd appreciate if the according changes in the correct file would be integrated in the franka_ros package such that the gripper is usable with MoveIt and a real robot.

Some questions confuse me

I read the source code of franka_ros and libfranka to learn ros. Now I have some questions:

  1. franka_control is a node which directly communicate with robot?
  2. libfranka and franka_control communicate with a customized tcp and udp ?
    3.franka_control runs on robot controller machine and libfranka runs on a pc workstation?
    4.If libfranka and franka_control communicate with a customized tcp and udp, but where the udp and tcp implemention? I didnot find the server.

Thank you!

Grasping fails even though it succeeds

I implemented a simple action client with:

actionlib::SimpleActionClient ac_gg("/franka_gripper/grasp", true);
franka_gripper::GraspGoal goal_gg;
franka_gripper::GraspResult result_gg;
goal_gg.force = 10; // N
goal_gg.speed = 0.05; // m/s
goal_gg.width = 0.036; // m
goal_gg.epsilon.inner = 0.005; // m?
goal_gg.epsilon.outer = 0.005; // m?

(...)

bool state = result_gg.success;
ROS_INFO("The action finished with status: %u", state);

and when I run it, attempting to grasp an object that satisfies the specs sent as a goal, rosrun panda_moves grasping_test_client_node returns:

[ INFO] [1538150133.985779942]: Waiting for the action server to start.
[ INFO] [1538150134.273582728]: The action server is live, sending goal.
[ INFO] [1538150136.121196455]: The action finished with status: 0

while rostopic echo /franka_gripper/grasp/result returns:

header: 
  seq: 14
  stamp: 
    secs: 1538150136
    nsecs: 120925357
  frame_id: ''
status: 
  goal_id: 
    stamp: 
      secs: 1538150134
      nsecs: 273606745
    id: "/test_grasping-1-1538150134.273606745"
  status: 3
  text: ''
result: 
  success: True
  error: ''
---

As a matter of fact the object is held in place by the gripper, and sending a stop action stops the 10N to be exerted and I can remove the object easily from the grasp.

Am I missing something?

As a side note, epsilon seems to represent the grasp width error, but is it to be considered as meters (5mm), or is it a percentage error (0.5%)?

How to code in eclipse

Hi everyone,
I am new to use franka arm. I am wondering how to use eclipse to code for franka_controller like franka_example_controller.
I tried this solution:
in ~/catkin_ws
catkin_make --force-cmake -G"Eclipse CDT4 - Unix Makefiles"
it can't work.
But if I use moveit_tutorials from https://github.com/ros-planning/moveit_tutorials.git, it can work.
I think it misses libfranka.
Another question: Can I use moveit to code for franka?
Thank you.
Rachel

Using CXX_STANDARD requires CMake 3.1

Compilation of my own packages depending on franka packages has always worked. At the same time Eclipse has always highlighted #include <franka_(...) directives as unresolved dependencies. I decided to dig into it and solved it by changing usage of add_compile_options(-std=c++14) like in the boilerplate CMakeLists.txt that's provided with catkin_create_pkg with your set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD_REQUIRED ON).

This is when I found out the CXX_STANDARD property was introduced in CMake 3.1 so you should most likely have cmake_minimum_required(VERSION 3.1) in your CMakeLists.txt (or set a property like in this related Q&A).

Publish rate of the franka_states does not go 1000Hz

I have changed the publish rate from original 30Hz to 1000Hz in the default_controllers.yaml.
But rostopic hz .../franka_states does not punch above 600Hz.
I have only tested it on my laptop. Do you think I got a communication bottleneck?

"stopping" function not working properly

I tried to implement the stopping function in the same way you do for init, starting and update but it doesn't seem to be working as expected. What happens is that the function is called immediately after starting and not when the the program is exited (CTRL-C is the appropriate method, isn't it?).

Moreover the starting function is called twice, to be clear this is the order:

init
starting
stopping
starting
update loop

How can I fix this? Thanks

libfranka: UDP receive: Timeout

Hello!

I noticed some problems when using libfranka. Whenever I try to connect to Panda I get the following error:
libfranka: UDP receive: Timeout.
This happens with all of the examples scripts within the library, for example, https://frankaemika.github.io/libfranka/print_joint_poses_8cpp-example.html and even if I try to compile them by myself. This simple line fails: franka::Robot robot("172.31.1.51");

My setup is as follows:

My workstation

  • Ubuntu 18.04.2 LTS
  • Kernel: 4.16.18-041618-generic
  • Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 10)
  • libfranka version: 0.6.0

Panda

  • System version: 2.1.1 (ced048bda3)

I am directly connected to the Panda. What might be the reason?

The simple ping test gave me this:

--- 172.31.1.51 ping statistics ---
10000 packets transmitted, 10000 received, 0% packet loss, time 10079ms
rtt min/avg/max/mdev = 0.715/0.937/1.083/0.042 ms

Stopping example controllers

Hello everyone!

I have problem with stopping joint_position_example_controller. I have tried running the "kill" command from the controller_manager kill both the joint_position_example_controller as well as the franka_state_controller (or something like that I don't remember the exact name). But after I try to re-launch the same joint_position_example_controller I get the "Move command rejected: command not possible in the current mode!" error. Could you please tell me what am i doing wrong? (Frankly I am new to ROS)

Launching franka_example_controllers examples (e.g. move_to_start.launch)

Trying to move my Panda with franka_ros (installed version 0.5.0-0xenial-20180724-052826-0800 from aptitude) I wanted to start with some examples and go from there. After tutorializing myself with actionlib and moveit, I decided to try your examples. At first I got a missing dependency error from PyAssimp, which I upgraded with pip. Afterwards, I have been stuck with this console output:

ap@ap-HP-630-PC:~$ roslaunch franka_example_controllers move_to_start.launch robot_ip:=172.16.1.101 load_gripper:=true
... logging to /home/ap/.ros/log/f343ac20-958b-11e8-ad71-009c021669e3/roslaunch-ap-HP-630-PC-18801.log
Checking log directory for disk usage. This may take awhile.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://ap-HP-630-PC:45795/

SUMMARY
========

PARAMETERS
 * /effort_joint_trajectory_controller/constraints/goal_time: 0.5

[...]

 * /robot_description_semantic: <?xml version="1....
 * /rosdistro: kinetic
 * /rosversion: 1.12.13

NODES
  /
    controller_spawner (controller_manager/spawner)
    franka_control (franka_control/franka_control_node)
    joint_state_publisher (joint_state_publisher/joint_state_publisher)
    move_group (moveit_ros_move_group/move_group)
    move_to_start (franka_example_controllers/move_to_start.py)
    robot_state_publisher (robot_state_publisher/robot_state_publisher)
    state_controller_spawner (controller_manager/spawner)

ROS_MASTER_URI=http://localhost:11311

process[franka_control-1]: started with pid [18824]
process[state_controller_spawner-2]: started with pid [18825]
process[robot_state_publisher-3]: started with pid [18826]
process[joint_state_publisher-4]: started with pid [18827]
process[controller_spawner-5]: started with pid [18830]
process[move_group-6]: started with pid [18831]
process[move_to_start-7]: started with pid [18832]
INFO: cannot create a symlink to latest log directory: [Errno 2] No such file or directory: '/home/ap/.ros/log/latest'
[INFO] [1533133292.965529]: Controller Spawner: Waiting for service controller_manager/load_controller
[INFO] [1533133293.008041]: Controller Spawner: Waiting for service controller_manager/load_controller
[ INFO] [1533133310.864421603]: Loading robot model 'panda'...
[ INFO] [1533133310.864582181]: No root/virtual joint specified in SRDF. Assuming fixed joint
[ INFO] [1533133311.434593432]: Loading robot model 'panda'...
[ INFO] [1533133311.434670318]: No root/virtual joint specified in SRDF. Assuming fixed joint
[ INFO] [1533133311.813252843]: Publishing maintained planning scene on 'monitored_planning_scene'
[ INFO] [1533133311.833453881]: MoveGroup debug mode is OFF
Starting context monitors...
[ INFO] [1533133311.964146375]: Starting scene monitor
[ INFO] [1533133311.969234875]: Listening to '/planning_scene'
[ INFO] [1533133311.969279904]: Starting world geometry monitor
[ INFO] [1533133311.974056849]: Listening to '/collision_object' using message notifier with target frame '/panda_link0 '
[ INFO] [1533133311.978706678]: Listening to '/planning_scene_world' for planning scene world geometry
[ INFO] [1533133311.992981585]: Listening to '/attached_collision_object' for attached collision objects
Context monitors started.
[ INFO] [1533133314.337135187]: Initializing OMPL interface using ROS parameters
[ INFO] [1533133314.375821047]: Using planning interface 'OMPL'
[ INFO] [1533133314.609941620]: Param 'default_workspace_bounds' was not set. Using default value: 10
[ INFO] [1533133314.610955241]: Param 'start_state_max_bounds_error' was set to 0.1
[ INFO] [1533133314.611712517]: Param 'start_state_max_dt' was not set. Using default value: 0.5
[ INFO] [1533133314.612581480]: Param 'start_state_max_dt' was not set. Using default value: 0.5
[ INFO] [1533133314.613295782]: Param 'jiggle_fraction' was set to 0.05
[ INFO] [1533133314.614061370]: Param 'max_sampling_attempts' was not set. Using default value: 100
[ INFO] [1533133314.614154158]: Using planning request adapter 'Add Time Parameterization'
[ INFO] [1533133314.614195411]: Using planning request adapter 'Fix Workspace Bounds'
[ INFO] [1533133314.614237036]: Using planning request adapter 'Fix Start State Bounds'
[ INFO] [1533133314.614278020]: Using planning request adapter 'Fix Start State In Collision'
[ INFO] [1533133314.614320265]: Using planning request adapter 'Fix Start State Path Constraints'
[ WARN] [1533133320.067844261]: Waiting for position_joint_trajectory_controller/follow_joint_trajectory to come up
[WARN] [1533133323.058336]: Controller Spawner couldn't find the expected controller_manager ROS interface.
[WARN] [1533133323.058337]: Controller Spawner couldn't find the expected controller_manager ROS interface.
[state_controller_spawner-2] process has finished cleanly
log file: /home/ap/.ros/log/f343ac20-958b-11e8-ad71-009c021669e3/state_controller_spawner-2*.log
[controller_spawner-5] process has finished cleanly
log file: /home/ap/.ros/log/f343ac20-958b-11e8-ad71-009c021669e3/controller_spawner-5*.log
[ WARN] [1533133326.068081795]: Waiting for position_joint_trajectory_controller/follow_joint_trajectory to come up
[ERROR] [1533133332.068512233]: Action client not connected: position_joint_trajectory_controller/follow_joint_trajectory
[ INFO] [1533133332.077124121]: Returned 0 controllers in list
[ INFO] [1533133332.097130356]: Trajectory execution is managing controllers
Loading 'move_group/ApplyPlanningSceneService'...
Loading 'move_group/ClearOctomapService'...
Loading 'move_group/MoveGroupCartesianPathService'...
Loading 'move_group/MoveGroupExecuteTrajectoryAction'...
Loading 'move_group/MoveGroupGetPlanningSceneService'...
Loading 'move_group/MoveGroupKinematicsService'...
Loading 'move_group/MoveGroupMoveAction'...
Loading 'move_group/MoveGroupPickPlaceAction'...
[ INFO] [1533133333.911268075]: Loading robot model 'panda'...
[ INFO] [1533133333.911336463]: No root/virtual joint specified in SRDF. Assuming fixed joint
Loading 'move_group/MoveGroupPlanService'...
Loading 'move_group/MoveGroupQueryPlannersService'...
Loading 'move_group/MoveGroupStateValidationService'...
[ INFO] [1533133334.262345647]: 

********************************************************
* MoveGroup using: 
*     - ApplyPlanningSceneService
*     - ClearOctomapService
*     - CartesianPathService
*     - ExecuteTrajectoryAction
*     - GetPlanningSceneService
*     - KinematicsService
*     - MoveAction
*     - PickPlaceAction
*     - MotionPlanService
*     - QueryPlannersService
*     - StateValidationService
********************************************************

[ INFO] [1533133334.262459784]: MoveGroup context using planning plugin ompl_interface/OMPLPlanner
[ INFO] [1533133334.262507076]: MoveGroup context initialization complete

You can start planning now!

[ INFO] [1533133334.464601255]: Loading robot model 'panda'...
[ INFO] [1533133334.464661115]: No root/virtual joint specified in SRDF. Assuming fixed joint
[ INFO] [1533133335.469617650]: Ready to take commands for planning group panda_arm.
[ INFO] [1533133335.482903448]: Combined planning and execution request received for MoveGroup action. Forwarding to planning and execution pipeline.
[ INFO] [1533133335.549885407]: Planning attempt 1 of at most 1
[ INFO] [1533133335.587650571]: Planner configuration 'panda_arm' will use planner 'geometric::RRTConnect'. Additional configuration parameters will be set when the planner is constructed.
[ INFO] [1533133335.720734117]: RRTConnect: Starting planning with 1 states already in datastructure
[ INFO] [1533133335.759458588]: RRTConnect: Created 4 states (2 start + 2 goal)
[ INFO] [1533133335.759551813]: Solution found in 0.039023 seconds
[ INFO] [1533133335.766524302]: SimpleSetup: Path simplification took 0.006710 seconds and changed from 3 to 2 states
[ INFO] [1533133335.788275683]: Returned 0 controllers in list
[ERROR] [1533133335.788402835]: Unable to identify any set of controllers that can actuate the specified joints: [ panda_joint1 panda_joint2 panda_joint3 panda_joint4 panda_joint5 panda_joint6 panda_joint7 ]
[ERROR] [1533133335.788452422]: Known controllers and their joints:

[ERROR] [1533133335.788538943]: Apparently trajectory initialization failed
[ INFO] [1533133335.789098467]: ABORTED: Solution found but controller failed during execution
================================================================================REQUIRED process [move_to_start-7] has died!
process has finished cleanly
log file: /home/ap/.ros/log/f343ac20-958b-11e8-ad71-009c021669e3/move_to_start-7*.log
Initiating shutdown!
================================================================================
[move_to_start-7] killing on exit
[move_group-6] killing on exit
[joint_state_publisher-4] killing on exit
[robot_state_publisher-3] killing on exit
[franka_control-1] killing on exit
[franka_control-1] escalating to SIGTERM
shutting down processing monitor...
... shutting down processing monitor complete
done

The almost exact same thing happens if I try to roslaunch franka_control franka_control.launch robot_ip:=172.16.1.101 load_gripper:=true, where the warning from Controller Spawner seems to kill the node.

I tried to rospack find controller_manager and I didn't find it, so I sudo apt-get install ros-kinetic-ros-control, but it didn't solve it. I checked both logs and they just repeat the same errors and warnings, I checked the launch files to try and see which things are not correctly loading and found where the exception from the warning is raised but the connected try block seems like it shouldn't give issues... Moreover, Panda has the external activation activated and the joints unlocked (worked for them). Environment variables seem on point, setup files are sourced.

Is it a namespace problem, where the controller is loaded but not where it should be? Or is it something else I don't yet understand? Should I build from source like suggested in this comment?

Errors by using MoveIt and Version 1.3.2

Since I'm using Version 1.3.2 with libfranka 0.4.0 and franka_ros 0.5.0 sometimes an oscillation occurs by using the move group interface tutorial with a real robot. Then the robot gets in an error like cartesian reflex or tauJ violation.
With the older version I didn't had the problem.
The error also occurs sometimes by planning and execute with MoveIt and the rviz gui.
Are the reason for the problem the changed rate limiters?
How can I fix the problem?.

Changing the EE frame location

Dear all

I am working with Franka robot and I have a problem of changing the EE frame location.
I changed the position in the franka_control (franka_state_controller) but whatever the changes getRobotState().O_T_EE gives me the same position (the connection part between the gripper and the hand) even if the tf of panda_EE in rviz is changing. I tried setEEframe but the same results.
In franka website, there is this note (Neither the <arm_id>_EE nor the <arm_id>_K are contained in the URDF as they can be changed at run time).
Could you tell me please how to change the EE frame location at run time?

Thanks

feature request: inertial tags in panda xacro

Hi,
using the panda robot in gazebo with roscontrol requires that all links have inertial properties, which at the moment they do not. It would be great to add these parameters, as in my experience running a couple of preliminary tests in gazebo is really convenient.

Thanks for the great work on this package :)

franka_control node dies: "Controller Spawner: Waiting for service controller_manager/load_controller"

Greetings!
So, while running franka_control.launch, topic dies with some errors.
Additionally I don't get any response from rostopic pub -1 /franka_control/error_recovery/goal franka_control/ErrorRecoveryActionGoal "{}"
While running roslaunch franka_control franka_control.launch robot_ip:=172.16.0.2, I am getting:

SUMMARY
========

PARAMETERS
 * /franka_control/arm_id: panda
 * /franka_control/cutoff_frequency: 100
 * /franka_control/internal_controller: joint_impedance
 * /franka_control/joint_names: ['panda_joint1', ...
 * /franka_control/rate_limiting: True
 * /franka_control/robot_ip: 172.16.0.2
 * /franka_gripper/default_grasp_epsilon/inner: 0.005
 * /franka_gripper/default_grasp_epsilon/outer: 0.005
 * /franka_gripper/default_speed: 0.1
 * /franka_gripper/joint_names: ['panda_finger_jo...
 * /franka_gripper/publish_rate: 30
 * /franka_gripper/robot_ip: 172.16.0.2
 * /franka_state_controller/arm_id: panda
 * /franka_state_controller/joint_names: ['panda_joint1', ...
 * /franka_state_controller/publish_rate: 30
 * /franka_state_controller/type: franka_control/Fr...
 * /joint_state_desired_publisher/rate: 30
 * /joint_state_desired_publisher/source_list: ['franka_state_co...
 * /joint_state_publisher/rate: 30
 * /joint_state_publisher/source_list: ['franka_state_co...
 * /position_joint_trajectory_controller/constraints/goal_time: 0.5
 * /position_joint_trajectory_controller/constraints/panda_joint1/goal: 0.05
 * /position_joint_trajectory_controller/constraints/panda_joint2/goal: 0.05
 * /position_joint_trajectory_controller/constraints/panda_joint3/goal: 0.05
 * /position_joint_trajectory_controller/constraints/panda_joint4/goal: 0.05
 * /position_joint_trajectory_controller/constraints/panda_joint5/goal: 0.05
 * /position_joint_trajectory_controller/constraints/panda_joint6/goal: 0.05
 * /position_joint_trajectory_controller/constraints/panda_joint7/goal: 0.05
 * /position_joint_trajectory_controller/joints: ['panda_joint1', ...
 * /position_joint_trajectory_controller/type: position_controll...
 * /robot_description: <?xml version="1....
 * /rosdistro: kinetic
 * /rosversion: 1.12.14

NODES
  /
    franka_control (franka_control/franka_control_node)
    franka_gripper (franka_gripper/franka_gripper_node)
    joint_state_desired_publisher (joint_state_publisher/joint_state_publisher)
    joint_state_publisher (joint_state_publisher/joint_state_publisher)
    robot_state_publisher (robot_state_publisher/robot_state_publisher)
    state_controller_spawner (controller_manager/spawner)

auto-starting new master
process[master]: started with pid [10325]
ROS_MASTER_URI=http://localhost:11311

setting /run_id to 678a3aee-4c94-11e9-a975-4c72b9cc49b3
process[rosout-1]: started with pid [10338]
started core service [/rosout]
process[franka_gripper-2]: started with pid [10351]
process[franka_control-3]: started with pid [10356]
[ INFO] [1553253590.755850523]: franka_gripper_node: Found default_speed 0.1
process[state_controller_spawner-4]: started with pid [10358]
[ INFO] [1553253590.758443925]: franka_gripper_node: Found default_grasp_epsilon inner: 0.005, outer: 0.005
process[robot_state_publisher-5]: started with pid [10370]
process[joint_state_publisher-6]: started with pid [10386]
process[joint_state_desired_publisher-7]: started with pid [10391]
[INFO] [1553253591.413185]: Controller Spawner: Waiting for service controller_manager/load_controller
[WARN] [1553253621.717197]: Controller Spawner couldn't find the expected controller_manager ROS interface.
[state_controller_spawner-4] process has finished cleanly
log file: /home/artemii/.ros/log/678a3aee-4c94-11e9-a975-4c72b9cc49b3/state_controller_spawner-4*.log
terminate called after throwing an instance of 'franka::NetworkException'
  what():  libfranka: Connection timeout
terminate called after throwing an instance of 'franka::NetworkException'
  what():  libfranka: Connection timeout
[franka_gripper-2] process has died [pid 10351, exit code -6, cmd /opt/ros/kinetic/lib/franka_gripper/franka_gripper_node __name:=franka_gripper __log:=/home/artemii/.ros/log/678a3aee-4c94-11e9-a975-4c72b9cc49b3/franka_gripper-2.log].
log file: /home/artemii/.ros/log/678a3aee-4c94-11e9-a975-4c72b9cc49b3/franka_gripper-2*.log
================================================================================REQUIRED process [franka_control-3] has died!
process has died [pid 10356, exit code -6, cmd /opt/ros/kinetic/lib/franka_control/franka_control_node __name:=franka_control __log:=/home/artemii/.ros/log/678a3aee-4c94-11e9-a975-4c72b9cc49b3/franka_control-3.log].
log file: /home/artemii/.ros/log/678a3aee-4c94-11e9-a975-4c72b9cc49b3/franka_control-3*.log
Initiating shutdown!
================================================================================
[joint_state_desired_publisher-7] killing on exit
[joint_state_publisher-6] killing on exit
[franka_control-3] killing on exit
[robot_state_publisher-5] killing on exit
[rosout-1] killing on exit
[master] killing on exit
shutting down processing monitor...
... shutting down processing monitor complete

libfranka and franka-ros are installed as a deb:

ros-kinetic-libfranka is already the newest version (0.5.0-1xenial-20180810-152723-0800).
ros-kinetic-franka-ros is already the newest version (0.6.0-1xenial-20190220-185201-0800).

In other side, I do get a ping to the Franka's control and to the Franka base, while connected to it straighly.
sudo ping 172.16.0.2 -i 0.001 -D -c 10000 -s 1200 gives me:

rtt min/avg/max/mdev = 0.152/0.259/0.574/0.048 ms,
which seems to be alright.

kernel version: 4.14.12-rt10

cpufreq-info -p:
1200000 3100000 performance

I'm able to control Franka through the https://172.16.0.2/desk/, but not using ROS...

Looking forward to get some clue!
Thanks

current_errors doesn't keep the error state once the arm stops

I can't find a way to tell if the arm is in an error state:

  • since the robot stops the execution once a franka::Errors error happens, rostopic echo /franka_state_controller/franka_states/current_errors reports all flags as false (e.g. cartesian_velocity_violation will of course not be True now that the robot is stopped, same for joint_reflex or cartesian_reflex for example, but this is not a problem for self_collision as that stops the robot in an error position);
  • rostopic echo /franka_state_controller/last_motion_errors reports the last error as a True, since that's what stopped the robot, however, it doesn't update after the error_recovery action is called and, logically, it shouldn't;

This combination blocks the possibility to automatically recover from an error and execute a different operation completely. I was expecting current_errors to keep the error that's currently blocking the execution of any movement until an error recovery is performed.

Is this intended behaviour and/or can this be changed? Is there a different way to get the current error state of the robot that I'm not seeing?

Bugged runs for communication_test

During my kernel testing in #23 I had 3 bugged runs (once with 4.4 twice with 4.13 out of 20 combined runs) of the communication test example of libfranka. They all gave a similar output, but I didn't find a consistent way of reproducing it. The output from the 4.4 run is:

ap@ap-NUC7i7DNKE:~/git/libfranka/build$ ./examples/communication_test 172.16.2.101
WARNING: This example will move the robot! Please make sure to have the user stop button at hand!
Press Enter to continue...

Finished moving to initial joint configuration.

Starting communication test.
#100 Current success rate: 1.00
#200 Current success rate: 1.00
#300 Current success rate: 0.99
#400 Current success rate: 1.00
#500 Current success rate: 1.00
#600 Current success rate: 1.00
#700 Current success rate: 1.00
#800 Current success rate: 1.00
#900 Current success rate: 1.00
#1000 Current success rate: 1.00
#1100 Current success rate: 1.00
#1200 Current success rate: 1.00
#1300 Current success rate: 1.00
#1400 Current success rate: 1.00
#1500 Current success rate: 1.00
#1600 Current success rate: 0.98
#1700 Current success rate: 1.00
#1800 Current success rate: 1.00
#1900 Current success rate: 1.00
#2000 Current success rate: 1.00
#2100 Current success rate: 1.00
#2200 Current success rate: 1.00
#2300 Current success rate: 1.00
#2400 Current success rate: 1.00
#2500 Current success rate: 1.00
#2600 Current success rate: 0.98
#2700 Current success rate: 1.00
#2800 Current success rate: 1.00
#2900 Current success rate: 1.00
#3000 Current success rate: 1.00
#3100 Current success rate: 1.00
#3200 Current success rate: 1.00
#3300 Current success rate: 1.00
#3400 Current success rate: 1.00
#3500 Current success rate: 1.00
#3600 Current success rate: 0.98
#3700 Current success rate: 1.00
#3800 Current success rate: 1.00
#3900 Current success rate: 1.00
#4000 Current success rate: 1.00
#4100 Current success rate: 1.00
#4200 Current success rate: 1.00
#4300 Current success rate: 1.00
#4400 Current success rate: 1.00
#4500 Current success rate: 1.00
#4600 Current success rate: 1.00
#4700 Current success rate: 1.00
#4800 Current success rate: 1.00
#4900 Current success rate: 1.00
#5000 Current success rate: 1.00
#5100 Current success rate: 1.00
#5200 Current success rate: 1.00
#5300 Current success rate: 1.00
#5400 Current success rate: 1.00
#5500 Current success rate: 1.00
#5600 Current success rate: 1.00
#5700 Current success rate: 0.98
#5800 Current success rate: 0.96
#5900 Current success rate: 0.99
#6000 Current success rate: 0.98
#6100 Current success rate: 0.99
#6200 Current success rate: 1.00
#6300 Current success rate: 1.00
#6400 Current success rate: 1.00
#6500 Current success rate: 1.00
#6600 Current success rate: 1.00
#6700 Current success rate: 1.00
#6800 Current success rate: 1.00
#6900 Current success rate: 1.00
#7000 Current success rate: 1.00
#7100 Current success rate: 1.00
#7200 Current success rate: 1.00
#7300 Current success rate: 1.00
#7400 Current success rate: 1.00
#7500 Current success rate: 0.99
#7600 Current success rate: 1.00
#7700 Current success rate: 1.00
#7800 Current success rate: 1.00
#7900 Current success rate: 1.00
#8000 Current success rate: 0.98
#8100 Current success rate: 1.00
#8200 Current success rate: 1.00
#8300 Current success rate: 1.00
#8400 Current success rate: 1.00
#8500 Current success rate: 0.96
#8600 Current success rate: 1.00
#8700 Current success rate: 1.00
#8800 Current success rate: 1.00
#8900 Current success rate: 0.99
#9000 Current success rate: 1.00
#9100 Current success rate: 0.93
#9200 Current success rate: 0.93
#9300 Current success rate: 1.00
#9400 Current success rate: 1.00
#9500 Current success rate: 0.99
#9600 Current success rate: 1.00
#9700 Current success rate: 0.94
#9800 Current success rate: 0.99
#9900 Current success rate: 0.99
#10000 Current success rate: 1.00

Finished test, shutting down example


#######################################################
The control loop did not get executed 18446744073709551615 times in the
last 10000 milliseconds! (lost 18446744073709551615 robot states)

Control command success rate of 10001 samples: 
Max: 1.00
Avg: 1.00
Min: 0.90
#######################################################

As you can see there are a couple of issues:

  • 10001 samples probably lead to an overflow/bad division which leads to the gigantic number of dropped states (which is likely very low instead);
  • The listed minimum value is not actually present among the "Current success rate" output, and should probably be 0.93.

Need some clarity on various force data in franka state

I have modified the cartesian impendence example controller to run in a real-time bilateral teleoperation setup. I am looking to read external forces acting on the panda's end-effector.
So far I can see that there are following topics available: F_ext, O_F_ext_hat_K, K_F_ext_hat_K, F_T_EE, .F_x_Cee, .F_x_Cload.
I would like to get some clarity on what exactly these forces are.

catkin_make Franka Ros

Beim kompilieren von Franka-Ros

~/catkin_ws$ catkin_make -DCMAKE_BUILD_TYPE=Release -DFranka_DIR:PATH=~/libfranka/build

tritt folgender Fehler auf:

In function main': franka_joint_state_publisher.cpp:(.text.startup+0x5a0): undefined reference to franka::Robot::Robot(std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&, franka::RealtimeConfig)'
collect2: error: ld returned 1 exit status

`
Base path: /home/mti/catkin_ws
Source space: /home/mti/catkin_ws/src
Build space: /home/mti/catkin_ws/build
Devel space: /home/mti/catkin_ws/devel
Install space: /home/mti/catkin_ws/install

Running command: "cmake /home/mti/catkin_ws/src -DCMAKE_BUILD_TYPE=Release -DFranka_DIR:PATH=~/libfranka/build -DCATKIN_DEVEL_PREFIX=/home/mti/catkin_ws/devel -DCMAKE_INSTALL_PREFIX=/home/mti/catkin_ws/install -G Unix Makefiles" in "/home/mti/catkin_ws/build"

-- Using CATKIN_DEVEL_PREFIX: /home/mti/catkin_ws/devel
-- Using CMAKE_PREFIX_PATH: /opt/ros/kinetic
-- This workspace overlays: /opt/ros/kinetic
-- Using PYTHON_EXECUTABLE: /usr/bin/python
-- Using Debian Python package layout
-- Using empy: /usr/bin/empy
-- Using CATKIN_ENABLE_TESTING: ON
-- Call enable_testing()
-- Using CATKIN_TEST_RESULTS_DIR: /home/mti/catkin_ws/build/test_results
-- Found gtest sources under '/usr/src/gtest': gtests will be built
-- Using Python nosetests: /usr/bin/nosetests-2.7
-- catkin 0.7.8
-- BUILD_SHARED_LIBS is on
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- ~~ traversing 9 packages in topological order:
-- ~~ - franka_description
-- ~~ - franka_ros (metapackage)
-- ~~ - franka_msgs
-- ~~ - franka_visualization
-- ~~ - franka_gripper
-- ~~ - franka_hw
-- ~~ - franka_control
-- ~~ - franka_example_controllers
-- ~~ - panda_moveit_config
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- +++ processing catkin package: 'franka_description'
-- ==> add_subdirectory(franka_ros-kinetic-devel/franka_description)
-- +++ processing catkin metapackage: 'franka_ros'
-- ==> add_subdirectory(franka_ros-kinetic-devel/franka_ros)
-- +++ processing catkin package: 'franka_msgs'
-- ==> add_subdirectory(franka_ros-kinetic-devel/franka_msgs)
-- Using these message generators: gencpp;geneus;genlisp;gennodejs;genpy
-- franka_msgs: 2 messages, 0 services
-- +++ processing catkin package: 'franka_visualization'
-- ==> add_subdirectory(franka_ros-kinetic-devel/franka_visualization)
-- +++ processing catkin package: 'franka_gripper'
-- ==> add_subdirectory(franka_ros-kinetic-devel/franka_gripper)
-- Using these message generators: gencpp;geneus;genlisp;gennodejs;genpy
-- Generating .msg files for action franka_gripper/Grasp /home/mti/catkin_ws/src/franka_ros-kinetic-devel/franka_gripper/action/Grasp.action
-- Generating .msg files for action franka_gripper/Homing /home/mti/catkin_ws/src/franka_ros-kinetic-devel/franka_gripper/action/Homing.action
-- Generating .msg files for action franka_gripper/Stop /home/mti/catkin_ws/src/franka_ros-kinetic-devel/franka_gripper/action/Stop.action
-- Generating .msg files for action franka_gripper/Move /home/mti/catkin_ws/src/franka_ros-kinetic-devel/franka_gripper/action/Move.action
-- franka_gripper: 28 messages, 0 services
-- +++ processing catkin package: 'franka_hw'
-- ==> add_subdirectory(franka_ros-kinetic-devel/franka_hw)
-- +++ processing catkin package: 'franka_control'
-- ==> add_subdirectory(franka_ros-kinetic-devel/franka_control)
-- Using these message generators: gencpp;geneus;genlisp;gennodejs;genpy
-- Generating .msg files for action franka_control/ErrorRecovery /home/mti/catkin_ws/src/franka_ros-kinetic-devel/franka_control/action/ErrorRecovery.action
-- franka_control: 7 messages, 7 services
-- +++ processing catkin package: 'franka_example_controllers'
-- ==> add_subdirectory(franka_ros-kinetic-devel/franka_example_controllers)
-- Using these message generators: gencpp;geneus;genlisp;gennodejs;genpy
-- franka_example_controllers: 1 messages, 0 services
-- +++ processing catkin package: 'panda_moveit_config'
-- ==> add_subdirectory(franka_ros-kinetic-devel/panda_moveit_config)
-- Configuring done
-- Generating done
-- Build files have been written to: /home/mti/catkin_ws/build

Running command: "make -j4 -l4" in "/home/mti/catkin_ws/build"

[ 0%] Built target std_msgs_generate_messages_lisp
[ 0%] Built target std_msgs_generate_messages_py
[ 0%] Built target std_msgs_generate_messages_cpp
[ 0%] Built target std_msgs_generate_messages_eus
[ 0%] Built target _franka_msgs_generate_messages_check_deps_Errors
[ 0%] Built target _franka_msgs_generate_messages_check_deps_FrankaState
[ 0%] Built target roscpp_generate_messages_lisp
[ 0%] Built target std_msgs_generate_messages_nodejs
[ 0%] Built target geometry_msgs_generate_messages_nodejs
[ 0%] Built target geometry_msgs_generate_messages_lisp
[ 0%] Built target rosgraph_msgs_generate_messages_nodejs
[ 0%] Built target geometry_msgs_generate_messages_py
[ 0%] Built target geometry_msgs_generate_messages_eus
[ 0%] Built target roscpp_generate_messages_cpp
[ 0%] Built target sensor_msgs_generate_messages_lisp
[ 0%] Built target sensor_msgs_generate_messages_cpp
[ 0%] Built target sensor_msgs_generate_messages_py
[ 0%] Built target rosgraph_msgs_generate_messages_cpp
[ 0%] Built target geometry_msgs_generate_messages_cpp
[ 0%] Built target sensor_msgs_generate_messages_eus
[ 0%] Built target sensor_msgs_generate_messages_nodejs
[ 0%] Built target roscpp_generate_messages_py
[ 0%] Built target rosgraph_msgs_generate_messages_eus
[ 0%] Built target roscpp_generate_messages_eus
[ 0%] Built target rosgraph_msgs_generate_messages_py
[ 0%] Built target rosgraph_msgs_generate_messages_lisp
[ 0%] Built target roscpp_generate_messages_nodejs
[ 0%] Built target actionlib_msgs_generate_messages_cpp
[ 0%] Built target _franka_gripper_generate_messages_check_deps_MoveActionResult
[ 0%] Built target _franka_gripper_generate_messages_check_deps_StopAction
[ 0%] Built target _franka_gripper_generate_messages_check_deps_StopActionFeedback
[ 0%] Built target _franka_gripper_generate_messages_check_deps_MoveActionFeedback
[ 0%] Built target _franka_gripper_generate_messages_check_deps_HomingAction
[ 0%] Built target _franka_gripper_generate_messages_check_deps_HomingFeedback
[ 0%] Built target _franka_gripper_generate_messages_check_deps_MoveGoal
[ 0%] Built target _franka_gripper_generate_messages_check_deps_GraspAction
[ 0%] Built target _franka_gripper_generate_messages_check_deps_GraspFeedback
[ 0%] Built target _franka_gripper_generate_messages_check_deps_HomingActionResult
[ 0%] Built target _franka_gripper_generate_messages_check_deps_StopActionGoal
[ 0%] Built target _franka_gripper_generate_messages_check_deps_MoveFeedback
[ 0%] Built target _franka_gripper_generate_messages_check_deps_MoveActionGoal
[ 0%] Built target _franka_gripper_generate_messages_check_deps_MoveResult
[ 0%] Built target _franka_gripper_generate_messages_check_deps_GraspActionResult
[ 0%] Built target _franka_gripper_generate_messages_check_deps_StopActionResult
[ 0%] Built target _franka_gripper_generate_messages_check_deps_HomingResult
[ 0%] Built target _franka_gripper_generate_messages_check_deps_MoveAction
[ 0%] Built target actionlib_msgs_generate_messages_nodejs
[ 0%] Built target _franka_gripper_generate_messages_check_deps_HomingActionGoal
[ 0%] Built target _franka_gripper_generate_messages_check_deps_GraspActionFeedback
[ 0%] Built target _franka_gripper_generate_messages_check_deps_GraspActionGoal
[ 0%] Built target _franka_gripper_generate_messages_check_deps_GraspResult
[ 0%] Built target _franka_gripper_generate_messages_check_deps_HomingGoal
[ 0%] Built target _franka_gripper_generate_messages_check_deps_StopFeedback
[ 0%] Built target _franka_gripper_generate_messages_check_deps_HomingActionFeedback
[ 0%] Built target _franka_gripper_generate_messages_check_deps_GraspGoal
[ 0%] Built target _franka_gripper_generate_messages_check_deps_StopResult
[ 0%] Built target actionlib_msgs_generate_messages_lisp
[ 0%] Built target actionlib_msgs_generate_messages_eus
[ 0%] Built target _franka_gripper_generate_messages_check_deps_StopGoal
[ 0%] Built target trajectory_msgs_generate_messages_nodejs
[ 0%] Built target trajectory_msgs_generate_messages_py
[ 0%] Built target trajectory_msgs_generate_messages_cpp
[ 0%] Built target trajectory_msgs_generate_messages_eus
[ 0%] Built target control_msgs_generate_messages_nodejs
[ 0%] Built target actionlib_generate_messages_py
[ 0%] Built target actionlib_generate_messages_cpp
[ 0%] Built target trajectory_msgs_generate_messages_lisp
[ 0%] Built target control_msgs_generate_messages_lisp
[ 0%] Built target actionlib_msgs_generate_messages_py
[ 0%] Built target actionlib_generate_messages_lisp
[ 0%] Built target control_msgs_generate_messages_eus
[ 0%] Built target control_msgs_generate_messages_py
[ 0%] Built target control_msgs_generate_messages_cpp
[ 11%] Built target franka_gripper_generate_messages_py
Scanning dependencies of target franka_hw
[ 11%] Built target actionlib_generate_messages_nodejs
[ 15%] Built target actionlib_generate_messages_eus
[ 22%] Built target franka_gripper_generate_messages_cpp
[ 22%] Building CXX object franka_ros-kinetic-devel/franka_hw/CMakeFiles/franka_hw.dir/src/control_mode.cpp.o
[ 22%] Built target _franka_control_generate_messages_check_deps_ErrorRecoveryAction
[ 22%] Built target _franka_control_generate_messages_check_deps_SetLoad
[ 22%] Built target _franka_control_generate_messages_check_deps_SetForceTorqueCollisionBehavior
[ 22%] Built target _franka_control_generate_messages_check_deps_ErrorRecoveryActionResult
[ 22%] Built target _franka_control_generate_messages_check_deps_SetCartesianImpedance
[ 22%] Built target _franka_control_generate_messages_check_deps_SetEEFrame
[ 23%] Building CXX object franka_ros-kinetic-devel/franka_hw/CMakeFiles/franka_hw.dir/src/franka_hw.cpp.o
[ 23%] Built target _franka_control_generate_messages_check_deps_ErrorRecoveryResult
[ 23%] Built target _franka_control_generate_messages_check_deps_ErrorRecoveryGoal
[ 23%] Built target _franka_control_generate_messages_check_deps_SetFullCollisionBehavior
[ 23%] Built target _franka_control_generate_messages_check_deps_ErrorRecoveryActionFeedback
[ 23%] Built target _franka_control_generate_messages_check_deps_ErrorRecoveryFeedback
[ 23%] Built target _franka_control_generate_messages_check_deps_SetKFrame
[ 23%] Built target _franka_control_generate_messages_check_deps_ErrorRecoveryActionGoal
[ 23%] Built target _franka_control_generate_messages_check_deps_SetJointImpedance
[ 23%] Built target _catkin_empty_exported_target
[ 23%] Built target tf2_msgs_generate_messages_eus
[ 23%] Built target controller_manager_msgs_generate_messages_cpp
[ 23%] Built target tf2_msgs_generate_messages_lisp
[ 23%] Built target tf2_msgs_generate_messages_nodejs
[ 23%] Built target tf_generate_messages_py
[ 23%] Built target controller_manager_msgs_generate_messages_eus
[ 23%] Building CXX object franka_ros-kinetic-devel/franka_hw/CMakeFiles/franka_hw.dir/src/resource_helpers.cpp.o
[ 23%] Built target tf2_msgs_generate_messages_cpp
[ 23%] Built target controller_manager_msgs_generate_messages_py
[ 23%] Built target tf_generate_messages_nodejs
[ 23%] Built target controller_manager_msgs_generate_messages_nodejs
[ 23%] Built target tf_generate_messages_cpp
[ 23%] Built target controller_manager_msgs_generate_messages_lisp
[ 23%] Built target tf2_msgs_generate_messages_py
[ 23%] Built target tf_generate_messages_lisp
[ 23%] Built target tf_generate_messages_eus
[ 23%] Built target _franka_example_controllers_generate_messages_check_deps_JointTorqueComparison
[ 24%] Built target franka_example_controllers_gencfg
[ 24%] Building CXX object franka_ros-kinetic-devel/franka_hw/CMakeFiles/franka_hw.dir/src/trigger_rate.cpp.o
[ 24%] Built target dynamic_reconfigure_gencfg
[ 24%] Built target dynamic_reconfigure_generate_messages_cpp
[ 24%] Built target dynamic_reconfigure_generate_messages_nodejs
[ 24%] Built target dynamic_reconfigure_generate_messages_eus
[ 24%] Built target dynamic_reconfigure_generate_messages_lisp
[ 24%] Built target dynamic_reconfigure_generate_messages_py
[ 24%] Built target franka_msgs_generate_messages_lisp
[ 25%] Built target franka_msgs_generate_messages_py
[ 26%] Built target franka_msgs_generate_messages_cpp
[ 27%] Built target franka_msgs_generate_messages_eus
[ 28%] Built target franka_msgs_generate_messages_nodejs
Scanning dependencies of target franka_joint_state_publisher
[ 28%] Building CXX object franka_ros-kinetic-devel/franka_visualization/CMakeFiles/franka_joint_state_publisher.dir/src/franka_joint_state_publisher.cpp.o
[ 39%] Built target franka_gripper_generate_messages_nodejs
[ 49%] Built target franka_gripper_generate_messages_lisp
[ 60%] Built target franka_gripper_generate_messages_eus
[ 67%] Built target franka_control_generate_messages_py
[ 73%] Built target franka_control_generate_messages_nodejs
[ 78%] Built target franka_control_generate_messages_cpp
Scanning dependencies of target franka_control_generate_messages_eus
[ 78%] Generating EusLisp code from franka_control/ErrorRecoveryResult.msg
[ 78%] Generating EusLisp code from franka_control/ErrorRecoveryActionResult.msg
[ 79%] Generating EusLisp code from franka_control/ErrorRecoveryAction.msg
[ 79%] Generating EusLisp code from franka_control/ErrorRecoveryGoal.msg
[ 80%] Generating EusLisp code from franka_control/ErrorRecoveryActionFeedback.msg
[ 80%] Generating EusLisp code from franka_control/ErrorRecoveryFeedback.msg
[ 80%] Generating EusLisp code from franka_control/ErrorRecoveryActionGoal.msg
[ 81%] Generating EusLisp code from franka_control/SetCartesianImpedance.srv
[ 81%] Generating EusLisp code from franka_control/SetEEFrame.srv
[ 81%] Generating EusLisp code from franka_control/SetForceTorqueCollisionBehavior.srv
Scanning dependencies of target franka_control_generate_messages_lisp
[ 82%] Generating Lisp code from franka_control/ErrorRecoveryResult.msg
[ 83%] Generating EusLisp code from franka_control/SetJointImpedance.srv
[ 83%] Generating Lisp code from franka_control/ErrorRecoveryActionResult.msg
[ 83%] Generating EusLisp code from franka_control/SetFullCollisionBehavior.srv
[ 83%] Generating Lisp code from franka_control/ErrorRecoveryAction.msg
[ 84%] Generating EusLisp code from franka_control/SetLoad.srv
[ 85%] Generating Lisp code from franka_control/ErrorRecoveryGoal.msg
[ 85%] Generating EusLisp code from franka_control/SetKFrame.srv
[ 85%] Generating Lisp code from franka_control/ErrorRecoveryActionFeedback.msg
[ 85%] Generating EusLisp manifest code for franka_control
[ 85%] Generating Lisp code from franka_control/ErrorRecoveryFeedback.msg
[ 86%] Generating Lisp code from franka_control/ErrorRecoveryActionGoal.msg
[ 86%] Generating Lisp code from franka_control/SetCartesianImpedance.srv
[ 87%] Generating Lisp code from franka_control/SetEEFrame.srv
[ 87%] Generating Lisp code from franka_control/SetForceTorqueCollisionBehavior.srv
[ 87%] Generating Lisp code from franka_control/SetJointImpedance.srv
[ 88%] Generating Lisp code from franka_control/SetFullCollisionBehavior.srv
[ 88%] Generating Lisp code from franka_control/SetLoad.srv
[ 88%] Generating Lisp code from franka_control/SetKFrame.srv
[ 88%] Built target franka_control_generate_messages_eus
Scanning dependencies of target franka_example_controllers_generate_messages_nodejs
[ 88%] Generating Javascript code from franka_example_controllers/JointTorqueComparison.msg
[ 88%] Built target franka_control_generate_messages_lisp
Scanning dependencies of target franka_example_controllers_generate_messages_cpp
[ 88%] Generating C++ code from franka_example_controllers/JointTorqueComparison.msg
[ 88%] Built target franka_example_controllers_generate_messages_nodejs
Scanning dependencies of target franka_example_controllers_generate_messages_py
[ 88%] Generating Python from MSG franka_example_controllers/JointTorqueComparison
[ 89%] Linking CXX executable /home/mti/catkin_ws/devel/lib/franka_visualization/franka_joint_state_publisher
[ 89%] Built target franka_example_controllers_generate_messages_cpp
Scanning dependencies of target franka_example_controllers_generate_messages_eus
[ 90%] Generating EusLisp code from franka_example_controllers/JointTorqueComparison.msg
[ 90%] Generating EusLisp manifest code for franka_example_controllers
[ 91%] Generating Python msg init.py for franka_example_controllers
CMakeFiles/franka_joint_state_publisher.dir/src/franka_joint_state_publisher.cpp.o: In function main': franka_joint_state_publisher.cpp:(.text.startup+0x5a0): undefined reference to franka::Robot::Robot(std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&, franka::RealtimeConfig)'
collect2: error: ld returned 1 exit status
franka_ros-kinetic-devel/franka_visualization/CMakeFiles/franka_joint_state_publisher.dir/build.make:114: recipe for target '/home/mti/catkin_ws/devel/lib/franka_visualization/franka_joint_state_publisher' failed
make[2]: *** [/home/mti/catkin_ws/devel/lib/franka_visualization/franka_joint_state_publisher] Error 1
CMakeFiles/Makefile2:1166: recipe for target 'franka_ros-kinetic-devel/franka_visualization/CMakeFiles/franka_joint_state_publisher.dir/all' failed
make[1]: *** [franka_ros-kinetic-devel/franka_visualization/CMakeFiles/franka_joint_state_publisher.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
[ 91%] Built target franka_example_controllers_generate_messages_py
[ 91%] Built target franka_example_controllers_generate_messages_eus
[ 92%] Linking CXX shared library /home/mti/catkin_ws/devel/lib/libfranka_hw.so
[ 92%] Built target franka_hw
Makefile:140: recipe for target 'all' failed
make: *** [all] Error 2
Invoking "make -j4 -l4" failed
`

functionality of service calls dependes on user stop

I am using the latest release of franka_ros (0.6.0) with libfranka (0.5.0). When calling services from franka_control such as for example franka_control/set_load I am encountering a strange behaviour.
The service call fails with

error: "libfranka: Set Load command rejected: command not possible in the current mode!"

However after closing and reopening the user stop and no further changes it works just fine.

ros::Time() in ROS-control update() call causes timing inconsistencies.

The franka panda hardware interface for ROS-control implements a method called FrankaHW::control() which triggers the user-defined ROS-control update(ros::Time time, ros::Duration period) call which must be implemented by valid ROS-controller.

As can be seen here, the argument "period" is assigned the time-step, which is constantly 1 ms and therefore is perfectly valid.

However, the argument "time" gets assigned ros::Time::now(). The issue is, that Time::now() is not perfectly in sync with the franka hardware system time, as a user who calls a real-time control loop would expect. (One reason why this Time::now() is not in sync is for instance that the UDP-communication with the robot may experience delays, in which case ros::Time::now() may deviate significantly from the current panda system time).

Would it make sense to assign a different value to "time", i.e. the system time value from the currently read robot state?

=====================================================
Side-track : one motivating example why this is of practical concern:

  • consider you are tracking a perfectly linear position trajectory in a custom ros-controller, using the franka joint position interface.
  • The panda internally employs a joint PD controller, I assume that you are obtaining the required reference velocity implicitly from the position trajectory through some filtering step. This internal filter likely employs constant time steps of 1 ms.
  • If you evaluate your trajectory at constant increments of 1 ms, the resulting position update will be constant, and therefore the resulting reference velocity.
  • If you are now, as a user, evaluating your tracking controller using the "time" parameter (rather than duration), you evaluate your perfectly linear reference trajectory at non-uniform time spacing and send this command to the joint position interface. The arriving position increments will be non-constant, and hence the estimate for the joint velocity will be excited by he "noise" on the position update.
  • I am not entirely sure what role your internal velocity filter plays, but in practice I have seen the panda robot go unstable when using time "time" parameter for reference tracking using the position interface.

Exposing default and constant values

I was wondering if it were possible to expose GripperState::max_width in the ROS parameter server or maybe in the result of the HomingAction.

On a different but related note, I find myself having to define many static constexpr values for, for example, the bit "_linkN" from "panda_linkN" or "_leftfinger" (since I can get the arm_id from /franka_state_controller") from the SRDF. I can find the joint names in the parameter server, but not the link names...and I haven't found another way to get those.

Same goes for static const geometry_msgs::Vector3 distance_flange_to_center_of_fingers_closed describing the (0.0, 0.0, 0.1034) vector you provide on the research manual (pag. 44). This one is needed for a static transform broadcaster which I would gladly remove from my code if you had a default one in franka_state_controller.

As far as I know, these should all be constant for all Panda robots. I personally prefer to avoid having my own definition for defaults if defaults are already in place from someone else. It would really be nice to have these setup, though they are not a critical concern. At the same time I'm not sure wether this is regarded as a "best practice" in the ROS community, especially when talking about the SRDF parameters.

Franka Gazebo Model with Franka Example Control

Hi,

Recently, I have implemented the Franka robot in Gazebo as described in https://erdalpekel.de/.
The robot is controllable, but the implemented controllers are analogous to the universal ROS-controller.
In order to use the Franka example controller, the Franka Hardware Interface needs to be implemented.
Is there any guide to transfer the Panda controllers to the gazebo model?
I mean urdf model is known, but only the low-level control with transmission needs to be adjusted. Is there any previous work or guide?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.