23-02-2023, 11:20 AM
(This post was last modified: 23-02-2023, 11:21 AM by rohit_dhak.)
Hello,
So I am trying to control/change rope length using control input received from python.
I am successfully receiving the data from python side (checked it by debugging in unity console).
However now when I am trying to change the rope length using
I am not sure if I am doing anything wrong, Its just not working, control_ip is a float.
I have a script attached to cable from where I am getting the rope and cursor object into my main control script.
The main control script is as following:
Any help is much appreciated.
Thank You.
So I am trying to control/change rope length using control input received from python.
I am successfully receiving the data from python side (checked it by debugging in unity console).
However now when I am trying to change the rope length using
Code:
cursor.ChangeLength(control_ip);
I am not sure if I am doing anything wrong, Its just not working, control_ip is a float.
I have a script attached to cable from where I am getting the rope and cursor object into my main control script.
The main control script is as following:
Code:
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Text;
using System.Globalization;
using System.Net.Sockets;
using UnityEngine;
using Obi;
public class Control_main : MonoBehaviour
{
// ------------------------------------------------------------------------------------------------------------------------------------------------//
// Declaring variables and objects
// Rope and cursor objects to manipulate cable lengths
public ObiRope rope_1;
public ObiRope rope_2;
public ObiRope rope_3;
public ObiRope rope_4;
public ObiRopeCursor cursor_1;
public ObiRopeCursor cursor_2;
public ObiRopeCursor cursor_3;
public ObiRopeCursor cursor_4;
public float speed;
// Current cable lengths
public float c1_len;
public float c2_len;
public float c3_len;
public float c4_len;
// Robot object and position
public GameObject robot_obj;
public Vector3 robot_pos;
// Control input
public List<float> control_ip = new List<float>();
// Control input variables (data received from python)
public float c1_control_ip;
public float c2_control_ip;
public float c3_control_ip;
public float c4_control_ip;
// Control script objects
public GameObject c1;
public GameObject c2;
public GameObject c3;
public GameObject c4;
public GameObject listener;
public GameObject sender;
// Other scripts
public Control_C1 c1Script;
public Control_C2 c2Script;
public Control_C3 c3Script;
public Control_C4 c4Script;
public TCPListenPipe listenerScript;
public TCPSendPipe senderScript;
// Misc
public float delay = 10;
float timer;
bool running = true;
// Simulation Status
public string sim_stat = "sim_stat";
// ------------------------------------------------------------------------------------------------------------------------------------------------//
// Start method
public void Start()
{
// Waiting for simulation to be ready
StartCoroutine(sim_steady());
// Getting all required scene objects
GetSceneObjects();
}
// ------------------------------------------------------------------------------------------------------------------------------------------------//
// Coroutine to wait for the simulation to get to steady state
IEnumerator sim_steady()
{
sim_stat = "Simulation started"; // changing simulation status to "started"
Debug.Log("Simulation started");
sim_stat = "Waiting for simulation to be steady"; // changing simulation status to "waiting"
Debug.Log("Waiting for simulation to be steady");
yield return new WaitForSeconds(10);
sim_stat = "Simulation ready to use"; // changing simulation status to "ready to use"
Debug.Log("Simulation ready to use");
}
// ------------------------------------------------------------------------------------------------------------------------------------------------//
// Method to get scene objects and parameters
public void GetSceneObjects()
{
// Access cable objects
c1 = GameObject.Find("Cable1");
c2 = GameObject.Find("Cable2");
c3 = GameObject.Find("Cable3");
c4 = GameObject.Find("Cable4");
listener = GameObject.Find("TrainingEnv");
sender = GameObject.Find("TrainingEnv");
// Access other scripts
c1Script = FindObjectOfType<Control_C1>();
c2Script = FindObjectOfType<Control_C2>();
c3Script = FindObjectOfType<Control_C3>();
c4Script = FindObjectOfType<Control_C4>();
listenerScript = FindObjectOfType<TCPListenPipe>();
senderScript = FindObjectOfType<TCPSendPipe>();
// Getting rope and cursor objects
rope_1 = c1Script.rope1;
rope_2 = c2Script.rope2;
rope_3 = c3Script.rope3;
rope_4 = c4Script.rope4;
cursor_1 = c1Script.cursor1;
cursor_2 = c2Script.cursor2;
cursor_3 = c3Script.cursor3;
cursor_4 = c4Script.cursor4;
speed = c1Script.speed;
}
// ------------------------------------------------------------------------------------------------------------------------------------------------//
// Method to receive robot position
public void getRobPos()
{
// Getting robot object and position from TCPSendPipe
robot_obj = senderScript.robot;
robot_pos = senderScript.robPos;
}
// ------------------------------------------------------------------------------------------------------------------------------------------------//
// Method to get current cable lengths
public void getCableLen()
{
// Access cable lengths (from Cable control scripts - cable observations)
c1_len = c1Script.rope_c1;
c2_len = c2Script.rope_c2;
c3_len = c3Script.rope_c3;
c4_len = c4Script.rope_c4;
}
// ------------------------------------------------------------------------------------------------------------------------------------------------//
// Method to receive actions
public void Receive_actions()
{
// Access control inputs (from TCPListenPipe - data received from python)
c1_control_ip = listenerScript.c1_action;
c2_control_ip = listenerScript.c2_action;
c3_control_ip = listenerScript.c3_action;
c4_control_ip = listenerScript.c4_action;
}
// ------------------------------------------------------------------------------------------------------------------------------------------------//
// Method to perform control action
public void set_control()
{
while (c1_len != c1_control_ip)
{
Debug.Log("Changing Cable Lengths");
cursor_1.ChangeLength(c1_control_ip);
if(c1_len == c1_control_ip)
{
Debug.Log("Action Completed");
break;
}
}
}
// ------------------------------------------------------------------------------------------------------------------------------------------------//
// Method to print all data for debugging
public void Debugging_data()
{
Debug.Log("Current Cable Lengths: " + "\n");
Debug.Log("cable 1:" + c1_len + "\n" + "cable 2 :" + c2_len + "\n" + "cable 3 :" + c3_len + "\n" + "cable 4 :" + c4_len + "\n");
Debug.Log("Cable Control Inputs: " + "\n");
Debug.Log("c1_control_ip :" + c1_control_ip + "\n" + "c2_control_ip :" + c2_control_ip + "\n" + "c3_control_ip :" + c3_control_ip + "\n" + "c4_control_ip :" + c4_control_ip + "\n");
Debug.Log("Robot Position: " + "\n");
Debug.Log("position: " + robot_pos);
}
// ------------------------------------------------------------------------------------------------------------------------------------------------//
// Update method (performs continuous control operation)
void Update()
{
if (running)
{
if (sim_stat == "Simulation ready to use")
{
// Getting Control Actions
Receive_actions();
// Getting Current Cable Lengths
getCableLen();
// Getting Current Robot Position
getRobPos();
// Setting Control Actions
//set_control();
// Printing All Data
Debugging_data();
}
}
}
// ------------------------------------------------------------------------------------------------------------------------------------------------//
}
Any help is much appreciated.
Thank You.