Kinovarobotics / ros2_kortex

ROS2 driver for the Gen3 Kinova robot arm
Other
42 stars 36 forks source link

Linux architecture issue #169

Open gtirth opened 1 year ago

gtirth commented 1 year ago

I am trying to run ros2_kortex inside a docker on stereolab's zedbox orin nx. But when I tried to compile the sources i got an error that aarch64 is not supported. image

Is there a workaround for this?

moriarty commented 1 year ago

No, at this time Kinova does not provide an arm64 kortex api

gtirth commented 1 year ago

No, at this time Kinova does not provide an arm64 kortex api

Would it be possible to use moveit?

moriarty commented 1 year ago

Duplicate of #158

Arron-Indrotek commented 1 year ago

Hi @moriarty, We where hoping you could help us get the Kinova gen3 ROS 2 drivers working on NIVIDA Jetson. Are you the best person to collaborate with? Do you have the source secure to compile the stack on the ARM cortex?... or is there someone else we should colab with?

moriarty commented 1 year ago

Which Jetson? The older Jetson with older arm chip might be possible but not the newer models. I don't have access to the kortex api source code but have asked Kinova for newer arm chip support.

frfournier commented 1 year ago

Kinova supports the kortex_api package on ARM (Jetson armv7 compiled with gcc) but it is not currently added as a supported architecture in the ros2_kortex_api package. As mentionned, support for aarch64 is not currently available. For armv7: The architecture would have to be added to the CMake (https://github.com/Kinovarobotics/ros2_kortex/blob/main/kortex_api/CMakeLists.txt#L23) and link to the armv7 build of kortex API (https://artifactory.kinovaapps.com/ui/repos/tree/General/generic-public/kortex/API/2.6.0/linux_armv7_jetson_gcc.zip). you should then be able to compile following the instructions in the README (https://github.com/Kinovarobotics/ros2_kortex#protobuf)

moriarty commented 1 year ago

Yes I don't have an armv7 board myself setup to test it out right now, and I thought the latest Jetsons were armv8 but if the kortex_api is available this should be possible.

We had originally discussed arm64 support as part of the ROS 2 drivers project because it's a common with all the new MacBook chips.

As also discussed it would be really great if enough of the underlying kortex api could be open sourced so that as new chips are released support could be added with less effort and easier to support and debug.

I'm currently pretty busy and no longer have a Kinova Gen3 to test on hardware, but I think I have an old Jetson in storage that I could test on...

If the binary api is available then it should be just a bit of CMake to pull that in based on the architecture.

autonomousTurtle commented 9 months ago

I'm working on a gen3 with nvidia orin dev kit with jetpack 6 (Ubuntu 22). Using the suggestion above the kortex api builds, but the kortex driver does not - even with the same change in the CMake. image Happy to help test and debug as I work through this.

BillyMazotti commented 7 months ago

Hi has there been any update on this? I'm running Ubuntu 22 with ROS2 in a virtual machine on my Macbook with M1 and running into the same issue.

autonomousTurtle commented 6 months ago

I was able to get my system up and running, but will not claim that this is scalable or a best practice, merely a workaround. I first changed to the link and architecture type in cmake as @ffournier-kinova suggested, but the extract feature through fetch content was expecting a tar file, not a zip. Threw up build errors, and I'm not familiar enough with fetch content for my 2 minutes of googling to produce a solve. Therefore, here is my working workaround:

this in on Nvidia Orin Dev Kit running ROS2 Humble

  1. I downloaded the files from the kortex API (https://artifactory.kinovaapps.com/ui/repos/tree/General/generic-public/kortex/API/2.6.0/linux_armv7_jetson_gcc.zip) and extracted into a folder in my ros2 workspace.
  2. I pointed the scripts to that downloaded and extracted folder.

Working cmake code for kortex_api package below:

cmake_minimum_required(VERSION 3.14)
#include(FetchContent)
#include(ExternalProject)
#FetchContent_Declare(
#  kinova_binary_api
#  URL https://artifactory.kinovaapps.com/ui/repos/tree/General/generic-public/kortex/API/2.6.0/linux_armv7_jetson_gcc.zip
#  URL_HASH MD5=988d210bcff2009a96659c115bb4fc62
#)

#FetchContent_MakeAvailable(kinova_binary_api)
#set(FETCHCONTENT_ZIP_USE_SYSTEM ON)

set(KINOVA_BINARY_API_DIR "/home/apricity/workspace/ros2_kortex_ws/linux_aarch64_gcc_7.4")

project(kortex_api)

#Future:
# convert API_URL components from CMAKE_SYSTEM variables.
# The kinova artifactory server artifacts have slightly different expectations and they need some transformations
# Could build something like: (URL_OS)_(URL_PROCESSOR)_(?)_(URL_COMPILER).zip
# string(REPLACE "_" "-" URL_PROCESSOR ${CMAKE_SYSTEM_PROCESSOR}) # x86_64 -> x86-64
# string(TOLOWER ${CMAKE_SYSTEM_NAME} URL_OS) # Linux -> linux

#Current: only support Linux x86_64
#if(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
#  set(API_URL https://artifactory.kinovaapps.com:443/artifactory/generic-public/kortex/API/2.5.0/linux_x86-64_x86_gcc.zip)
#elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64")
#  set(API_URL https://artifactory.kinovaapps.com/ui/repos/tree/General/generic-public/kortex/API/2.6.0/linux_armv7_jetson_gcc.zip)
#else()
#  set(API_URL "")
#  message(FATAL_ERROR "Unsupported System: currently support is for Linux x68_64. Detected ${CMAKE_SYSTEM_NAME} and ${CMAKE_SYSTEM_PROCESSOR}")
#endif()

#ExternalProject_Add(kinova_binary_api
#  URL ${API_URL}
#  CONFIGURE_COMMAND ""
#  BUILD_COMMAND ""
#  INSTALL_COMMAND ""
#)

find_package(ament_cmake REQUIRED)

ament_export_include_directories(include/kortex_api)

install(DIRECTORY ${KINOVA_BINARY_API_DIR}/include/client/ DESTINATION include/kortex_api)
install(DIRECTORY ${KINOVA_BINARY_API_DIR}/include/common/ DESTINATION include/kortex_api)
install(DIRECTORY ${KINOVA_BINARY_API_DIR}/include/messages/ DESTINATION include/kortex_api)
install(DIRECTORY ${KINOVA_BINARY_API_DIR}/include/client_stubs/ DESTINATION include/kortex_api)
install(DIRECTORY ${KINOVA_BINARY_API_DIR}/include/google/protobuf DESTINATION include/kortex_api/google)

ament_package()

You will also need to update the kortex driver cmake in the same way. So far no issues, I will report back if something else is broken with this process in use that I haven't discovered yet.

I also had to delete all references to issac sim for the package to work, but I believe that error was unrelated.

Shiven110504 commented 3 months ago

Hi, how would you change the kortex driver cmake. Could you point in what we will need to change.