Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Get ROS2 working on the wombat #6

Closed
Zacharyprime opened this issue Oct 4, 2021 · 5 comments
Closed

Get ROS2 working on the wombat #6

Zacharyprime opened this issue Oct 4, 2021 · 5 comments

Comments

@Zacharyprime
Copy link
Member

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.

@Zacharyprime
Copy link
Member Author

Zacharyprime commented Oct 4, 2021

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.

@Zacharyprime
Copy link
Member Author

Zacharyprime commented Oct 5, 2021

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: kipr/libwallaby#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.

@Zacharyprime
Copy link
Member Author

Zacharyprime commented Oct 5, 2021

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

@Zacharyprime
Copy link
Member Author

Zacharyprime commented Oct 19, 2021

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)

@Zacharyprime Zacharyprime moved this from Quark (v27) [in development] to Electron (v28) [planned] in Development Board/Version Schedule Dec 28, 2021
@Zacharyprime
Copy link
Member Author

I'm closing this issue to keep the conversation contained in one issue thread:
kipr/libwallaby#147

This thread will just be used for referencing.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Development Board/Version Schedule
  
Electron (v28) [planned]
Development

No branches or pull requests

1 participant