Ricbot GNSS: Difference between revisions
From Rsewiki
(→GNSS) |
|||
| Line 11: | Line 11: | ||
Support added to teensy_interface (not fully tested) - part of Robobot software. | Support added to teensy_interface (not fully tested) - part of Robobot software. | ||
=== Raspberry pi issue === | |||
Starting gpsd as a service fails, but manualy start works fine: | |||
sudo gpsd -n -N -D3 /dev/ttyACM1 | |||
Starting the service fails, like: | |||
local@Saturn:~ $ systemctl status gpsd | |||
○ gpsd.service - GPS (Global Positioning System) Daemon | |||
Loaded: loaded (/usr/lib/systemd/system/gpsd.service; enabled; preset: enabled) | |||
Active: inactive (dead) | |||
TriggeredBy: × gpsd.socket | |||
Docs: man:gpsd | |||
Apr 26 13:02:52 Saturn systemd[1]: Dependency failed for gpsd.service - GPS (Global Positioning System) Daemon. | |||
Apr 26 13:02:52 Saturn systemd[1]: gpsd.service: Job gpsd.service/start failed with result 'dependency'. | |||
After a long search by Ecosia, I found a fix | |||
The /lib/systemd/system/gpsd.socket looked like this: | |||
[Unit] | |||
Description=GPS (Global Positioning System) Daemon Sockets | |||
[Socket] | |||
ListenStream=/run/gpsd.sock | |||
ListenStream=[::1]:2947 | |||
ListenStream=127.0.0.1:2947 | |||
# To allow gpsd remote access, start gpsd with the -G option and | |||
# uncomment the next two lines: | |||
ListenStream=[::]:2947 | |||
ListenStream=0.0.0.0:2947 | |||
SocketMode=0600 | |||
#BindIPv6Only=yes | |||
BindIPv6Only=both | |||
[Install] | |||
WantedBy=sockets.target | |||
I the uncommented most of these dependecies to: | |||
[Unit] | |||
Description=GPS (Global Positioning System) Daemon Sockets | |||
[Socket] | |||
ListenStream=/run/gpsd.sock | |||
#ListenStream=[::1]:2947 | |||
ListenStream=127.0.0.1:2947 | |||
# To allow gpsd remote access, start gpsd with the -G option and | |||
# uncomment the next two lines: | |||
#ListenStream=[::]:2947 | |||
#ListenStream=0.0.0.0:2947 | |||
SocketMode=0600 | |||
#BindIPv6Only=yes | |||
#BindIPv6Only=both | |||
[Install] | |||
WantedBy=sockets.target | |||
Then I could do | |||
systemctl start gpsd | |||
and verify with | |||
cgps | |||
=== Decode and publish === | === Decode and publish === | ||
Using the 'gpsd' publisher. This should be easily interfaced to ROS. | Using the 'gpsd' publisher. This should be easily interfaced to ROS. | ||
see: https://kickstartembedded.com/2022/07/23/a-beginners-guide-to-using-gpsd-in-linux/ | see: https://kickstartembedded.com/2022/07/23/a-beginners-guide-to-using-gpsd-in-linux/ | ||
Revision as of 13:28, 26 April 2026
Back to Ricbot
GNSS
Satellite positioning is implemented using a NEO-M9V receiver. The receiver is connected to the navigation Raspberry Pi.
Additional installation
sudo apt install gpsd gpsd-clients libgps-dev
Support added to teensy_interface (not fully tested) - part of Robobot software.
Raspberry pi issue
Starting gpsd as a service fails, but manualy start works fine:
sudo gpsd -n -N -D3 /dev/ttyACM1
Starting the service fails, like:
local@Saturn:~ $ systemctl status gpsd
○ gpsd.service - GPS (Global Positioning System) Daemon
Loaded: loaded (/usr/lib/systemd/system/gpsd.service; enabled; preset: enabled)
Active: inactive (dead)
TriggeredBy: × gpsd.socket
Docs: man:gpsd
Apr 26 13:02:52 Saturn systemd[1]: Dependency failed for gpsd.service - GPS (Global Positioning System) Daemon.
Apr 26 13:02:52 Saturn systemd[1]: gpsd.service: Job gpsd.service/start failed with result 'dependency'.
After a long search by Ecosia, I found a fix
The /lib/systemd/system/gpsd.socket looked like this:
[Unit] Description=GPS (Global Positioning System) Daemon Sockets [Socket] ListenStream=/run/gpsd.sock ListenStream=[::1]:2947 ListenStream=127.0.0.1:2947 # To allow gpsd remote access, start gpsd with the -G option and # uncomment the next two lines: ListenStream=[::]:2947 ListenStream=0.0.0.0:2947 SocketMode=0600 #BindIPv6Only=yes BindIPv6Only=both [Install] WantedBy=sockets.target
I the uncommented most of these dependecies to:
[Unit] Description=GPS (Global Positioning System) Daemon Sockets [Socket] ListenStream=/run/gpsd.sock #ListenStream=[::1]:2947 ListenStream=127.0.0.1:2947 # To allow gpsd remote access, start gpsd with the -G option and # uncomment the next two lines: #ListenStream=[::]:2947 #ListenStream=0.0.0.0:2947 SocketMode=0600 #BindIPv6Only=yes #BindIPv6Only=both [Install] WantedBy=sockets.target
Then I could do
systemctl start gpsd
and verify with
cgps
Decode and publish
Using the 'gpsd' publisher. This should be easily interfaced to ROS.
see: https://kickstartembedded.com/2022/07/23/a-beginners-guide-to-using-gpsd-in-linux/