Closed Zacharyprime closed 1 year ago
The jessie source links seem to have gone dead, so to mitigate the problem I have been editing the source lists to pull from stretch, but then not doing a full-upgrade/dist-upgrade to prevent the issues that arise from that.
Attempt 1:
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8
sudo apt update && sudo apt install curl gnupg2 lsb-release
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
sudo sh -c 'echo "deb [arch=amd64,arm64] http://packages.ros.org/ros2/ubuntu `lsb_release -cs` main" > /etc/apt/sources.list.d/ros2-latest.list'
sudo apt update && sudo apt install ros-foxy-ros-base
Current Failure:
Wombat:~ $ sudo apt update
Ign:1 http://packages.ros.org/ros2/ubuntu jessie InRelease
Hit:2 http://mirrordirector.raspbian.org/raspbian stretch InRelease
Err:3 http://packages.ros.org/ros2/ubuntu jessie Release
404 Not Found [IP: 140.211.166.134 80]
Hit:4 http://archive.raspberrypi.org/debian stretch InRelease
Reading package lists... Done
E: The repository 'http://packages.ros.org/ros2/ubuntu jessie Release' does not have a Release file.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.
Wombat:~ $ sudo -E apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
Executing: /tmp/apt-key-gpghome.dYKUIeOdPG/gpg.1.sh --keyserver hkp://keyserver.ubuntu.com:80 --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
gpg: connecting dirmngr at '/tmp/apt-key-gpghome.dYKUIeOdPG/S.dirmngr' failed: IPC connect call failed
gpg: keyserver receive failed: No dirmngr
Update: This problem was mitigated by manually changing the ROS source to stretch, it defaulted to the detected branch The jessie branch has probably gone dead or was never supported in the first place.
Since jessie prevents us from installing ROS2 directly (the packages were meant to be installed to ubuntu, along with the errors seen above).
We may be able to use a ROS1 Bridge as discussed in the libwallaby issue: https://github.com/kipr/libwallaby/issues/147
We may also be able to build it from scratch: https://docs.ros.org/en/foxy/Installation/Ubuntu-Development-Setup.html
Alternative: https://docs.ros.org/en/foxy/Installation/Ubuntu-Install-Debians.html
Whatever we do is going to be a workaround because ROS2 is only supported for the Pi4 running Ubuntu.
Currently I have been able to get past the jessie package sources going dead by changing the source lists to pull from stretch instead without doing a dist-upgrade to prevent the issues that arise from that.
I also made ROS packages pull from the stretch branch by changing:
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
to
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu stretch main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
However, the stretch tricks don't work when i get to this stage:
Wombat:~/ros2_foxy $ rosdep install --from-paths src --ignore-src -y --skip-keys "fastcdr rti-connext-dds-5.3.1 urdfdom_headers" --rosdistro foxy
ERROR: the following packages/stacks could not have their rosdep keys resolved
to system dependencies:
ament_clang_format: No definition of [clang-format] for OS version [jessie]
ament_pep257: No definition of [pydocstyle] for OS version [jessie]
ament_clang_tidy: No definition of [clang-tidy] for OS version [jessie]
launch: No definition of [python3-lark-parser] for OS version [jessie]
ament_mypy: No definition of [python3-mypy] for OS version [jessie]
ros2doctor: No definition of [python3-ifcfg] for OS version [jessie]
rosidl_parser: No definition of [python3-lark-parser] for OS version [jessie]
I'm not sure how to force this part to use stretch packages yet.
Simply installing with apt only worked for one or two of them.
Ignoring this and skipping leads to the following error later:
Wombat:~/ros2_foxy $ sudo colcon build --symlink-install
Starting >>> ament_package
Starting >>> ament_lint
Starting >>> gtest_vendor
Starting >>> fastcdr
Traceback (most recent call last):g] [ament_lint - 1.3s] ...
File "<string>", line 1, in <module>
ImportError: No module named 'setuptools.extern.packaging'
--- stderr: ament_package
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/colcon_core/executor/__init__.py", line 91, in __call__
rc = await self.task(*args, **kwargs)
File "/usr/lib/python3/dist-packages/colcon_core/task/__init__.py", line 93, in __call__
return await task_method(*args, **kwargs)
File "/usr/lib/python3/dist-packages/colcon_ros/task/ament_python/build.py", line 51, in build
setup_py_data = get_setup_data(self.context.pkg, env)
File "/usr/lib/python3/dist-packages/colcon_core/task/python/__init__.py", line 20, in get_setup_data
return dict(pkg.metadata[key](env))
File "/usr/lib/python3/dist-packages/colcon_ros/package_identification/ros.py", line 130, in getter
desc.path / 'setup.py', env=env)
File "/usr/lib/python3/dist-packages/colcon_python_setup_py/package_identification/python_setup_py.py", line 242, in get_setup_information
setup_py, env=env)
File "/usr/lib/python3/dist-packages/colcon_python_setup_py/package_identification/python_setup_py.py", line 283, in _get_setup_information
cwd=os.path.abspath(str(setup_py.parent)), check=True, env=env)
File "/usr/lib/python3.5/subprocess.py", line 398, in run
output=stdout, stderr=stderr)
subprocess.CalledProcessError: Command '['/usr/bin/python3', '-c', "import sys;from setuptools.extern.packaging.specifiers import SpecifierSet;from distutils.core import run_setup;dist = run_setup( 'setup.py', script_args=('--dry-run',), stop_after='config');skip_keys = ('cmdclass', 'distclass', 'ext_modules', 'metadata');data = { key: value for key, value in dist.__dict__.items() if ( not key.startswith('_') and not callable(value) and key not in skip_keys and key not in dist.display_option_names )};data['metadata'] = { k: v for k, v in dist.metadata.__dict__.items() if k not in ('license_files', 'provides_extras')};sys.stdout.buffer.write(repr(data).encode('utf-8'))"]' returned non-zero exit status 1
---
Failed <<< ament_package [1.45s, exited with code 1]
Traceback (most recent call last):] [3 ongoing] [ament_lint - 2.7s] ...
File "<string>", line 1, in <module>
ImportError: No module named 'setuptools.extern.packaging'
--- stderr: ament_lint
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/colcon_core/executor/__init__.py", line 91, in __call__
rc = await self.task(*args, **kwargs)
File "/usr/lib/python3/dist-packages/colcon_core/task/__init__.py", line 93, in __call__
return await task_method(*args, **kwargs)
File "/usr/lib/python3/dist-packages/colcon_ros/task/ament_python/build.py", line 51, in build
setup_py_data = get_setup_data(self.context.pkg, env)
File "/usr/lib/python3/dist-packages/colcon_core/task/python/__init__.py", line 20, in get_setup_data
return dict(pkg.metadata[key](env))
File "/usr/lib/python3/dist-packages/colcon_ros/package_identification/ros.py", line 130, in getter
desc.path / 'setup.py', env=env)
File "/usr/lib/python3/dist-packages/colcon_python_setup_py/package_identification/python_setup_py.py", line 242, in get_setup_information
setup_py, env=env)
File "/usr/lib/python3/dist-packages/colcon_python_setup_py/package_identification/python_setup_py.py", line 283, in _get_setup_information
cwd=os.path.abspath(str(setup_py.parent)), check=True, env=env)
File "/usr/lib/python3.5/subprocess.py", line 398, in run
output=stdout, stderr=stderr)
subprocess.CalledProcessError: Command '['/usr/bin/python3', '-c', "import sys;from setuptools.extern.packaging.specifiers import SpecifierSet;from distutils.core import run_setup;dist = run_setup( 'setup.py', script_args=('--dry-run',), stop_after='config');skip_keys = ('cmdclass', 'distclass', 'ext_modules', 'metadata');data = { key: value for key, value in dist.__dict__.items() if ( not key.startswith('_') and not callable(value) and key not in skip_keys and key not in dist.display_option_names )};data['metadata'] = { k: v for k, v in dist.metadata.__dict__.items() if k not in ('license_files', 'provides_extras')};sys.stdout.buffer.write(repr(data).encode('utf-8'))"]' returned non-zero exit status 1
---
Failed <<< ament_lint [2.92s, exited with code 1]
Aborted <<< gtest_vendor [2.95s]
Aborted <<< fastcdr [2.95s]
Summary: 0 packages finished [24.1s]
2 packages failed: ament_lint ament_package
2 packages aborted: fastcdr gtest_vendor
2 packages had stderr output: ament_lint ament_package
307 packages not processed
Command '['/usr/bin/python3', '-c', "import sys;from setuptools.extern.packaging.specifiers import SpecifierSet;from distutils.core import run_setup;dist = run_setup( 'setup.py', script_args=('--dry-run',), stop_after='config');skip_keys = ('cmdclass', 'distclass', 'ext_modules', 'metadata');data = { key: value for key, value in dist.__dict__.items() if ( not key.startswith('_') and not callable(value) and key not in skip_keys and key not in dist.display_option_names )};data['metadata'] = { k: v for k, v in dist.metadata.__dict__.items() if k not in ('license_files', 'provides_extras')};sys.stdout.buffer.write(repr(data).encode('utf-8'))"]' returned non-zero exit status 1
Just an idea I thought of before clocking out. Since we can easily mount a Pi4 in the Create, in the very worst case scenario, we could sell the Creates with a Pi4 mounted and make the Wombat send it's command directly to the Pi4 that is connected to the Wombat network and have the Pi4 communicate over ROS2 serial.
The Create 3 has a dust tray that allows for easy mounting, the USB C port is also inside the dust tray. There is also a hole pulling the tray out that a wire could be ran through to connect the Pi's over ethernet if needed or connect any other cable in a way that isn't totally ugly.
(Just to be clear, I hate this solution, but it exists)
I'm closing this issue to keep the conversation contained in one issue thread: https://github.com/kipr/libwallaby/issues/147
This thread will just be used for referencing.
This might end up requiring a bigger SD card and then trimming until it fits into 8gb. There also might be issues related to the fact we can't update past jessie as of writing this.