Comments (7)
Hello there and welcome back!
The GoPiGo3 can be run with minimal installation on other distros as long as you do some setup manually.
Of the top of my head, you need to make sure SPI and I2C are active. Lately the GoPiGo3 uses pigpiod which may not be available on other distros so you would need some changes in gopigo3.py
The import : https://github.com/DexterInd/GoPiGo3/blob/master/Software/Python/gopigo3.py#L30
And these setup lines
https://github.com/DexterInd/GoPiGo3/blob/master/Software/Python/gopigo3.py#L231-L235
And this install script:
Lines 47 to 51 in 7652f5b
You won't need any of the tools that are tailored to beginners and that saves a lot of hassle.
Instead of running the install script, you can go ahead and run
python3 setup.py install
I think it will work...
from gopigo3.
@slowrunner has been able to install it on Ubuntu, he may have some words of wisdom.
from gopigo3.
Slowrunner, (also known as "cyclicalobsessive" on the forum), has done a considerable body of work on this exact subject - getting Dexter Industries GoPiGo software to work on other platforms. Please check his work on the Dexter forums at https://forum.dexterindustries.com
One possible kicker:
Most everything we've done is using software based off of Debian/Ubuntu distributions and, (as far as I know), it has never been attempted on a non-Debian derived distribution. (It has been successfully installed on ROS/ROS-2 and I don't know if those are Debian based or not.)
Please go to the forums, post your question there too, and if you try this with any non-Debian based release, let us know what worked and what didn't.
One other thing:
If you're going to be running a lot of code and want blazing fast access times - I have contributed to the literature on the forum about running the GoPiGo using Seagate external SSD's. I have also contributed articles on how to multi-boot the robot using either PINN or dip-switches attached to GPIO pins. These may also be worth a look.
Thanks!
from gopigo3.
@goetzrieger These are my steps to install the basic GoPiGo3 API and supporting configuration on Ubuntu 20.0.4:
==== BEGIN GOPIGO3 SPECIFIC STEPS
===== Create a Pi user with a /home/pi default directory, /bin/bash login shell ===
$ sudo useradd -m pi
$ sudo passwd pi
$ sudo usermod -a -G ubuntu,adm,dialout,cdrom,floppy,sudo,audio,dip,video,plugdev,netdev,lxd pi
$ sudo groupadd gpio
$ sudo groupadd i2c
$ sudo groupadd spi
$ sudo usermod -a -G gpio,i2c,spi pi
$ sudo usermod -a -G gpio,i2c,spi ubuntu
$ sudo usermod -a -G pi ubuntu
Check with:
$ groups pi
$ groups ubuntu
=== CONFIGURE PASSWORD-LESS SUDO
sudo nano /etc/sudoers
make sudo group look like:
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) NOPASSWD: ALL
=== CONFIGURE PI DEFAULT SHELL TO BASH
$ sudo chsh -s /bin/bash pi
=== ALLOW non-root SPI and GPIO (Temporarily - will make permanent later)
$ sudo chgrp spi /dev/spidev0.0
$ sudo chgrp spi /dev/spidev0.1
$ sudo chmod 660 /dev/spidev0.0
$ sudo chmod 660 /dev/spidev0.1
$ sudo chgrp gpio /sys/class/gpio/export
$ sudo chgrp gpio /sys/class/gpio/unexport
$ sudo chmod 770 /sys/class/gpio/export
$ sudo chmod 770 /sys/class/gpio/unexport
=== [SKIP] === Enable spi, i2c without raspi-config
6/3/21: system-boot/sysconfig.txt now has these configured
enable_uart=1
dtparam=audio=on
dtparam=i2c_arm=on
dtparam=spi=on
==== GOPIGO3 LIBRARIES
$ logout
$ ssh [email protected]
$ sudo git clone -b install_on_ubuntu http://www.github.com/DexterInd/GoPiGo3.git /home/pi/Dexter/GoPiGo3
$ sudo curl -kL dexterindustries.com/update_tools | bash -s -- --system-wide --use-python3-exe-too --install-deb-debs --install-python-package
[sudo] password for pi: (enter login pswd for pi)
$ sudo apt-get install --no-install-recommends python3-pip python3-numpy python3-curtsies
=== DI_SENSORS LIBRARY
$ sudo git clone https://github.com/DexterInd/DI_Sensors.git /home/pi/Dexter/DI_Sensors
==== [Already installed] RPi.GPIO
sudo apt install python3-rpi.gpio
==== PIGPIO ===
$ sudo apt-get install unzip
$ wget https://github.com/joan2937/pigpio/archive/master.zip
$ unzip master.zip
$ cd pigpio-master
$ make
$ sudo make install
$ cd ..
$ rm master.zip
=== pigpiod
wget https://raw.githubusercontent.com/joan2937/pigpio/master/util/pigpiod.service
(Replacing with the non-forking version - don't know why)
$ sudo nano pigpiod.service
[Unit]
Description=Pigpio daemon
After=network.target syslog.target
StartLimitIntervalSec=60
StartLimitBurst=5
StartLimitAction=reboot
[Service]
Type=simple
ExecStartPre=/sbin/sysctl -w net.ipv4.tcp_keepalive_time=300
ExecStartPre=/sbin/sysctl -w net.ipv4.tcp_keepalive_intvl=60
ExecStartPre=/sbin/sysctl -w net.ipv4.tcp_keepalive_probes=5
# Don't fork pigpiod
ExecStart=/usr/local/bin/pigpiod -g
ExecStop=
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
$ sudo cp pigpiod.service /etc/systemd/system
$ sudo systemctl enable pigpiod.service
$ sudo systemctl start pigpiod.service
$ systemctl status pigpiod.service
● pigpiod.service - Pigpio daemon
Loaded: loaded (/etc/systemd/system/pigpiod.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2021-06-04 20:08:56 EDT; 9s ago
Process: 8685 ExecStartPre=/sbin/sysctl -w net.ipv4.tcp_keepalive_time=300 (code=exited, status=0/SUCCESS)
Process: 8686 ExecStartPre=/sbin/sysctl -w net.ipv4.tcp_keepalive_intvl=60 (code=exited, status=0/SUCCESS)
Process: 8687 ExecStartPre=/sbin/sysctl -w net.ipv4.tcp_keepalive_probes=5 (code=exited, status=0/SUCCESS)
Main PID: 8688 (pigpiod)
Tasks: 4 (limit: 973)
CGroup: /system.slice/pigpiod.service
└─8688 /usr/local/bin/pigpiod -g
Jun 04 20:08:56 ROSPI systemd[1]: Starting Pigpio daemon...
Jun 04 20:08:56 ROSPI sysctl[8685]: net.ipv4.tcp_keepalive_time = 300
Jun 04 20:08:56 ROSPI sysctl[8686]: net.ipv4.tcp_keepalive_intvl = 60
Jun 04 20:08:56 ROSPI sysctl[8687]: net.ipv4.tcp_keepalive_probes = 5
Jun 04 20:08:56 ROSPI systemd[1]: Started Pigpio daemon.
=== R4R_Tools (for I2C_mutex)
$ sudo git clone https://github.com/DexterInd/RFR_Tools.git /home/pi/Dexter/lib/Dexter/RFR_Tools
$ sudo apt-get install libffi-dev
$ cd /home/pi/Dexter/lib/Dexter//RFR_Tools/miscellaneous/
$ sudo python3 setup.py install
Check that the mutex stuff will be available:
$ unzip -l /usr/local/lib/python3.8/dist-packages/Dexter_AutoDetection_and_I2C_Mutex-0.0.0-py3.8.egg
Archive: /usr/local/lib/python3.8/dist-packages/Dexter_AutoDetection_and_I2C_Mutex-0.0.0-py3.8.egg
Length Date Time Name
--------- ---------- ----- ----
3154 2021-05-31 15:48 I2C_mutex.py
9445 2021-05-31 15:48 auto_detect_robot.py
6211 2021-05-31 15:48 auto_detect_rpi.py
23756 2021-05-31 15:48 di_i2c.py
1700 2021-05-31 15:48 di_mutex.py
303 2021-05-31 15:51 EGG-INFO/PKG-INFO
372 2021-05-31 15:51 EGG-INFO/SOURCES.txt
1 2021-05-31 15:51 EGG-INFO/dependency_links.txt
46 2021-05-31 15:51 EGG-INFO/requires.txt
60 2021-05-31 15:51 EGG-INFO/top_level.txt
1 2021-05-31 15:51 EGG-INFO/zip-safe
2812 2021-05-31 15:51 __pycache__/I2C_mutex.cpython-38.pyc
6565 2021-05-31 15:51 __pycache__/auto_detect_robot.cpython-38.pyc
4592 2021-05-31 15:51 __pycache__/auto_detect_rpi.cpython-38.pyc
14282 2021-05-31 15:51 __pycache__/di_i2c.cpython-38.pyc
1652 2021-05-31 15:51 __pycache__/di_mutex.cpython-38.pyc
--------- -------
74952 16 files
==== wiringPi ====
cd /home/pi/Dexter/lib
git clone https://github.com/DexterInd/wiringPi/
cd wiringPi
sudo chmod +x ./build
sudo ./build
==== [SKIP] antenna wifi service
sudo mkdir -p /etc/systemd/system/antenna_wifi.service.d/
sudo cp /home/pi/di_update/Raspbian_For_Robots/upd_script/antenna_wifi_override.conf /etc/systemd/system/antenna_wifi.service.d/
sudo nano /etc/systemd/system/antenna_wifi.service.d
change Restart=always to =no
sudo systemctl daemon-reload
sudo systemctl restart antenna_wifi.service
systemctl status antenna_wifi shows it ran once, exited and not restarted
- to disable it:
sudo systemctl disable antenna_wifi
==== GPG3_POWER SERVICE ===
cd ~
sudo cp /home/pi/Dexter/GoPiGo3/Install/gpg3_power.service /etc/systemd/system
sudo chmod 644 /etc/systemd/system/gpg3_power.service
sudo systemctl daemon-reload
sudo systemctl enable gpg3_power.service
sudo systemctl start gpg3_power.service
==== [SKIP] AUTODETECT ROBOT ===
X mkdir /home/pi/Dexter/R4R
X cd /home/pi/Dexter/R4R
X wget https://raw.githubusercontent.com/DexterInd/Raspbian_For_Robots/master/buster_update/auto_detect_robot.service
X sudo cp /home/pi/Dexter/R4R/auto_detect_robot.service /etc/systemd/system/
X sudo systemctl daemon-reload
X sudo systemctl enable auto_detect_robot.service
X sudo systemctl start auto_detect_robot.service
==== SETUP GoPiGo3 and DI_Sensors Python3 eggs
$ cd /home/pi/Dexter/GoPiGo3/Software/Python
$ sudo python3 setup.py install
$ cd /home/pi/Dexter/DI_Sensors/Python
$ sudo python3 setup.py install
==== Setup non-root access rules ====
$ sudo nano /etc/udev/rules.d/99-com.rules
SUBSYSTEM=="input", GROUP="input", MODE="0660"
SUBSYSTEM=="i2c-dev", GROUP="i2c", MODE="0660"
SUBSYSTEM=="spidev", GROUP="spi", MODE="0660"
SUBSYSTEM=="bcm2835-gpiomem", GROUP="gpio", MODE="0660"
SUBSYSTEM=="rpivid-*", GROUP="video", MODE="0660"
KERNEL=="vcsm-cma", GROUP="video", MODE="0660"
SUBSYSTEM=="dma_heap", GROUP="video", MODE="0660"
SUBSYSTEM=="gpio", GROUP="gpio", MODE="0660"
SUBSYSTEM=="gpio*", PROGRAM="/bin/sh -c '\
chown -R root:gpio /sys/class/gpio && chmod -R 770 /sys/class/gpio;\
chown -R root:gpio /sys/devices/virtual/gpio && chmod -R 770 /sys/devices/virtual/gpio;\
chown -R root:gpio /sys$devpath && chmod -R 770 /sys$devpath\
'"
SUBSYSTEM=="pwm*", PROGRAM="/bin/sh -c '\
chown -R root:gpio /sys/class/pwm && chmod -R 770 /sys/class/pwm;\
chown -R root:gpio /sys/devices/platform/soc/*.pwm/pwm/pwmchip* && chmod -R 770 /sys/devices/platform/soc/*.pwm/pwm/pwmchip*\
'"
KERNEL=="ttyAMA0", PROGRAM="/bin/sh -c '\
ALIASES=/proc/device-tree/aliases; \
if cmp -s $$ALIASES/uart0 $$ALIASES/serial0; then \
echo 0;\
elif cmp -s $$ALIASES/uart0 $$ALIASES/serial1; then \
echo 1; \
else \
exit 1; \
fi\
'", SYMLINK+="serial%c"
KERNEL=="ttyAMA1", PROGRAM="/bin/sh -c '\
ALIASES=/proc/device-tree/aliases; \
if [ -e /dev/ttyAMA0 ]; then \
exit 1; \
elif cmp -s $$ALIASES/uart0 $$ALIASES/serial0; then \
echo 0;\
elif cmp -s $$ALIASES/uart0 $$ALIASES/serial1; then \
echo 1; \
else \
exit 1; \
fi\
'", SYMLINK+="serial%c"
KERNEL=="ttyS0", PROGRAM="/bin/sh -c '\
ALIASES=/proc/device-tree/aliases; \
if cmp -s $$ALIASES/uart1 $$ALIASES/serial0; then \
echo 0; \
elif cmp -s $$ALIASES/uart1 $$ALIASES/serial1; then \
echo 1; \
else \
exit 1; \
fi \
'", SYMLINK+="serial%c"
ACTION=="add", SUBSYSTEM=="vtconsole", KERNEL=="vtcon1", RUN+="/bin/sh -c '\
if echo RPi-Sense FB | cmp -s /sys/class/graphics/fb0/name; then \
echo 0 > /sys$devpath/bind; \
fi; \
'"
=== ESPEAK-NG
- Not installing python3-espeak or speech-dispatcher-espeak-ng (installs pulseaudio)
$ sudo apt-get install -y espeak-ng
$ espeak-ng "Hello"
- if want python interface to espeak-ng:
$ pip3 install py-espeak-ng
==== FULL POWEROFF FOR CLEAN TEST
$ sudo shutdown -h now
Boot up in GoPiGo3
$ ssh [email protected]
=== Test GoPiGo Functions
$ cd ~
$ python3 Dexter/GoPiGo3/Software/Python/Examples/Read_Info.py
$ python3 Dexter/GoPiGo3/Software/Python/Examples/LED.py
$ python3 Dexter/GoPiGo3/Software/Python/Examples/easy_Distance_Sensor.py
$ python3 Dexter/DI_Sensors/Python/Examples/IMUSensor.py
$ python3 Dexter/GoPiGo3/Software/Python/Examples/Servo.py
$ python3 Dexter/GoPiGo3/Software/Python/Examples/Motor_Turn.py
from gopigo3.
One thing that is implicit in all of this is that there is a hard dependency on the "pi" user as the primary, (default), user.
(i.e. When you create your initial username for the system, it should be "pi".)
This is a known "issue" based on the fact that the GoPiGo libraries were originally designed to be installed over a stock Raspbian install where the default username was "pi". This is known and there are plans to fix this - I don't know if or when.
The "pi" user should also be in the sudoers file and in the wheel group to make sure it can do whatever you need it to do.
References to raspi-config do not apply to non Raspbian based systems, AFAIK.
One other note:
AFAIK, the current libraries are specific to the GoPiGo-3. I do not know to what extent, if at all, they're applicable to older versions of the GoPiGo. Perhaps @CleoQc can comment on this?
===============
Question:
Are there other non-Debian based releases for the Raspberry Pi?
I know of Pidora, (and some RISC based stuff and maybe Arch), but things like Red Hat, Slackware, CentOS, etc - I don't know.
Which specific distributions are you talking about? (links please!) It might be interesting to try installs on a GoPiGo-3 and see what happens.
from gopigo3.
Wow, good to see there is a really active community around! Even after this Covid-induced time of very little in-person events. But I‘m really eager going back running Robot Hackathons now. And @CleoQc, I very well remember how you helped out with faulty boards on short notice to rescue one of our event in 2019.
Okay. From what I understand there is an „old-style“ sysfs interface to GPIO that is deprecated since Kernel 4.8 or so and the new /dev/gpiochip* interface. Most modern distros are starting to use the new interface, notably Fedora-based ones. https://embeddedbits.org/new-linux-kernel-gpio-user-space-interface/
So on Fedora the old sysfs-style interface is not enabled in the kernel and pigpiod is not available.
Nicole mentioned above Gopigo3 Python libs are using pigpiod now which I understand is using the sysfs interface. Does that mean there is a lot of work in porting the gopigo3 libs/API to the new interface? The library is called libgpiod and has Python bindings, too.
I’m being a bit verbose because I‘m pretty new to this stuff and this would put a stop on my experiment already.
from gopigo3.
@jharris1993 Fedora is kind of the upstream community project to our Red Hat Enterprise Linux. We are moving fast into the „Edge“ use cases so Fedora and in the newest version RHEL are able to run on ARM as found in lots of IoT devices. https://docs.fedoraproject.org/en-US/quick-docs/raspberry-pi/
My main target for our GopiGo’s is Fedora IoT which is running on Raspi quite well and is a great foundation for deploying containerized applications. https://getfedora.org/en/iot/
This would e.g. allow us to run the Gopigo libs in a container and maybe something like a Tensorflow-lite based image recognition application in another one on the robot.
But first I‘ve got to get the robot running with Fedora.
from gopigo3.
Related Issues (20)
- Unindented space character in line 113 and 115 which causes indentation errors - found in filename easygopigo3.py HOT 1
- GoPiGo3 Control Panel Should Display Precise Wheel Base Values
- Cant install on Ubuntu HOT 1
- WIBNI: Easysensor Servo params in gpg_config.json HOT 1
- Updating GoPiGo3 on Ubuntu 20.04.2 HOT 2
- Withdrawn
- easysensors.ultrasonicsensor.read_mm() prints raw value debug info HOT 1
- Change link to GoPiGo.io? HOT 2
- easygopygo3's "stop()" method does not remove power from the motors HOT 1
- WIBNI: Installation Success Test at end of update_gopigo3.sh HOT 1
- Schematics - Power section needs component designation and part numbers for inductor
- Enhancement Request: Allow for multiple tabs on the new calibration routines to accomondate different functions
- The current battery warning/shut-down constants for the GoPiGo are inappropriate for the new Li-Ion batteries HOT 2
- ObstacleAvoidanceRobot Does Not Fail Correctly For No Distance Sensor Case HOT 4
- Sound Defaults To HDMI in GoPiGo3 Install Over Legacy PiOS HOT 1
- False "Firmware update is needed" on failed Bullseye installs HOT 1
- Install_On_Ubuntu Branch gopigo3.py load_robot_constants() does not create gpg3_config.json HOT 1
- GoPiGo3.cpp generates compile warnings
- C++ GoPiGo3 API needs 16tick board support HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from gopigo3.