-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSourceDestinationPublisher.cs
81 lines (67 loc) · 2.6 KB
/
SourceDestinationPublisher.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
using System;
using RosMessageTypes.Geometry;
using RosMessageTypes.NiryoMoveit;
using Unity.Robotics.ROSTCPConnector;
using Unity.Robotics.ROSTCPConnector.ROSGeometry;
using Unity.Robotics.UrdfImporter;
using UnityEngine;
public class SourceDestinationPublisher : MonoBehaviour
{
// for niryo
// public static readonly string[] LinkNames =
// { "world/base_link/shoulder_link", "/arm_link", "/elbow_link", "/forearm_link", "/wrist_link", "/hand_link" };
// for panda
public static readonly string[] LinkNames =
{ "world/panda_link0/panda_link1", "/panda_link2", "/panda_link3",
"/panda_link4", "/panda_link5", "/panda_link6", "/panda_link7"}; // "panda_hand"
int k_NumRobotJoints = LinkNames.Length;
// Variables required for ROS communication
[SerializeField]
string m_TopicName = "/niryo_joints";
[SerializeField]
GameObject m_NiryoOne;
[SerializeField]
GameObject m_Target;
[SerializeField]
GameObject m_TargetPlacement;
readonly Quaternion m_PickOrientation = Quaternion.Euler(90, 90, 0);
// Robot Joints
UrdfJointRevolute[] m_JointArticulationBodies;
// ROS Connector
ROSConnection m_Ros;
public void Start()
{
// Get ROS connection static instance
m_Ros = ROSConnection.GetOrCreateInstance();
m_Ros.RegisterPublisher<NiryoMoveitJointsMsg>(m_TopicName);
m_JointArticulationBodies = new UrdfJointRevolute[k_NumRobotJoints];
var linkName = string.Empty;
for (var i = 0; i < k_NumRobotJoints; i++)
{
linkName += LinkNames[i];
m_JointArticulationBodies[i] = m_NiryoOne.transform.Find(linkName).GetComponent<UrdfJointRevolute>();
}
}
public void Publish()
{
var sourceDestinationMessage = new NiryoMoveitJointsMsg();
for (var i = 0; i < k_NumRobotJoints; i++)
{
sourceDestinationMessage.joints[i] = m_JointArticulationBodies[i].GetPosition();
}
// Pick Pose
sourceDestinationMessage.pick_pose = new PoseMsg
{
position = m_Target.transform.position.To<FLU>(),
orientation = Quaternion.Euler(90, m_Target.transform.eulerAngles.y, 0).To<FLU>()
};
// Place Pose
sourceDestinationMessage.place_pose = new PoseMsg
{
position = m_TargetPlacement.transform.position.To<FLU>(),
orientation = m_PickOrientation.To<FLU>()
};
// Finally send the message to server_endpoint.py running in ROS
m_Ros.Publish(m_TopicName, sourceDestinationMessage);
}
}