Compliant Movement Primitives in a Bimanual Setting

Compliant Movement Primitives in a Bimanual Setting

Aleksandar Batinica, Bojan Nemec, Aleš Ude, Mirko Raković and Andrej Gams *This work was supported by the Slovenian Research Agency project ARRS BI-RS16-17-048.Aleksandar Batinica and Mirko Raković are with the Faculty of Technical Sciences, University of Novi Sad, Novi Sad, Serbia. batinica@uns.ac.rsBojan Nemec, Aleš Ude and Andrej Gams are with Humanoid and Cognitive Robotics Lab, Dept. of Automatics, Biocybernetics and Robotics, Jožef Stefan Institute, Ljubljana, Slovenia. name.surname@ijs.si
Abstract

Simultaneously achieving low trajectory errors and compliant control without explicit models of the task was effectively addressed with Compliant Movement Primitives (CMP). For a single-robot task, this means that it is accurately following its trajectory, but also exhibits compliant behavior in case of perturbations. In this paper we extend this kind of behavior without explicit models to bimanual tasks. In the presence of an external perturbation on any of the robots, they will both move in synchrony in order to maintain their relative posture, and thus not exert force on the object they are carrying. Thus, they will act compliantly in their absolute task, but remain stiff in their relative task. To achieve compliant absolute behavior and stiff relative behavior, we combine joint-space CMPs with the well known symmetric control approach. To reduce the necessary feedback reaction of symmetric control, we further augment it with copying of a virtual force vector at the end-effector, calculated through the measured external joint torques. Real-world results on two Kuka LWR-4 robots in a bimanual setting confirm the applicability of the approach.

I Introduction

Until recently robots have been exclusive to industrial environments. Due to high stiffness and position control to accomplish accurate execution of their given tasks, robots were deemed hazardous to humans and unexpected objects in their workspace and therefore confined to cages [1]. The development of robotics has led to the notion of collaborative robotics, where both the human and robot share their workspace to accomplish a task [2]. Collaborative robotics spans beyond the factory work-floor to everyday human environments, such as household, hospitals, etc., and includes also bimanual and humanoid robots.

In shared workspaces safety of the human is of primary concern. One approach to ensuring safety is through the compliance of the robot. This can be ensured through contact detection, for example using an artificial tactile skin [3]. Passive compliance can be achieved with elastic elements, which can even be actively adapted, for example with variable stiffness actuators [4]. Compliance can also be achieved by implementing appropriate active torque strategies, which rely on comparing the actual torques and the required theoretical torques [5]. However, this requires the correct dynamic model of not only the robot, but also of each task and task variation. Models of the task dynamics are often not available or hard to obtain [6].

One way of mitigating the need to develop dynamical models of tasks is to learn or record the specific required torques for the given task with learning by imitation. These torques are then applied for the repetition of the exact same task. The framework of Compliant Movement primitives (CMPs) [7], applicable to robots with active torque control, utilizes this approach. The method was extended to generalize between a set of learned situations in order to generate the torques for a new task variation, such as a different load or speed. Thus, a single robot was able to perform a wide variety of task variations through direct joint-position and joint-torque control, with low trajectory errors but compliantly in case of an external perturbation. In this paper we extend the original CMP approach to bimanual tasks.

Fig. 1: A person interacting with a compliant bimanual robot setup, where the bimanual task is preserved.

I-a Problem Statement

In this paper we investigate compliant control of a bimanual robotic system without explicit dynamical models of the task. Therefore the control of the bimanual system must enable:

  • synchronous bimanual behavior with high relative robot-robot position error rejection,

  • compliant behavior of the bimanual system in case of external perturbations, and

  • low trajectory tracking errors when there are no perturbations.

  • This must be achieved without explicit dynamical models, but with the use of task-specific torques within the framework of CMPs.

I-B Related Work

Related work can be separated into two distinct topics: compliant control and bimanual tasks.

Compliant control typically relies on explicit dynamics of the robot and the task [8]. However, besides the above-mentioned CMPs, which are at the core of this paper, similar approaches that rely on task-specific models have emerged. For example in [9] tactile sensors were used to determine the force of contact with the environment on the iCub robot. This information was used calculate the joint-torques from the measured arm pose, and use them in a feed-forward manner in control. Similarly, joint torques along the kinematic trajectory were encoded as DMPs and used as the feed-forward signal to increase the accuracy in the next execution of the in-contact task in [10].

Bimanual control of robots can be either asymmetric or symmetric. While the former controls each robot independently, the latter considers both robots as a single system. An example of an asymmetric control scheme using motion primitives is described in [11]. There the robots are coupled through feed-forward signals learned in a few iterations from force-feedback. However, the robots are stiff. A system that combines bimanual robot operation based on dynamical systems was presented in [12]. In the paper the motion of robotic arms is adapted for coordinated bimanual receiving/intercepting an object. The system also relies on a virtual object to generate the necessary motions.

On the other hand, a symmetric system can fully characterize a cooperative operational space and allow the user to specify the task in relative and absolute coordinates, resulting in geometrically meaningful motion variables defined at the position/orientation level [13]. An example of such is [14], where a human-robot cooperation scheme for bimanual robots was presented. Similar to our proposed algorithm, [14] relies on separately defining the gains for absolute and relative motion, however it does not allow for low trajectory tracking errors when the absolute gains are set low. Other physical human-robot interaction schemes were investigated in the past, for example in [15, 16, 17].

In the next Section we introduce the CMP framework. Section III gives the basics on the bimanual kinematics explains the complete controller. Applicability of the approach is shown through results in Section IV. Various aspects of the approach are discussed in Section V.

Ii Compliant Movement Primitives

Ii-a Robot Control

The controller of an impedance-controlled robot, such as the Kuka LWR-4 robot [18], is defined by

(1)

where is the control torque vector sent to the actuators, is a diagonal joint-stiffness matrix, and are the vectors of the desired and measured joint positions, respectively, is a diagonal damping matrix, and are the desired and measured vectors of joint velocities, respectively, and represents the robot dynamics and all the non-linearities occurring in the robot (Coriolis, friction, …)

The robot can be made compliant by lowering the stiffness (), however, this also lowers the trajectory tracking capability of the robot. To compensate, feed-forward torques are added to the motor torque to preserve trajectory tracking, resulting in

(2)

Typically, feed-forward torques are calculated from an explicit dynamical model. However, for specific, repeatable, tasks, we can rely on specific torques to provide low trajectory tracking errors. An example of such is the CMP framework [7], which associates the desired kinematic behavior with the corresponding joint torques for a specific task parameter. These corresponding joint torques are learned for the specific case, and not generally applicable.

Ii-B Compliant Movement Primitives

For the sake of completeness we provide a brief description of CMPs. For details see [7].

A CMP cobines desired joint motion trajectories (joint positions ) and corresponding joint torque signals

(3)

Joint positions for all degrees-of-freedom (DOF) are obtained from demonstration, for example through imitation, while joint torques are recorded from a stiff execution. Note that task-specific torques are gained by substracting the known robot’s from the actual measured torques at robots joints

(4)

A short discussion on this is in Section V.

Joint positions are encoded as dynamic movement primitives (DMPs) [19], consisting of a linear part and a nonlinear forcing term composed of a combination of weighted kernel functions. The corresponding torques are encoded as only a combination of radial basis functions (RBFs). We here omit the equations for lack of space. However, both are dependent on the same phase signal. The weights of the DMP forcing term and the weights of the RBF (in short) define their signals. We again refer the reader to [7] for details.

CMPs provide the reference trajectories and torque profiles in joint space. However, the relation between the robots in a bimanual task is in task space and kinematic transformations are needed. Bimanual kinematics is presented in the next section. Note that when the robots are redundant for the task and offer more than one solution, we need to make sure that the robot is in the correct, desired posture. A discussion on redundancy is provided in Section V.

Iii Symmetric Robot Control

This section shows the basic kinematics of a bimanual system. For a more complete description we refer the reader to [13].

Fig. 2: Schematic of a bimanual system’s kinematics.

Iii-a Kinematic Control of a Bimanual System

The basic kinematic schematic of a bimanual system with relevant coordinate frames is shown in Fig. 2. The coordinate frames are labelled as , where the subscript stands for one of the following options: – world, -th robot tool-center-point (TCP), -th robot base, – absolute. Note that is the inertial coordinate frame of the system. The relation between these coordinate frames is given in the form of , where stands for either the position vector , or the rotation matrix R. The subscript is the self index, and the superscript is the index of the coordinate frame in which is described in. The robots parameters that are described in its own coordinate frame have no superscript.

The two most common approaches to bimanual control are 1) asymmetric and 2) symmetric control. Asymmetric control controls each robot end-effector (or TCP) independently of the other, with synchronized trajectories [11]. For control in a 6 DOF bimanual task, each of the robots has to control its end-effector in 6 DOF.

Symmetric control, on the other hand, splits the desired movement so that each robot does half of the movement [13]. In this case, the task description is separated into absolute and relative motion. The absolute coordinates (6 DOF) describe the position and orientation of a common coordinate frame of the robots in reference to the inertial (world) coordinate frame. However, the relative coordinates (6 DOF) describe the position and orientation of one robot TCP relative to the other. This is described by

(5)
(6)
(7)
(8)

In (6), and are, respectively, the unit vector and the angle that realize the rotation described by .

To achieve relative motion independent of the absolute motion we use

(9)

By taking the time derivatives of (5) – (8) we gain

(10)
(11)
(12)
(13)

Thus we can implement differential kinematics, which can be applied for inverse kinematics calculation. For single robots we have

(14)

where and are the vectors of position and angular velocity of the robot end-effector, respectively. is the vector of angular velocities in joint space.

For the coupled bimanual system we combine (10) and (11) with (14). We get

(15)
(16)

Also, by combining (12) and (13) with (14), we can derive

(17)
(18)

Merging (15) and (17) results in:

(19)

where

(20)

Thus we can iteratively calculate the inverse kinematics using

(21)

In case of redundancy, secondary tasks can be added through the null-space of the J. In (21) is the vector of angular velocities, is the vector of task space errors, is the vector of desired task space velocities, K is a diagonal gain matrix, I is a identity matrix, J is the previously described Jacobian matrix and is a vector of desired joint space velocities of lower priority used in case of a redundant system. The sign is used to annotate the Moore-Penrose pseudo-inverse. The errors and desired velocities are calculated by

(22)
(23)
(24)
(25)

where the subscript suffix stands for desired, is the skew-symmetric operator and are, respectively, the first, second and third column of a rotation matrix. i.e. .

Iii-B Symmetric Bimanual Torque Controller

Now that we have defined the relevant kinematic variables, we can use these to implement a symmetric bimanual torque controller. The derivation of this controller is thoroughly described in [13].

Instead of calculating the desired joint positions to control the behavior of the robot, we calculate the joint torques. The controller is defined by

(26)

Just as in the kinematic case, and are diagonal gain matrices for stiffness and damping, respectively (6 DOF for the absolute and 6 for the relative task), with gains or , respectively, on the diagonals. A low will result in compliant behavior for task DOF , which also means that trajectory tracking in task DOF results in high errors.

The controller increases joint torques based on the error in task space. Since the gains are decoupled for separate DOFs, in case of low gains for the absolute DOFs, the robot will be compliant in absolute space, but stiff in relative space. However, it will also not be able to track the desired trajectories in the absolute space. As described in Section II, trajectory tracking is ensured through the torque part of CMPs.

The drawback of this controller is that symmetric control changes the torques of both manipulators. This means that pushing on one robot will result in additional torques in both robots, appearing in order to to neutralize the perturbation. A push on a robot, for example from an unintentional collision, will thus result in less compliant behavior of the bimanual system. To increase the compliancy of the bimanual system, we introduce also a virtual force translation.

Iii-C Virtual Force Translation

Through measuring of joint torques we can estimate the end-effector force using the virtual work theorem. In a general case it states

(27)

In case of a perturbation on one robot, we can thus estimate the end-effector force of one manipulator using (27). We can now apply the same end-effector force through the joint torques to the other robot. Thus we have

(28)

From (27) we get

(29)

and substituting (29) into (28) we get

(30)

from which we can derive

(31)
(32)

It should be noted that only the virtual torques caused by the perturbation should be translated to the other robot. These are calculated by

(33)

Substituting this into (31) and (32) we finally get

(34)

We can see in (34) that a perturbation on robot 2 results in changed control torques in robot 1.

Iii-D CMP-based Bimanual control

We now have all the necessary components to construct a controller that satisfies our problem statement. Relying on (2), repeated here

we use the feed-forward and reduce and to achieve compliance, but still preserve accurate trajectory tracking for specific, learned tasks.

Feed-forward torques are now composed of three components

(35)

The pre-recorded or learned task torque ensures trajectory tracking. It is the direct output of the CMP. However, the reference joint trajectories are calculated from the task-space trajectories using (21). Again note that the inverse kinematics solution needs to match the posture of the robot during the demonstration111Even though we used a 14 DOF system in our experiments, we only used 12 DOF, locking the rotation of the 3rd axis on both robots. Thus our system was not redundant for the task.. This can be achieved using a secondary task

(36)

where stands for demonstrated and for actual joint positions, with a diagonal gain matrix.

The bimanual symmetric controller maintains the bimanual task. It is given with (26). To ensure that (26) does not act against (2), we set . In case of a redundant system we can set and put the posture of the robot in the secondary task with

(37)

with a diagonal gain matrix.

The virtual force translation reduces the necessary feedback reaction of (26) and thus increases compliance of the bimanual system. It is given with (34). Due to different postures of the robot, the copied virtual force only partially accounts for the perturbation, but still have a considerable effect on the compliance of the complete bimanual system.

In the ideal example, when there is no perturbation and no sensor noise, we can achieve the same behavior by only using the pre-recorded or learned task torque .

Iv Results

Our experimental setup consisted of two Kuka LWR-4 7 DOF robots, as shown in Fig. 1. In our experiments we locked the rotation of the 3rd axis on both robots. Thus our system was not redundant for the task. The system was controlled from Matlab at an average at 500Hz. The robot was controlled in joint-stiffness mode, with the stiffness set to 25 Nm/rad for all the used joints, which is even lower than what was used for single robots [7].

The task of the bimanual system was to perform a bimanual trajectory while conforming to the task description as given in Section I. The robots were each carrying a 2.5 kg load. To emphasize the maintaining of the relative task, they were not physically coupled through holding a common object. In this experiment we only controlled the relative position of the system, while not controlling the orientation. See also Section V.

When there are no perturbations, the system follows both the absolute and the relative tasks, even if we use only . This is shown In Fig. 3.

Fig. 3: Absolute (top) and relative errors when there is no perturbation to the system.

However, if perturbations occur, the system does not maintain the relative task, see Fig. 4

Fig. 4: Relative error (top) and end-effector perturbation (calculated from measured joint torques) when using just .

Including the symmetric bimanual torque controller will result in maintaining the relative task, but in reduced compliance, as shown in Fig. 5

Fig. 5: Absolute error (top), relative error (middle) and end-effector perturbation (calculated from measured joint torques) when using .
Fig. 6: Absolute error (top), relative error (middle) and end-effector perturbation (calculated from measured joint torques) when using .
Fig. 7: Absolute error (top), relative error (middle) and end-effector perturbation (calculated from measured joint torques) when using the complete controller, given by (35).
Fig. 8: The feed-forward torque on the first joint of the right robot, and separate components when using the complete controller, given by (35). See the bottom plot of Fig. 7 for the perturbation.
Fig. 9: Still images of the bimanual system performing a compliant bimanual task, with a person perturbing the motion.

Excluding the symmetric bimanual torque controller but including the virtual force translation, , as shown in Fig. 6, results in higher compliance, shown in higher absolute error for a smaller perturbation. On the other hand, the relative error is significantly higher than when using the symmetric bimanual torque controller.

The results in Table I show that the complete system was compliant and had the best error rejection for the relative task.

Entire controller
Absolute error [m] 0.0563 0.1516 0.0688
Relative error [m] 0.1629 0.0246 0.1433 0.0118
Perturbation [N] 27.6563 35.9163 21.4106 20.4994
TABLE I: Absolute and relative errors at maximum perturbation amplitude.

The complete system, given by (35) is compliant in the absolute task, but maintains low errors in the relative task despite the high forces. Thus it fully complies with the given problem statement in Section I. The results are shown in Fig. 7. The difference between including or excluding the virtual force translation is seen also at seconds 23 – 25 in the bottom plot of Fig. 7, where the right robot did not include it. Thus, a twice higher perturbation resulted in a much lower absolute error, meaning that the system was less compliant, when was not included.

In Fig. 8 we can see the complete and the contributions of separate components for the first joint of the right robot. We can see that and are similar. This means that when perturbing the left robot, we are not fighting of the right robot, because it it only has to account for a much smaller relative error, which remains due to different postures of the robots that make force-vector copy inaccurate. The results for other joints are less similar (not presented). We can also see that when there is no perturbation, the contribution of the bimanual symmetric torque controller and of the virtual force translation is 0. The plot also shows that is the actual learned feed-forward torque, while the other two react to perturbations.

Figure 9 shows a series of still photos showing the bimanual execution and the physical interaction of a person.

V DISCUSSION and CONCLUSION

We have shown how we can extend the CMP framework to include bimanual task execution. Even though the robots were not physically coupled through holding a rigid object, we showed that the system is compliant while maintaining the relative behavior of the robots. While the presented approach is applicable for a specific, pre-learned task, generalization has the potential to extend it for a wider region. Generalization of the bimanual CMP approach is part of our future work. Several other topics of the approach offer different possibilities.

CMPs in essence provide only one, or through generalization, a limited set of solutions. The question on whether it is better to invest more into the derivation of the dynamical model or simply learn the torque for a small set of task parameters is very valid. Typically, the dynamics of the robot can be calculated. Therefore CMPs only cover the dynamics of the task. If the task can easily be modeled, there is no advantage in using CMPs. The example with weights shown in the accompanying video could easily have been modelled. However, imagine a task that is very difficult to model, such as lifting a soft object or even a person. There, the model is difficult to obtain and there approaches such as CMPs are useful. Furthermore, if this object or person between the robots must not be pressed on from either side (squeezed) under any condition, bimanual CMP control as proposed in this paper is the correct tool.

Since the system relies on task space coordinates, but CMPs provide joint space trajectories, the mapping between the two needs to allow only one solution. In our experiments we made sure of that by locking one DOF of each robot, thus gaining a 12 DOF system for a 12 DOF task. However, when the robots are redundant for the task, kinematic mapping offers numerous solutions. Learning of torques for all solutions is not viable, as there could literally be infinite. As shown in Section III-D, maintaining the posture of the robot can be achieved through the secondary task. However, CMPs act more as an enabler for softer, compliant collisions and as such as a safety mechanism. Once perturbed, a dynamical motion (unlike quite static motion in the presented experiments) will not return to the original trajectory, because the torques will not align with kinematic variables anymore until the end of the motion. As such, we only need to make sure that the robot maintains the demonstrated posture during the motion and basically ignore the motion after the perturbation, if it occurs, because it will not return to the demonstrated motion.

Performing the experiments on the real robot needs foremost a fast control loop. The robot controller, provided by the manufacturer given by (2) runs at a very high frequency. If we move that to a system with a lower frequency, the operation is not smooth and may become unstable. This is specially evident for the maintaining of the relative orientations of the robot, which were not maintained in the experiments.

In the future we wish to, besides expanding the framework with generalization, also reduce the effect of the bimanual symmetric controller through modifying the virtual force translation to account for the different postures of the two robots.

References

  • [1] S. Haddadin, Towards Safe Robots. No. 90 in Springer Tracts in Advanced Robotics, Springer Berlin Heidelberg, 2014.
  • [2] S. Haddadin, A. Albu-Schaffer, and G. Hirzinger, “Requirements for Safe Robots: Measurements, Analysis and New Insights,” The International Journal of Robotics Research, vol. 28, pp. 1507–1527, aug 2009.
  • [3] P. Mittendorfer and G. Cheng, “Humanoid multi-modal tactile sensing modules,” IEEE Trans. Robot., vol. 27, no. 3, pp. 401–410, 2011.
  • [4] A. Bicchi and G. Tonietti, “Fast and "soft-arm" tactics [robot arm design],” IEEE Robot. Automat. Mag, vol. 11, no. 2, pp. 22–33, 2004.
  • [5] N. Hogan, “Stable execution of contact tasks using impedance control,” in Proc. IEEE Int. Conf. Robotics and Automation (ICRA), (Raleigh, NC, USA), pp. 1047–1054, 1987.
  • [6] T. Petrič, B. Curk, P. Cafuta, and L. Žlajpah, “Modelling of the robotic Powerball: a nonholonomic, underactuated and variable structure-type system,” Mathematical and Computer Modelling of Dynamical Systems, vol. 16, pp. 327–346, nov 2010.
  • [7] M. Deniša, A. Gams, A. Ude, and T. Petrič, “Learning compliant movement primitives through demonstration and statistical generalization,” IEEE/ASME Transactions on Mechatronics, vol. PP, 2016.
  • [8] J. Peters, K. Mülling, D. Kober, Jensand Nguyen-Tuong, and O. Krömer, Robotics Research: The 14th International Symposium (ISRR), ch. Towards Motor Skill Learning for Robotics, pp. 469–482. Berlin, Heidelberg: Springer Berlin Heidelberg, 2011.
  • [9] R. Calandra, S. Ivaldi, M. Deisenroth, and J. Peters, “Learning torque control in presence of contacts using tactile sensing from robot skin,” in IEEE-RAS 15th International Conference on Humanoid Robots (Humanoids), pp. 690–695, Nov 2015.
  • [10] F. Steinmetz, A. Montebelli, and V. Kyrki, “Simultaneous kinesthetic teaching of positional and force requirements for sequential in-contact tasks,” in IEEE-RAS 15th International Conference on Humanoid Robots (Humanoids), pp. 202–209, Nov 2015.
  • [11] A. Gams, B. Nemec, A. J. Ijspeert, and A. Ude, “Coupling movement primitives: Interaction with the environment and bimanual tasks,” IEEE Transactions on Robotics, vol. 30, pp. 816–830, Aug 2014.
  • [12] S. S. M. Salehian, N. Figueroa, and A. Billard, “Coordinated multi-arm motion planning: Reaching for moving objects in the face of uncertainty,” in Proceedings of Robotics: Science and Systems, (AnnArbor, Michigan), June 2016.
  • [13] P. Chiacchio and S. Chiaverini, Kinematic control of dual-arm systems. Springer, 1998.
  • [14] B. Nemec, N. Likar, A. Gams, and A. Ude, “Adaptive human robot cooperation scheme for bimanual robots,” in Advances in Robot Kinematics (J. Lenarcic and J. Merlet, eds.), pp. 385–393, INRIA, 2016.
  • [15] B. Adorno, P. Fraisse, and S. Druon, “Dual position control strategies using the cooperative dual task-space framework,” in IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS), (Taipei, Taiwan), pp. 3955–3960, 2010.
  • [16] A. Mörtl, M. Lawitzky, A. Kucukyilmaz, M. Sezgin, C. Basdogan, and S. Hirche, “The role of roles: Physical cooperation between humans and robots,” The International Journal of Robotics Research, vol. 31, no. 13, pp. 1656–1674, 2012.
  • [17] H. A. Park and C. S. G. Lee, “Extended cooperative task space for manipulation tasks of humanoid robots,” in IEEE International Conference on Robotics and Automation (ICRA), (Seattle, WA), pp. 6088–6093, 2015.
  • [18] R. Bischoff, J. Kurth, G. Schreiber, R. Koeppe, A. Albu-Schaeffer, A. Beyer, O. Eiberger, S. Haddadin, A. Stemmer, G. Grunwald, and G. Hirzinger, “The KUKA-DLR Lightweight Robot arm - a new reference platform for robotics research and manufacturing,” Robotics (ISR), 2010 41st International Symposium on and 2010 6th German Conference on Robotics (ROBOTIK), pp. 1–8, 2010.
  • [19] A. J. Ijspeert, J. Nakanishi, H. Hoffmann, P. Pastor, and S. Schaal, “Dynamical Movement Primitives: Learning Attractor Models for Motor Behaviors.,” Neural computation, vol. 25, pp. 328–73, 2013.
Comments 0
Request Comment
You are adding the first comment!
How to quickly get a good reply:
  • Give credit where it’s due by listing out the positive aspects of a paper before getting into which changes should be made.
  • Be specific in your critique, and provide supporting evidence with appropriate references to substantiate general statements.
  • Your comment should inspire ideas to flow and help the author improves the paper.

The better we are at sharing our knowledge with each other, the faster we move forward.
""
The feedback must be of minimum 40 characters and the title a minimum of 5 characters
   
Add comment
Cancel
Loading ...
139301
This is a comment super asjknd jkasnjk adsnkj
Upvote
Downvote
""
The feedback must be of minumum 40 characters
The feedback must be of minumum 40 characters
Submit
Cancel

You are asking your first question!
How to quickly get a good answer:
  • Keep your question short and to the point
  • Check for grammar or spelling errors.
  • Phrase it like a question
Test
Test description