GithubHelp home page GithubHelp logo

kinovarobotics / ros_kortex Goto Github PK

View Code? Open in Web Editor NEW
146.0 17.0 153.0 18.99 MB

ROS packages for KINOVA® KORTEX™ robotic arms

License: Other

CMake 2.32% Python 7.15% Shell 0.06% C++ 88.69% Jinja 1.78%

ros_kortex's Introduction

ros_kortex

ROS Kortex is the official ROS package to interact with Kortex and its related products. It is built upon the Kortex API, documentation for which can be found in the GitHub Kortex repository.

Download links

You can refer to the Kortex repository "Download links" section to download the firmware package and the release notes.

Accessing the color and depth streams

To access the color and depth streams, you will need to clone and follow the instructions to install the ros_kortex_vision repository .

Installation

Setup

This package has been tested under ROS Kinetic (Ubuntu 16.04) and ROS Melodic (Ubuntu 18.04). You can find the instructions to install ROS Kinetic here and ROS Melodic here.

Google Protocol Buffers is used by Kinova to define the Kortex APIs and to automatically generate ROS messages, services and C++ classes from the Kortex API .proto files. The installation of Google Protocol Buffers is required by developers implementing new APIs with the robot. However, since we already provide all the necessary generated files on GitHub, this is not required for most end users of the robot.

Build

These are the instructions to run in a terminal to create the workspace, clone the ros_kortex repository and install the necessary ROS dependencies:

    sudo apt install python3 python3-pip
    sudo python3 -m pip install conan==1.59
    conan config set general.revisions_enabled=1
    conan profile new default --detect > /dev/null
    conan profile update settings.compiler.libcxx=libstdc++11 default
    mkdir -p catkin_workspace/src
    cd catkin_workspace/src
    git clone -b <branch-name> https://github.com/Kinovarobotics/ros_kortex.git
    cd ../
    rosdep install --from-paths src --ignore-src -y

<branch-name> corresponds to the branch matching your ROS version (noetic-devel, melodic-devel, kinetic-devel)

Instructions are for conan V1.X only and it won't work for versions >=2.0.0

Then, to build and source the workspace:

    catkin_make
    source devel/setup.bash

You can also build against one of the ARMv8 builds of the Kortex API with Conan if you specify the CONAN_TARGET_PLATFORM CMake argument when using catkin_make. The following platforms are supported:

  • Artik 710:

      catkin_make --cmake-args -DCONAN_TARGET_PLATFORM=artik710
      source devel/setup.bash
    
  • IMX6:

      catkin_make --cmake-args -DCONAN_TARGET_PLATFORM=imx6
      source devel/setup.bash
    
  • NVidia Jetson:

      catkin_make --cmake-args -DCONAN_TARGET_PLATFORM=jetson
      source devel/setup.bash
    

As you see, there are instructions to install the Conan package manager. You can learn more about why we use Conan or how to simply download the API and link against it in this specific section of the kortex_driver readme. You can also decide

Conan SSL Error

While running catkin_make, you may get a SSL Certificate error similar to this

ERROR: HTTPSConnectionPool(host='artifactory.kinovaapps.com', port=443): Max retries exceeded with url: /artifactory/api/conan/conan/v1/ping (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:1131)')))

This is because Conan's root certificate expired on 2021-09-30

You can fix this by running

conan config install https://github.com/conan-io/conanclientcert.git

Contents

The following is a description of the packages included in this repository.

kortex_control

This package implements the simulation controllers that control the arm in Gazebo. For more details, please consult the README from the package subdirectory.

Note The ros_control controllers for the real arm are not yet implemented and will be in a future release of ros_kortex.

kortex_description

This package contains the URDF (Unified Robot Description Format), STL and configuration files for the Kortex-compatible robots. For more details, please consult the README from the package subdirectory.

kortex_driver

This package implements a ROS node that allows communication between a node and a Kinova Gen3 or Gen3 lite robot. For more details, please consult the README from the package subdirectory.

kortex_examples

This package holds all the examples needed to understand the basics of ros_kortex. Most of the examples are written in both C++ and Python. Only the MoveIt! example is available exclusively in Python for now. A more detailed description can be found in the package subdirectory.

kortex_gazebo

This package contains files to simulate the Kinova Gen3 and Gen3 lite robots in Gazebo. For more details, please consult the README from the package subdirectory.

kortex_move_it_config

This metapackage contains the auto-generated MoveIt! files to use the Kinova Gen3 and Gen3 lite arms with the MoveIt! motion planning framework. For more details, please consult the README from the package subdirectory.

third_party

This folder contains the third-party packages we use with the ROS Kortex packages. Currently, it consists of two packages used for the simulation of the Robotiq Gripper in Gazebo. We use gazebo-pkgs for grasping support in Gazebo and roboticsgroup_gazebo_plugins to mimic joint support in Gazebo.

ros_kortex's People

Contributors

alexvannobel avatar cmower avatar dniewinski avatar drinktoomuchsax avatar eglen24 avatar felixmaisonneuve avatar gergondet avatar gstlaurentkinova avatar hlamontagne avatar jpcotekinova avatar jukindle avatar kracon7 avatar leander-dsouza avatar martinleroux avatar mlauret avatar raducorcodel avatar smoya23 avatar travers-rhodes 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

ros_kortex's Issues

Missing "Frame.pb.h" when catkin_make

I suppose that "Frame.pb.h" is a generated file by protobuf. It is missing during the catkin_make process in the catkin workspace. The log message will be posted at the end.

Firstly I followed the procedure to setup "kortex" repository which is can be achieved via the link: https://github.com/Kinovarobotics/kortex. Everything goes on well except I have to comment out "add_subdirectory(300-BaseGen3_low_level_bypass)" due to the missing of example folder.

Then I followed the instruction given in "README.md" to install protobuf. I checked out 3.5.1.1 on the web (https://github.com/protocolbuffers/protobuf/blob/master/src/README.md), then I finished the following steps without any problem:
$ ./configure
$ make
$ make check
$ sudo make install
$ sudo ldconfig # refresh shared library cache

Lastly, I git cloned the ros-kortex into catkin workspace, and simply run catkin_make without any modification. Then the compile failed. I am wondering whether there is a bug or I missed some essential steps.

message after running catkin_make:

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

Running command: "cmake /home/longfei/catkin_ws/src -DCATKIN_DEVEL_PREFIX=/home/longfei/catkin_ws/devel -DCMAKE_INSTALL_PREFIX=/home/longfei/catkin_ws/install -G Unix Makefiles" in "/home/longfei/catkin_ws/build"

-- The C compiler identification is GNU 5.4.0
-- The CXX compiler identification is GNU 5.4.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Using CATKIN_DEVEL_PREFIX: /home/longfei/catkin_ws/devel
-- Using CMAKE_PREFIX_PATH: /home/longfei/catkin_ws/devel;/opt/ros/kinetic
-- This workspace overlays: /home/longfei/catkin_ws/devel;/opt/ros/kinetic
-- Found PythonInterp: /usr/bin/python (found version "2.7.12")
-- 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/longfei/catkin_ws/build/test_results
-- Found gmock sources under '/usr/src/gmock': gmock will be built
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Looking for pthread_create
-- Looking for pthread_create - not found
-- Looking for pthread_create in pthreads
-- Looking for pthread_create in pthreads - not found
-- Looking for pthread_create in pthread
-- Looking for pthread_create in pthread - found
-- Found Threads: TRUE
-- Found gtest sources under '/usr/src/gmock': gtests will be built
-- Using Python nosetests: /usr/bin/nosetests-2.7
-- catkin 0.7.14
-- BUILD_SHARED_LIBS is on
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- ~~ traversing 5 packages in topological order:
-- ~~ - kortex_actuator_driver
-- ~~ - kortex_device_manager
-- ~~ - kortex_driver
-- ~~ - kortex_vision_config_driver
-- ~~ - kortex_description
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- +++ processing catkin package: 'kortex_actuator_driver'
-- ==> add_subdirectory(ros_kortex/kortex_actuator_driver)
-- Using these message generators: gencpp;geneus;genlisp;gennodejs;genpy
-- kortex_actuator_driver: 45 messages, 38 services
-- Found Protobuf: /usr/local/lib/libprotobuf.so;-lpthread (found suitable version "3.5.1", minimum required is "3.5.1")
-- +++ processing catkin package: 'kortex_device_manager'
-- ==> add_subdirectory(ros_kortex/kortex_device_manager)
-- Using these message generators: gencpp;geneus;genlisp;gennodejs;genpy
-- kortex_device_manager: 39 messages, 34 services
-- +++ processing catkin package: 'kortex_driver'
-- ==> add_subdirectory(ros_kortex/kortex_driver)
-- Using these message generators: gencpp;geneus;genlisp;gennodejs;genpy
-- kortex_driver: 200 messages, 119 services
-- +++ processing catkin package: 'kortex_vision_config_driver'
-- ==> add_subdirectory(ros_kortex/kortex_vision_config_driver)
-- Using these message generators: gencpp;geneus;genlisp;gennodejs;genpy
-- kortex_vision_config_driver: 33 messages, 10 services
-- +++ processing catkin package: 'kortex_description'
-- ==> add_subdirectory(ros_kortex/kortex_description)
-- Configuring done
-- Generating done
-- Build files have been written to: /home/longfei/catkin_ws/build

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

Scanning dependencies of target _kortex_actuator_driver_generate_messages_check_deps_Timestamp
Scanning dependencies of target _kortex_actuator_driver_generate_messages_check_deps_GetSelectedCustomData
Scanning dependencies of target _kortex_actuator_driver_generate_messages_check_deps_GetVectorDriveParameters
Scanning dependencies of target _kortex_actuator_driver_generate_messages_check_deps_Servoing
[ 0%] Built target _kortex_actuator_driver_generate_messages_check_deps_Timestamp
[ 0%] Built target _kortex_actuator_driver_generate_messages_check_deps_GetVectorDriveParameters
[ 0%] Built target _kortex_actuator_driver_generate_messages_check_deps_GetSelectedCustomData
[ 0%] Built target _kortex_actuator_driver_generate_messages_check_deps_Servoing
Scanning dependencies of target _kortex_actuator_driver_generate_messages_check_deps_NotificationType
Scanning dependencies of target _kortex_actuator_driver_generate_messages_check_deps_EncoderDerivativeParameters
Scanning dependencies of target _kortex_actuator_driver_generate_messages_check_deps_TorqueOffset
Scanning dependencies of target _kortex_actuator_driver_generate_messages_check_deps_ControlLoopParameters
[ 0%] Built target _kortex_actuator_driver_generate_messages_check_deps_EncoderDerivativeParameters
[ 0%] Built target _kortex_actuator_driver_generate_messages_check_deps_NotificationType
[ 0%] Built target _kortex_actuator_driver_generate_messages_check_deps_ControlLoopParameters
Scanning dependencies of target _kortex_actuator_driver_generate_messages_check_deps_SetVectorDriveParameters
[... ... ... ... log exceeds the maximum limit of characters to show here, ... ... however, there is no error until now ... ... ... ... ]
[ 96%] Generating Python from MSG kortex_vision_config_driver/KortexError
[ 96%] Generating Python from MSG kortex_vision_config_driver/OptionIdentifier
[ 96%] Generating Python from MSG kortex_vision_config_driver/UserProfileHandle
[ 96%] Generating Python from MSG kortex_vision_config_driver/Permission
[ 96%] Generating Python from MSG kortex_vision_config_driver/BitRate
[ 96%] Generating Python from MSG kortex_vision_config_driver/SafetyHandle
[ 96%] Generating Python from MSG kortex_vision_config_driver/VisionNotification
[ 97%] Generating Python from MSG kortex_vision_config_driver/IntrinsicParameters
[ 97%] Generating Python from MSG kortex_vision_config_driver/NotificationType
[ 97%] Generating Python from MSG kortex_vision_config_driver/Unit
[ 97%] Generating Python from MSG kortex_vision_config_driver/SafetyNotification
[ 97%] Generating Python from MSG kortex_vision_config_driver/Option
[ 97%] Generating Python from MSG kortex_vision_config_driver/Timestamp
[ 97%] Generating Python from MSG kortex_vision_config_driver/SafetyStatusValue
[ 97%] Generating Python from MSG kortex_vision_config_driver/FocusAction
[ 97%] Generating Python from MSG kortex_vision_config_driver/Resolution
[ 97%] Generating Python from MSG kortex_vision_config_driver/Empty
[ 97%] Generating Python from MSG kortex_vision_config_driver/FrameRate
[ 97%] Generating Python from MSG kortex_vision_config_driver/SensorIdentifier
[ 97%] Generating Python from MSG kortex_vision_config_driver/NotificationHandle
[ 97%] Generating Python from MSG kortex_vision_config_driver/Connection
[ 97%] Generating Python from MSG kortex_vision_config_driver/OptionValue
[ 97%] Generating Python code from SRV kortex_vision_config_driver/GetIntrinsicParameters
[ 97%] Generating Python code from SRV kortex_vision_config_driver/SetSensorSettings
[ 97%] Generating Python code from SRV kortex_vision_config_driver/VisionTopic
[ 97%] Generating Python code from SRV kortex_vision_config_driver/GetOptionValue
Scanning dependencies of target kortex_actuator_driver_generate_messages
[ 97%] Built target kortex_actuator_driver_generate_messages
[ 97%] Generating Python code from SRV kortex_vision_config_driver/SetDeviceID
Scanning dependencies of target kortex_actuator_driver_gencpp
[ 97%] Built target kortex_actuator_driver_gencpp
Scanning dependencies of target kortex_vision_config_driver_generate_messages_lisp
[ 97%] Generating Lisp code from kortex_vision_config_driver/NotificationOptions.msg
[ 97%] Generating Lisp code from kortex_vision_config_driver/SensorFocusAction.msg
[ 97%] Generating Python code from SRV kortex_vision_config_driver/SetOptionValue
[ 97%] Generating Lisp code from kortex_vision_config_driver/Sensor.msg
[ 97%] Generating Lisp code from kortex_vision_config_driver/SensorSettings.msg
[ 97%] Generating Python code from SRV kortex_vision_config_driver/GetSensorSettings
[ 97%] Generating Lisp code from kortex_vision_config_driver/ApiOptions.msg
[ 97%] Generating Python code from SRV kortex_vision_config_driver/GetOptionInformation
[ 97%] Generating Lisp code from kortex_vision_config_driver/ArmState.msg
[ 97%] Generating Lisp code from kortex_vision_config_driver/OptionInformation.msg
[ 97%] Generating Lisp code from kortex_vision_config_driver/VisionEvent.msg
Scanning dependencies of target kortex_device_manager_generate_messages
[ 97%] Built target kortex_device_manager_generate_messages
[ 97%] Generating Python code from SRV kortex_vision_config_driver/DoSensorFocusAction
Scanning dependencies of target kortex_device_manager_gencpp
[ 97%] Built target kortex_device_manager_gencpp
Scanning dependencies of target kortex_driver_gencpp
[ 97%] Generating Lisp code from kortex_vision_config_driver/DeviceTypes.msg
[ 97%] Built target kortex_driver_gencpp
[ 97%] Generating Lisp code from kortex_vision_config_driver/DeviceHandle.msg
[ 97%] Generating Python code from SRV kortex_vision_config_driver/SetApiOptions
[ 97%] Generating Lisp code from kortex_vision_config_driver/ServiceVersion.msg
Scanning dependencies of target kortex_driver_generate_messages
[ 97%] Built target kortex_driver_generate_messages
Scanning dependencies of target kortex_vision_config_driver_gencpp
[ 97%] Built target kortex_vision_config_driver_gencpp
Scanning dependencies of target kortex_actuator_driver
[ 97%] Generating Lisp code from kortex_vision_config_driver/KortexError.msg
[ 97%] Generating Python msg init.py for kortex_vision_config_driver
[ 97%] Generating Lisp code from kortex_vision_config_driver/OptionIdentifier.msg
[ 97%] Generating Lisp code from kortex_vision_config_driver/UserProfileHandle.msg
[ 98%] Generating Python srv init.py for kortex_vision_config_driver
[ 98%] Generating Lisp code from kortex_vision_config_driver/Permission.msg
[ 98%] Generating Lisp code from kortex_vision_config_driver/BitRate.msg
[ 98%] Building CXX object ros_kortex/kortex_actuator_driver/CMakeFiles/kortex_actuator_driver.dir/src/actuatorconfig_proto_converter.cpp.o
[ 98%] Generating Lisp code from kortex_vision_config_driver/SafetyHandle.msg
[ 98%] Built target kortex_vision_config_driver_generate_messages_py
Scanning dependencies of target kortex_device_manager
[ 98%] Building CXX object ros_kortex/kortex_actuator_driver/CMakeFiles/kortex_actuator_driver.dir/src/actuatorconfig_ros_converter.cpp.o
[ 98%] Generating Lisp code from kortex_vision_config_driver/VisionNotification.msg
[ 98%] Generating Lisp code from kortex_vision_config_driver/IntrinsicParameters.msg
[ 98%] Building CXX object ros_kortex/kortex_device_manager/CMakeFiles/kortex_device_manager.dir/src/common_proto_converter.cpp.o
[ 98%] Generating Lisp code from kortex_vision_config_driver/NotificationType.msg
[ 98%] Generating Lisp code from kortex_vision_config_driver/Unit.msg
[ 98%] Generating Lisp code from kortex_vision_config_driver/SafetyNotification.msg
[ 98%] Generating Lisp code from kortex_vision_config_driver/Option.msg
[ 98%] Generating Lisp code from kortex_vision_config_driver/Timestamp.msg
[ 98%] Generating Lisp code from kortex_vision_config_driver/SafetyStatusValue.msg
[ 99%] Generating Lisp code from kortex_vision_config_driver/FocusAction.msg
[ 99%] Generating Lisp code from kortex_vision_config_driver/Resolution.msg
[ 99%] Generating Lisp code from kortex_vision_config_driver/Empty.msg
[ 99%] Generating Lisp code from kortex_vision_config_driver/FrameRate.msg
[ 99%] Generating Lisp code from kortex_vision_config_driver/SensorIdentifier.msg
[ 99%] Generating Lisp code from kortex_vision_config_driver/NotificationHandle.msg
[ 99%] Generating Lisp code from kortex_vision_config_driver/Connection.msg
[ 99%] Generating Lisp code from kortex_vision_config_driver/OptionValue.msg
[ 99%] Generating Lisp code from kortex_vision_config_driver/GetIntrinsicParameters.srv
[ 99%] Generating Lisp code from kortex_vision_config_driver/SetSensorSettings.srv
[ 99%] Generating Lisp code from kortex_vision_config_driver/VisionTopic.srv
[ 99%] Generating Lisp code from kortex_vision_config_driver/GetOptionValue.srv
[ 99%] Generating Lisp code from kortex_vision_config_driver/SetDeviceID.srv
[ 99%] Generating Lisp code from kortex_vision_config_driver/SetOptionValue.srv
[ 99%] Generating Lisp code from kortex_vision_config_driver/GetSensorSettings.srv
[ 99%] Generating Lisp code from kortex_vision_config_driver/GetOptionInformation.srv
[ 99%] Generating Lisp code from kortex_vision_config_driver/DoSensorFocusAction.srv
[ 99%] Generating Lisp code from kortex_vision_config_driver/SetApiOptions.srv
[ 99%] Built target kortex_vision_config_driver_generate_messages_lisp
[ 99%] Building CXX object ros_kortex/kortex_device_manager/CMakeFiles/kortex_device_manager.dir/src/common_ros_converter.cpp.o
In file included from /home/longfei/catkin_ws/src/ros_kortex/kortex_device_manager/src/common_proto_converter.cpp:17:0:
/home/longfei/catkin_ws/src/ros_kortex/kortex_device_manager/src/common_proto_converter.h:28:22: fatal error: Frame.pb.h: No such file or directory
In file included from /home/longfei/catkin_ws/src/ros_kortex/kortex_actuator_driver/src/actuatorconfig_proto_converter.cpp:17:0:
/home/longfei/catkin_ws/src/ros_kortex/kortex_actuator_driver/src/actuatorconfig_proto_converter.h:28:22: fatal error: Frame.pb.h: No such file or directory
compilation terminated.
In file included from /home/longfei/catkin_ws/src/ros_kortex/kortex_device_manager/src/common_ros_converter.cpp:17:0:
/home/longfei/catkin_ws/src/ros_kortex/kortex_device_manager/src/common_ros_converter.h:28:22: fatal error: Frame.pb.h: No such file or directory
compilation terminated.
compilation terminated.
In file included from /home/longfei/catkin_ws/src/ros_kortex/kortex_actuator_driver/src/actuatorconfig_ros_converter.cpp:17:0:
/home/longfei/catkin_ws/src/ros_kortex/kortex_actuator_driver/src/actuatorconfig_ros_converter.h:28:22: fatal error: Frame.pb.h: No such file or directory
compilation terminated.
ros_kortex/kortex_device_manager/CMakeFiles/kortex_device_manager.dir/build.make:75: recipe for target 'ros_kortex/kortex_device_manager/CMakeFiles/kortex_device_manager.dir/src/common_ros_converter.cpp.o' failed
make[2]: *** [ros_kortex/kortex_device_manager/CMakeFiles/kortex_device_manager.dir/src/common_ros_converter.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
ros_kortex/kortex_actuator_driver/CMakeFiles/kortex_actuator_driver.dir/build.make:62: recipe for target 'ros_kortex/kortex_actuator_driver/CMakeFiles/kortex_actuator_driver.dir/src/actuatorconfig_proto_converter.cpp.o' failed
make[2]: *** [ros_kortex/kortex_actuator_driver/CMakeFiles/kortex_actuator_driver.dir/src/actuatorconfig_proto_converter.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
ros_kortex/kortex_device_manager/CMakeFiles/kortex_device_manager.dir/build.make:62: recipe for target 'ros_kortex/kortex_device_manager/CMakeFiles/kortex_device_manager.dir/src/common_proto_converter.cpp.o' failed
make[2]: *** [ros_kortex/kortex_device_manager/CMakeFiles/kortex_device_manager.dir/src/common_proto_converter.cpp.o] Error 1
CMakeFiles/Makefile2:4579: recipe for target 'ros_kortex/kortex_device_manager/CMakeFiles/kortex_device_manager.dir/all' failed
make[1]: *** [ros_kortex/kortex_device_manager/CMakeFiles/kortex_device_manager.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
ros_kortex/kortex_actuator_driver/CMakeFiles/kortex_actuator_driver.dir/build.make:75: recipe for target 'ros_kortex/kortex_actuator_driver/CMakeFiles/kortex_actuator_driver.dir/src/actuatorconfig_ros_converter.cpp.o' failed
make[2]: *** [ros_kortex/kortex_actuator_driver/CMakeFiles/kortex_actuator_driver.dir/src/actuatorconfig_ros_converter.cpp.o] Error 1
[ 99%] Building CXX object ros_kortex/kortex_actuator_driver/CMakeFiles/kortex_actuator_driver.dir/src/actuatorcyclic_proto_converter.cpp.o
Scanning dependencies of target kortex_driver
[ 99%] Building CXX object ros_kortex/kortex_driver/CMakeFiles/kortex_driver.dir/src/base_ros_converter.cpp.o
[ 99%] Building CXX object ros_kortex/kortex_driver/CMakeFiles/kortex_driver.dir/src/base_proto_converter.cpp.o
[ 99%] Building CXX object ros_kortex/kortex_driver/CMakeFiles/kortex_driver.dir/src/basecyclic_proto_converter.cpp.o
In file included from /home/longfei/catkin_ws/src/ros_kortex/kortex_driver/src/base_proto_converter.cpp:17:0:
/home/longfei/catkin_ws/src/ros_kortex/kortex_driver/src/base_proto_converter.h:28:22: fatal error: Frame.pb.h: No such file or directory
compilation terminated.
In file included from /home/longfei/catkin_ws/src/ros_kortex/kortex_actuator_driver/src/actuatorcyclic_proto_converter.cpp:17:0:
/home/longfei/catkin_ws/src/ros_kortex/kortex_actuator_driver/src/actuatorcyclic_proto_converter.h:28:22: fatal error: Frame.pb.h: No such file or directory
compilation terminated.
ros_kortex/kortex_driver/CMakeFiles/kortex_driver.dir/build.make:62: recipe for target 'ros_kortex/kortex_driver/CMakeFiles/kortex_driver.dir/src/base_proto_converter.cpp.o' failed
make[2]: *** [ros_kortex/kortex_driver/CMakeFiles/kortex_driver.dir/src/base_proto_converter.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
ros_kortex/kortex_actuator_driver/CMakeFiles/kortex_actuator_driver.dir/build.make:88: recipe for target 'ros_kortex/kortex_actuator_driver/CMakeFiles/kortex_actuator_driver.dir/src/actuatorcyclic_proto_converter.cpp.o' failed
make[2]: *** [ros_kortex/kortex_actuator_driver/CMakeFiles/kortex_actuator_driver.dir/src/actuatorcyclic_proto_converter.cpp.o] Error 1
CMakeFiles/Makefile2:527: recipe for target 'ros_kortex/kortex_actuator_driver/CMakeFiles/kortex_actuator_driver.dir/all' failed
make[1]: *** [ros_kortex/kortex_actuator_driver/CMakeFiles/kortex_actuator_driver.dir/all] Error 2
In file included from /home/longfei/catkin_ws/src/ros_kortex/kortex_driver/src/base_ros_converter.cpp:17:0:
/home/longfei/catkin_ws/src/ros_kortex/kortex_driver/src/base_ros_converter.h:28:22: fatal error: Frame.pb.h: No such file or directory
compilation terminated.
ros_kortex/kortex_driver/CMakeFiles/kortex_driver.dir/build.make:75: recipe for target 'ros_kortex/kortex_driver/CMakeFiles/kortex_driver.dir/src/base_ros_converter.cpp.o' failed
make[2]: *** [ros_kortex/kortex_driver/CMakeFiles/kortex_driver.dir/src/base_ros_converter.cpp.o] Error 1
In file included from /home/longfei/catkin_ws/src/ros_kortex/kortex_driver/src/basecyclic_proto_converter.cpp:17:0:
/home/longfei/catkin_ws/src/ros_kortex/kortex_driver/src/basecyclic_proto_converter.h:28:22: fatal error: Frame.pb.h: No such file or directory
compilation terminated.
ros_kortex/kortex_driver/CMakeFiles/kortex_driver.dir/build.make:88: recipe for target 'ros_kortex/kortex_driver/CMakeFiles/kortex_driver.dir/src/basecyclic_proto_converter.cpp.o' failed
make[2]: *** [ros_kortex/kortex_driver/CMakeFiles/kortex_driver.dir/src/basecyclic_proto_converter.cpp.o] Error 1
CMakeFiles/Makefile2:10651: recipe for target 'ros_kortex/kortex_driver/CMakeFiles/kortex_driver.dir/all' failed
make[1]: *** [ros_kortex/kortex_driver/CMakeFiles/kortex_driver.dir/all] Error 2
Makefile:140: recipe for target 'all' failed
make: *** [all] Error 2
Invoking "make -j4 -l4" failed

Dependency on specific Protobuf version

The installation instructions specify git clone https://github.com/protocolbuffers/protobuf --branch 3.5.1.1 (you must use this specific version). This works but requires a long installation/build on new machines, including on CI. It takes about 20 minutes to build, which doubles our build times and we run it tens of times each day.

Is it possible to switch to a binary installation to greatly speed up this process somehow? What makes it that this specific commit needs to be used and not a main release?

Download of the Kortex API failed (small enhancement)

Hello !

I tried compiling (with both catkin_make and catkin build) the ros_kortex in a workspace but i had the following error :

CMake Error at top-secret-project/ros_kortex/kortex_driver/CMakeLists.txt:14 (message):
  Download of the Kortex API failed

After a quick search, it was because of this line in kortex_driver/CmakeLists.txt :

execute_process(COMMAND ./download_kortex_api.bash
                WORKING_DIRECTORY ../src/ros_kortex/kortex_api/scripts
                RESULT_VARIABLE DOWNLOAD_API_RESULT)

if(NOT DOWNLOAD_API_RESULT EQUAL 0)
  message(FATAL_ERROR "Download of the Kortex API failed")
endif()

The ros_kortex "meta-package" is not at the same level as the top-level Cmakelists.txt of my package, so the path src/ros_kortex/kortex_api/scripts is not valid, for me it's src/top-secret-project/ros_kortex/kortex_api/scripts/.

Is it possible to change the Cmakelists to add a search condition for the package, to avoid this error (for me and other people using embedded directory) ? Something like this :

find_path (KORTEX_API_DOWNLOADER_PATH  # Set this variable
			download_kortex_api.bash  # To the Working dir of this file 
			${CMAKE_CURRENT_SOURCE_DIR}/../kortex_api/scripts # Search this file here
			../src/ros_kortex/kortex_api/scripts) # and here

if(KORTEX_API_DOWNLOADER_PATH)
	execute_process(COMMAND ./download_kortex_api.bash
			WORKING_DIRECTORY ${KORTEX_API_DOWNLOADER_PATH}
                        RESULT_VARIABLE DOWNLOAD_API_RESULT)
else()
	message(FATAL_ERROR "Could not find download_kortex_api.bash in current workspace")
endif()

if(NOT DOWNLOAD_API_RESULT EQUAL 0)
  message(FATAL_ERROR "Download of the Kortex API failed")
endif()

So find_package will search in the same directory as before (from src to the script) + the path from kortex_api to the script

Robot model parameter not found! Did you remap 'robot_description'?

Hello, Thank you for the code.I had an error when I ran the code. After I connect to real robot.
I frist run: roslaunch kortex_driver kortex_driver.launch
Then run: rosrun kortex_examples example_move_it_trajectories.py
An error occurred:
gang@gang-Legion:~$ rosrun kortex_examples example_move_it_trajectories.pyFailed to import pyassimp, see moveit/moveit#86 for more info
[ERROR] [1573439723.948360254]: Robot model parameter not found! Did you remap 'robot_description'?
Traceback (most recent call last):
File"/home/gang/catkin_ws/src/ros_kortex/kortex_examples/python/move_it/example_move_it_trajectories.py", line 205, in
main()
File"/home/gang/catkin_ws/src/ros_kortex/kortex_examples/python/move_it/example_move_it_trajectories.py", line 156, in main
example = ExampleMoveItTrajectories()
File"/home/gang/catkin_ws/src/ros_kortex/kortex_examples/python/move_it/example_move_it_trajectories.py", line 65, in init
self.robot = moveit_commander.RobotCommander("robot_description")
File "/opt/ros/kinetic/lib/python2.7/dist-packages/moveit_commander/robot.py", line 151, in init
self._r = _moveit_robot_interface.RobotInterface(robot_description, ns)
RuntimeError: RobotInterfacePython: invalid robot model

Did I do something wrong? Thank you for your advice!

robotiq_2f_85 /gripper_cmd/feedback topic

Dear colleagues,

the following topic does not seem to be working
/my_gen3/robotiq_2f_85_gripper_controller/gripper_cmd/feedback
is it just my problem or is it not implemented yet?

To get the gripper feedback I am currently using the BaseCyclic_Feedback, but I am not sure if that's the best solution.

Thank you in advance and have a nice day
Pavel

Trajectory control

I would like to report an issue of trajectory control.

There are following services:

However both are not a trajectory control, but a point-to-point control.
In other words, they are not a way to generate a motion from multiple via-points.

In ROS, sometimes SimpleActionServer of actionlib is used to provide a trajectory control, which can be accessed through the /follow_joint_trajectory topic. It is commonly used, for example, in Universal Robots UR and Yaskawa Motoman.
In these robots, /follow_joint_trajectory provides a trajectory control that can traverse multiple via-points. Each via-point consists of time-from-start, joint angles, and joint angular velocities.

Note that executing PlayJointTrajectory and PlayCartesianTrajectory multiple times does not offer the same functionality, since the motion stops after each execution of PlayJointTrajectory and PlayCartesianTrajectory; i.e. the joint angular velocities at each via-point are zero.

Thus,

  1. The PlayCartesianTrajectory service in ros_kortex is confusing naming. It should be MoveToCartesianPose or something like that.
  2. How can we generate a motion from multiple via-points? I could not find such a service in ros_cortex. Is that not implemented yet?

Failed to retrieve the cyclic data.

I'm using ROS kinetic on Ubuntu 16.04.
When I tried to run the kortex examples I got the following message:

jc@jc-Precision-5510:~$ rosrun kortex_examples PlayCartesianPosition 
[ERROR] [1555963602.033615137]: Failed to retrieve the cyclic data.

I followed the steps from the kortex_example.

jc@jc-Precision-5510:~$ rosrun kortex_device_manager kortex_device_manager 192.168.1.10
[ INFO] [1555963523.426156091]: Connecting to IP = 192.168.1.10

Session Created
[ INFO] [1555963525.510737197]: Node's services initialized correctly.

kortex_actuator driver gave an error message as well.

jc@jc-Precision-5510:~$ rosrun kortex_actuator_driver kortex_actuator_driver 1.168.1.10 100
[ INFO] [1555963586.913819529]: Connecting to IP = 192.168.1.10 - node refresh rate = 100, device ID = 0
[ INFO] [1555963588.989972338]: Node's services initialized correctly.
[ERROR] [1555963602.033464805]: client wants service /RefreshFeedback to have md5sum cc527e10b6cbeb93059adfab44147b77, but it has afdcac728d5cb28b98f9f7ec4a0fa269. Dropping connection.

Could not find parameter robot_description on parameter server

Hi,

I'm using the Kortex ROS driver for the Gen3 arm. When I type roslaunch kortex_driver kortex_driver.launch in my terminal, it shows some errors like the following. But my Kortex ROS was working correctly, and I had never seen these errors before. So I downloaded the latest version and followed all the installation steps. But the same error still pops out.

Thank you so much for reading my issue.

[ WARN] [1580845191.480645268]: The 'state_publisher' executable is deprecated. Please use 'robot_state_publisher' instead
[ERROR] [1580845191.485031069]: Could not find parameter robot_description on parameter server
[ERROR] [1580845191.507635936]: Robot model parameter not found! Did you remap 'robot_description'?
[ERROR] [1580845191.530794940]: Robot model not loaded
[ERROR] [1580845191.550457520]: Planning scene not configured
[ INFO] [1580845191.572563343]: Session created successfully for TCP services
[ INFO] [1580845191.581272801]: Session created successfully for UDP services
[ERROR] [1580845191.592877918]: The gripper model specified in the launch file doesn't match the detected arm's gripper model, shutting down the node...
terminate called after throwing an instance of 'std::runtime_error*'
[my_gen3/my_gen3_driver-1] process has died [pid 10383, exit code -6, cmd /home/roahmlab/catkin_ws_kortex/devel/lib/kortex_driver/kortex_arm_driver __name:=my_gen3_driver __log:=/home/roahmlab/.ros/log/8f37afb4-477e-11ea-bc94-9cb6d0f2117d/my_gen3-my_gen3_driver-1.log].
log file: /home/roahmlab/.ros/log/8f37afb4-477e-11ea-bc94-9cb6d0f2117d/my_gen3-my_gen3_driver-1*.log
[my_gen3/robot_state_publisher-4] process has died [pid 10386, exit code 1, cmd /opt/ros/melodic/lib/robot_state_publisher/state_publisher __name:=robot_state_publisher __log:=/home/roahmlab/.ros/log/8f37afb4-477e-11ea-bc94-9cb6d0f2117d/my_gen3-robot_state_publisher-4.log].
log file: /home/roahmlab/.ros/log/8f37afb4-477e-11ea-bc94-9cb6d0f2117d/my_gen3-robot_state_publisher-4*.log

Cartesian reference frame

Hello,

I want to know which frame is the reference of the Cartesian (end effector) pose.

We can compute an end-effector pose from the current joint angles and the robot description given by the URDF. I used KDL to compute this. The frames can be clearly defined; the base frame is base_link, and the end-effector frame is EndEffector_Link.

On the other hand, we can also get an end-effector pose via RefreshFeedback service, which contains output.base.tool_pose_* values.
However I do not understand on which frame these values are defined.

For joint angles q = [ 6.0369 1.0921 3.3023 4.6336 6.0416 1.182 1.5333],
KDL: x = [ 0.6592 0.0651 0.1971 0.5006 0.4804 0.4949 0.5232]
RefreshFeedback: x = [ 0.779 0.0593 0.2015 0.5006 0.4804 0.4949 0.5232]
(Note: RefreshFeedback gives the orientation in Euler angles in degrees, which were converted to quaternion)

The orientations are the same, while there is small difference in the positions. The reason would be the reference frame is different.
Then which frame is the reference of RefreshFeedback?

I think this is an important question since such a reference frame should be commonly used in other services such as PlayCartesianTrajectory.

Thanks!
--Akihiko

Update:
When the robot is straight (q=[ 2.5679e-03 6.2816e+00 3.1687e+00 6.2675e+00 1.5262e-02 6.2823e+00 1.5847e+00]),
KDL: x=[ 6.7176e-03 1.1250e-03 1.1873e+00 5.3245e-03 5.2877e-03 6.8599e-01 7.2757e-01]
RefreshFeedback: [ 8.5176e-03 1.0656e-03 1.3073e+00 5.3246e-03 5.2877e-03 6.8599e-01 7.2757e-01]
Since the robot total length is 1187.3 mm, the KDL result is correct.

Force on the gripper

I have a 2F-85 gripper and I looked at the updated release v2.0.0.
I noticed there is a new information in the rostopic called joint_states about effort on the gripper.
However, the value of this quantity is always fixed at zero, even though we applied force at the fingers.

image

Is this the expected behaviour? Is it possible to somehow read this value? For example, in order to have a force control loop.
Thanks

Velocity control in the simulation

Hello there! :)

I would like to control the Gazebo-simulated arm by sending Twist msgs to the '/my_gen3/base/send_twist_command'.

For the real robot, kortex_driver.launch starts this service. However, this launch file seems to always require a real robot running.

Is there a way to get kortex_driver working with the simulation? Or did I perhaps miss an equivalent service or topic in the simulation?

Best regards,
Jude

protobuf version compatibility errors at installation

Hello,
when I was compiling the latest version of ros_kortex by following the instruction of readme.md, I encountered the following errors.
It looks that it is due to the version compatibility of protoc.
This discussion says that I should use protobuf-2.6.1, but my version is 3.5.1 since it is indicated in the ros_kortex installation guide.
How can I solve this issue?

/usr/include/gazebo-7/gazebo/msgs/topic_info.pb.h:17:2: error: #error This file was generated by an older version of protoc which is
 #error This file was generated by an older version of protoc which is
  ^
/usr/include/gazebo-7/gazebo/msgs/topic_info.pb.h:18:2: error: #error incompatible with your Protocol Buffer headers. Please
 #error incompatible with your Protocol Buffer headers.  Please
  ^
/usr/include/gazebo-7/gazebo/msgs/topic_info.pb.h:19:2: error: #error regenerate this file with a newer version of protoc.
 #error regenerate this file with a newer version of protoc.

Many thanks!

Orientation change of end-effector frame

#13 (kinetic-devel) rotated the frame for the end-effector link (see pictures). I didn't see this being referenced in the PR, so I'm assuming this happened by mistake.

old: urdf/JACO3_URDF_V11.urdf:
oldframes

new: robots/gen3.xacro:
newframes

Happy to open a PR to fix if this is a bug, not a feature.

end-effector orientation

When setting the orientation of the end-effector (theta-x, theta-y, theta-z), my assumption was that these values are setting the (ya, pitch, roll) relative to the end-effector reference frame. However, that's not what I'm seeing when actually setting those values via ROS. For instance, change theta-z seems to always rotates around the base-frame z-axis regardless of the end-effector orientation, but setting theta-x seems to rotate around the end-effector's x-axis.

It's unclear if this is a bug, or if I'm just confused about how to use the (theta-x, theta-y, theta-z) values.

catkin_make install error

Hello !

I got an error trying to use the install verb for catkin_make :

catkin_make install

I got an error for some packages :

For kortex_control :

CMake Error at ros_kortex/kortex_control/cmake_install.cmake:51 (file):
  file INSTALL cannot find
  "/home/roso/Workspaces/kortex/src/ros_kortex/kortex_control/config".
Call Stack (most recent call first):
  cmake_install.cmake:130 (include)

In the CmakeLists, the line :

foreach(dir config launch meshes urdf)

could be :

foreach(dir arms grippers)

(at least, I have no error with the new line and the package install correctly)

for kortex_description :

CMake Error at ros_kortex/kortex_description/cmake_install.cmake:51 (file):
file INSTALL cannot find
"/home/roso/Workspaces/kortex/src/ros_kortex/kortex_description/config".
Call Stack (most recent call first):
cmake_install.cmake:131 (include)

the line :

foreach(dir config launch meshes urdf)

could be :

foreach(dir arms grippers robots)

for kortex_gazebo :

CMake Error at ros_kortex/kortex_gazebo/cmake_install.cmake:51 (file):
  file INSTALL cannot find
  "/home/roso/Workspaces/kortex/src/ros_kortex/kortex_gazebo/config".
Call Stack (most recent call first):
  cmake_install.cmake:132 (include)

the line :

foreach(dir config launch meshes urdf)

could be :

foreach(dir launch)

and also, you could add a install for the home_robot.py :

catkin_install_python(PROGRAMS scripts/home_robot.py
                      DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}) 

for kortex_example :

error: package directory 'python/kortex_examples' does not exist
CMake Error at ros_kortex/kortex_examples/catkin_generated/safe_execute_install.cmake:4 (message):
  
  execute_process(/home/roso/Workspaces/kortex/build/ros_kortex/kortex_examples/catkin_generated/python_distutils_install.sh)
  returned error code
Call Stack (most recent call first):
  ros_kortex/kortex_examples/cmake_install.cmake:51 (include)
  cmake_install.cmake:134 (include)

and I have no fix for this, I just removed this package since I don't need it but the catkin_make install doesn't work with this one

Joint control with kortex

In kortex_driver.launch, you provided a method to control kortex with move_it, but I want to control in in joint space, just send command to each joint. How can I make a launch file to achieve this? Thank you,

Moveit example doesn't work on real manipulator

Hello, I have a problem on this manipulator. The ROS example of joint control and cartesian control works well on the real robot. The moveit example in the kortex_example package also works well in Gazebo, however, when it comes to the real robot, all the commands are rejected. The error shows as follow:
[ INFO] [1577536720.839343151]: Planning request received for MoveGroup action. Forwarding to planning pipeline.
[ INFO] [1577536720.857312273]: Planner configuration 'arm' will use planner 'geometric::RRTConnect'. Additional configuration parameters will be set when the planner is constructed.
[ INFO] [1577536720.904154537]: RRTConnect: Starting planning with 1 states already in datastructure
[ INFO] [1577536720.907537266]: RRTConnect: Created 5 states (2 start + 3 goal)
[ INFO] [1577536720.907631471]: Solution found in 0.003769 seconds
[ INFO] [1577536720.925600314]: SimpleSetup: Path simplification took 0.017706 seconds and changed from 4 to 2 states
[ INFO] [1577536720.933210109]: Execution request received
[ INFO] [1577536720.939686916]: New goal received.
[ERROR] [1577536720.939746196]: Joint Trajectory Goal is rejected.
[ WARN] [1577536720.940266595]: Controller handle gen3_joint_trajectory_controller reports status FAILED
[ INFO] [1577536720.940329222]: Completed trajectory execution with status FAILED ...
[ INFO] [1577536720.940455986]: Execution completed: FAILED
Can you help me fix it?

running ros node error

Hi:

I got errors:

[ERROR] [1567627554.028590077]: The gripper model specified in the launch file doesn't match the detected arm's gripper model, shutting down the node...
terminate called after throwing an instance of 'std::runtime_error*'
[my_gen3/my_gen3_driver-1] process has died [pid 26321, exit code -6, cmd /home/airlab/catkin_ws/devel/lib/kortex_driver/kortex_arm_driver __name:=my_gen3_driver __log:=/home/airlab/.ros/log/481ae8aa-cf4f-11e9-97c4-94c691adb6c2/my_gen3-my_gen3_driver-1.log].
log file: /home/airlab/.ros/log/481ae8aa-cf4f-11e9-97c4-94c691adb6c2/my_gen3-my_gen3_driver-1*.log

when I run command roslaunch kortex_driver kortex_driver.launch

cyclic_data_publish_rate does not change the joint_states publishing rate

Hello,
I'm trying to change the publishing rate of joint_states.

According to the kortex_driver/readme.md, cyclic_data_publish_rate is the parameter for changing that, and it's default is 100.
However, when I launch the drive by:

$ roslaunch kortex_driver kortex_driver.launch ip_address:=gen3a start_moveit:=false start_rviz:=true robot_name:=gen3a

the average rate of /gen3a/joint_states is around 10.

$ rostopic hz /gen3a/joint_states
subscribed to [/gen3a/joint_states]
average rate: 10.001
        min: 0.099s max: 0.101s std dev: 0.00043s window: 10
average rate: 10.001
        min: 0.099s max: 0.101s std dev: 0.00040s window: 20
average rate: 10.000
        min: 0.099s max: 0.101s std dev: 0.00037s window: 30

I added cyclic_data_publish_rate:=200 and then cyclic_data_publish_rate:=5 at the end of the launch command line, but it had no effect. Although the SUMMARY of the launch showed the parameter was changed,

PARAMETERS
...
 * /gen3a/gen3a_driver/cyclic_data_publish_rate: 5

the rate measured by rostopic hz was still 10.

If this issue is due to a kind of latency, it should be able to decrease the rate under 10, but even if setting the rate to be 5, the actual rate is 10.
This means that I am misunderstanding, or there is a bug in kortex_driver.
Any ideas?

Vision input from ROS?

Any tutorials on how to get gen3 arm to publish rgb and depth image through ROS? Thanks!

Robotiq 2f-85 force control mode

Hi all,
I have kinova gen3 with a robotiq 2f-85 gripper. I looked into the examples, more specificaly example_full_arm_movement.cpp and I used the example_send_gripper_command method to control the gripper.
The GripperCommand class has a member called mode and I understand that setting this to 1 or to kortex_driver::GripperMode::GRIPPER_FORCE should enable the force mode.
So when modifing the example as
service_send_gripper_command.request.input.mode = kortex_driver::GripperMode::GRIPPER_FORCE;
I should be able to do the force control of the gripper
and the member value of the class Finger should hold the force value right?
the code section in question goes like this:
`
// Initialize the ServiceClient
ros::ServiceClient service_client_send_gripper_command = n.serviceClient<kortex_driver::SendGripperCommand>("/" + robot_name + "/base/send_gripper_command");
kortex_driver::SendGripperCommand service_send_gripper_command;

// Initialize the request
kortex_driver::Finger finger;
finger.finger_identifier = 0;
finger.value = value;
service_send_gripper_command.request.input.gripper.finger.push_back(finger);
service_send_gripper_command.request.input.mode = kortex_driver::GripperMode::GRIPPER_FORCE;
//and we send it as
service_client_send_gripper_command.call(service_send_gripper_command);
`

However it does not work. I used different values and I tried lookig through the api but it does not help. Other two modes GRIPPER_POSITION and GRIPPER_SPEED works well.

I am gratefull for any advice, thanks in advance
Pavel

Error while launching the kortex driver

As the title says, after launching the kortex driver (rel 2.0.0) with

roslaunch kortex_driver kortex_driver.launch ip_address:=1xx.yyy.zzz.tt gripper:="robotiq_2f_85"

the output returns the following error:

[ERROR] [1565733224.731845080]: Exception while loading planning adapter plugin 'industrial_trajectory_filters/UniformSampleFilter': According to the loaded plugin descriptions the class industrial_trajectory_filters/UniformSampleFilter with base class type planning_request_adapter::PlanningRequestAdapter does not exist. Declared types are default_planner_request_adapters/AddIterativeSplineParameterization default_planner_request_adapters/AddTimeParameterization default_planner_request_adapters/Empty default_planner_request_adapters/FixStartStateBounds default_planner_request_adapters/FixStartStateCollision default_planner_request_adapters/FixStartStatePathConstraints default_planner_request_adapters/FixWorkspaceBounds

any advice?

Joint torque control with Kinova

Hi all,
I have kinova gen3, and I want to control it using ROS through joint torque command, however I did not see any examples. I have tried example_full_arm_movement.cpp, and realized joint position and velocity controls. Did anyone know how to do joint torque control?

Thanks a lot.
Hongjun

Implement ros_control with several hardware interfaces

Several thoughts here:

It would be nice if you guys developed and maintained a ros_control package for use with moveit and others.

Franka did quite a nice job with their control interface - I'd take a look at it for reference.
https://github.com/frankaemika/franka_ros

We have developed one ourselves but it has several shortcomings as of yet. It would be nice for Kinova to use the baked in ros_control feature to switch controllers when switching into impedance mode for example when the buttons on the end effector are pressed. It would also be super helpful because it touches so many components that Kinova maintains - loop rates etc.

It would be ideal for several interfaces to be exposed in this way. @nsaif-kinova tagging you to take a look at this. It is not super high priority for Peanut atm since we wrote our own - but we would really prefer for Kinova to take this on from a maintenance perspective.

There are also consultants out there that specialize in developing these things I would recommend working with https://picknik.ai/ - they are maintainers on both ros and ros_control and I believe they have built many ros_control interfaces for robotics companies before.

Trajectory control

Although this was mentioned in #27, I would like to keep this issue opened.

At this moment, we cannot control trajectory of Gen3, which is a lack of fundamental feature of robots. Everyone should be able to know this fact before buying the robot. So, I would like to keep this open.

control problems

Hello, I saw a video on YouTube. At the end of the view, gen3 can realize follow the goal in real time. I want to know how is it controlled? Thanks!

Error in kortex_description

When I launch roslaunch kortex_description display.launch I get the following error:

[ERROR] [1562104136.827489851]: The STL file 'package://kortex_description/meshes/EndEffector_Link.STL' is malformed. It appears to be a binary STL file but does not contain enough data for the 80 byte header and 32-bit integer triangle count. [ERROR] [1562104136.827520627]: Failed to load file [package://kortex_description/meshes/EndEffector_Link.STL] [ERROR] [1562104136.827701138]: Could not load model 'package://kortex_description/meshes/EndEffector_Link.STL' for link 'EndEffector_Link': OGRE EXCEPTION(6:FileNotFoundException): Cannot locate resource package://kortex_description/meshes/EndEffector_Link.STL in resource group Autodetect or any other group. in ResourceGroupManager::openResource at /build/ogre-1.9-mqY1wq/ogre-1.9-1.9.0+dfsg1/OgreMain/src/OgreResourceGroupManager.cpp (line 756)

The first line says the EndEffector_Link.STL is malformed, would that be the problem? And if so, do we have access to a CAD model in SolidWorks or the like, to save a fresh version of the STL file myself?

ROS message error while running C++ examples

After installing ros_kortex, I was able to run the following examples properly:

  • GetControlLoopParameters
  • GetSensorSettings
  • ReadAllDevices

But when I run the SetControlLoopParameters, I got the following messages:

  • Server: [ INFO] [1552494833.992110908]: KINOVA exception: 4
  • Client: [ERROR] [1552494833.992377045]: Failed to call SetControlLoopParameters

When I run the PlayCartesian and PlayCartesianPosition, I got the following messages:

  • Server: [ERROR] [1552494976.854756141]: client wants service /RefreshFeedback to have md5sum cc527e10b6cbeb93059adfab44147b77, but it has afdcac728d5cb28b98f9f7ec4a0fa269. Dropping connection.
  • Client: [ERROR] [1552494976.855100999]: Failed to retrieve the cyclic data.

Use standard ROS naming for links

Currently link names are in the style of 'ForeArm_Link' and joints are in the more sensible form of 'ActuatorN'. REP199 (unmerged) recommends link names à la 'link_N' and 'joint_N' (lowercase only!). base_link is already in the right format, but the following links aren't and use a different convention.

If this is just a change on the ROS repo, happy to open a PR myself to change this. In any case, combining camel casing with underscores is massive cringe to anyone software.

The starting point for the trajectory did not match the actual commanded joint angles

I got the following error when trying to execute a pose target using MoveIt! move_group_interface. I have executed the code several with success but sometimes, when I zero the arm manually to the home position (using a joystick) and re-run the code for testing, I get the error.

[ERROR] [1573778245.421304088]: Trajectory has been aborted.
[ERROR] [1573778245.421976633]: Trajectory execution failed in the arm with sub error code 69
The starting point for the trajectory did not match the actual commanded joint angles.

Before I plan, I also call setStartStateToCurrentState() to make sure the planner is updated with the current arm's state.

Can provide help to mitigate this issue?

Thanks

New update PR #65 fail to build

Hello,

I git pull the latest change PR 65 to test the new updates on the controller. I got the following errors:


/home/truhoang/1-Project_Code/ubtech_ws/src/ros_kortex/kortex_driver/src/generated/base_services.cpp: In member function ‘bool BaseServices::UpdateMapping(kortex_driver::UpdateMapping::Request&, kortex_driver::UpdateMapping::Response&)’:
/home/truhoang/1-Project_Code/ubtech_ws/src/ros_kortex/kortex_driver/src/generated/base_services.cpp:1098:11: error: ‘class Kinova::Api::Base::BaseClient’ has no member named ‘UpdateMapping’; did you mean ‘CreateMapping’?
   m_base->UpdateMapping(input, m_current_device_id, m_api_options);
           ^~~~~~~~~~~~~
           CreateMapping
/home/truhoang/1-Project_Code/ubtech_ws/src/ros_kortex/kortex_driver/src/generated/base_services.cpp: In member function ‘bool BaseServices::DeleteMapping(kortex_driver::DeleteMapping::Request&, kortex_driver::DeleteMapping::Response&)’:
/home/truhoang/1-Project_Code/ubtech_ws/src/ros_kortex/kortex_driver/src/generated/base_services.cpp:1130:11: error: ‘class Kinova::Api::Base::BaseClient’ has no member named ‘DeleteMapping’; did you mean ‘CreateMapping’?
   m_base->DeleteMapping(input, m_current_device_id, m_api_options);
           ^~~~~~~~~~~~~
           CreateMapping
/home/truhoang/1-Project_Code/ubtech_ws/src/ros_kortex/kortex_driver/src/generated/base_services.cpp: In member function ‘bool BaseServices::ReadMap(kortex_driver::ReadMap::Request&, kortex_driver::ReadMap::Response&)’:
/home/truhoang/1-Project_Code/ubtech_ws/src/ros_kortex/kortex_driver/src/generated/base_services.cpp:1232:20: error: ‘class Kinova::Api::Base::BaseClient’ has no member named ‘ReadMap’; did you mean ‘ReadMapping’?
   output = m_base->ReadMap(input, m_current_device_id, m_api_options);
                    ^~~~~~~
                    ReadMapping
/home/truhoang/1-Project_Code/ubtech_ws/src/ros_kortex/kortex_driver/src/generated/base_services.cpp: In member function ‘bool BaseServices::UpdateMap(kortex_driver::UpdateMap::Request&, kortex_driver::UpdateMap::Response&)’:
/home/truhoang/1-Project_Code/ubtech_ws/src/ros_kortex/kortex_driver/src/generated/base_services.cpp:1265:11: error: ‘class Kinova::Api::Base::BaseClient’ has no member named ‘UpdateMap’; did you mean ‘CreateMap’?
   m_base->UpdateMap(input, m_current_device_id, m_api_options);
           ^~~~~~~~~
           CreateMap
/home/truhoang/1-Project_Code/ubtech_ws/src/ros_kortex/kortex_driver/src/generated/base_services.cpp: In member function ‘bool BaseServices::DeleteMap(kortex_driver::DeleteMap::Request&, kortex_driver::DeleteMap::Response&)’:
/home/truhoang/1-Project_Code/ubtech_ws/src/ros_kortex/kortex_driver/src/generated/base_services.cpp:1297:11: error: ‘class Kinova::Api::Base::BaseClient’ has no member named ‘DeleteMap’; did you mean ‘CreateMap’?
   m_base->DeleteMap(input, m_current_device_id, m_api_options);
           ^~~~~~~~~
           CreateMap
ros_kortex/kortex_driver/CMakeFiles/kortex_driver_generated_files.dir/build.make:230: recipe for target 'ros_kortex/kortex_driver/CMakeFiles/kortex_driver_generated_files.dir/src/generated/base_services.cpp.o' failed

Since the package build successfully with the previous version, I suspect the error is not a result of anything from my end.

kortex_driver launching error

Hi,
I'm using release 2.0.0 on ubuntu 16.04 and ros-kinetic.
I'm connecting to Gen3 with ether-net cable and set up the ip address and netmask according to the quick start guide.
However when I tried to do roslaunch kortex_driver kortex_driver.launch start_rviz:=false start_moveit:=false ip_address:=192.168.1.11 I got an error message as follows:

jc@jc-Precision-5510:~$ roslaunch kortex_driver kortex_driver.launch start_rviz:=false start_moveit:=false ip_address:=192.168.1.11
... logging to /home/jc/.ros/log/7725a7b6-c37e-11e9-8537-a434d9e04d1d/roslaunch-jc-Precision-5510-14874.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://jc-Precision-5510:42769/

SUMMARY
========

PARAMETERS
 * /my_gen3/joint_state_publisher/source_list: ['base_feedback/j...
 * /my_gen3/my_gen3_driver/api_connection_inactivity_timeout_ms: 20000
 * /my_gen3/my_gen3_driver/api_rpc_timeout_ms: 2000
 * /my_gen3/my_gen3_driver/api_session_inactivity_timeout_ms: 35000
 * /my_gen3/my_gen3_driver/arm: gen3
 * /my_gen3/my_gen3_driver/cyclic_data_publish_rate: 100
 * /my_gen3/my_gen3_driver/default_goal_time_tolerance: 0.5
 * /my_gen3/my_gen3_driver/default_goal_tolerance: 0.5
 * /my_gen3/my_gen3_driver/gripper: 
 * /my_gen3/my_gen3_driver/ip_address: 192.168.1.11
 * /my_gen3/my_gen3_driver/joint_names: ['joint_1', 'join...
 * /my_gen3/robot_description: <?xml version="1....
 * /rosdistro: kinetic
 * /rosversion: 1.12.14

NODES
  /my_gen3/
    joint_state_publisher (joint_state_publisher/joint_state_publisher)
    my_gen3_driver (kortex_driver/kortex_arm_driver)
    robot_state_publisher (robot_state_publisher/state_publisher)

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

setting /run_id to 7725a7b6-c37e-11e9-8537-a434d9e04d1d
process[rosout-1]: started with pid [14900]
started core service [/rosout]
process[my_gen3/my_gen3_driver-2]: started with pid [14903]
process[my_gen3/joint_state_publisher-3]: started with pid [14909]
process[my_gen3/robot_state_publisher-4]: started with pid [14919]
There was a problem connecting to the server. Aborting
[ERROR] [1566328355.569615805]: The node could not connect to the arm. Did you specify the right IP address and is the arm powered on?
terminate called after throwing an instance of 'std::runtime_error'
  what():  not connected !!!
[my_gen3/my_gen3_driver-2] process has died [pid 14903, exit code -6, cmd /home/jc/catkin_ws/devel/lib/kortex_driver/kortex_arm_driver __name:=my_gen3_driver __log:=/home/jc/.ros/log/7725a7b6-c37e-11e9-8537-a434d9e04d1d/my_gen3-my_gen3_driver-2.log].
log file: /home/jc/.ros/log/7725a7b6-c37e-11e9-8537-a434d9e04d1d/my_gen3-my_gen3_driver-2*.log

I tried the default ip address but the process just hang for a little longer and die with same error message show above. Any thoughts on this one? Thanks in advance.

Missing head file, catkin_make failed

I'm using Ubuntu 16.04 and ROS kinetic

First, I followed the procedure to setup "kortex" repository from: https://github.com/Kinovarobotics/kortex.
I followed the following directory hierarchies:

examples/kortex_api  
┬  
├ include/
├ lib/  
└   ┬  
    ├ debug/  
    └ release/ 

Here's what I got after cmake installation:

jc@jc-Precision-5510:/opt/kortex-master/api_cpp/examples/build$ sudo cmake .. -DCMAKE_BUILD_TYPE=release
-- The C compiler identification is GNU 5.4.0
-- The CXX compiler identification is GNU 5.4.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
---------------------------------------------------------------------------------
Project 'Getting_started' args: 
Project building for: 'Linux' in 'release' mode
create TARGET_EXE_NAME: '01_api_creation'
create TARGET_EXE_NAME: '02-protobuf_object_manipulation'
create TARGET_EXE_NAME: '03_api_mechanism'
create TARGET_EXE_NAME: '04_error_management'
create TARGET_EXE_NAME: '05_notification'
---------------------------------------------------------------------------------
Project 'Getting_started' args: 
Project building for: 'Linux' in 'release' mode
create TARGET_EXE_NAME: '01_devices_routing'
---------------------------------------------------------------------------------
Project 'Getting_started' args: 
Project building for: 'Linux' in 'release' mode
create TARGET_EXE_NAME: '01-move_angular_and_cartesian'
create TARGET_EXE_NAME: '02-sequence'
---------------------------------------------------------------------------------
Project 'Getting_started' args: 
Project building for: 'Linux' in 'release' mode
create TARGET_EXE_NAME: '01-low_level_cyclic'
CMake Error at CMakeLists.txt:29 (add_subdirectory):
  add_subdirectory given source "300-BaseGen3_low_level_bypass" which is not
  an existing directory.


---------------------------------------------------------------------------------
Project 'Getting_started' args: 
Project building for: 'Linux' in 'release' mode
create TARGET_EXE_NAME: '01_vision'
-- Configuring incomplete, errors occurred!
See also "/opt/kortex-master/api_cpp/examples/build/CMakeFiles/CMakeOutput.log".
jc@jc-Precision-5510:/opt/kortex-master/api_cpp/examples/build$ make
make: *** No targets specified and no makefile found.  Stop.
jc@jc-Precision-5510:/opt/kortex-master/api_cpp/examples/build$ sudo make
make: *** No targets specified and no makefile found.  Stop.

Then I followed the instruction to install protobuf. No problem found expect for the same problem as issue 5315. Installation was successful after removing -Werror from src/Makefile

These are what I did before git clone the kortex-ros directory and ran cankin_make.
Any ideas where I did incorrectly or if it is a bug? Thanks!

/home/jc/catkin_ws/src/ros_kortex/kortex_examples/cpp/example_get_sensor_settings.cpp:2:59: fatal error: kortex_vision_config_driver/GetSensorSettings.h: No such file or directory
compilation terminated.
ros_kortex/kortex_examples/CMakeFiles/GetSensorSettings.dir/build.make:62: recipe for target 'ros_kortex/kortex_examples/CMakeFiles/GetSensorSettings.dir/cpp/example_get_sensor_settings.cpp.o' failed
make[2]: *** [ros_kortex/kortex_examples/CMakeFiles/GetSensorSettings.dir/cpp/example_get_sensor_settings.cpp.o] Error 1
CMakeFiles/Makefile2:22442: recipe for target 'ros_kortex/kortex_examples/CMakeFiles/GetSensorSettings.dir/all' failed
make[1]: *** [ros_kortex/kortex_examples/CMakeFiles/GetSensorSettings.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
/home/jc/catkin_ws/src/ros_kortex/kortex_examples/cpp/example_play_cartesian.cpp:2:51: fatal error: kortex_driver/PlayCartesianTrajectory.h: No such file or directory
compilation terminated.
ros_kortex/kortex_examples/CMakeFiles/PlayCartesian.dir/build.make:62: recipe for target 'ros_kortex/kortex_examples/CMakeFiles/PlayCartesian.dir/cpp/example_play_cartesian.cpp.o' failed
make[2]: *** [ros_kortex/kortex_examples/CMakeFiles/PlayCartesian.dir/cpp/example_play_cartesian.cpp.o] Error 1
CMakeFiles/Makefile2:22516: recipe for target 'ros_kortex/kortex_examples/CMakeFiles/PlayCartesian.dir/all' failed
make[1]: *** [ros_kortex/kortex_examples/CMakeFiles/PlayCartesian.dir/all] Error 2
[ 18%] Generating Javascript code from kortex_device_manager/Unit.msg
/home/jc/catkin_ws/src/ros_kortex/kortex_examples/cpp/example_play_cartesian_position.cpp:2:59: fatal error: kortex_driver/PlayCartesianTrajectoryPosition.h: No such file or directory
compilation terminated.
[ 18%] Generating Javascript code from kortex_device_manager/IPv4Settings.msg
ros_kortex/kortex_examples/CMakeFiles/PlayCartesianPosition.dir/build.make:62: recipe for target 'ros_kortex/kortex_examples/CMakeFiles/PlayCartesianPosition.dir/cpp/example_play_cartesian_position.cpp.o' failed
make[2]: *** [ros_kortex/kortex_examples/CMakeFiles/PlayCartesianPosition.dir/cpp/example_play_cartesian_position.cpp.o] Error 1
CMakeFiles/Makefile2:22479: recipe for target 'ros_kortex/kortex_examples/CMakeFiles/PlayCartesianPosition.dir/all' failed
make[1]: *** [ros_kortex/kortex_examples/CMakeFiles/PlayCartesianPosition.dir/all] Error 2
[ 18%] Generating Python from MSG kortex_device_manager/SafetyLimitType
[ 18%] Generating Python from MSG kortex_device_manager/SafetyConfiguration
[ 18%] Generating Javascript code from kortex_device_manager/PowerOnSelfTestResult.msg
[ 19%] Generating Javascript code from kortex_device_manager/ServiceVersion.msg
[ 19%] Generating Javascript code from kortex_device_manager/PartNumberRevision.msg
[ 19%] Generating Javascript code from kortex_device_manager/Empty.msg
[ 19%] Generating Python from MSG kortex_device_manager/FirmwareVersion
[ 19%] Generating Javascript code from kortex_device_manager/SerialNumber.msg
[ 19%] Generating Javascript code from kortex_device_manager/NotificationOptions.msg
[ 19%] Generating Javascript code from kortex_device_manager/SafetyNotification.msg
[ 19%] Generating Javascript code from kortex_device_manager/SafetyHandle.msg
[ 19%] Generating Javascript code from kortex_device_manager/SafetyStatusValue.msg
[ 19%] Generating Javascript code from kortex_device_manager/Timestamp.msg
[ 19%] Generating Javascript code from kortex_device_manager/ModelNumber.msg
[ 19%] Generating Python from MSG kortex_device_manager/Unit
[ 19%] Generating Javascript code from kortex_device_manager/NotificationHandle.msg
[ 19%] Generating Python from MSG kortex_device_manager/IPv4Settings
[ 19%] Generating Python from MSG kortex_device_manager/PowerOnSelfTestResult
[ 19%] Generating Javascript code from kortex_device_manager/SafetyThreshold.msg
[ 19%] Generating Javascript code from kortex_device_manager/ArmState.msg
[ 19%] Generating Python from MSG kortex_device_manager/ServiceVersion
[ 19%] Generating Javascript code from kortex_device_manager/BootloaderVersion.msg
[ 19%] Generating Javascript code from kortex_device_manager/SafetyEnable.msg
[ 19%] Generating Javascript code from kortex_device_manager/SafetyInformation.msg
[ 19%] Generating Python from MSG kortex_device_manager/PartNumberRevision
[ 19%] Generating Javascript code from kortex_device_manager/NotificationType.msg
[ 19%] Generating Javascript code from kortex_device_manager/SafetyStatus.msg
[ 19%] Generating Python from MSG kortex_device_manager/Empty
[ 19%] Generating Javascript code from kortex_device_manager/DeviceType.msg
[ 19%] Generating Python from MSG kortex_device_manager/SerialNumber
[ 19%] Generating Javascript code from kortex_device_manager/RebootRqst.msg
[ 19%] Generating Javascript code from kortex_device_manager/Connection.msg
[ 19%] Generating Python from MSG kortex_device_manager/NotificationOptions
[ 19%] Generating Python from MSG kortex_device_manager/SafetyNotification
[ 19%] Generating Javascript code from kortex_device_manager/RunModes.msg
[ 19%] Generating Javascript code from kortex_device_manager/DeviceHandle.msg
[ 19%] Generating Python from MSG kortex_device_manager/SafetyHandle
[ 20%] Generating Python from MSG kortex_device_manager/SafetyStatusValue
[ 20%] Generating Javascript code from kortex_device_manager/UserProfileHandle.msg
[ 20%] Generating Python from MSG kortex_device_manager/Timestamp
[ 20%] Generating Javascript code from kortex_device_manager/RunMode.msg
[ 20%] Generating Javascript code from kortex_device_manager/Permission.msg
[ 20%] Generating Python from MSG kortex_device_manager/ModelNumber
[ 20%] Generating Python from MSG kortex_device_manager/NotificationHandle
[ 20%] Generating Python from MSG kortex_device_manager/SafetyThreshold
[ 20%] Generating Python from MSG kortex_device_manager/ArmState
[ 20%] Generating Javascript code from kortex_device_manager/SafetyInformationList.msg
[ 20%] Linking CXX executable /home/jc/catkin_ws/devel/lib/kortex_examples/SetControlLoopParameters
[ 20%] Linking CXX executable /home/jc/catkin_ws/devel/lib/kortex_examples/GetControlLoopParameters
[ 20%] Linking CXX executable /home/jc/catkin_ws/devel/lib/kortex_examples/ReadAllDevices
[ 20%] Generating Python from MSG kortex_device_manager/SafetyEnable
[ 20%] Generating Python from MSG kortex_device_manager/BootloaderVersion
[ 20%] Generating Python from MSG kortex_device_manager/SafetyInformation
[ 21%] Generating Javascript code from kortex_device_manager/DeviceHandles.msg
[ 21%] Generating Javascript code from kortex_device_manager/KortexError.msg
[ 21%] Generating Javascript code from kortex_device_manager/SetRunMode.srv
[ 21%] Generating Javascript code from kortex_device_manager/GetFirmwareVersion.srv
[ 21%] Generating Javascript code from kortex_device_manager/SetPartNumber.srv
[ 21%] Generating Python from MSG kortex_device_manager/NotificationType
[ 21%] Generating Python from MSG kortex_device_manager/SafetyStatus
[ 21%] Generating Python from MSG kortex_device_manager/DeviceType
[ 21%] Built target ReadAllDevices
[ 21%] Generating Javascript code from kortex_device_manager/ClearSafetyStatus.srv
[ 21%] Built target GetControlLoopParameters
[ 21%] Generating Javascript code from kortex_device_manager/SetPartNumberRevision.srv
[ 21%] Built target SetControlLoopParameters
[ 21%] Generating Python from MSG kortex_device_manager/RebootRqst
[ 21%] Generating Javascript code from kortex_device_manager/SetIPv4Settings.srv
[ 21%] Generating Javascript code from kortex_device_manager/GetSafetyInformation.srv
[ 21%] Generating Python from MSG kortex_device_manager/Connection
[ 21%] Generating Python from MSG kortex_device_manager/RunModes
[ 21%] Generating Javascript code from kortex_device_manager/ResetSafetyDefaults.srv
[ 21%] Generating Javascript code from kortex_device_manager/ClearAllSafetyStatus.srv
[ 21%] Generating Python from MSG kortex_device_manager/DeviceHandle
[ 21%] Generating Javascript code from kortex_device_manager/GetIPv4Settings.srv
[ 21%] Generating Python from MSG kortex_device_manager/UserProfileHandle
[ 21%] Generating Python from MSG kortex_device_manager/RunMode
[ 21%] Generating Javascript code from kortex_device_manager/GetRunMode.srv
[ 21%] Generating Python from MSG kortex_device_manager/Permission
[ 21%] Generating Python from MSG kortex_device_manager/SafetyInformationList
[ 21%] Generating Javascript code from kortex_device_manager/GetMACAddress.srv
[ 21%] Generating Python from MSG kortex_device_manager/DeviceHandles
[ 21%] Generating Javascript code from kortex_device_manager/SetSafetyEnable.srv
[ 21%] Generating Python from MSG kortex_device_manager/KortexError
[ 21%] Generating Python code from SRV kortex_device_manager/SetRunMode
[ 21%] Generating Python code from SRV kortex_device_manager/GetFirmwareVersion
[ 21%] Generating Javascript code from kortex_device_manager/GetAllSafetyConfiguration.srv
[ 21%] Generating Python code from SRV kortex_device_manager/SetPartNumber
[ 21%] Generating Python code from SRV kortex_device_manager/ClearSafetyStatus
[ 21%] Generating Python code from SRV kortex_device_manager/SetPartNumberRevision
[ 22%] Generating Python code from SRV kortex_device_manager/SetIPv4Settings
[ 22%] Generating Javascript code from kortex_device_manager/ReadAllDevices.srv
[ 22%] Generating Python code from SRV kortex_device_manager/GetSafetyInformation
[ 22%] Generating Python code from SRV kortex_device_manager/ResetSafetyDefaults
[ 22%] Generating Python code from SRV kortex_device_manager/ClearAllSafetyStatus
[ 22%] Generating Python code from SRV kortex_device_manager/GetRunMode
[ 22%] Generating Python code from SRV kortex_device_manager/GetIPv4Settings
[ 22%] Generating Javascript code from kortex_device_manager/GetSafetyConfiguration.srv
[ 22%] Generating Python code from SRV kortex_device_manager/GetMACAddress
[ 22%] Generating Python code from SRV kortex_device_manager/SetSafetyEnable
[ 22%] Generating Python code from SRV kortex_device_manager/GetAllSafetyConfiguration
[ 22%] Generating Python code from SRV kortex_device_manager/ReadAllDevices
[ 22%] Generating Python code from SRV kortex_device_manager/GetSafetyConfiguration
[ 22%] Generating Javascript code from kortex_device_manager/RebootRequest.srv
[ 22%] Generating Python code from SRV kortex_device_manager/RebootRequest
[ 22%] Generating Javascript code from kortex_device_manager/SafetyTopic.srv
[ 22%] Generating Python code from SRV kortex_device_manager/SafetyTopic
[ 22%] Generating Python code from SRV kortex_device_manager/GetPartNumberRevision
[ 22%] Generating Javascript code from kortex_device_manager/GetPartNumberRevision.srv
[ 22%] Generating Javascript code from kortex_device_manager/GetAllSafetyInformation.srv
[ 22%] Generating Python code from SRV kortex_device_manager/GetAllSafetyInformation
[ 22%] Generating Python code from SRV kortex_device_manager/GetSerialNumber
[ 22%] Generating Python code from SRV kortex_device_manager/GetSafetyStatus
[ 22%] Generating Python code from SRV kortex_device_manager/GetModelNumber
[ 22%] Generating Python code from SRV kortex_device_manager/GetDeviceType
[ 22%] Generating Python code from SRV kortex_device_manager/GetBootloaderVersion
[ 22%] Generating Javascript code from kortex_device_manager/GetSerialNumber.srv
[ 22%] Generating Python code from SRV kortex_device_manager/SetMACAddress
[ 22%] Generating Python code from SRV kortex_device_manager/SetSerialNumber
[ 22%] Generating Python code from SRV kortex_device_manager/SetModelNumber
[ 22%] Generating Python code from SRV kortex_device_manager/GetSafetyEnable
[ 22%] Generating Javascript code from kortex_device_manager/GetSafetyStatus.srv
[ 22%] Generating Python code from SRV kortex_device_manager/SetSafetyConfiguration
[ 22%] Generating Python code from SRV kortex_device_manager/SetSafetyWarningThreshold
[ 23%] Generating Python code from SRV kortex_device_manager/SetSafetyErrorThreshold
[ 23%] Generating Python code from SRV kortex_device_manager/GetPartNumber
[ 23%] Generating Javascript code from kortex_device_manager/GetModelNumber.srv
[ 23%] Generating Python code from SRV kortex_device_manager/GetPowerOnSelfTestResult
[ 23%] Generating Javascript code from kortex_device_manager/GetDeviceType.srv
[ 23%] Generating Javascript code from kortex_device_manager/GetBootloaderVersion.srv
[ 24%] Generating Javascript code from kortex_device_manager/SetMACAddress.srv
[ 24%] Generating Javascript code from kortex_device_manager/SetSerialNumber.srv
[ 24%] Generating Javascript code from kortex_device_manager/SetModelNumber.srv
[ 24%] Generating Javascript code from kortex_device_manager/GetSafetyEnable.srv
[ 24%] Generating Javascript code from kortex_device_manager/SetSafetyConfiguration.srv
[ 24%] Generating Javascript code from kortex_device_manager/SetSafetyWarningThreshold.srv
[ 24%] Generating Javascript code from kortex_device_manager/SetSafetyErrorThreshold.srv
[ 24%] Generating Python msg __init__.py for kortex_device_manager
[ 24%] Generating Javascript code from kortex_device_manager/GetPartNumber.srv
[ 24%] Generating Javascript code from kortex_device_manager/GetPowerOnSelfTestResult.srv
[ 24%] Generating Python srv __init__.py for kortex_device_manager
[ 24%] Built target kortex_device_manager_generate_messages_nodejs
[ 24%] Built target kortex_device_manager_generate_messages_py
Makefile:138: recipe for target 'all' failed
make: *** [all] Error 2
Invoking "make -j8 -l8" failed

Robotiq 2f-85 force control mode

Hi all,
I have kinova gen3 with a robotiq 2f-85 gripper. I looked into the examples, more specificaly example_full_arm_movement.cpp and I used the example_send_gripper_command method to control the gripper.
The GripperCommand class has a member called mode and I understand that setting this to 1 or to kortex_driver::GripperMode::GRIPPER_FORCE should enable the force mode.
So when modifing the example as
service_send_gripper_command.request.input.mode = kortex_driver::GripperMode::GRIPPER_FORCE;
I should be able to do the force control of the gripper
and the member value of the class Finger should hold the force value right?
the code section in question goes like this:
`
// Initialize the ServiceClient
ros::ServiceClient service_client_send_gripper_command = n.serviceClient<kortex_driver::SendGripperCommand>("/" + robot_name + "/base/send_gripper_command");
kortex_driver::SendGripperCommand service_send_gripper_command;

// Initialize the request
kortex_driver::Finger finger;
finger.finger_identifier = 0;
finger.value = value;
service_send_gripper_command.request.input.gripper.finger.push_back(finger);
service_send_gripper_command.request.input.mode = kortex_driver::GripperMode::GRIPPER_FORCE;
//and we send it as
service_client_send_gripper_command.call(service_send_gripper_command);
`

However it does not work. I used different values and I tried looking through the API but it does not help. Other two modes GRIPPER_POSITION and GRIPPER_SPEED works well.

I am grateful for any advice, thanks in advance
Pavel

Namespace mismatch

Hi, there seems to be a namespace mismatch. When I tried to run the moveit examples following the instructions in https://github.com/Kinovarobotics/ros_kortex/blob/kinetic-devel/kortex_examples/readme.md, I received an error after running example_move_it_trajectories.py (https://pastebin.com/6j0P97xQ).

The problem goes away if I do rosrun kortex_examples example_move_it_trajectories.py __ns:=my_gen3 although I did not change anything in my kortex_driver.launch.

Note: when I printed rospy.get_namespace(), it printed out /.

Compilation error

Hi,
I was trying to compile the ros_kortex package, but running into following error:

[ 21%] Building CXX object ros_kortex/kortex_driver/CMakeFiles/kortex_driver_generated_files.dir/src/generated/base_services.cpp.o
c++: internal compiler error: Killed (program cc1plus)
Please submit a full bug report,
with preprocessed source if appropriate.
See file:///usr/share/doc/gcc-7/README.Bugs for instructions.
ros_kortex/kortex_driver/CMakeFiles/kortex_driver_generated_files.dir/build.make:230: recipe for target 'ros_kortex/kortex_driver/CMakeFiles/kortex_driver_generated_files.dir/src/generated/base_services.cpp.o' failed
make[2]: *** [ros_kortex/kortex_driver/CMakeFiles/kortex_driver_generated_files.dir/src/generated/base_services.cpp.o] Error 4
CMakeFiles/Makefile2:5378: recipe for target 'ros_kortex/kortex_driver/CMakeFiles/kortex_driver_generated_files.dir/all' failed
make[1]: *** [ros_kortex/kortex_driver/CMakeFiles/kortex_driver_generated_files.dir/all] Error 2
Makefile:140: recipe for target 'all' failed
make: *** [all] Error 2
Invoking "make -j1 -l1" failed

I have setup ROS Melodic and I am running Ubuntu 18.04 in VMware 15.

Difference of EEF position between kortex_driver and MoveIt

Greetings,

there exists an offset between the tool/end effector pose returned by kortex's BaseCyclic_Feedback.pose.tool_pose_xyz and MoveIt's arm_group.get_current_pose().

For example with the EEF facing towards the ground:

MoveIt:
x: -0.0237346354686
y: 0.24785572974
z: 0.0580734261844
orientation:
x: -0.0432058638949
y: -0.99869048994
z: -0.0215183862723
w: 0.0169563463014

kortex_driver:
position:
x: -0.0275755301118
y: 0.253189027309
z: -0.0617465749383
orientation:
x: 0.043206269999861865
y: 0.9986904800693364
z: 0.021518075282811973
w: -0.01695628755655937

Difference:
x: 0.00384089464324
y: -0.00533329756901
z: 0.119820001123

Upon testing some other poses, it looks like MoveIt defines the EEF link ~10cm further out from the bracelet joint than kortex_driver does.

This difference in readings is problematic, as I would like to freely switch between controlling the arm with kortex_driver and MoveIt. What would you suggest?

Best regards,
Jude

Vision topic activation service doens't seem to work

I'm trying to use the vision module (I'm more interested in the depth point cloud). As I understood, I need to activate the publisher. So I wrote this node:

void notification_callback(const kortex_driver::VisionNotification::ConstPtr& notif) {
    ROS_INFO("Got data");
}

void activate_vision_topic(ros::NodeHandle n, std::string robot_name) {
    // See if we have the vision module connected
    ros::ServiceClient service_client_read_all_devices = n.serviceClient<kortex_driver::ReadAllDevices>("/" + robot_name + "/device_manager/read_all_devices");
    kortex_driver::ReadAllDevices service_read_all_devices;

    if (service_client_read_all_devices.call(service_read_all_devices)) {
        auto output = service_read_all_devices.response.output;
        for (int i=0; i<output.device_handle.size(); i++) {
            if (output.device_handle[i].device_type == kortex_driver::DeviceTypes::VISION) {
                ROS_INFO_STREAM("VISION MODULE >> DevID:" << output.device_handle[i].device_identifier <<
                                                " DevType: " << output.device_handle[i].device_type <<
                                                " DevOrder: " << output.device_handle[i].order);
                break;
            }
        }
    }

    //Activate the vision topic
    std::string VISION_TOPIC_ACTIVATION_NAME = "/" + robot_name + "/vision_config/activate_publishing_of_vision_topic";
    ros::ServiceClient service_client_activate_notif = n.serviceClient<kortex_driver::OnNotificationVisionTopic>(VISION_TOPIC_ACTIVATION_NAME);
    kortex_driver::OnNotificationVisionTopic service_activate_notif;
    service_activate_notif.request.input.rate_m_sec = 33;
    service_activate_notif.request.input.threshold_value = 0.01f; // Don't know what this does
    service_activate_notif.request.input.type = kortex_driver::Sensor::SENSOR_DEPTH;
   
    if (service_client_activate_notif.call(service_activate_notif)) {
        ROS_INFO_STREAM("Publisher activated");
    }
    else { ROS_ERROR_STREAM("Cannot activate"); }
    ros::Duration(1.0).sleep();
}

int main(int argc, char **argv) {
  ros::init(argc, argv, "activate_vision");
  ros::NodeHandle n;
  std::string robot_name = "my_gen3";
  ros::Subscriber sub = n.subscribe("/" + robot_name  + "/vision_topic", 1000, notification_callback);

  activate_vision_topic(n, robot_name);
  ros::spin();
  return 0;
}

About half the time I get the error:

[ INFO] [1570573329.615870357]: Kortex exception
[ INFO] [1570573329.615934206]: KINOVA exception error code: 1
[ INFO] [1570573329.615987718]: KINOVA exception error sub code: 52
[ INFO] [1570573329.616049492]: KINOVA exception description: Server protocol error, Error sub type=INVALID_DEVICE => <srv: 5, fct: 8, msgType: 3> description: The device id 255 is invalid and doesn't correspond to a registered device.

The other half, there are no errors but there is nothing being published under the /my_gen3/vision_topic topic regardless.

Am I missing something?

Compilation error with multiple versions of protobuf

Greetings,

I'm trying to install the latest ros_kortex packages, but I'm facing some issues.
When I catkin_make my workspace, I get a multitude of errors with the two repeating templates.

Error Template 1:

In file included from /usr/include/ignition/msgs1/ignition/msgs/MessageTypes.hh:164:0,
from /usr/include/ignition/msgs1/ignition/msgs/Utility.hh:29,
from /usr/include/ignition/msgs1/ignition/msgs.hh:25,
from /usr/include/ignition/transport4/ignition/transport/Node.hh:32,
from /usr/include/gazebo-9/gazebo/physics/Entity.hh:25,
from /usr/include/gazebo-9/gazebo/physics/Model.hh:30,
from /usr/include/gazebo-9/gazebo/physics/Actor.hh:26,
from /usr/include/gazebo-9/gazebo/physics/physics.hh:2,
from /home/judejtng/cronos_ws/src/ros_kortex/third_party/gazebo-pkgs/gazebo_version_helpers/src/GazeboVersionHelpers.cpp:2:
/usr/include/ignition/msgs1/ignition/msgs/visual_v.pb.h:12:2: error: #error This file was generated by a newer version of protoc which is
#error This file was generated by a newer version of protoc which is
^~~~~
/usr/include/ignition/msgs1/ignition/msgs/visual_v.pb.h:13:2: error: #error incompatible with your Protocol Buffer headers. Please update
#error incompatible with your Protocol Buffer headers. Please update
^~~~~
/usr/include/ignition/msgs1/ignition/msgs/visual_v.pb.h:14:2: error: #error your headers.
#error your headers.

Error Template 2:

In file included from /usr/include/google/protobuf/stubs/macros.h:34:0,
from /usr/include/google/protobuf/stubs/logging.h:34,
from /usr/include/google/protobuf/arena.h:55,
from /usr/include/ignition/msgs1/ignition/msgs/color.pb.h:22,
from /usr/include/gazebo-9/gazebo/msgs/msgs.hh:32,
from /usr/include/gazebo-9/gazebo/gazebo_core.hh:20,
from /usr/include/gazebo-9/gazebo/gazebo.hh:20,
from /home/judejtng/cronos_ws/src/ros_kortex/third_party/roboticsgroup_gazebo_plugins/include/roboticsgroup_gazebo_plugins/mimic_joint_plugin.h:37,
from /home/judejtng/cronos_ws/src/ros_kortex/third_party/roboticsgroup_gazebo_plugins/src/mimic_joint_plugin.cpp:23:
/usr/include/google/protobuf/stubs/port.h:145:21: error: redefinition of ‘const uint32 google::protobuf::kuint32max’
static const uint32 kuint32max = 0xFFFFFFFFu;
^~~~~~~~~~
In file included from /usr/include/ignition/msgs1/ignition/msgs/color.pb.h:9:0,
from /usr/include/gazebo-9/gazebo/msgs/msgs.hh:32,
from /usr/include/gazebo-9/gazebo/gazebo_core.hh:20,
from /usr/include/gazebo-9/gazebo/gazebo.hh:20,
from /home/judejtng/cronos_ws/src/ros_kortex/third_party/roboticsgroup_gazebo_plugins/include/roboticsgroup_gazebo_plugins/mimic_joint_plugin.h:37,
from /home/judejtng/cronos_ws/src/ros_kortex/third_party/roboticsgroup_gazebo_plugins/src/mimic_joint_plugin.cpp:23:
/home/judejtng/cronos_ws/src/ros_kortex/third_party/roboticsgroup_gazebo_plugins/../../kortex_gazebo/include/google/protobuf/stubs/common.h:201:21: note: ‘const uint32 google::protobuf::kuint32max’ previously defined here
static const uint32 kuint32max = 0xFFFFFFFFu;

Question:

What could be the source of the errors? It seems to me that two versions of protobuf are visible to the compiler - one included in kortex_api/include/google/protobuf, the other in /usr/include/google/protobuf - and the compiler is confused.

$ protoc --version

tells me I have version 3.0.0 installed. I think it was automatically installed when I installed Gazebo a while back.

Has anyone experienced this issue and/or can point me in the right direction to solving it? Thanks! :)

Best regards,
Jude

EndEffector_Link.STL malformed

Upon opening the gen3 arm in rviz:

The STL file 'package://kortex_description/meshes/EndEffector_Link.STL' is malformed.
It appears to be a binary STL file but does not contain enough data for the 
80 byte header and 32-bit integer triangle count.

and

Could not load model 'package://kortex_description/meshes/EndEffector_Link.STL' for link 
'EndEffector_Link': OGRE EXCEPTION(6:FileNotFoundException): Cannot locate resource 
package://kortex_description/meshes/EndEffector_Link.STL in resource group Autodetect or 
any other group. in ResourceGroupManager::openResource at /build/ogre-1.9-mqY1wq/ogre-1.9-1.9.0+dfsg1/OgreMain/src/OgreResourceGroupManager.cpp (line 756)

Cheers,
Ashis

Sending a list of waypoints to the arm

I would like to send a set of waypoints for the robot arm to execute (not in Gazebo, but the real hardware). I see there is an example showing how to send one goal, but how about if I have a number of via points that I compute separately? They are usually 7D points in the joint space. On other robots, I can send them over to the Joint Trajectory Controller. Is there a way to achieve this on our Kinova Gen3 arm?

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.