Control Individual Joint Angle of KINOVA Gen3 Robot
This example shows you how to connect to the KINOVA Gen3 7-DoF Ultralightweight Robot arm with Simulink® using Robot Operating System (ROS). This includes ROS message Subscribe and Publish blocks to get feedback from the robot and then send commands to the robot to reach a particular joint configuration.
Products Required
MATLAB®
Simulink
Robotics System Toolbox™
ROS Toolbox
Hardware Required
KINOVA® Gen3 Robot
Introduction
Robotics System Toolbox Support Package for KINOVA Gen3 Manipulators enables you to control manipulators using MATLAB and Simulink. This support package utilizes ROS packages provided by robot manufacturers to acquire various sensor data, simulate robot models, and control the robot. You can prototype algorithms and perform simulations of these robots using rigid body tree models from Robotics System Toolbox or Simscape™ Multibody™ robot models. This support package also allows you to connect with the robot hardware to test and validate your algorithms.
In this example, sensor_msgs/JointState ROS message is used to get current joint configuration of Kinova Gen3 robot.
Prerequisites
If you are new to Simulink, watch the Simulink Quick Start.
Perform the initial of the support package using Hardware Setup screens and select ROS interface in step 2.
Refer to Connect to the Kinova Gen3 Robot and Initiate Required ROS Nodes to Control the Robot for information on the communication interface between MATLAB and the robot. Execute the steps to initiate required ROS nodes.
Model
Open the manipdemo_setJointAnglesROS model.
The model consists of a ROS subscriber block which is configured for /my_gen3/joint_states
ROS topic. As explained in the GitHub page of Kinova Robotics, the first part of the ROS topic, 'my_gen3' might be different based on the robot name set during the roslaunch command. Current joint angles are extracted from the received message and then converted to degrees. Further, user specified offset in each joint angle is added to the current value and given to the Send Joint Trajectory subsystem.
Send Joint Trajectory
This subsystem consists of three different blocks. The Blank ROS message block, first from the left, is configured to create a blank message for kortex_driver/PlayJointTrajectoryRequest
ROS service request. The MATLAB function block packJointTraj, assigns various values such as desired joint configuration, type of constraint, and maximum velocity to blank message fields. The call service block is configured for /my_gen3/base/play_joint_trajectory
service and sends commands to robot to reach the desired joint configuration.
Run the Model
Note: Ensure that the E-STOP is close to you to stop the movement of robot, as the robot moves according to the specified offset.
After launching required ROS nodes and connecting to the ROS network, click Simulate on the Simulink toolbar and then click Run. The robot will not move from the current position at the start as there is no change in the joint angle offset. Now change the offset values and apply the change. This triggers the Send Joint Trajectory subsystem and the robot moves to the desired joint angle configuration.