Commit ab47d806 authored by Johannes Mey's avatar Johannes Mey
Browse files

reduce repo to just franka_description

parent 0f83665d
# CHANGELOG
## 0.7.0 - UNRELEASED
Requires `libfranka` >= 0.7.0
* **BREAKING** moved services and action from `franka_control` to `franka_msgs`.
* **BREAKING** moved Service container from `franka_control` to `franka_hw`.
* `franka_example_controllers` : Added example for dual-arm control based on franka_combinable_hw.
* `franka_description` :
- Added an example urdf with two panda arms.
- **BREAKING** Updated collision volumes.
- Removed invalid `axis` for `joint8`.
* `franka_hw`:
- Added hardware classes to support torque-controlling multiple robots from one controller.
- Refactored FrankaHW class to serve as base class (e.g. for FrankaCombinableHW).
- Added joint limits checking to FrankaHW which means parameterized warning prints when approaching limits.
- Made initial collision behavior a parameter.
- Added default constructor and init method to FrankaHW.
- **BREAKING** moved parsing of parameters from control node to FrankaHW::init.
- **BREAKING** made libfranka robot a member of FrankaHW.
- Added missing return value to `franka::ControllerMode` stream operator function.
* `franka_control`:
- Added control node that can runs a `FrankaCombinedHW` to control mulitple Pandas.
- Publish whole `libfranka` `franka::RobotState` in `franka_state_controller`.
* `franka_example_controllers`:
- Cartesian impedance example controller: Interpolate desired orientations with slerp and change orientation error
to quaternion.
* **BREAKING** Moved `panda_moveit_config` to [`ros-planning`](https://github.com/ros-planning/panda_moveit_config).
* Added support for ROS Melodic Morenia.
* Raised minimum CMake version to 3.4 to match `libfranka`.
* Add rosparam to choose value of `franka::RealtimeConfig`.
* Fix unused parameter bugs in `FrankaModelHandle` (#78).
## 0.6.0 - 2018-08-08
Requires `libfranka` >= 0.5.0
* **BREAKING** Fixes for MoveIt, improving robot performance:
* Fixed joint velocity and acceleration limits in `joint_limits.yaml`
* Use desired joint state for move group
* **BREAKING** Updated joint limits in URDF
* **BREAKING** Fixed velocity, acceleration and jerk limits in `franka_hw`
* **BREAKING** Start `franka_gripper_node` when giving `load_gripper:=true` to `franka_control.launch`
* Allow to configure rate limiting, filtering and internal controller in `franka_control_node`
* **BREAKING** `FrankaHW::FrankaHW` takes additional parameters.
* **BREAKING** Enabled rate limiting and low-pass filtering by default (`franka_control_node.yaml`)
* Publish desired joint state in `/joint_state_desired`
* Removed `effort_joint_trajectory_controller` from `default_controllers.yaml`
* Fixed a bug when switching between controllers using the same `libfranka` interface
## 0.5.0 - 2018-06-28
Requires `libfranka` >= 0.4.0
* **BREAKING** Updated URDF:
* Adjusted maximum joint velocity
* Updated axis 4 hard and soft limits
## 0.4.1 - 2018-06-21
Requires `libfranka` >= 0.3.0
* Added some missing includes to `franka_hw`
* Add support for commanding elbow in Cartesian pose and Cartesian velocity interfaces
## 0.4.0 - 2018-03-26
Requires `libfranka` >= 0.3.0
* **BREAKING** Removed `arm_id` and default `robot_ip` from launchfiles
* **BREAKING** Changed namespace of `franka_control` controller manager
* **BREAKING** Changed behavior of `gripper_action` for compatibility with MoveIt
* Changes in `panda_moveit_config`:
* Updated joint limits from URDF
* Removed `home` poses
* Fixed fake execution
* Add `load_gripper` argument (default: `true`) to `panda_moveit.launch`
* Conditionally load controllers/SRDFs based on `load_gripper`
* Add gripper controller configuration (requires running `franka_gripper_node`)
* Added `mimic` tag for gripper fingers to URDF and fixed velocity limits
## 0.3.0 - 2018-02-22
Requires `libfranka` >= 0.3.0
* **BREAKING** Changed signatures in `franka_hw::FrankaModelHandle`
* **BREAKING** Added epsilon parameters to `franka_gripper/Grasp` action
* Added Collada meshes for Panda and Hand
* Added missing dependencies to `panda_moveit_config` and `franka_example_controllers`
* Fixed linker errors when building with `-DFranka_DIR` while an older version of
`ros-kinetic-libfranka` is installed
* Added gripper joint state publisher to `franka_visualization`
* Moved `move_to_start.py` example script to `franka_example_controllers`
## 0.2.2 - 2018-01-31
Requires `libfranka` >= 0.2.0
* Catkin-related fixes for `franka_example_controllers`
* Added missing `<build_export_depend>` for `message_runtime`
## 0.2.1 - 2018-01-30
Requires `libfranka` >= 0.2.0
* Added missing dependency to `franka_example_controllers`
* Lowered rotational gains for Cartesian impedance example controller
## 0.2.0 - 2018-01-29
Requires `libfranka` >= 0.2.0
* Added missing run-time dependencies to `franka_description` and `franka_control`
* Added `tau_J_d`, `m_ee`, `F_x_Cee`, `I_ee`, `m_total`, `F_x_Ctotal`, `I_total`,
`theta` and `dtheta` to `franka_msgs/FrankaState`
* Added new errors to `franka_msgs/Errors`
* Updated and improved examples in `franka_example_controllers`
* Fixed includes for Eigen3 in `franka_example_controllers`
* Fixed gripper state publishing in `franka_gripper_node`
## 0.1.2 - 2017-10-10
* Fixed out-of-workspace build
## 0.1.1 - 2017-10-09
* Integrated `franka_description` as subdirectory
* Fixed dependencies on libfranka
* Fixed RViz config file paths
* Added missing `test_depend` to `franka_hw`
* Added missing CMake install rules
## 0.1.0 - 2017-09-15
* Initial release
#!groovy
buildResult = 'NOT_BUILT'
def getStages(rosDistribution, ubuntuVersion) {
return {
node('docker') {
step([$class: 'StashNotifier'])
try {
dir('src/franka_ros') {
checkout scm
}
sh 'rm -rf dist'
dir('dist') {
try {
step([$class: 'CopyArtifact',
filter: "libfranka-*-amd64-${ubuntuVersion}.tar.gz",
fingerprintArtifacts: true,
projectName: "SWDEV/libfranka/${java.net.URLEncoder.encode(env.BRANCH_NAME, "UTF-8")}",
selector: [$class: 'StatusBuildSelector', stable: false]])
} catch (e) {
// Fall back to develop branch.
step([$class: 'CopyArtifact',
filter: "libfranka-*-amd64-${ubuntuVersion}.tar.gz",
fingerprintArtifacts: true,
projectName: "SWDEV/libfranka/develop",
selector: [$class: 'StatusBuildSelector', stable: false]])
}
sh """
tar xfz libfranka-*-amd64-${ubuntuVersion}.tar.gz
ln -sf libfranka-*-amd64 libfranka
"""
}
docker.build("franka_ros-ci-worker:${rosDistribution}",
"-f src/franka_ros/.ci/Dockerfile.${rosDistribution} src/franka_ros/.ci").inside('-e MAKEFLAGS') {
withEnv(["CMAKE_PREFIX_PATH+=${env.WORKSPACE}/dist/libfranka/lib/cmake/Franka",
"ROS_HOME=${env.WORKSPACE}/ros-home"]) {
stage("${rosDistribution}: Build & Lint (Debug)") {
sh """
. /opt/ros/${rosDistribution}/setup.sh
src/franka_ros/.ci/debug.sh
"""
junit 'build-debug/test_results/**/*.xml'
}
}
}
if (buildResult != 'FAILED') {
buildResult = 'SUCCESS'
}
} catch (e) {
buildResult = 'FAILED'
}
}
}
}
node {
step([$class: 'StashNotifier'])
}
parallel(
'kinetic': getStages('kinetic', 'xenial'),
'melodic': getStages('melodic', 'bionic'),
)
node {
currentBuild.result = buildResult
step([$class: 'StashNotifier'])
}
# ROS integration for Franka Emika research robots
[![Build Status][travis-status]][travis]
See the [Franka Control Interface (FCI) documentation][fci-docs] for more information.
## License
......
include(CMakeParseArguments)
find_program(CLANG_FORMAT_PROG clang-format-6.0 DOC "'clang-format' executable")
if(CLANG_FORMAT_PROG AND NOT TARGET format)
add_custom_target(format)
add_custom_target(check-format)
endif()
find_program(CLANG_TIDY_PROG clang-tidy-6.0 DOC "'clang-tidy' executable")
if(CLANG_TIDY_PROG AND NOT TARGET tidy)
if(NOT CMAKE_EXPORT_COMPILE_COMMANDS)
message(WARNING "Invoke Catkin/CMake with '-DCMAKE_EXPORT_COMPILE_COMMANDS=ON'
to generate compilation database for 'clang-tidy'.")
endif()
add_custom_target(tidy)
add_custom_target(check-tidy)
endif()
function(add_format_target _target)
if(NOT CLANG_FORMAT_PROG)
return()
endif()
cmake_parse_arguments(ARG "" "" "FILES" ${ARGN})
add_custom_target(format-${_target}
COMMAND ${CLANG_FORMAT_PROG} -i ${ARG_FILES}
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/..
COMMENT "Formatting ${_target} source code with clang-format"
VERBATIM
)
add_dependencies(format format-${_target})
add_custom_target(check-format-${_target}
COMMAND ${CLANG_FORMAT_PROG} -output-replacements-xml ${ARG_FILES} | grep "<replacement " > /dev/null && exit 1 || exit 0
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/..
COMMENT "Checking ${_target} code formatting with clang-format"
VERBATIM
)
add_dependencies(check-format check-format-${_target})
endfunction()
function(add_tidy_target _target)
if(NOT CLANG_TIDY_PROG)
return()
endif()
cmake_parse_arguments(ARG "" "" "FILES;DEPENDS" ${ARGN})
add_custom_target(tidy-${_target}
COMMAND ${CLANG_TIDY_PROG} -fix -p=${CMAKE_BINARY_DIR} ${ARG_FILES}
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/..
DEPENDS ${ARG_DEPENDS}
COMMENT "Running clang-tidy for ${_target}"
VERBATIM
)
add_dependencies(tidy tidy-${_target})
add_custom_target(check-tidy-${_target}
COMMAND ${CLANG_TIDY_PROG} -p=${CMAKE_BINARY_DIR} ${ARG_FILES} | grep . && exit 1 || exit 0
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/..
DEPENDS ${ARG_DEPENDS}
COMMENT "Running clang-tidy for ${_target}"
VERBATIM
)
add_dependencies(check-tidy check-tidy-${_target})
endfunction()
cmake_minimum_required(VERSION 3.4)
project(franka_control)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(catkin REQUIRED COMPONENTS
controller_interface
controller_manager
franka_hw
franka_msgs
geometry_msgs
message_generation
pluginlib
realtime_tools
roscpp
sensor_msgs
tf
tf2_msgs
)
find_package(Franka 0.7.0 REQUIRED)
catkin_package(
INCLUDE_DIRS include
LIBRARIES franka_state_controller
CATKIN_DEPENDS
controller_interface
franka_hw
franka_msgs
geometry_msgs
pluginlib
realtime_tools
roscpp
sensor_msgs
tf2_msgs
DEPENDS Franka
)
## franka_state_controller
add_library(franka_state_controller
src/franka_state_controller.cpp
)
add_dependencies(franka_state_controller
${${PROJECT_NAME}_EXPORTED_TARGETS}
${catkin_EXPORTED_TARGETS}
)
target_link_libraries(franka_state_controller
${Franka_LIBRARIES}
${catkin_LIBRARIES}
)
target_include_directories(franka_state_controller SYSTEM PUBLIC
${Franka_INCLUDE_DIRS}
${catkin_INCLUDE_DIRS}
)
target_include_directories(franka_state_controller PUBLIC
include
)
## franka_control_node
add_executable(franka_control_node
src/franka_control_node.cpp
)
add_dependencies(franka_control_node
${${PROJECT_NAME}_EXPORTED_TARGETS}
${catkin_EXPORTED_TARGETS}
)
target_link_libraries(franka_control_node
${Franka_LIBRARIES}
${catkin_LIBRARIES}
)
target_include_directories(franka_control_node SYSTEM PUBLIC
${Franka_INCLUDE_DIRS}
${catkin_INCLUDE_DIRS}
)
add_executable(franka_combined_control_node
src/franka_combined_control_node.cpp
)
add_dependencies(franka_combined_control_node
${catkin_EXPORTED_TARGETS}
)
target_link_libraries(franka_combined_control_node
${catkin_LIBRARIES}
)
target_include_directories(franka_combined_control_node SYSTEM PUBLIC
${catkin_INCLUDE_DIRS}
)
## Installation
install(TARGETS franka_state_controller
franka_control_node
franka_combined_control_node
ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
install(DIRECTORY include/${PROJECT_NAME}/
DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
)
install(DIRECTORY launch
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
)
install(DIRECTORY config
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
)
install(FILES franka_controller_plugins.xml
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
)
## Tools
include(${CMAKE_CURRENT_LIST_DIR}/../cmake/ClangTools.cmake OPTIONAL
RESULT_VARIABLE CLANG_TOOLS
)
if(CLANG_TOOLS)
file(GLOB_RECURSE SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp)
file(GLOB_RECURSE HEADERS
${CMAKE_CURRENT_SOURCE_DIR}/include/*.h
${CMAKE_CURRENT_SOURCE_DIR}/src/*.h
)
add_format_target(franka_control FILES ${SOURCES} ${HEADERS})
add_tidy_target(franka_control
FILES ${SOURCES}
DEPENDS franka_control_node franka_combined_control_node franka_state_controller
)
endif()
effort_joint_trajectory_controller:
type: effort_controllers/JointTrajectoryController
joints:
- panda_2_joint1
- panda_2_joint2
- panda_2_joint3
- panda_2_joint4
- panda_2_joint5
- panda_2_joint6
- panda_2_joint7
- panda_1_joint1
- panda_1_joint2
- panda_1_joint3
- panda_1_joint4
- panda_1_joint5
- panda_1_joint6
- panda_1_joint7
constraints:
goal_time: 0.5
panda_2_joint1:
goal: 0.05
panda_2_joint2:
goal: 0.05
panda_2_joint3:
goal: 0.05
panda_2_joint4:
goal: 0.05
panda_2_joint5:
goal: 0.05
panda_2_joint6:
goal: 0.05
panda_2_joint7:
goal: 0.05
panda_1_joint1:
goal: 0.05
panda_1_joint2:
goal: 0.05
panda_1_joint3:
goal: 0.05
panda_1_joint4:
goal: 0.05
panda_1_joint5:
goal: 0.05
panda_1_joint6:
goal: 0.05
panda_1_joint7:
goal: 0.05
gains:
panda_1_joint1: {p: 600, d: 30, i: 0, i_clamp: 1}
panda_1_joint2: {p: 600, d: 30, i: 0, i_clamp: 1}
panda_1_joint3: {p: 600, d: 30, i: 0, i_clamp: 1}
panda_1_joint4: {p: 600, d: 30, i: 0, i_clamp: 1}
panda_1_joint5: {p: 250, d: 10, i: 0, i_clamp: 1}
panda_1_joint6: {p: 150, d: 10, i: 0, i_clamp: 1}
panda_1_joint7: {p: 50, d: 5, i: 0, i_clamp: 1}
panda_2_joint1: {p: 600, d: 30, i: 0, i_clamp: 1}
panda_2_joint2: {p: 600, d: 30, i: 0, i_clamp: 1}
panda_2_joint3: {p: 600, d: 30, i: 0, i_clamp: 1}
panda_2_joint4: {p: 600, d: 30, i: 0, i_clamp: 1}
panda_2_joint5: {p: 250, d: 10, i: 0, i_clamp: 1}
panda_2_joint6: {p: 150, d: 10, i: 0, i_clamp: 1}
panda_2_joint7: {p: 50, d: 5, i: 0, i_clamp: 1}
panda_1_state_controller:
type: franka_control/FrankaStateController
arm_id: panda_1
joint_names:
- panda_1_joint1
- panda_1_joint2
- panda_1_joint3
- panda_1_joint4
- panda_1_joint5
- panda_1_joint6
- panda_1_joint7
publish_rate: 30 # [Hz]
panda_2_state_controller:
type: franka_control/FrankaStateController
arm_id: panda_2
joint_names:
- panda_2_joint1
- panda_2_joint2
- panda_2_joint3
- panda_2_joint4
- panda_2_joint5
- panda_2_joint6
- panda_2_joint7
publish_rate: 30 # [Hz]
position_joint_trajectory_controller:
type: position_controllers/JointTrajectoryController
joints:
- panda_joint1
- panda_joint2
- panda_joint3
- panda_joint4
- panda_joint5
- panda_joint6
- panda_joint7
constraints:
goal_time: 0.5
panda_joint1:
goal: 0.05
panda_joint2:
goal: 0.05
panda_joint3:
goal: 0.05
panda_joint4:
goal: 0.05
panda_joint5:
goal: 0.05
panda_joint6:
goal: 0.05
panda_joint7:
goal: 0.05
franka_state_controller:
type: franka_control/FrankaStateController
publish_rate: 30 # [Hz]
joint_names:
- panda_joint1
- panda_joint2
- panda_joint3
- panda_joint4
- panda_joint5
- panda_joint6
- panda_joint7
arm_id: panda
robot_hardware:
- panda_1
- panda_2
panda_1:
type: franka_hw/FrankaCombinableHW
arm_id: panda_1
joint_names:
- panda_1_joint1
- panda_1_joint2
- panda_1_joint3
- panda_1_joint4
- panda_1_joint5
- panda_1_joint6
- panda_1_joint7
# Configure the threshold angle for printing joint limit warnings.
joint_limit_warning_threshold: 0.1 # [rad]
# Activate rate limiter? [true|false]
rate_limiting: true
# Cutoff frequency of the low-pass filter. Set to >= 1000 to deactivate.
cutoff_frequency: 1000
# Internal controller for motion generators [joint_impedance|cartesian_impedance]
internal_controller: joint_impedance
# Used to decide whether to enforce realtime mode [enforce|ignore]
realtime_config: enforce
# Configure the initial defaults for the collision behavior reflexes.
collision_config:
lower_torque_thresholds_acceleration: [20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0] # [Nm]
upper_torque_thresholds_acceleration: [20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0] # [Nm]
lower_torque_thresholds_nominal: [20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0] # [Nm]
upper_torque_thresholds_nominal: [20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0] # [Nm]
lower_force_thresholds_acceleration: [20.0, 20.0, 20.0, 25.0, 25.0, 25.0] # [N, N, N, Nm, Nm, Nm]
upper_force_thresholds_acceleration: [20.0, 20.0, 20.0, 25.0, 25.0, 25.0] # [N, N, N, Nm, Nm, Nm]
lower_force_thresholds_nominal: [20.0, 20.0, 20.0, 25.0, 25.0, 25.0] # [N, N, N, Nm, Nm, Nm]
upper_force_thresholds_nominal: [20.0, 20.0, 20.0, 25.0, 25.0, 25.0] # [N, N, N, Nm, Nm, Nm]
panda_2:
type: franka_hw/FrankaCombinableHW
arm_id: panda_2
joint_names:
- panda_2_joint1
- panda_2_joint2
- panda_2_joint3
- panda_2_joint4
- panda_2_joint5
- panda_2_joint6
- panda_2_joint7
# Configure the threshold angle for printing joint limit warnings.
joint_limit_warning_threshold: 0.1 # [rad]
# Activate rate limiter? [true|false]
rate_limiting: true
# Cutoff frequency of the low-pass filter. Set to >= 1000 to deactivate.
cutoff_frequency: 1000
# Internal controller for motion generators [joint_impedance|cartesian_impedance]
internal_controller: joint_impedance
# Used to decide whether to enforce realtime mode [enforce|ignore]
realtime_config: enforce
# Configure the initial defaults for the collision behavior reflexes.
collision_config:
lower_torque_thresholds_acceleration: [20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0] # [Nm]
upper_torque_thresholds_acceleration: [20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0] # [Nm]
lower_torque_thresholds_nominal: [20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0] # [Nm]