# Help me on replacing setToRandomPositions to setVariableValues

Hi, I am following moveit_tutorials but I would like to change some of it for robot_model_and_robot_state.

I would like to replace setToRandomPositions to setVariableValues for Forward Kinematics but I don't know how to do it. Those function is from moveit::core::RobotState Class Reference. I want to provide the specific values for Forward Kinematics, not the random value. Could you give me an example how I can replace setToRandomPositions to setVariableValues with values of [3.0, 3.0, 3.0]

Here is the code I am working on it.

#include <ros/ros.h>

// MoveIt
#include <moveit/robot_model/robot_model.h>
#include <moveit/robot_state/robot_state.h>
#include <sensor_msgs/JointState.h>
int main(int argc, char** argv)
{
ros::init(argc, argv, "robot_model_and_robot_state_tutorial");
ros::AsyncSpinner spinner(1);
spinner.start();
ROS_INFO("Model frame: %s", kinematic_model->getModelFrame().c_str());

robot_state::RobotStatePtr kinematic_state(new robot_state::RobotState(kinematic_model));
kinematic_state->setToDefaultValues();
const robot_state::JointModelGroup* joint_model_group = kinematic_model->getJointModelGroup("arm");

const std::vector<std::string>& joint_names = joint_model_group->getVariableNames();

// Get Joint Values
// ^^^^^^^^^^^^^^^^

std::vector<double> joint_values;
kinematic_state->copyJointGroupPositions(joint_model_group, joint_values);
for (std::size_t i = 0; i < joint_names.size(); ++i)

{
ROS_INFO("Joint %s: %f", joint_names[i].c_str(), joint_values[i]);
}

// Forward Kinematics
// ^^^^^^^^^^^^^^^^^^
kinematic_state->setToRandomPositions(joint_model_group);

/* Print end-effector pose. Remember that this is in the model frame */
ROS_INFO_STREAM("Translation: " << end_effector_state.translation());
ROS_INFO_STREAM("Rotation: " << end_effector_state.rotation());
// Inverse Kinematics
// ^^^^^^^^^^^^^^^^^^

// We can now solve inverse kinematics (IK)
// To solve IK, we will need the following:
//
//  * The desired pose of the end-effector (by default, this is the last link in the "panda_arm" chain):
//    end_effector_state that we computed in the step above.
//  * The timeout: 0.1 s
double timeout = 0.1;
bool found_ik = kinematic_state->setFromIK(joint_model_group, end_effector_state, timeout);

// Now, we can print out the IK solution (if found):
if (found_ik)

{
kinematic_state->copyJointGroupPositions(joint_model_group, joint_values);
for (std::size_t i = 0; i < joint_names.size(); ++i)
{
ROS_INFO("Joint %s: %f", joint_names[i].c_str(), joint_values[i]);
}
}
else
{
ROS_INFO("Did not find IK solution");
}

// Get the Jacobian
// ^^^^^^^^^^^^^^^^
// We can also get the Jacobian from the :moveit_core:RobotState.
Eigen::Vector3d reference_point_position(0.0, 0.0, 0.0);
Eigen::MatrixXd jacobian;
kinematic_state->getJacobian(joint_model_group,