cd ~/ros_catkin_ws # Source your ROS source /opt/ros/noetic/setup.bash # Get newest release information rosinstall_generator RPP --rosdistro noetic --tar --deps > tmp.rosinstall # Compare the files tmp.rosinstall and noetic-desktop-full-and-bitbots-deps.rosinstall # I use vimdiff and use :diffput for everything I want to change vimdiff tmp.rosinstall noetic-desktop-full-and-bitbots-deps.rosinstall # Merge the changes in the source directory wstool merge -t src noetic-desktop-full-and-bitbots-deps.rosinstall # Download the newest releases wstool update -t src --delete-changed-uris # Build catkin build -c
# Create working directory mkdir -p ~/ros_catkin_ws/src && cd ~/ros_catkin_ws # Download list of dependencies wget http://doku.bit-bots.de/package/ros_selbst_compilieren/noetic-desktop-full-and-bitbots-deps.rosinstall # Install required tools sudo apt install python3-rosdep python3-rosinstall-generator python3-wstool # Initialize workspace wstool init src # Merge our configuration file wstool merge -t src noetic-desktop-full-and-bitbots-deps.rosinstall # Download the releases wstool update -t src # Install dependencies with rosdep (yes, we need debian buster here!) sudo rosdep init rosdep update rosdep install -iry --from-paths src --os=debian:buster # Some packages have different names, install them manually: sudo apt install libboost-all-dev libgazebo-dev gazebo python3-pyqt5 python3-pyqt5.qtsvg libpcl-dev libopenvdb-dev python3-pyqt5.qtwebkit python3-lxml python3-pyqt5.qtopengl # Install catkin_tools pip3 install git+https://github.com/catkin/catkin_tools # Create a ROS install directory and change ownership to your user sudo mkdir -p /opt/ros sudo chown $UID:$GID /opt/ros # Configure catkin catkin config --devel-isolated --merge-install -i /opt/ros/noetic --install --cmake-args -DPYTHON_VERSION=3 -DCMAKE_BUILD_TYPE=Release # Build catkin build -c
Aus irgendwelchen Gründen wird nach den Bindings in /usr/share/sip/PyQt5 und nicht in /usr/lib/python3/dist-packages/PyQt5/bindings gesucht. Ich habe schon mal versucht, das zu Debuggen, aber bisher erfolglos. Dementsprechend auch Upstream noch nicht reported, so weit ich weiß, ist aber auch schon etwas her. Manueller Fix: Wir linken das halt so, dass er den Ordner findet.
sudo mkdir -p /usr/share/sip sudo ln -s /usr/lib/python3/dist-packages/PyQt5/bindings /usr/share/sip/PyQt5
Ursache ist, dass die Funktion getiterator() statt der Funktion iter() genutzt wird. Wieder so eine Geschichte mit Breaking Changes in der API, diesmal der vom Python-XML-Parser. Das ist Upstream schon gefixt, aber noch nicht releast. Manuelles Ändern geht so:
cd ~/ros_catkin_ws sed -i "s/getiterator/iter/" src/rqt/rqt_gui/src/rqt_gui/ros_plugin_provider.py catkin build --no-deps rqt_gui
Das zugrundeliegende Problem ist eine Inkompatibilität zwischen PyKDL und PyQt5. Siehe auch hier. Diese ist in PyKDL Upstream gefixt, indem SIP nicht mehr verwendet wird, aber noch nicht releast. Es gibt zwei mögliche Lösungen: Entweder PyKDL wird vor PyQt5 importiert, zum Beispiel indem PyKDL ganz oben in /opt/ros/noetic/lib/python3/dist-packages/python_qt_binding/__init__.py importiert wird, oder PyKDL wird selbst kompiliert. Dazu müssen die folgenden Zeilen in der rosinstall-Datei hinzugefügt werden:
- git: local-name: orocos_kinematics_dynamics uri: https://github.com/orocos/orocos_kinematics_dynamics.git version: master
Danach kann ROS wie oben beschrieben aktualisiert werden.
Die Ursache ist eine nicht mit ausgelieferte jpeg-Bibliothek. Wir holen sie uns aus dem zugehörigen Ubuntu-Paket. Issue ist theoretisch Upstream gefixt, aber irgendwie geht es noch nicht.
cd /tmp wget http://security.ubuntu.com/ubuntu/pool/main/libj/libjpeg-turbo/libjpeg-turbo8_1.5.2-0ubuntu5.18.04.4_amd64.deb -O libjpeg.deb ar x libjpeg.deb data.tar.xz tar -xJf data.tar.xz --strip-components=4 ./usr/lib/x86_64-linux-gnu sudo mv libjpeg.so.8.1.2 libjpeg.so.8 /usr/local/webots/lib/webots
Ja, das haben die in Noetic entfernt und sich noch nicht auf eine Lösung geeinigt. Nervt ein bisschen. Also müssen wir Robert Haschkes Fork vom robot_state_publisher nutzen. Das heißt in der rosinstall-Datei für den robot_state_publisher folgendes eintragen:
- git: local-name: robot_state_publisher uri: https://github.com/rhaschke/robot_state_publisher.git version: noetic-devel
Sag mir Bescheid, höchstwahrscheinlich hatte ich das gleiche Problem auch schon und nur vergessen, es hier aufzuschreiben.