Posts: 240
Threads: 45
Joined: Mar 2018
Reputation:
1
2019-08-10, 11:44 AM
(This post was last modified: 2019-08-10, 12:26 PM by jamos.tan@gmail.com.)
Hi,
I didn't find anyone with the same problem, so I've created a new thread.
I have uploaded the motor.ino sketch succesfully to an arduino nano (clone I think) and it is connected in openplotter on the Raspberry pi 3B+ through USB.
When opening autopilot either on opencpn or within openplotter itself, it is recognized with the 'sync' status and no error flags.
I have disabled all sensors in motor.ino because I have all the sensors on the Raspberry. I have also grounded all unused analog pins.
I receive statistics from the arduino from both pypilot on opencpn, and openplotter.
The trouble is, when I click on AP, engaging the autopilot, the status changes from 'sync' to 'no connection' instantly.
Only after restarting signalK from the Pypilot tab in openplotter, the connection is back again. Resetting the arduino with the reset button doesn't help.
I am unsure how this happens, the Arduino connection seems to freeze when engaging the autopilot and only comes back after signalk is restarted.
I feel it has something to do with either:
- pinout from the arduino to the stepper motor? (It is on h-bridge mode, tried pins 2 and 3, and tried pins 9 and 10 to the h-bridge of the stepper motor)
- motor.ino code configuration?
Hope someone can help me troubleshoot, I've included my motor.ino and screenshots of the https://pypilot.org/wiki/doku.php?id=troubleshooting results in the attachments.
Posts: 2,355
Threads: 21
Joined: Jun 2016
Reputation:
75
it sounds like pypilot itself is throwing an exception.
Could you make sure pypilot is not running eg: killall python
You could check the output log using journalctl, but easier to run pypilot from the command line:
cd pypilot/pypilot
python autopilot.py
Once it is running, try to engage and see what exception is thrown.
Posts: 240
Threads: 45
Joined: Mar 2018
Reputation:
1
2019-08-10, 05:28 PM
(This post was last modified: 2019-08-10, 07:50 PM by jamos.tan@gmail.com.)
Thanks! Not sure if I did it right, but I attached some more screenshots of what I tested.
- Test1.png shows what happens when I engage the autopilot (made sure I killed all python before testing it)
- Regulare pypilot folder.png shows the contents of the pypilot folder in home/pi but I don't have the autopilot.py file in there
- Alternate pypilot folder.png shows the folder that contains autopilot.py (wasn't in "cd pypilot/pypilot" not sure if this is correct)
Posts: 2,355
Threads: 21
Joined: Jun 2016
Reputation:
75
Posts: 240
Threads: 45
Joined: Mar 2018
Reputation:
1
(2019-08-10, 06:43 PM)seandepagnier Wrote: there are no pictures
Sorry, forgot to press 'add'
Posts: 2,355
Threads: 21
Joined: Jun 2016
Reputation:
75
any way to scroll up in the terminal from the first picture and post the full output?
Posts: 240
Threads: 45
Joined: Mar 2018
Reputation:
1
2019-08-11, 11:17 AM
(This post was last modified: 2019-08-11, 01:00 PM by jim321.)
Here is the output in text, screenshot could not contain all of it. Also I've added text (in bold) to the place in the code, it marks where connection was OK, and from where it is not:
Code: python autopilot.py
loading servo calibration /home/pi/.pypilot/servocalibration
WARNING: using default servo calibration!!
connected to gpsd
warning: failed to open special file /dev/watchdog0 for writing
cannot stroke the watchdog
Settings file not found. Using defaults and creating settings file
Failed to open settings file for saveUsing settings file RTIMULib.ini
Detected LSM9DS1 at standard/standard address
Failed to open settings file for saveUsing fusion algorithm Kalman STATE4
IMU Name: LSM9DS1
min/max compass calibration not in use
Using ellipsoid compass calibration
Using accel calibration
LSM9DS1 init complete
nmea poll times 0.149311065674 2.38418579102e-05 2.14576721191e-06 1.90734863281e-06 2.40802764893e-05
sensors is running too _slowly_ 0.14959692955
arduino servo found on [u'/dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0', 38400]
serialprobe success: /home/pi/.pypilot/servodevice [u'/dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0', 38400]
nmea ready for connections
listening on port 20220 for nmea connections
EEPROM SIGNATURE ok */untill here AP is not engaged and connection is still sync/*
Traceback (most recent call last): */the minute I press AP engage it goes offline/*
File "autopilot.py", line 467, in <module>
main()
File "autopilot.py", line 464, in main
ap.run()
File "autopilot.py", line 259, in run
self.iteration()
File "autopilot.py", line 432, in iteration
self.servo.poll()
File "/usr/local/lib/python2.7/dist-packages/pypilot-0.9-py2.7-linux-armv7l.egg/pypilot/servo.py", line 636, in poll
self.send_command()
File "/usr/local/lib/python2.7/dist-packages/pypilot-0.9-py2.7-linux-armv7l.egg/pypilot/servo.py", line 293, in send_command
self.do_command(self.command.value)
File "/usr/local/lib/python2.7/dist-packages/pypilot-0.9-py2.7-linux-armv7l.egg/pypilot/servo.py", line 345, in do_command
speed *= 12 / self.voltage.value
ZeroDivisionError: integer division or modulo by zero
got signal atexit cleaning up
got signal 15 cleaning up
got signal 15 cleaning up
got signal 15 cleaning up
got signal 15 cleaning up
Process Process-1:
Traceback (most recent call last):
Process GpsProcess-5:
Process Process-3:
File "/usr/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap
Traceback (most recent call last):
File "/usr/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap
Traceback (most recent call last):
Process NmeaBridgeProcess-4:
Traceback (most recent call last):
File "/usr/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap
File "/usr/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap
self.run()
self.run()
File "/usr/lib/python2.7/multiprocessing/process.py", line 114, in run
File "/usr/lib/python2.7/multiprocessing/process.py", line 114, in run
self.run()
self.run()
self._target(*self._args, **self._kwargs)
self._target(*self._args, **self._kwargs)
File "/usr/lib/python2.7/multiprocessing/process.py", line 114, in run
File "/usr/lib/python2.7/multiprocessing/process.py", line 114, in run
File "/usr/local/lib/python2.7/dist-packages/pypilot-0.9-py2.7-linux-armv7l.egg/pypilot/nmea.py", line 594, in process
File "/usr/local/lib/python2.7/dist-packages/pypilot-0.9-py2.7-linux-armv7l.egg/signalk/pipeserver.py", line 157, in pipe_server_process
self._target(*self._args, **self._kwargs)
self._target(*self._args, **self._kwargs)
File "/usr/local/lib/python2.7/dist-packages/pypilot-0.9-py2.7-linux-armv7l.egg/pypilot/boatimu.py", line 134, in imu_process
File "/usr/local/lib/python2.7/dist-packages/pypilot-0.9-py2.7-linux-armv7l.egg/pypilot/gpsd.py", line 67, in gps_process
self.read(pipe)
time.sleep(.1)
File "/usr/local/lib/python2.7/dist-packages/pypilot-0.9-py2.7-linux-armv7l.egg/pypilot/gpsd.py", line 40, in read
File "autopilot.py", line 159, in cleanup
gpsdata = self.gpsd.next()
File "/usr/lib/python2.7/dist-packages/gps/gps.py", line 326, in next
events = self.poller.poll(timeout)
File "autopilot.py", line 159, in cleanup
time.sleep(t)
File "autopilot.py", line 159, in cleanup
raise KeyboardInterrupt # to get backtrace on all processes
KeyboardInterrupt
raise KeyboardInterrupt # to get backtrace on all processes
if self.read() == -1:
File "/usr/lib/python2.7/dist-packages/gps/gps.py", line 312, in read
KeyboardInterrupt
status = gpscommon.read(self)
File "/usr/lib/python2.7/dist-packages/gps/client.py", line 84, in read
raise KeyboardInterrupt # to get backtrace on all processes
KeyboardInterrupt
frag = self.sock.recv(4096)
File "autopilot.py", line 159, in cleanup
raise KeyboardInterrupt # to get backtrace on all processes
KeyboardInterrupt
got signal 17 cleaning up
got signal 15 cleaning up
Error in atexit._run_exitfuncs:
Traceback (most recent call last):
File "/usr/lib/python2.7/atexit.py", line 24, in _run_exitfuncs
Process Process-2:
func(*targs, **kargs)
Traceback (most recent call last):
File "/usr/lib/python2.7/multiprocessing/util.py", line 325, in _exit_function
File "/usr/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap
self.run()
File "/usr/lib/python2.7/multiprocessing/process.py", line 114, in run
self._target(*self._args, **self._kwargs)
File "/usr/local/lib/python2.7/dist-packages/pypilot-0.9-py2.7-linux-armv7l.egg/pypilot/calibration_fit.py", line 583, in CalibrationProcess
got signal 17 cleaning up
Error in sys.exitfunc:
Traceback (most recent call last):
File "/usr/lib/python2.7/atexit.py", line 30, in _run_exitfuncs
traceback.print_exc()
File "/usr/lib/python2.7/traceback.py", line 233, in print_exc
print_exception(etype, value, tb, limit, file)
File "/usr/lib/python2.7/traceback.py", line 125, in print_exception
print_tb(tb, limit, file)
File "/usr/lib/python2.7/traceback.py", line 69, in print_tb
line = linecache.getline(filename, lineno, f.f_globals)
File "/usr/lib/python2.7/linecache.py", line 14, in getline
lines = getlines(filename, module_globals)
File "/usr/lib/python2.7/linecache.py", line 41, in getlines
return updatecache(filename, module_globals)
File "/usr/lib/python2.7/linecache.py", line 132, in updatecache
lines = fp.readlines()
File "autopilot.py", line 159, in cleanup
raise KeyboardInterrupt # to get backtrace on all processes
KeyboardInterrupt
p = points.recv(1)
File "/usr/local/lib/python2.7/dist-packages/pypilot-0.9-py2.7-linux-armv7l.egg/signalk/pipeserver.py", line 36, in recv
if self.pollin.poll(1000.0*timeout):
File "autopilot.py", line 159, in cleanup
raise KeyboardInterrupt # to get backtrace on all processes
KeyboardInterrupt
Posts: 2,355
Threads: 21
Joined: Jun 2016
Reputation:
75
(2019-08-11, 11:17 AM)jamos.tan@gmail.com Wrote: Here is the output in text, screenshot could not contain all of it. Also I've added text (in bold) to the place in the code, it marks where connection was OK, and from where it is not:
Code: python autopilot.py
loading servo calibration /home/pi/.pypilot/servocalibration
WARNING: using default servo calibration!!
connected to gpsd
warning: failed to open special file /dev/watchdog0 for writing
cannot stroke the watchdog
Settings file not found. Using defaults and creating settings file
Failed to open settings file for saveUsing settings file RTIMULib.ini
Detected LSM9DS1 at standard/standard address
Failed to open settings file for saveUsing fusion algorithm Kalman STATE4
IMU Name: LSM9DS1
min/max compass calibration not in use
Using ellipsoid compass calibration
Using accel calibration
LSM9DS1 init complete
nmea poll times 0.149311065674 2.38418579102e-05 2.14576721191e-06 1.90734863281e-06 2.40802764893e-05
sensors is running too _slowly_ 0.14959692955
arduino servo found on [u'/dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0', 38400]
serialprobe success: /home/pi/.pypilot/servodevice [u'/dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0', 38400]
nmea ready for connections
listening on port 20220 for nmea connections
EEPROM SIGNATURE ok */untill here AP is not engaged and connection is still sync/*
Traceback (most recent call last): */the minute I press AP engage it goes offline/*
File "autopilot.py", line 467, in <module>
main()
File "autopilot.py", line 464, in main
ap.run()
File "autopilot.py", line 259, in run
self.iteration()
File "autopilot.py", line 432, in iteration
self.servo.poll()
File "/usr/local/lib/python2.7/dist-packages/pypilot-0.9-py2.7-linux-armv7l.egg/pypilot/servo.py", line 636, in poll
self.send_command()
File "/usr/local/lib/python2.7/dist-packages/pypilot-0.9-py2.7-linux-armv7l.egg/pypilot/servo.py", line 293, in send_command
self.do_command(self.command.value)
File "/usr/local/lib/python2.7/dist-packages/pypilot-0.9-py2.7-linux-armv7l.egg/pypilot/servo.py", line 345, in do_command
speed *= 12 / self.voltage.value
ZeroDivisionError: integer division or modulo by zero
got signal atexit cleaning up
got signal 15 cleaning up
got signal 15 cleaning up
got signal 15 cleaning up
got signal 15 cleaning up
Process Process-1:
Traceback (most recent call last):
Process GpsProcess-5:
Process Process-3:
File "/usr/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap
Traceback (most recent call last):
File "/usr/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap
Traceback (most recent call last):
Process NmeaBridgeProcess-4:
Traceback (most recent call last):
File "/usr/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap
File "/usr/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap
self.run()
self.run()
File "/usr/lib/python2.7/multiprocessing/process.py", line 114, in run
File "/usr/lib/python2.7/multiprocessing/process.py", line 114, in run
self.run()
self.run()
self._target(*self._args, **self._kwargs)
self._target(*self._args, **self._kwargs)
File "/usr/lib/python2.7/multiprocessing/process.py", line 114, in run
File "/usr/lib/python2.7/multiprocessing/process.py", line 114, in run
File "/usr/local/lib/python2.7/dist-packages/pypilot-0.9-py2.7-linux-armv7l.egg/pypilot/nmea.py", line 594, in process
File "/usr/local/lib/python2.7/dist-packages/pypilot-0.9-py2.7-linux-armv7l.egg/signalk/pipeserver.py", line 157, in pipe_server_process
self._target(*self._args, **self._kwargs)
self._target(*self._args, **self._kwargs)
File "/usr/local/lib/python2.7/dist-packages/pypilot-0.9-py2.7-linux-armv7l.egg/pypilot/boatimu.py", line 134, in imu_process
File "/usr/local/lib/python2.7/dist-packages/pypilot-0.9-py2.7-linux-armv7l.egg/pypilot/gpsd.py", line 67, in gps_process
self.read(pipe)
time.sleep(.1)
File "/usr/local/lib/python2.7/dist-packages/pypilot-0.9-py2.7-linux-armv7l.egg/pypilot/gpsd.py", line 40, in read
File "autopilot.py", line 159, in cleanup
gpsdata = self.gpsd.next()
File "/usr/lib/python2.7/dist-packages/gps/gps.py", line 326, in next
events = self.poller.poll(timeout)
File "autopilot.py", line 159, in cleanup
time.sleep(t)
File "autopilot.py", line 159, in cleanup
raise KeyboardInterrupt # to get backtrace on all processes
KeyboardInterrupt
raise KeyboardInterrupt # to get backtrace on all processes
if self.read() == -1:
File "/usr/lib/python2.7/dist-packages/gps/gps.py", line 312, in read
KeyboardInterrupt
status = gpscommon.read(self)
File "/usr/lib/python2.7/dist-packages/gps/client.py", line 84, in read
raise KeyboardInterrupt # to get backtrace on all processes
KeyboardInterrupt
frag = self.sock.recv(4096)
File "autopilot.py", line 159, in cleanup
raise KeyboardInterrupt # to get backtrace on all processes
KeyboardInterrupt
got signal 17 cleaning up
got signal 15 cleaning up
Error in atexit._run_exitfuncs:
Traceback (most recent call last):
File "/usr/lib/python2.7/atexit.py", line 24, in _run_exitfuncs
Process Process-2:
func(*targs, **kargs)
Traceback (most recent call last):
File "/usr/lib/python2.7/multiprocessing/util.py", line 325, in _exit_function
File "/usr/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap
self.run()
File "/usr/lib/python2.7/multiprocessing/process.py", line 114, in run
self._target(*self._args, **self._kwargs)
File "/usr/local/lib/python2.7/dist-packages/pypilot-0.9-py2.7-linux-armv7l.egg/pypilot/calibration_fit.py", line 583, in CalibrationProcess
got signal 17 cleaning up
Error in sys.exitfunc:
Traceback (most recent call last):
File "/usr/lib/python2.7/atexit.py", line 30, in _run_exitfuncs
traceback.print_exc()
File "/usr/lib/python2.7/traceback.py", line 233, in print_exc
print_exception(etype, value, tb, limit, file)
File "/usr/lib/python2.7/traceback.py", line 125, in print_exception
print_tb(tb, limit, file)
File "/usr/lib/python2.7/traceback.py", line 69, in print_tb
line = linecache.getline(filename, lineno, f.f_globals)
File "/usr/lib/python2.7/linecache.py", line 14, in getline
lines = getlines(filename, module_globals)
File "/usr/lib/python2.7/linecache.py", line 41, in getlines
return updatecache(filename, module_globals)
File "/usr/lib/python2.7/linecache.py", line 132, in updatecache
lines = fp.readlines()
File "autopilot.py", line 159, in cleanup
raise KeyboardInterrupt # to get backtrace on all processes
KeyboardInterrupt
p = points.recv(1)
File "/usr/local/lib/python2.7/dist-packages/pypilot-0.9-py2.7-linux-armv7l.egg/signalk/pipeserver.py", line 36, in recv
if self.pollin.poll(1000.0*timeout):
File "autopilot.py", line 159, in cleanup
raise KeyboardInterrupt # to get backtrace on all processes
KeyboardInterrupt
I see the problem now, I will fix it.
It's because you have no voltage reading from the nano. You could add two resistors, or wait and i'll fix this bug soon.
Posts: 2,355
Threads: 21
Joined: Jun 2016
Reputation:
75
2019-08-12, 12:42 AM
(This post was last modified: 2019-08-12, 12:43 AM by seandepagnier.)
Can you disable servo.compensate_voltage in ~/.pypilot/pypilot.conf? It should avoid this exception
Posts: 240
Threads: 45
Joined: Mar 2018
Reputation:
1
Yes! That helped, I stays synced.
I've tested it from home by logging into VNC, so not all devices are powered on and I got the DRIVER_TIMEOUT flag.
I'll test it again when everything is powered on and will report again.
|