Legacy Forum: Preserving Nearly 20 Years of Community History - A Time Capsule of Discussions, Memories, and Shared Experiences.

Program / Control your Robobuilder robot with LISP !

Korean company maker of Robot kits and servos designed for of articulated robots. Re-incarnation of Megarobotics.
93 postsPage 5 of 71, 2, 3, 4, 5, 6, 7
93 postsPage 5 of 71, 2, 3, 4, 5, 6, 7

What do you think of using Lisp / L# and Robobuilder?

Poll ended at Fri Dec 25, 2009 12:13 am

(it love !)
3
75%
Bring back GOTO !
0
No votes
"Emacs is written in Lisp, which is the only computer language that is beautiful. "
1
25%
"the most intelligent way to misuse a computer"
0
No votes
 
Total votes : 4

Post by pepep » Sat Apr 17, 2010 12:16 pm

Post by pepep
Sat Apr 17, 2010 12:16 pm

Is possible disable the trace information about triggers or link it to DEBUG value? I think that so information delay the answer of the robot ...
Is possible disable the trace information about triggers or link it to DEBUG value? I think that so information delay the answer of the robot ...
pepep
Savvy Roboteer
Savvy Roboteer
Posts: 38
Joined: Sun Mar 28, 2010 7:14 pm

Post by l3v3rz » Sat Apr 17, 2010 12:51 pm

Post by l3v3rz
Sat Apr 17, 2010 12:51 pm

done - uploaded as RobobuilderLib.dll (v1.9)

Trigger has a debug flag which can bet set or unset. Default is false.

Code: Select all
>   (= trg (new "RobobuilderLib.trigger"))
> (.dbg trg)
False
> (.set_dbg trg true)
null
> (.dbg trg)
True
>


You shouldn't see trace information from the trigger when playing a motion unless dbg set True.
done - uploaded as RobobuilderLib.dll (v1.9)

Trigger has a debug flag which can bet set or unset. Default is false.

Code: Select all
>   (= trg (new "RobobuilderLib.trigger"))
> (.dbg trg)
False
> (.set_dbg trg true)
null
> (.dbg trg)
True
>


You shouldn't see trace information from the trigger when playing a motion unless dbg set True.
l3v3rz
Savvy Roboteer
Savvy Roboteer
Posts: 473
Joined: Fri Jul 18, 2008 2:34 pm

Post by pepep » Sat Apr 17, 2010 7:23 pm

Post by pepep
Sat Apr 17, 2010 7:23 pm

Ok, thanks again!

I found a bug: if you don't define a trigger, you get a exception when try .PlayPose method ... I supose that is a bug ...

And the triggers system don't work fine for me: whithout triggers, the move the robot make is fine, smoth, ... but when active one triggers, the movement has waitings and lost its "gracefully".
Can you try it in your robot? If you want the code I'm trying, this is:
Code: Select all
            ;  00  01  02  03  04  05 06 07  08  09  10 11 12  13  14  15
(= rstep (list    '(123 156 212  80 108 126 73 40 150 141  68 44 40 138 208 195)
            '(130 165 201  81 115 134 81 31 147 149  72 44 40 145 209 201)
            '(132 171 197  83 117 137 86 28 148 152  78 43 41 154 209 206)
            '(132 175 195  87 117 139 91 27 152 154  87 43 43 164 209 211)
            '(132 178 197  91 117 137 95 28 157 152  97 43 48 172 209 213)
            '(130 179 201  95 115 134 96 31 161 149 105 43 53 179 210 214)
            '(127 178 206  98 112 130 95 35 166 145 111 42 57 182 210 214)
            '(124 175 212 100 109 127 92 40 170 142 113 42 59 183 210 214))
)

            ;  00  01  02  03  04  05 06 07  08  09  10 11 12  13  14  15
(= lstep (list    '(124 175 212 100 109 127 92 40 170 142 113 42 59 183 210 214)
            '(120 172 217 102 105 123 88 46 170 138 111 42 57 182 210 214)
            '(116 167 221 103 101 120 83 51 169 135 106 43 53 179 210 214)
            '(113 162 224 102  98 118 77 55 167 133  97 43 48 173 209 213)
            '(111 157 225  98  96 118 73 57 163 133  87 43 43 164 209 211)
            '(113 153 224  93  98 118 70 55 159 133  79 43 41 154 209 206)
            '(116 152 221  89 101 120 69 51 155 135  72 44 40 146 209 201)
            '(120 153 217  84 105 123 70 46 152 138  69 44 40 140 208 197)
            '(123 156 212  80 108 126 73 40 150 141  68 44 40 138 208 195))
)
(def lpose (dur stp pos lpst)
   (if (or pos)
      ( do (= lpst (.PlayPose wck dur stp (toByteArray (car pos)) (not lpst)))
          ;(prl (car pos))
          (if lpst (lpose dur stp (cdr pos) lpst))
      )
   )
   lpst
)
(def panda ()
   (dcmodeOn)
   (= lpst false)
   (= cnt 0)
   (= dir true)
   (setallLeds 15 dir (not dir))
   (while (not (Console.KeyAvailable))
          (do  (if dir (do   (= lpst (lpose 25 1 rstep lpst))
                     (pr "R")
                     (= lpst (lpose 25 1 lstep lpst))
                     (pr "L")
                  )
                  (do (= lpst (lpose 25 1 (reverse lstep) lpst))
                     (pr "l")
                     (= lpst (lpose 25 1 (reverse rstep) lpst))
                     (pr "r")
                  )
            )
            (if (> cnt 4)
               (do (= cnt 0)
                  (= dir (not dir))
                  (setallLeds 15 dir (not dir))
               )
               (= cnt (+ cnt 1))
            )
         )
   )
   (lpose 25 1 (list basic) false)
    (setallLeds 15 false false)

   (dcmodeOff)
)
(def setallLeds (n blue red)
   "turn on/off all servo leds"
   (for i 0 n
         (wckwriteIO i blue red)
      )
)


Cheers!
Ok, thanks again!

I found a bug: if you don't define a trigger, you get a exception when try .PlayPose method ... I supose that is a bug ...

And the triggers system don't work fine for me: whithout triggers, the move the robot make is fine, smoth, ... but when active one triggers, the movement has waitings and lost its "gracefully".
Can you try it in your robot? If you want the code I'm trying, this is:
Code: Select all
            ;  00  01  02  03  04  05 06 07  08  09  10 11 12  13  14  15
(= rstep (list    '(123 156 212  80 108 126 73 40 150 141  68 44 40 138 208 195)
            '(130 165 201  81 115 134 81 31 147 149  72 44 40 145 209 201)
            '(132 171 197  83 117 137 86 28 148 152  78 43 41 154 209 206)
            '(132 175 195  87 117 139 91 27 152 154  87 43 43 164 209 211)
            '(132 178 197  91 117 137 95 28 157 152  97 43 48 172 209 213)
            '(130 179 201  95 115 134 96 31 161 149 105 43 53 179 210 214)
            '(127 178 206  98 112 130 95 35 166 145 111 42 57 182 210 214)
            '(124 175 212 100 109 127 92 40 170 142 113 42 59 183 210 214))
)

            ;  00  01  02  03  04  05 06 07  08  09  10 11 12  13  14  15
(= lstep (list    '(124 175 212 100 109 127 92 40 170 142 113 42 59 183 210 214)
            '(120 172 217 102 105 123 88 46 170 138 111 42 57 182 210 214)
            '(116 167 221 103 101 120 83 51 169 135 106 43 53 179 210 214)
            '(113 162 224 102  98 118 77 55 167 133  97 43 48 173 209 213)
            '(111 157 225  98  96 118 73 57 163 133  87 43 43 164 209 211)
            '(113 153 224  93  98 118 70 55 159 133  79 43 41 154 209 206)
            '(116 152 221  89 101 120 69 51 155 135  72 44 40 146 209 201)
            '(120 153 217  84 105 123 70 46 152 138  69 44 40 140 208 197)
            '(123 156 212  80 108 126 73 40 150 141  68 44 40 138 208 195))
)
(def lpose (dur stp pos lpst)
   (if (or pos)
      ( do (= lpst (.PlayPose wck dur stp (toByteArray (car pos)) (not lpst)))
          ;(prl (car pos))
          (if lpst (lpose dur stp (cdr pos) lpst))
      )
   )
   lpst
)
(def panda ()
   (dcmodeOn)
   (= lpst false)
   (= cnt 0)
   (= dir true)
   (setallLeds 15 dir (not dir))
   (while (not (Console.KeyAvailable))
          (do  (if dir (do   (= lpst (lpose 25 1 rstep lpst))
                     (pr "R")
                     (= lpst (lpose 25 1 lstep lpst))
                     (pr "L")
                  )
                  (do (= lpst (lpose 25 1 (reverse lstep) lpst))
                     (pr "l")
                     (= lpst (lpose 25 1 (reverse rstep) lpst))
                     (pr "r")
                  )
            )
            (if (> cnt 4)
               (do (= cnt 0)
                  (= dir (not dir))
                  (setallLeds 15 dir (not dir))
               )
               (= cnt (+ cnt 1))
            )
         )
   )
   (lpose 25 1 (list basic) false)
    (setallLeds 15 false false)

   (dcmodeOff)
)
(def setallLeds (n blue red)
   "turn on/off all servo leds"
   (for i 0 n
         (wckwriteIO i blue red)
      )
)


Cheers!
pepep
Savvy Roboteer
Savvy Roboteer
Posts: 38
Joined: Sun Mar 28, 2010 7:14 pm

Post by l3v3rz » Sat Apr 17, 2010 9:16 pm

Post by l3v3rz
Sat Apr 17, 2010 9:16 pm

I don't see the trigger code - can you email me the whole lot - and I'll have a look
I don't see the trigger code - can you email me the whole lot - and I'll have a look
l3v3rz
Savvy Roboteer
Savvy Roboteer
Posts: 473
Joined: Fri Jul 18, 2008 2:34 pm

Post by l3v3rz » Tue May 04, 2010 9:29 am

Post by l3v3rz
Tue May 04, 2010 9:29 am

I believe the issue with the trigger code is down to the switching time between direct control mode and PC remote mode (around 60-70 ms).

I have built a solution ( http://robosavvy.com/forum/viewtopic.ph ... highlight=) based on a customised version of DC mode (Im calling DC mode plus or DCMP).

I will look to get the trigger working using this. I should be easily be able to read the PSD in between position updates as this can now be done in 1-2 ms using new firmware.

cheers
I believe the issue with the trigger code is down to the switching time between direct control mode and PC remote mode (around 60-70 ms).

I have built a solution ( http://robosavvy.com/forum/viewtopic.ph ... highlight=) based on a customised version of DC mode (Im calling DC mode plus or DCMP).

I will look to get the trigger working using this. I should be easily be able to read the PSD in between position updates as this can now be done in 1-2 ms using new firmware.

cheers
l3v3rz
Savvy Roboteer
Savvy Roboteer
Posts: 473
Joined: Fri Jul 18, 2008 2:34 pm

Post by l3v3rz » Thu May 06, 2010 9:42 am

Post by l3v3rz
Thu May 06, 2010 9:42 am

Ive upload(yet another) new version of RobobuilderLib (1.9.9.5). This has fixed the trigger problem. It now has a DCMP flag and when set true, uses the new high speed routine. (requires custom firmware) From my initial tests - all looks smooth - no slow down !!

Code: Select all
(def trgAct (st)
   (if (not (bound 'wck)) (dcmodeOn))
   (= trg (new "RobobuilderLib.trigger"))
   (.set_PSD   trg 0 51)  ; trigger if less than 0 or more than 51 i.e. never - but exercise routine
   (.set_timer trg 250)   ; every 250 ms
   (.print     trg)
   (.set_trigger wck trg)
   (.activate  trg st)        ;activate trigger (if true)
   (.set_dbg   trg true)   ; debug on
   (if (bound 'DCMODEPLUS) (.set_DCMP  trg true))
 )


The new bit is (if (bound 'DCMODEPLUS) (.set_DCMP trg true)). Also notice for the test I set boundary of 0 - 51 for the PSD - this means it reads the PSD every 250 ms (timer value) - but won't actually trigger. It does mean with debug mode on - you get a real time view of the PSD value as the bot is (continuously) walking. Very cool !

The variable DCMODEPLUS is set in DCMP.lisp which I load (last) in boot.lisp. It updates dcmodeOn etc to work with DCMP mode.

Code: Select all
(def dtest ()
   (while (not (console.keyavailable))
       (do (.wckReadPos wck 30 5) (prn (.PadLeft "*" (nth (.respnse wck) 0) #\-)  ))))
)


Above is another test routine running the PSD flat out - watch it fly !

Edit:
When a trigger is active the value is available in the main program so a mod to lpose as follows:

Code: Select all
(def lpose (dur stp pos lpst)
   (if (or pos)
      ( do    (= lpst (.PlayPose wck dur stp (car pos) false))
          ;(prn "nxt: " lpst)
          (if lpst (lpose dur stp (cdr pos) false) (prn "tiggered"))
      )
   )
   (if (bound 'trg) (prn (.PadLeft "*" (.Pval trg)  #\-)  ))
   lpst
)


Will show the PSD output whilst moving (.Pval trg)

End Edit :)

Download the library from the usual place

cheers
Ive upload(yet another) new version of RobobuilderLib (1.9.9.5). This has fixed the trigger problem. It now has a DCMP flag and when set true, uses the new high speed routine. (requires custom firmware) From my initial tests - all looks smooth - no slow down !!

Code: Select all
(def trgAct (st)
   (if (not (bound 'wck)) (dcmodeOn))
   (= trg (new "RobobuilderLib.trigger"))
   (.set_PSD   trg 0 51)  ; trigger if less than 0 or more than 51 i.e. never - but exercise routine
   (.set_timer trg 250)   ; every 250 ms
   (.print     trg)
   (.set_trigger wck trg)
   (.activate  trg st)        ;activate trigger (if true)
   (.set_dbg   trg true)   ; debug on
   (if (bound 'DCMODEPLUS) (.set_DCMP  trg true))
 )


The new bit is (if (bound 'DCMODEPLUS) (.set_DCMP trg true)). Also notice for the test I set boundary of 0 - 51 for the PSD - this means it reads the PSD every 250 ms (timer value) - but won't actually trigger. It does mean with debug mode on - you get a real time view of the PSD value as the bot is (continuously) walking. Very cool !

The variable DCMODEPLUS is set in DCMP.lisp which I load (last) in boot.lisp. It updates dcmodeOn etc to work with DCMP mode.

Code: Select all
(def dtest ()
   (while (not (console.keyavailable))
       (do (.wckReadPos wck 30 5) (prn (.PadLeft "*" (nth (.respnse wck) 0) #\-)  ))))
)


Above is another test routine running the PSD flat out - watch it fly !

Edit:
When a trigger is active the value is available in the main program so a mod to lpose as follows:

Code: Select all
(def lpose (dur stp pos lpst)
   (if (or pos)
      ( do    (= lpst (.PlayPose wck dur stp (car pos) false))
          ;(prn "nxt: " lpst)
          (if lpst (lpose dur stp (cdr pos) false) (prn "tiggered"))
      )
   )
   (if (bound 'trg) (prn (.PadLeft "*" (.Pval trg)  #\-)  ))
   lpst
)


Will show the PSD output whilst moving (.Pval trg)

End Edit :)

Download the library from the usual place

cheers
l3v3rz
Savvy Roboteer
Savvy Roboteer
Posts: 473
Joined: Fri Jul 18, 2008 2:34 pm

Post by pepep » Sat May 08, 2010 12:18 pm

Post by pepep
Sat May 08, 2010 12:18 pm

A litte and quickly demostrative addition at your (dtest):

Code: Select all
(def dptest ()
   (setServoPos 13 200 2) (setServoPos 10 50 2)   
   (while (not (console.keyavailable))
       (do (.wckReadPos wck 30 5)
         (= pos (nth (.respnse wck) 0))
          (prn (.PadLeft "*" pos #\-)) 
         (setServoPos 13 (coerce (- 250 pos) "Byte") 2)
         (setServoPos 10 (coerce (+ 0 pos) "Byte") 2)
      )
   )
)


Great work! Really!
A litte and quickly demostrative addition at your (dtest):

Code: Select all
(def dptest ()
   (setServoPos 13 200 2) (setServoPos 10 50 2)   
   (while (not (console.keyavailable))
       (do (.wckReadPos wck 30 5)
         (= pos (nth (.respnse wck) 0))
          (prn (.PadLeft "*" pos #\-)) 
         (setServoPos 13 (coerce (- 250 pos) "Byte") 2)
         (setServoPos 10 (coerce (+ 0 pos) "Byte") 2)
      )
   )
)


Great work! Really!
pepep
Savvy Roboteer
Savvy Roboteer
Posts: 38
Joined: Sun Mar 28, 2010 7:14 pm

Post by l3v3rz » Sat May 08, 2010 1:41 pm

Post by l3v3rz
Sat May 08, 2010 1:41 pm

nice!

My initial balance test was very similar - simply adding the change in Z value to servos 13 and 10 in same way
nice!

My initial balance test was very similar - simply adding the change in Z value to servos 13 and 10 in same way
l3v3rz
Savvy Roboteer
Savvy Roboteer
Posts: 473
Joined: Fri Jul 18, 2008 2:34 pm

Post by pepep » Sun May 16, 2010 8:19 pm

Post by pepep
Sun May 16, 2010 8:19 pm

Well, I've return with a new CPU.... I load the new firmware and all is OK, fast , ... :lol:

I make a new version of (panda) using the new features of the firmware, with a simple test of the iteraction between lights, wcks and the distance sensor. You can watch it in the video, how when the distance is lower than 30, the robot moves back and continue towards when the distance sensor is normally again.

phpBB [media]


With the new CPU I have a dubt: now the leds turn on/off fasted, very fasted (in the video, all together at the right and left side depending the step), but in my old CPU, the leds changed was slow, one by one ... I don't know if is a problem of the CPU (old of course) or the BT module (i'm using the RS232 cable in the test).

Some one can verify that? Thanks!
Well, I've return with a new CPU.... I load the new firmware and all is OK, fast , ... :lol:

I make a new version of (panda) using the new features of the firmware, with a simple test of the iteraction between lights, wcks and the distance sensor. You can watch it in the video, how when the distance is lower than 30, the robot moves back and continue towards when the distance sensor is normally again.

phpBB [media]


With the new CPU I have a dubt: now the leds turn on/off fasted, very fasted (in the video, all together at the right and left side depending the step), but in my old CPU, the leds changed was slow, one by one ... I don't know if is a problem of the CPU (old of course) or the BT module (i'm using the RS232 cable in the test).

Some one can verify that? Thanks!
pepep
Savvy Roboteer
Savvy Roboteer
Posts: 38
Joined: Sun Mar 28, 2010 7:14 pm

Post by pepep » Sun May 16, 2010 8:49 pm

Post by pepep
Sun May 16, 2010 8:49 pm

Another question!

With the new firmware, what's the role of the triggers? I think that isn't necesary, not?
Another question!

With the new firmware, what's the role of the triggers? I think that isn't necesary, not?
pepep
Savvy Roboteer
Savvy Roboteer
Posts: 38
Joined: Sun Mar 28, 2010 7:14 pm

Post by l3v3rz » Sun May 16, 2010 11:35 pm

Post by l3v3rz
Sun May 16, 2010 11:35 pm

Superb !!

I think triggers don't help you much - they are more useful if you are playing a file so that it can stop the motion mid stream

I'm working on adding neural network capability in the next version of the library. Its not available yet but it will it will enable you to do things like this:

Code: Select all
(= mat (new "matrix" 2 2))
(.set mat '[1.0 2.0 3.0 4.0])
(.print mat)



The aim being to create a network that can learn to balance. Early days.

Incidentally I find the bluetooth adds serious delay - and isn't that reliable - may be thats just me - but the direct serial link is much better even when I'm only a few cm's from the PC.

BTW please ask if there's anything you want adding to the library.
Superb !!

I think triggers don't help you much - they are more useful if you are playing a file so that it can stop the motion mid stream

I'm working on adding neural network capability in the next version of the library. Its not available yet but it will it will enable you to do things like this:

Code: Select all
(= mat (new "matrix" 2 2))
(.set mat '[1.0 2.0 3.0 4.0])
(.print mat)



The aim being to create a network that can learn to balance. Early days.

Incidentally I find the bluetooth adds serious delay - and isn't that reliable - may be thats just me - but the direct serial link is much better even when I'm only a few cm's from the PC.

BTW please ask if there's anything you want adding to the library.
l3v3rz
Savvy Roboteer
Savvy Roboteer
Posts: 473
Joined: Fri Jul 18, 2008 2:34 pm

Post by pepep » Mon May 17, 2010 9:26 am

Post by pepep
Mon May 17, 2010 9:26 am

Well, this my wish list for the new version:

* sound sensor (like the action builder has)
* direct access to robobuilder sound sinthesiser
* "touch sensor", a mechanist to know if a wck movement really has been place, b.e. if you move a leg down and the move don't complete, perhaps the robobuilder has touch with something. I think that this control is possible to compare the initial order to the wck and the real move do.

Nothing else for now ... :wink:

Thanks!
Well, this my wish list for the new version:

* sound sensor (like the action builder has)
* direct access to robobuilder sound sinthesiser
* "touch sensor", a mechanist to know if a wck movement really has been place, b.e. if you move a leg down and the move don't complete, perhaps the robobuilder has touch with something. I think that this control is possible to compare the initial order to the wck and the real move do.

Nothing else for now ... :wink:

Thanks!
pepep
Savvy Roboteer
Savvy Roboteer
Posts: 38
Joined: Sun Mar 28, 2010 7:14 pm

Post by l3v3rz » Mon May 17, 2010 6:08 pm

Post by l3v3rz
Mon May 17, 2010 6:08 pm

Well that will teach me to ask !!

sound sensor (and ir sensor) are something I am thinking about adding. Although I'm worried about the impact on speed. For the IR sensor it would have to be triggered by an interrupt and last values stored until read. Although at the moment that interrupt is off so it doesn't impact writting to wck bus. The sound sensor is harder - you need to sample the adc on the microphone for a period of time and then average to get sound level. So should that be running constantly or run when asked and you have a delay??

I don't think direct access to sound synth is possible - you can play any of the pre-defined sounds - but not create your own.

touch sensor - is something Ive been looking at with the gripper - basically you command the servo to move and then check to see if got there. try doing a (setServoPos x y z) followed by multiple (getServoPos x) and you'll see you can see the servo moving in real time.
Well that will teach me to ask !!

sound sensor (and ir sensor) are something I am thinking about adding. Although I'm worried about the impact on speed. For the IR sensor it would have to be triggered by an interrupt and last values stored until read. Although at the moment that interrupt is off so it doesn't impact writting to wck bus. The sound sensor is harder - you need to sample the adc on the microphone for a period of time and then average to get sound level. So should that be running constantly or run when asked and you have a delay??

I don't think direct access to sound synth is possible - you can play any of the pre-defined sounds - but not create your own.

touch sensor - is something Ive been looking at with the gripper - basically you command the servo to move and then check to see if got there. try doing a (setServoPos x y z) followed by multiple (getServoPos x) and you'll see you can see the servo moving in real time.
l3v3rz
Savvy Roboteer
Savvy Roboteer
Posts: 473
Joined: Fri Jul 18, 2008 2:34 pm

Post by pepep » Mon May 17, 2010 9:18 pm

Post by pepep
Mon May 17, 2010 9:18 pm

I think sound sensor really is a volume sensor. Then may be it works like the distance sensor: in a bit of time, you read and get the informatión it gives!

Synth: I thought than the preconfigurated sounds was in the firmware, and this is the unique rule for play a configurated sounds ... don't?

And touch: yes, is and idea, but is expensive in time terms to read the position of a servo every time you move it, mainly if you use .SyncPosSend method. Then, if this method return false or true if the movement is completed or no, then we ask for the current position ONLY when the movement is incomplete ...

Is only an idea!
I think sound sensor really is a volume sensor. Then may be it works like the distance sensor: in a bit of time, you read and get the informatión it gives!

Synth: I thought than the preconfigurated sounds was in the firmware, and this is the unique rule for play a configurated sounds ... don't?

And touch: yes, is and idea, but is expensive in time terms to read the position of a servo every time you move it, mainly if you use .SyncPosSend method. Then, if this method return false or true if the movement is completed or no, then we ask for the current position ONLY when the movement is incomplete ...

Is only an idea!
pepep
Savvy Roboteer
Savvy Roboteer
Posts: 38
Joined: Sun Mar 28, 2010 7:14 pm

Post by l3v3rz » Tue May 18, 2010 6:20 pm

Post by l3v3rz
Tue May 18, 2010 6:20 pm

Unfortunately the sound sensor is actually just a microphone connected to the ADC. It read it 50 times summing the values and divides by 10 to get the sound level.

The synthesizer doesn't get it from the firmware - the sounds are built into the chip itself. The CPU sends a simple command to the sound chip to play a sound.

You could run your own check after SynchPosend completes and compare it with what you asked. Not sure the library can offer much else. As you say its too time consuming to check after each send.

With Panda have you thought about trying to steer the bot, by changing the length of the stride - see if you ca get it to run in a circle for instance - or control using using a joystick ??

just some thoughts
Unfortunately the sound sensor is actually just a microphone connected to the ADC. It read it 50 times summing the values and divides by 10 to get the sound level.

The synthesizer doesn't get it from the firmware - the sounds are built into the chip itself. The CPU sends a simple command to the sound chip to play a sound.

You could run your own check after SynchPosend completes and compare it with what you asked. Not sure the library can offer much else. As you say its too time consuming to check after each send.

With Panda have you thought about trying to steer the bot, by changing the length of the stride - see if you ca get it to run in a circle for instance - or control using using a joystick ??

just some thoughts
l3v3rz
Savvy Roboteer
Savvy Roboteer
Posts: 473
Joined: Fri Jul 18, 2008 2:34 pm

PreviousNext
93 postsPage 5 of 71, 2, 3, 4, 5, 6, 7
93 postsPage 5 of 71, 2, 3, 4, 5, 6, 7