def example_manipulation_protobuf_list():

    # In protobuf, list are called repeated once they are affected to a python
    # variable they can be used as a normal list.

    # Take note that a repeated message field doesn't have an append() function, it has an
    # add() function that create the new message object.

    # For this example we will use those two messages
    # message Sequence {
    #     SequenceHandle handle = 1
    #     string name = 2
    #     string application_data = 3
    #     repeated SequenceTask tasks = 4
    # }

    # message SequenceTask {
    #     uint32 group_identifier = 1;
    #     Action action = 2;
    #     string application_data = 3;
    # }

    # To keep a clearer example the attribute action in SequenceTask message will be keep to default value

    # Here's 2 way to add to a repeated message field

    # Create the parent message
    sequence = Base_pb2.Sequence()
    sequence.name = "Sequence"

    # The extend way
    sequence_task_1 = Base_pb2.SequenceTask()
    sequence_task_1.group_identifier = 10
    action = sequence_task_1.action
    action = Base_pb2.Action()  # Using Action default constructor
    sequence.tasks.extend([sequence_task_1])  # Extend expect an iterable

    # Created for the add() function unique to repeated message field
    sequence_task_2 = sequence.tasks.add()
    sequence_task_2.group_identifier = 20
    action = sequence_task_2.action
    action = Base_pb2.Action()  # Using Action default constructor

    # Since sequence.task is a list we can use all the python toolset to
    # loop, iterate, interogate and print element in that list
    for i in range(len(sequence.tasks)):
        print("sequence ID with index : {0}".format(
            sequence.tasks[i].group_identifier))

    # The list still have the iterator proprety of python list so you can directly iterate
    # throught element without creating a iterator like previous example
    for task in sequence.tasks:
        print("sequence ID with object iterator : {0}".format(
            task.group_identifier))
def example_manipulation_protobuf_list():

    # In Google Protocol Buffer, 'repeated' is used to designate a list of indeterminate length. Once affected to a Python
    # variable they can be used in the same way as a standard list.

    # Note that a repeated message field doesn't have an append() function, it has an
    # add() function that create the new message object.

    # For this example we will use the following two messages
    # message Sequence {
    #     SequenceHandle handle = 1
    #     string name = 2
    #     string application_data = 3
    #     repeated SequenceTask tasks = 4
    # }

    # message SequenceTask {
    #     uint32 group_identifier = 1;
    #     Action action = 2;
    #     string application_data = 3;
    # }

    # For a clearer example the attribute action in SequenceTask message will be kept to default value

    # Here's two ways to add to a repeated message field

    # Create the parent message
    sequence = Base_pb2.Sequence()
    sequence.name = "Sequence"

    # The 'extend' way
    sequence_task_1 = Base_pb2.SequenceTask()
    sequence_task_1.group_identifier = 10
    action = sequence_task_1.action
    action = Base_pb2.Action()  # Using Action default constructor
    sequence.tasks.extend([sequence_task_1])  # Extend expect an iterable

    # Created for the add() function unique to repeated message field
    sequence_task_2 = sequence.tasks.add()
    sequence_task_2.group_identifier = 20
    action = sequence_task_2.action
    action = Base_pb2.Action()  # Using Action default constructor

    # Since sequence.task is a list we can use all the Python features to
    # loop, iterate, interogate and print elements in that list.
    for i in range(len(sequence.tasks)):
        print("sequence ID with index : {0}".format(
            sequence.tasks[i].group_identifier))

    # Lists have the iterator property of a Python list, so you can directly iterate
    # throught element without creating a iterator as in the previous example
    for task in sequence.tasks:
        print("sequence ID with object iterator : {0}".format(
            task.group_identifier))
Beispiel #3
0
def create_angular_action():
    print("Creating angular action")

    action = Base_pb2.Action()
    action.name = "Example angular action"
    action.application_data = ""

    angle_value = [0, 0, 0, 0, 0, 0, 0]
    for joint_id in range(7):
        joint_angle = action.reach_joint_angles.joint_angles.joint_angles.add()
        joint_angle.value = angle_value[joint_id]

    return action
Beispiel #4
0
def create_cartesian_action():
    print("Creating cartesian action")

    action = Base_pb2.Action()
    action.name = "Example cartesian action"
    action.application_data = ""

    cartesian_pose = action.reach_pose.target_pose
    cartesian_pose.x = 0.80  # (meters)
    cartesian_pose.y = 0  # (meters)
    cartesian_pose.z = 0.36  # (meters)
    cartesian_pose.theta_x = 10  # (degrees)
    cartesian_pose.theta_y = 90  # (degrees)
    cartesian_pose.theta_z = 10  # (degrees)

    return action
def angular_movement(base_client_service):
    print("Starting angular motion ...")

    action = Base_pb2.Action()
    action.name = "Example angular motion"
    action.application_data = ""

    angle_value = [0, 0, 0, 0, 0, 0, 0]  # arm straight up
    for joint_id in range(7):
        joint_angle = action.reach_joint_angles.joint_angles.joint_angles.add()
        joint_angle.joint_identifier = joint_id
        joint_angle.value = angle_value[joint_id]

    print("Executing action")
    base_client_service.ExecuteAction(action)

    print("Waiting 10 seconds to finish movement...")
    time.sleep(10)

    print("Angular movement finish")
def cartesian_movement(base_client_service):
    print("Starting Cartesian motion ...")

    action = Base_pb2.Action()
    action.name = "Example Cartesian motion"
    action.application_data = ""

    cartesian_pose = action.reach_pose.target_pose
    cartesian_pose.x = 0.80  # (meters)
    cartesian_pose.y = 0  # (meters)
    cartesian_pose.z = 0.36  # (meters)
    cartesian_pose.theta_x = 10  # (degrees)
    cartesian_pose.theta_y = 90  # (degrees)
    cartesian_pose.theta_z = 10  # (degrees)

    print("Executing action")
    base_client_service.ExecuteAction(action)

    print("Waiting 20 seconds for motion to finish ...")
    time.sleep(20)

    print("Cartesian motion ended")
def example_manipulation_protobuf_helpers():

    # Google offers some helpers with protobuf
    # We will cover some of them in this section

    # All the module google.protobuf documentation is available here:
    # https://developers.google.com/protocol-buffers/docs/reference/python/

    # First, the function include with message instance. We will cover the next function
    #     Clear
    #     MergeFrom
    #     CopyFrom

    # The Clear function is strainght forward it clear all the message attribute.

    # MergeFrom and CopyFrom have the same purpose, To duplicate data into another object.
    # The difference between them is CopyFrom will do a Clear before a MergeFrom.

    # For it's part MergeFrom will merge data if the new field is not empty.
    # In case of repeated, the content receive in parameter will be append

    # For this example, I'll used the Ssid message
    # message Ssid {
    #     string identifier = 1;
    # }

    # First I'll create 4 of them with unique string
    ssid_1 = Base_pb2.Ssid()
    ssid_1.identifier = ""

    ssid_2 = Base_pb2.Ssid()
    ssid_2.identifier = "123"

    ssid_3 = Base_pb2.Ssid()
    ssid_3.identifier = "@#$"

    # Now I'll Merge ssid_1 in ssid_2 and print the identifier of ssid_2
    ssid_2.MergeFrom(ssid_1)
    print("Content ssid_2: {0}".format(ssid_2.identifier))
    # output : Content ssid_2: 123

    # Now I'll Copy ssid_1 in ssid_3 and print the identifier of ssid_3
    ssid_3.CopyFrom(ssid_1)
    print("Content ssid_3: {0}".format(ssid_3.identifier))
    # output : Content ssid_3:

    # For more function visit the Class Message documentation
    # https://developers.google.com/protocol-buffers/docs/reference/python/google.protobuf.message.Message-class

    # From the protobuf library you can used the json_format module.
    # One useful function is the MessageToJson.
    # This function serialize the protobuf message to a json object it help alot when you want to print large object in
    # a human readable way.

    # Here's an example with the following two message
    # message Sequence {
    #     SequenceHandle handle = 1
    #     string name = 2
    #     string application_data = 3
    #     repeated SequenceTask tasks = 4
    # }

    # message SequenceTask {
    #     uint32 group_identifier = 1;
    #     Action action = 2;
    #     string application_data = 3;
    # }

    # I quickly populate the message
    sequence = Base_pb2.Sequence()
    sequence.name = "A Name"

    for i in range(5):
        sequence_task = sequence.tasks.add()
        sequence_task.group_identifier = 10 * (
            i + 1)  # Some further function doesn't print if value = 0
        action = sequence_task.action
        action = Base_pb2.Action()  # Using Action default constructor

    # We need to import the module
    from google.protobuf import json_format

    # Now to get the json object
    json_object = json_format.MessageToJson(sequence)

    # Now you can print it
    print("Json object")
    print(json_object)
    # output:
    # Json object
    # {
    #   "name": "A Name",
    #   "tasks": [
    #     {
    #       "groupIdentifier": 10
    #     },
    #     {
    #       "groupIdentifier": 20
    #     },
    #     {
    #       "groupIdentifier": 30
    #     },
    #     {
    #       "groupIdentifier": 40
    #     },
    #     {
    #       "groupIdentifier": 50
    #     }
    #   ]
    # }

    # From the protobuf library you can used the text_format module
    # A useful function is the MessageToString. It has the same purpose of
    # MessageToJson convert the message to a human readable format

    # For the example I'll reuse the sequence object created in previous example

    # First import the module
    from google.protobuf import text_format

    # Now print
    print("Text format")
    print(text_format.MessageToString(sequence))