Control Cartesian Pose Using MATLAB

This section helps you to manipulate the KINOVA® Gen3 7-DoF Ultralightweight Robot arm and achieve desired Cartesian pose using MATLAB®. Execute the following commands sequentially in the MATLAB to manipulate the robot. As explained in KINOVA github page, the first part of the ROS topic, `'my_gen3’` might be different based on the robot name set during the `roslaunch` command.

Read the current Cartesian pose of the robot.

```baseSub = rossubscriber('/my_gen3/base_feedback'); baseMsg = baseSub.LatestMessage;```

Set the offset in the current Cartesian pose. First three values corresponds to the offset in `X`, `Y` and `Z` positions respectively and are in meters. The last three values correspond to the offset in rotation angles with respect to `X`, `Y` and `Z` axis respectively and are in degrees.

`offsets = [0.1 0.1 0.1 0 0 0];`

Create a service client and an empty ROS message for the ROS service `/my_gen3/base/play_cartesian_trajectory`.

`[cartTrajSrv,cartTrajMsg] = rossvcclient('/my_gen3/base/play_cartesian_trajectory');`

Set the desired Cartesian pose using the existing pose and offsets.

```cartTrajMsg.Input.TargetPose.X = baseMsg.Base.ToolPoseX + offsets(1); cartTrajMsg.Input.TargetPose.Y = baseMsg.Base.ToolPoseY + offsets(2); cartTrajMsg.Input.TargetPose.Z = baseMsg.Base.ToolPoseZ + offsets(3); cartTrajMsg.Input.TargetPose.ThetaX = baseMsg.Base.ToolPoseThetaX + offsets(4); cartTrajMsg.Input.TargetPose.ThetaY = baseMsg.Base.ToolPoseThetaY + offsets(5); cartTrajMsg.Input.TargetPose.ThetaZ = baseMsg.Base.ToolPoseThetaZ + offsets(6);```

Set the velocity constraints on the translation speed and rotational speed.

```speedConstraint = rosmessage('kortex_driver/CartesianSpeed'); speedConstraint.Translation = 0.5; % m/s speedConstraint.Orientation = 45; % deg/s cartTrajMsg.Input.Constraint.OneofType.Speed = speedConstraint;```

Call the service to move the robot.

`call(cartTrajSrv,cartTrajMsg);`