Error on Import ServoKit

CircuitPython on hardware including Adafruit's boards, and CircuitPython libraries using Blinka on host computers.

Moderators: adafruit_support_bill, adafruit

Please be positive and constructive with your questions and comments.
Locked
User avatar
jasper97
 
Posts: 3
Joined: Thu May 06, 2021 2:07 am

Error on Import ServoKit

Post by jasper97 »

Hi there!

I'm trying to import Adafruit's ServoKit in a Python script, but instead of importing it comes back with the following error. I'm running ROS2 in a Docker container (Ubuntu 20.04) on my Jetson Nano. It worked fine before, when I was running it directly on the Jetson Nano (Ubuntu 18.04), but for some reason doesn't want to work in my container.

Any help would be greatly appreciated!

Code: Select all

[motor_driver-1] Traceback (most recent call last):
[motor_driver-1]   File "/home/workspaces/ros2/install/jetracer/lib/jetracer/motor_driver", line 11, in <module>
[motor_driver-1]     load_entry_point('jetracer', 'console_scripts', 'motor_driver')()
[motor_driver-1]   File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 490, in load_entry_point
[motor_driver-1]     return get_distribution(dist).load_entry_point(group, name)
[motor_driver-1]   File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 2854, in load_entry_point
[motor_driver-1]     return ep.load()
[motor_driver-1]   File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 2445, in load
[motor_driver-1]     return self.resolve()
[motor_driver-1]   File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 2451, in resolve
[motor_driver-1]     module = __import__(self.module_name, fromlist=['__name__'], level=0)
[motor_driver-1]   File "/home/workspaces/ros2/build/jetracer/jetracer/motor_driver.py", line 6, in <module>
[motor_driver-1]     from .nvidia_racecar import NvidiaRacecar
[motor_driver-1]   File "/home/workspaces/ros2/build/jetracer/jetracer/nvidia_racecar.py", line 3, in <module>
[motor_driver-1]     from adafruit_servokit import ServoKit
[motor_driver-1]   File "/usr/local/lib/python3.8/dist-packages/adafruit_servokit.py", line 35, in <module>
[motor_driver-1]     import board
[motor_driver-1]   File "/usr/local/lib/python3.8/dist-packages/board.py", line 33, in <module>
[motor_driver-1]     from adafruit_blinka.agnostic import board_id, detector
[motor_driver-1]   File "/usr/local/lib/python3.8/dist-packages/adafruit_blinka/agnostic/__init__.py", line 18, in <module>
[motor_driver-1]     chip_id = detector.chip.id
[motor_driver-1]   File "/usr/local/lib/python3.8/dist-packages/adafruit_platformdetect/chip.py", line 317, in __getattr__
[motor_driver-1]     if self.id == attr:
[motor_driver-1]   File "/usr/local/lib/python3.8/dist-packages/adafruit_platformdetect/chip.py", line 317, in __getattr__
[motor_driver-1]     if self.id == attr:
[motor_driver-1]   File "/usr/local/lib/python3.8/dist-packages/adafruit_platformdetect/chip.py", line 317, in __getattr__
[motor_driver-1]     if self.id == attr:
[motor_driver-1]   [Previous line repeated 948 more times]
[motor_driver-1]   File "/usr/local/lib/python3.8/dist-packages/adafruit_platformdetect/chip.py", line 138, in id
[motor_driver-1]     self._chip_id = self._linux_id()
[motor_driver-1]   File "/usr/local/lib/python3.8/dist-packages/adafruit_platformdetect/chip.py", line 202, in _linux_id
[motor_driver-1]     hardware = self.detector.get_cpuinfo_field("Hardware")
[motor_driver-1]   File "/usr/local/lib/python3.8/dist-packages/adafruit_platformdetect/__init__.py", line 49, in get_cpuinfo_field
[motor_driver-1]     with open("/proc/cpuinfo", "r") as infile:
[motor_driver-1]   File "/usr/lib/python3.8/_bootlocale.py", line 37, in getpreferredencoding
[motor_driver-1]     result = _locale.nl_langinfo(_locale.CODESET)
[motor_driver-1] RecursionError: maximum recursion depth exceeded while calling a Python object

User avatar
adafruit_support_carter
 
Posts: 29056
Joined: Tue Nov 29, 2016 2:45 pm

Re: Error on Import ServoKit

Post by adafruit_support_carter »

Does this happen with just an import? What happens if you launch Python interactively and try the import at the REPL prompt?

User avatar
jasper97
 
Posts: 3
Joined: Thu May 06, 2021 2:07 am

Re: Error on Import ServoKit

Post by jasper97 »

adafruit_support_carter wrote:Does this happen with just an import? What happens if you launch Python interactively and try the import at the REPL prompt?
Apologies for the late response: I've been busy fixing some other issues I was having while using Docker. Since my previous message I've downgraded to Ubuntu 18.04, but the problem still persists in the Docker container. As you can see in the code below, the error occurs directly after importing ServoKit.

Code: Select all

root@c6d677fafb75:/home/startup# python3
Python 3.6.9 (default, Oct  8 2020, 12:12:24) 
[GCC 8.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from adafruit_servokit import ServoKit
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 656, in _load_unlocked
  File "<frozen importlib._bootstrap>", line 626, in _load_backward_compatible
  File "/usr/local/lib/python3.6/dist-packages/adafruit_circuitpython_servokit-1.3.4-py3.6.egg/adafruit_servokit.py", line 35, in <module>
  File "/usr/local/lib/python3.6/dist-packages/Adafruit_Blinka-6.8.0-py3.6.egg/board.py", line 33, in <module>
    from adafruit_blinka.agnostic import board_id, detector
  File "/usr/local/lib/python3.6/dist-packages/Adafruit_Blinka-6.8.0-py3.6.egg/adafruit_blinka/agnostic/__init__.py", line 18, in <module>
    chip_id = detector.chip.id
  File "/usr/local/lib/python3.6/dist-packages/Adafruit_PlatformDetect-3.11.0-py3.6.egg/adafruit_platformdetect/chip.py", line 327, in __getattr__
  File "/usr/local/lib/python3.6/dist-packages/Adafruit_PlatformDetect-3.11.0-py3.6.egg/adafruit_platformdetect/chip.py", line 327, in __getattr__
  File "/usr/local/lib/python3.6/dist-packages/Adafruit_PlatformDetect-3.11.0-py3.6.egg/adafruit_platformdetect/chip.py", line 327, in __getattr__
  [Previous line repeated 320 more times]
  File "/usr/local/lib/python3.6/dist-packages/Adafruit_PlatformDetect-3.11.0-py3.6.egg/adafruit_platformdetect/chip.py", line 139, in id
  File "/usr/local/lib/python3.6/dist-packages/Adafruit_PlatformDetect-3.11.0-py3.6.egg/adafruit_platformdetect/chip.py", line 212, in _linux_id
  File "/usr/local/lib/python3.6/dist-packages/Adafruit_PlatformDetect-3.11.0-py3.6.egg/adafruit_platformdetect/__init__.py", line 50, in get_cpuinfo_field
RecursionError: maximum recursion depth exceeded while calling a Python object

User avatar
adafruit_support_carter
 
Posts: 29056
Joined: Tue Nov 29, 2016 2:45 pm

Re: Error on Import ServoKit

Post by adafruit_support_carter »

It probably has something to do with the use of Docker. Can you try just using directly from the OS without any Docker instance?

User avatar
jasper97
 
Posts: 3
Joined: Thu May 06, 2021 2:07 am

Re: Error on Import ServoKit

Post by jasper97 »

adafruit_support_carter wrote:It probably has something to do with the use of Docker. Can you try just using directly from the OS without any Docker instance?
I'm aware the problem is caused by the combination of the ServoKit library and Docker. As I stated in my original message, it works fine when running it directly on the host, but I need to use the library in a Docker environment.

User avatar
hugodahl
 
Posts: 6
Joined: Thu Oct 04, 2018 12:04 am

Re: Error on Import ServoKit

Post by hugodahl »

What is the base image that you're using for your docker container? I tried to reproduce it with the basic python:latest image, but I get an error about the board (host computer/container) not being supported.

Or are you able to share your Dockerfile by any chance?

User avatar
mmatesic
 
Posts: 1
Joined: Fri Aug 20, 2021 10:58 am

Re: Error on Import ServoKit

Post by mmatesic »

Hi, did anyone solve this problem I have a similar issue on Jetson Nano when running in container. Outside container it works.

root@marko-desktop:/jetson-inference# python3
Python 3.6.9 (default, Jan 26 2021, 15:33:00)
[GCC 8.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from adafruit_servokit import ServoKit
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.6/dist-packages/adafruit_servokit.py", line 35, in <module>
import board
File "/usr/local/lib/python3.6/dist-packages/board.py", line 33, in <module>
from adafruit_blinka.agnostic import board_id, detector
File "/usr/local/lib/python3.6/dist-packages/adafruit_blinka/agnostic/__init__.py", line 18, in <module>
chip_id = detector.chip.id
File "/usr/local/lib/python3.6/dist-packages/adafruit_platformdetect/chip.py", line 350, in __getattr__
if self.id == attr:
File "/usr/local/lib/python3.6/dist-packages/adafruit_platformdetect/chip.py", line 350, in __getattr__
if self.id == attr:
File "/usr/local/lib/python3.6/dist-packages/adafruit_platformdetect/chip.py", line 350, in __getattr__
if self.id == attr:
[Previous line repeated 320 more times]
File "/usr/local/lib/python3.6/dist-packages/adafruit_platformdetect/chip.py", line 154, in id
self._chip_id = self._linux_id()
File "/usr/local/lib/python3.6/dist-packages/adafruit_platformdetect/chip.py", line 235, in _linux_id
hardware = self.detector.get_cpuinfo_field("Hardware")
File "/usr/local/lib/python3.6/dist-packages/adafruit_platformdetect/__init__.py", line 50, in get_cpuinfo_field
cpuinfo = infile.read().split("\n")
RecursionError: maximum recursion depth exceeded while calling a Python object
>>>

Locked
Please be positive and constructive with your questions and comments.

Return to “Adafruit CircuitPython”