AVM improvements
UlliS from Germany  [42 posts]
5 years
Hello, I had the following ideas to improve the AVM Navigator:

-> NV_TURRET_RIGHT NV_TURRET_LEFT and are in "Marker Mode" does not return a value (1 or 0). When robots with fixed camera (without pan servos) can thus no automatic localization can be performed.

I used to following VB code:

    nvTurretLeft = GetVariable("NV_TURRET_LEFT")
    nvTurretRight = GetVariable("NV_TURRET_RIGHT")

    If nvTurretLeft=0 And nvTurretRight=1 Then
    ElseIf nvTurretLeft=1 And nvTurretRight=0 Then
    End If

the "Navigation by map" it works!

-> The control over NV_FORWARD, NV_BACKWARD etc. and the settings Body-Turn inertia looks for some robots too fidgety (nervous). Here it would be good if the integration speed (eg, 128 to 255/128 to 0) variable could be set. Better here would be a PID or at least one PI control, the jerk to the robot adjusts slowly without.

Here's a pseudo-code from one experiment of mine with finducials:

            If RR_CogX > 160 Then err_curr_move = RR_CogX - 160
            If RR_CogX < 160 Then err_curr_move = RR_CogX + -160

            MoveP = MoveKp * err_curr_move
            MoveI = MoveI + (err_curr_move * MoveKi)

            If MoveI > 800 Then MoveI = 800
            If MoveI < -800 Then MoveI = -800

            MoveD = (err_curr_move - err_pre_move) * MoveKd

            MovePID = MoveP + MoveI + MoveD

            err_pre_move = err_curr_move

            pan = pan + xOffset + MovePID

            yOffset = 200
            tilt = yOffset

            ' Servos position

            If pan > 400 Then pan = 400
            If pan < -400 Then pan = -400
            If tilt > 600 Then tilt = 600
            If tilt < -600 Then tilt = -600

            PanPos = (((Behaviors.HeadPanCenter * 10) + pan) / 10)
            TiltPos = (((Behaviors.HeadTiltCenter * 10) + tilt) / 10)

-> it would be advantageous if the file would get ordener for AVM File. If a file in its own stores AVM.dat RoboRealm project, should also be used when starting again. As standart, the \ user folder are used.

-> Currently you can only record one track clean without the problems there, it should give the possibility to load different maps. Also set a mark as a waypoint on the map would be a solution. This could also go ahead and continue using the voice command the robot to a target can bestimtes cards. It would be ideal for larger maps, if the map automatically zooms in or out.

okay that would be present all times :-)

Important but would be a smoother control of the robot, the current system is, unfortunately, horrible ... * laugh * The search for gate Ways would be better if the robot simply turns slowly on the spot and sometimes a bit carried away here, so he finds a possibly overlooked gate.


EDV  [328 posts] 5 years
Thank you for advices I will think over about it.

Can you please tell more details about your robot’s construction and experiments with AVM Navigator (some description, photos, video etc)?

By the way I have two pretty videos regarding visual navigation.

It is enough difficult route that was passed by robot
with help AVM Navigator (route training and passing):

Autonomous navigation view from outside:
EDV  [328 posts] 5 years
And it would be good if you could download latest version of AVM Navigator.
See "AVM Navigator's Updates" for more details:
UlliS from Germany  [42 posts] 5 years
Hello EDV,

the two video I already know, are very good! In a 4WD Rover with soft and thick tires, the control always a bit slow and does not look at small steering controls so nervous. When a robot with pure differential drive and the wheel is much more sensitive. I currently use a converted Tomy Omnibot. It is not driven by means of four wheels as original and one wheel at the front, but only about two driven rear wheels and one front wheel. I can do tonight for a few pictures and a video. I currently have the new version of it, with 3D object and target markers :-)

- Ulli
EDV  [328 posts] 5 years
As one proverb tells:

It is better to see one time than to hear 100 times.

So I will be looking forward for photos and videos ;-)
UlliS from Germany  [42 posts] 5 years
Hello EDV,

here are the videos ... Once with and once with AVM Finducial track and my small software control. The images still show the robot and the operator. The motors I have set the AVM very small, faster is not so good.





Code Finducial:
   ' Finducial search
   buttonTrack = GetVariable("BUTTON_TRACK")
   imageWidth = GetVariable("IMAGE_WIDTH")
   imageHeight = GetVariable("IMAGE_HEIGHT")
   fiducialXCoord = GetVariable("FIDUCIAL_X_COORD")
   fiducialYCoord = GetVariable("FIDUCIAL_Y_COORD")
   fiducialSize = GetVariable("FIDUCIAL_SIZE")

   fiducialConfidence = GetVariable("FIDUCIAL_CONFIDENCE")
   err_curr_x_fiducial = 0

   If buttonTrack <> 1 Then
         FiducialSizeForStop = 40
       err_curr_x_fiducial = 0

     If fiducialConfidence > 0 Then

        If fiducialXCoord > 160 Then err_curr_x_fiducial = ((fiducialXCoord - 160) / 4)
        If fiducialXCoord < 160 Then err_curr_x_fiducial = ABS((fiducialXCoord + -160) / 4)
        SetVariable "RR_err_curr_x", err_curr_x_fiducial

            ' Objekt ist rechts                
            If fiducialXCoord >= 160 And fiducialXCoord < 220 And FiducialSizeForStop < 40 Then
                SpeedLeft = 140 + err_curr_x_fiducial
                SpeedRight = 140

                        ' Objekt ist links
            ElseIf fiducialXCoord < 160 And fiducialXCoord > 100 And FiducialSizeForStop < 40 Then
                SpeedLeft = 140
                SpeedRight = 140 + err_curr_x_fiducial

                        ' Objekt ist ganz rechts
            ElseIf fiducialXCoord >= 220 And fiducialSize < 40 Then
                SpeedLeft = 150
                SpeedRight = 128

                        ' Objekt ist ganz links
            ElseIf fiducialXCoord <= 100 And fiducialSize < FiducialSizeForStop Then
                SpeedLeft = 128
                SpeedRight = 150

                        ' Rückwärts
            ElseIf fiducialSize  > (FiducialSizeForStop + 20) Then
                SpeedLeft = 100
                SpeedRight = 100
            ' Stopp
            ElseIf fiducialSize >= (FiducialSizeForStop) And fiducialSize > 0 Then
                SpeedLeft = 128
                SpeedRight = 128

                      ' vorwärts
                  ElseIf fiducialSize <  FiducialSizeForStop Then
                SpeedLeft = 180
                SpeedRight = 180
            End If

           SetVariable "SpeedLeft", SpeedLeft
           SetVariable "SpeedRight", SpeedRight

             motor_left = SpeedLeft
         motor_right = SpeedRight     

     End If
   End If

- Ulli

UlliS from Germany  [42 posts] 5 years

EDV  [328 posts] 5 years
Thank you for update and it really looks great!

It would be nice if you also could share your robot's control program as robo files ;-)
UlliS from Germany  [42 posts] 5 years
Here is the robo file...

- Ulli
UlliS from Germany  [42 posts] 5 years
Thany you EDV,

here is the robo file...

- Ulli
UlliS from Germany  [42 posts] 5 years
Hello EDV,

my old finducial code was to quick and dirty... sorry (horrible)
Her is a final file, that´s work very good... very simple an i think, without bugs ;-)

But the AVM Navigator dosn´t work finde :-(
My idea would be: if the ramp time or a gain factor in AVM Navigator would be adjusted, makes driving look better.



UlliS from Germany  [42 posts] 5 years
The last post I sent a *. Robo file, but that was not attached ... okay again ...

This forum thread has been closed due to inactivity (more than 4 months) or number of replies (more than 50 messages). Please start a New Post and enter a new forum thread with the appropriate title.

 New Post   Forum Index