epfl-lasa / control-libraries

A collection of library modules to facilitate the creation of full control loop algorithms, including state representation, motion planning, kinematics, dynamics and control.
https://epfl-lasa.github.io/control-libraries
GNU General Public License v3.0
27 stars 2 forks source link

Support ARM64 #310

Closed eeberhard closed 2 years ago

eeberhard commented 2 years ago

By installing pinocchio from source we can avoid all of the complications of the openrobots package manager; no more /opt/openrobots on path.

I developed this on a fork; check out the base and proto dependencies images.

The dev-server script that uses this base image builds and passes all tests. Forked tests with downstream dependencies were also successful (e.g. ros2-control-libraries)

eeberhard commented 2 years ago

The build action ran successfully, and both source/build-test.sh and protocol/build-test.sh pass locally for me with the new base image.

domire8 commented 2 years ago

Any idea why the previous commit failed with "pinocchio not found" and now that you only changed the version, it works?

eeberhard commented 2 years ago

Any idea why the previous commit failed with "pinocchio not found" and now that you only changed the version, it works?

Well, the build and test action uses the hosted docker images (base dependencies and protocol dependencies). These images were previously the old version with Pinocchio installation through robot pkg. Since I removed the /opt/openrobots path inclusion from the CMakeLists, it failed the build and test. After I manually triggered the dependency images to be rebuilt according to this branch, the build and test now passes.

eeberhard commented 2 years ago

Unfortunately I discovered a slight problem - I made a seemingly innocuous change to the ubuntu distribution in these dependency images, using the 22.04 tag in place of the 20.04. Unfortunately this breaks the ros2-control-libraries build for galactic. This is because the different releases have different versions of the super low level binaries libc and lidstdc++. When the google protocol dependencies are built on ubuntu 22, the protoc binaries will fail with a linker error on ubuntu 20 because the expected version of the dependency libraries is higher than the actual one. The ros2 galactic image is ubuntu 20. However, the humble image is based on 22 and works as expected.

The resolution is to revert to the 20.04 base image for the dependency images in this repo. I will just first check that the humble 22.04 image will build with 20.04 binaries for the protocol before downgrading

eeberhard commented 2 years ago

Building these binaries / deps with 20.04 base image is the safest option and supports both 20.04 & 22.04 downstream images 👍