How do I detect if the GoPiGo3 is turning in Python?

I want a sound to play only when the robot is turning and have it stop when it stops turning. How do I do this?

How do you intend to do this? I mean how do you plan on playing the sound, with pygame?

You could wrap the turn function inside another one which would:

  1. start the sound
  2. do the turn with blocking=true
  3. stop the sound

I do not use pygame. I am using a cmd aplay string. IF the sound plays until done, that prevents the robot from stopping the turn.

I am using a remote button to turn, so I want the sound to play only while the button is pressed.

            while remote.get_remote_code()=="right":
                cmd = '''aplay /home/jupyter/"turn_signal.wav"'''
                call([cmd],shell=True)
                car.right()

This code makes the robot turn, and play a sound. I want the sound to play ONLY when the condition is true. I think the best way would be to detect if the robot is turning.

I cannot do pygame due to errors. I want to:

  1. Turn
  2. Play the sound until I stop turning (release the button)

I don’t think I’m completely following you. When running the code you’ve posted in one of your recent posts, the sound gets played every time the right button (whichever it is) on the remote is pressed. The moment it gets played is also the moment the robot goes to the right.
So, that clearly happens when that condition (of receiving a right command from the remote) is met, so what’s wrong with that?
Isn’t that the desired outcome?
Can you expand on that?

What errors? Can you show us some outputs alongside the code?

The sound causes the robot to not stop immediately when releasing the button. I want the sound and the turn to stop immediately when the button is released.

How long is your sound byte? That might be a factor too.

Well, in that case, I don’t think that’s possible. If my memory helps, the remote control won’t give you back a feedback when the button is released. It only gets detected when it’s pressed. Run the remote.get_remote_control function in a continuous loop and see what happens when you press on a button and then release it.

I want the robot to make a turn signal sound, like a car, when the button to turn is pressed, and have the sound stop when released. This sound I modified so I cannot share it. It is 1 second.

I try to load the sound, both with path and without, into a pygame.mixer.Sound object. I get something like “Cannot load file” when I run that line, so I can’t even play() it.

I’ve done pygame before, and it seems like GoPiGo is just not designed to run pygame.

Got it! I used pygame with an ogg file. It seems to not like wav files. So all I had to do is run the wav file through an online wav to ogg converter to get it working again! Now to have the sound stop when the button is released, which I want in my while true loop.

1 Like