Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

NorthernStars/NAO-Communication-server

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

81 Commits

Repository files navigation

NAO-Communication-server

Python server for NAO Communication project

Installation

Copy content of src folder into new folder named naocom inside the home folder on the NAO (/home/nao/naocom). Load the programms inside choregraphe folder with Choregraphe and upload them to your NAO. Set them as default and start them using Choregraphe.

The NAO-Com Android App (https://github.com/NorthernStars/NAO-Com) can install the server automatically.

Usage

You can start the server using python command:

python communication_server.py

You can use several command line arguments to configure the communication sevrer. Use following command for more information:

python communication_server.py -h

Implementing own commands

The communication server already allows to stimulate custom ALMemory key values. The recommended way to implement own features or commands is to add a custom ALMemory key and let your own program (Choreographe, Python, C++, ...) listens to.

Implementing own commands as command classes (alternative)

You can also create new build in commands. They are organized as own classes inside src/commands/usrcommands folder. Each class needs to set the cmd attribute in its constructor. Like:

def __init__(self):
 self.cmd = "OPEN_HAND"

The cmd attribute defines which command string starts the class. If the server receives a command for a registered command class, it tries to start it's exe function as new thread. The exe function receives optional command arguments and server object to be able to send a response. The functions header should look like this:

def exe(self, args=None, server=None):
 # your code here

You can use the server object to send data back to the client using it's send function:

server.send("your data string here")

Data can be any object that can be conferted into a string and that the remote client understands.

Register own commands

To register your own command inside the server, add it to the commands list inside src/commands/Command.py

NAOCommand.lst.append( yourmodule.YourClass() )

Also add your commands class name to the src/commands/usrcommands/init.py

Protocol

Communication server accepts JSON formatted data over UDP connections. Multiple clients can connect to a server. And the server automatically creates a socket on every network interface available. Every data request package send to the server has to look like this:

{'command': '<COMMAND>', 'commandArguments': [:<ARGS>]}

command must be a valid command string. commandArguments can also be an empty list if no command arguments are used.

After establishing connection, the server waits for a SYS_CONNECT command (see build-in commands below). On every request the server sends back a data response packege containing following information:

{
 'request': <request data package>,
 'requestSuccessfull': <true if command was executed successful>,
 'revision': <communication servers revision>,
 'naoName': <robots name>,
 'batteryLevel': <battery level>,
 'lifeState': <robots life-state>,
 'stiffnessData': <dictionary of robots joint stiffnesses>,
 'audioData': <dictionary of robots audio data>,
 'customMemoryEvents': <dictionary of custom memroy events> }
}

Hint: IPv6 addresses are used, but currently are (why ever) not working!

Build-in commands

The following commands are hard programmed inside the server.

  • SYS_CONNECT: For connection handshake with server. Has to be send after connecting to the server.
  • SYS_DISCONNECT: To disconnect from server
  • SYS_SET_REQUIRED_DATA: Set required system data. Requires an array of string as arguments to define system data that should be send. Following values are accepted.
    • stiffnessData: stiffness data of joints
    • masterVolume: system overall sound volume
    • playerVolume: audio player volume
    • speechVolume: voice volume
    • speechVoice: selected voice name
    • speechLanguage: selected voice language
    • speechLanguagesList: list of available languages
    • speechVoicesList: list of available voices
    • speechPitchShift: pitch shift of text-to-speech
    • speechDoubleVoice: double voice value
    • speechDoubleVoiceLevel: double voice effect level
    • speechDoubleVoiceTimeShift: double voice time shift value
  • SYS_GET_INFO: Request to send system information

Hint: some system data, like battery level, will always be transmitted.

About

Python server for NAO Communication project

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

AltStyle によって変換されたページ (->オリジナル) /