Raindancer Firmware

Hi.
think that timer runs only in Pi

No like i tell you before the Timer and Plot Don't work actually on Randancer CCO.
The code into the Pi is not finish for that.

ALL IS MORE COMPLEX THAN THIS.
For me with the random mowing (NOT FOR BYLANE) mode there is no interest to start at a particular location on the wire except if you parcell your area with the wire because after 5 minutes the mower can be everywhere.
for example start at 5 ml after station and 10 minutes later the mower is at the opposite of the garden :oops:

When Start with timer,if you have a blocking station AND want to use the parcel area the mower need to first reverse and avoid the station reach the wire and track until find entry point or track CCW.
This Behaviour is not actually build in Raindancer.This work only for a not blocking station


But Roland have write the code so that the mower simply reverse ,rotate and start to mow and it's possible to start with Pi Timer if you finish to write the PI code parts.


Where it gets time&date
The Pi adjust is own time and date on startup if i remember it is read in data.py (all the starting $ data coming from due are decrypt here) and send to the Timerpage.py using OnReceiveSerialData.

Is it working well on the Pi Zero ??? you can see the video in 640*480 at 25fps using the WIFI .
What kind of Wifi sender or Box did you use ?
 
House is middle of the garden and we have so called mesh wifi system. 4 tp-link deco ap's, near windows so it covers also garden quite well.
Zero works but it's slow, like expected but when all programs etc. are up it still works :)
I have two areas and theres something like 7-8 x 1,5-2 meter path (with slight curve) which connects them.
How's your code handle leaving station and tracking perimeter x meters? Trough station needed?
 
Trough station needed?
For raindancer i thing yes but Roland need to confirm or maybe adadt the firmware for blocking station.

For Azuritber it's not issue , you can see it here
https://www.ardumower.de/index.php/de/forum/software-control/1349-azurit-full-odometry-mouvement-control?start=100#15450
 
"Trough station needed?"

Normaly yes. But it can be programmed, that this is also for a head station - this is also on my shedule. It depends how the headstation is positioned on the perimeter.
If you use Raindancer, first try how the mower behaves. The algorithm maybe let the mower scurry through all the areas.

@Bernard What did you do if an obstacle is in the way leaving the station and drive around it?
 
The Bumper and sonar are manage depending to the state.
The MotorSense=80% of max value start a reverse roll and mow in all state


When leaving the station :
The sonar is deactivate for a duration
The bumper stop the mower immediatly and check 3 sec if the power is on charge contact.If yes it's station,If no the mower make a right circle to avoid obstacle and peri_find again.





If the mower track the wire :
The sonar only reduce the speed.
The bumper stop the mower immediatly and check 3 sec if the power is on charge contact.If yes it's station,If no the mower reverve make a right circle to avoid obstacle and peri_find again.

If the mower is mowing:
The sonar detect obstacle and stop 5 CM before hit (if it's by lane the roll is not depending on left or right sonar)
The bumper do the same.

If the mower search the wire.
The sonar is manage like when tracking, the mower avoid the obstacle with a right circle. and continu to search.
The Bumper (i need to check i don't remember maybe i forget to manage it this case)


In All case The odometry management have also a timeout and if the mower is stuck the state continu to change.
 
Hello!
I managed to get this fimware work pretty good (even the GPS) with my own fiber glass chassis.
I use ardumower motors. Cutting width is about 30cm. I also use simple transistor bumper circuit connected to original bumper connector.
My perimeter wire lenght is 250 meters and there is big area in the middle, so I had to use GPS because perimeter signal is not strong enoug.
The spiral works pretty good also, but is dependant to the ground shapes of course. I extended spiral radius to 2,5m.
Battery is about 9Ah, but charging current only 4A (that I must at least double to 8A).

What I need is that when battery charged full, the mower start mowing automatically.
Is there any easy way to do this or is it difficult to change code for that?

Thank You for your good work!!!
 
Hi MattiMan,

using a charge current greater than 4A with the sender could be a problem. The trace widht on the PCB is only 1.7mm and therefore the current should not be greater than 3.5A.
How did you measure the current? The measurement with the INA on the sender could be wrong.
If you want to use more current you have to switch an external relay which will bridge the pcb and charge the mower. But then you have also to change the sender software, that the sender realise when to shut down the sender signal.


"What I need is that when battery charged full, the mower start mowing automatically.
Is there any easy way to do this or is it difficult to change code for that?"

It should not be a big deal. Do you want to do this by your own with advice or should I do this?
Which command did you use for starting the mower when it is in the charging station?


By the way, it woud nice to see some pictures from you mower.

Kind Regards
Roland
 
Hello Roland,

I have external charging module with an ampere- and voltage display, so I know amount of current very well (confirmed with multimeter too).
I have to think that current thing carefully. Now it charges about 2 hours and do the mowing about 1,5 hours. With an hour charging time, the mower would have much more time to work.

Can you just give me advice and maybe I can change the code by myself in Arduino IDE to start mowing after charge?
I don't know much about this big programs, but maybe if you tell me what parts should I change and how, I can try it.

Thank You
MattiMan
 
Hi MattiMan

using Arduino IDE could be a pain in the ass for such large project. But anyway.

Here you find the software structure: https://github.com/Ardumower/Raindancer/blob/master/Documentation/SoftwareStructure.pdf
The orange squares are services which are queried by the behviour tree. Here you see chargeSystem and rainSensor.

Search in the ui.c which function is called, when you insert the command. This stands in cmd_cntrGotoAreaX.
It depends if you have a pass through station or headstation.


When the mower is in the charging station, the class TchargeRelayOn in bCharging.h will be executed all the time.
you have to create a case 5: you have to implement the code like these


Code:
case 5:
	if (bb.chargeSystem.isBatFull() &&   !bb.rainSensor.isRaining()){

		// wait here also in a non blocking for 1 hour if you want
	 
		if (CONF_PASS_THROUGH_CHARGING_STATION) {
			myBlackboard.setBehaviour(BH_GOTOAREA);
		}
		else {
			myBlackboard.setBehaviour(BH_LEAVE_HEAD_CS);
		}
	}
	break;


Also check out the RaindancerBHT.spl7
In the wiki I wrote wich program you have to install to view this file. Its the splan software:
https://www.electronic-software-shop.com/support/kostenlose-datei-viewer/
 
Hello again,
looks like there is something what I dont undestand here (that is not a suprise).

I included the code you show me earlier in bCharging.h, but compiling I get error: myBlackboard is not decrared in this scope
I start the mower using command area,0 and I have a headstation.

Is there some other parts in the code that I have to change too?

Thank You!
 
I wrote the solution in the second thread:

myBlackboard must be bb

replace myBlackboard with bb

I never tested the code. So you have to test it. Maybe you have to optimze it. Don't hesitate to ask questions if you need more information.
 
Hello Roland!

Thank you very much for this great Firmware!

I have the PCB 1.3 built into my Robomow RL2000 and performed some tests.

The Hall-effect switch on the odometry board has the label 03L.
The gear wheel of the drive motor has two 4mm x 5.5mm bar magnet (offset by 180°).
One bar magnet points with the South Pole and the other with the North Pole to the Hall-effect switch.
This arrangement of the bar magnet suggests a bipolar Hall-effect switch (Allegro A1203LLHLT-T).
For each wheel revolution, the two magnets pass 60 times (per magnet) the Hall-effect switch.
This arrangment gives me only 120 pulses with the positive and negative edge detection on the DUE.
The measurement was carried out with the 8 channel USB logic analyzer and Pulseview.

After replacing the Bipolaenr Hall-effect switch with a Unipolar Hall-effect switch (Allegro A1101ELHLT-T), 240 pulses should arrive at the DUE.

Is it possible to use your Firmware with only 240 pulses?
 
Hi.
I have also an old RL1000 and very often though to rebuild it with PCB1.3 but :
The RL is very good platform for big area and it's why i want to use it .
How to manage the battery 20Ah on 24V ??
But how have you manage the 3 mow motor ?
For wheel motor Are you sure the MC33926 can send enought sense without issue ???

Maybe you can open a new thread on this good platform
 
Hallo Bernard,

I have two working Robomow RL2000 and one only with the platforme and wheel motors, so i can't answer your questions.
Before I start with the conversion, I want to make sure that the complete gear case with drive motors works with the Raindancer firmware.
I will follow your advice and open a new thread.
 
Hello ctbenergy

I think 240 pulses are too low. The reason for this is, that the closed loop control service runs every 33ms.
This means if you have slow speed you have only 3 to 4 ticks to compute the speed when you have 1000 pulses.

1000/240 = 4 => 33ms*4= 132
So you can try to run the closed loop control with 100ms. But then you have to tune the PDFF controller again.

Furthermore, the position control service runs every 100ms. This must be set to 300ms then and also tuned again. Because the position control uses the closed loop control. And the closed loop contorol should run 3 times faster than the position control.

This means at the end, that the calculated driven way / rotated angle will not be as exact as with the original software. But maybe it is not so importand if you drive 3cm further than calculated.

It depends also of you programming knowledge.

Another possibility could be to use a NANO in between the encoder and PCB1.3 wich interpolate the Encoder signals and sends more ticks to the board. This means instead of counting the ticks you have to measure the time between ticks an then
send ticks to the PCB1.3.

Or the third one, you reprogramm the service that the service measure the time between ticks instead of counting the ticks. This I did 2013 in my first firmware where I had only 6ticks per revolution.

A fourth solution could be, you bridge the encoder electronic on the PCB1.3. then you have 480ticks and measure every 70ms.

All solutions I have never tested. You have to try it. If you decide to try a solution, don't hesitate asking for help.
 
Hallo Roland,

Thanks for your support.
Programming should not be a problem, but I first have to familiarize myself with the source code.
I will also try to install more magnets on the gear of the drive motor.
 
Oben