From 7ca3e1235619927483fcf7fcd6f0a454d726e5af Mon Sep 17 00:00:00 2001 From: Devin Miller Date: Fri, 19 Feb 2021 17:44:23 -0800 Subject: [PATCH 01/13] Fixing issue with Demo.cs not working with new URDF Importer co-routine --- .../Assets/DemoScripts/Demo.cs | 74 ++++++++++--------- 1 file changed, 39 insertions(+), 35 deletions(-) diff --git a/tutorials/pick_and_place/PickAndPlaceProject/Assets/DemoScripts/Demo.cs b/tutorials/pick_and_place/PickAndPlaceProject/Assets/DemoScripts/Demo.cs index 8878ce80..348cb0c6 100644 --- a/tutorials/pick_and_place/PickAndPlaceProject/Assets/DemoScripts/Demo.cs +++ b/tutorials/pick_and_place/PickAndPlaceProject/Assets/DemoScripts/Demo.cs @@ -9,6 +9,7 @@ using RosSharp; using RosSharp.Control; using RosSharp.Urdf.Editor; +using Unity.EditorCoroutines.Editor; using UnityEditor; using UnityEngine; using Unity.Robotics.ROSTCPConnector; @@ -75,8 +76,10 @@ void Awake() { EditorApplication.LockReloadAssemblies(); SetupScene(); - SetupRos(); - CreateTrajectoryPlannerPubliser(); + AddRosMessages(); + ImportRobot(); + CreateRosConnection(); + CreateTrajectoryPlannerPublisher(); } void Update() @@ -104,31 +107,18 @@ void OnApplicationQuit() private void SetupScene() { // Instantiate the table, target, and target placement - GameObject table = InstantiatePrefab(tableName); - GameObject target = InstantiatePrefab(targetName); - GameObject targetPlacement = InstantiatePrefab(targetPlacementName); + InstantiatePrefab(tableName); + InstantiatePrefab(targetName); + InstantiatePrefab(targetPlacementName); // Adjust main camera GameObject camera = GameObject.Find(cameraName); camera.transform.position = cameraPosition; camera.transform.rotation = cameraRotation; - - // Import Niryo One with URDF importer - string urdfFilepath = Path.Combine(Application.dataPath, urdfRelativeFilepath); - ImportRobot(urdfFilepath, ImportSettings.convexDecomposer.unity); - - // Adjust robot parameters - Controller controller = GameObject.Find(niryoOneName).GetComponent(); - controller.stiffness = controllerStiffness; - controller.damping = controllerDamping; - controller.forceLimit = controllerForceLimit; - controller.speed = controllerSpeed; - controller.acceleration = controllerAcceleration; - GameObject.Find(baseLinkName).GetComponent().immovable = true; } // Tutorial Part 2 without the Publisher object - private void SetupRos() + private void AddRosMessages() { if (generateRosMessages) { @@ -152,19 +142,9 @@ private void SetupRos() scripts.AddRange(Directory.GetFiles(rosMessagesDirectory, scriptPattern, SearchOption.AllDirectories)); scripts.AddRange(Directory.GetFiles(externalScriptsDirectory)); RecompileScripts(scripts.ToArray()); - - // Create RosConnect - GameObject rosConnect = new GameObject(rosConnectName); - rosConnection = rosConnect.AddComponent(); - rosConnection.rosIPAddress = hostIP; - rosConnection.rosPort = hostPort; - rosConnection.overrideUnityIP = overrideUnityIP; - rosConnection.unityPort = unityPort; - rosConnection.awaitDataMaxRetries = awaitDataMaxRetries; - rosConnection.awaitDataSleepSeconds = awaitDataSleepSeconds; } - private void CreateTrajectoryPlannerPubliser() + private void CreateTrajectoryPlannerPublisher() { GameObject publisher = new GameObject(publisherName); dynamic planner = publisher.AddComponent(assembly.GetType(trajectoryPlannerType)); @@ -182,15 +162,39 @@ private GameObject InstantiatePrefab(string name) return gameObject; } - private void ImportRobot(string urdfFilepath, ImportSettings.convexDecomposer convexDecomposer) + private void CreateRosConnection() { - // Import Niryo One by URDF Importer - ImportSettings settings = new ImportSettings + // Create RosConnect + GameObject rosConnect = new GameObject(rosConnectName); + rosConnection = rosConnect.AddComponent(); + rosConnection.rosIPAddress = hostIP; + rosConnection.rosPort = hostPort; + rosConnection.overrideUnityIP = overrideUnityIP; + rosConnection.unityPort = unityPort; + rosConnection.awaitDataMaxRetries = awaitDataMaxRetries; + rosConnection.awaitDataSleepSeconds = awaitDataSleepSeconds; + } + + private void ImportRobot() + { + ImportSettings urdfImportSettings = new ImportSettings { choosenAxis = ImportSettings.axisType.yAxis, - convexMethod = convexDecomposer, + convexMethod = ImportSettings.convexDecomposer.unity }; - UrdfRobotExtensions.Create(urdfFilepath, settings); + // Import Niryo One with URDF importer + string urdfFilepath = Path.Combine(Application.dataPath, urdfRelativeFilepath); + // Create is a coroutine that would usually run only in EditMode, so we need to force its execution here + var robotImporter = UrdfRobotExtensions.Create(urdfFilepath, urdfImportSettings, false); + while (robotImporter.MoveNext()) {} + // Adjust robot parameters + Controller controller = GameObject.Find(niryoOneName).GetComponent(); + controller.stiffness = controllerStiffness; + controller.damping = controllerDamping; + controller.forceLimit = controllerForceLimit; + controller.speed = controllerSpeed; + controller.acceleration = controllerAcceleration; + GameObject.Find(baseLinkName).GetComponent().immovable = true; } // Credit to https://www.codeproject.com/Tips/715891/Compiling-Csharp-Code-at-Runtime From 20c001fd7002b6703d5ae152d71b56b6fd351e43 Mon Sep 17 00:00:00 2001 From: peifeng-unity <56408141+peifeng-unity@users.noreply.github.com> Date: Tue, 23 Feb 2021 00:25:34 +0000 Subject: [PATCH 02/13] remove unused import (#163) --- .../PickAndPlaceProject/Assets/DemoScripts/Demo.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/tutorials/pick_and_place/PickAndPlaceProject/Assets/DemoScripts/Demo.cs b/tutorials/pick_and_place/PickAndPlaceProject/Assets/DemoScripts/Demo.cs index 348cb0c6..0b4a591b 100644 --- a/tutorials/pick_and_place/PickAndPlaceProject/Assets/DemoScripts/Demo.cs +++ b/tutorials/pick_and_place/PickAndPlaceProject/Assets/DemoScripts/Demo.cs @@ -9,7 +9,6 @@ using RosSharp; using RosSharp.Control; using RosSharp.Urdf.Editor; -using Unity.EditorCoroutines.Editor; using UnityEditor; using UnityEngine; using Unity.Robotics.ROSTCPConnector; From 764885c4356065fcafe57e13734e2f3f262adaa5 Mon Sep 17 00:00:00 2001 From: peifeng-unity <56408141+peifeng-unity@users.noreply.github.com> Date: Wed, 24 Feb 2021 23:47:57 +0000 Subject: [PATCH 03/13] update package import urls for tcp connector and urdf importer (#166) --- tutorials/quick_setup.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tutorials/quick_setup.md b/tutorials/quick_setup.md index e7678516..c240031c 100644 --- a/tutorials/quick_setup.md +++ b/tutorials/quick_setup.md @@ -12,9 +12,9 @@ This page provides brief instructions on installing the Unity Robotics packages. ![](../images/packman.png) 1. Enter the git URL for the desired package. - 1. For the [ROS-TCP-Connector](https://github.com/Unity-Technologies/ROS-TCP-Connector), enter `https://github.com/Unity-Technologies/ROS-TCP-Connector.git`. - 1. For the [URDF-Importer](https://github.com/Unity-Technologies/URDF-Importer), enter `https://github.com/Unity-Technologies/URDF-Importer.git`. + 1. For the [ROS-TCP-Connector](https://github.com/Unity-Technologies/ROS-TCP-Connector), enter `https://github.com/Unity-Technologies/ROS-TCP-Connector.git?path=/com.unity.robotics.ros-tcp-connector#v0.2.0`. + 1. For the [URDF-Importer](https://github.com/Unity-Technologies/URDF-Importer), enter `https://github.com/Unity-Technologies/URDF-Importer.git?path=/com.unity.robotics.urdf-importer#v0.2.0`. 1. Click `Add`. -To install from a local clone of the repository, see [installing a local package](https://docs.unity3d.com/Manual/upm-ui-local.html) in the Unity manual. \ No newline at end of file +To install from a local clone of the repository, see [installing a local package](https://docs.unity3d.com/Manual/upm-ui-local.html) in the Unity manual. From 35d11922a67d2290f79b3b47989db599696142b2 Mon Sep 17 00:00:00 2001 From: vidurvij-Unity <60901103+vidurvij-Unity@users.noreply.github.com> Date: Thu, 25 Feb 2021 10:01:36 -0800 Subject: [PATCH 04/13] Update urdf_tutorial.md (#168) --- tutorials/urdf_importer/urdf_tutorial.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/tutorials/urdf_importer/urdf_tutorial.md b/tutorials/urdf_importer/urdf_tutorial.md index 2e7550e6..966610f5 100644 --- a/tutorials/urdf_importer/urdf_tutorial.md +++ b/tutorials/urdf_importer/urdf_tutorial.md @@ -19,8 +19,6 @@ - Click `Import` ## Using the Controller -- By default a robot imported using the URDF Importer is loaded without any constraints or controller. - - A controller is pre-built in Unity URDF Importer to help showcase the movement of robots in Unity. - To add the controller to an imported robot click the `Enable` button in the Inspector window in front of the `Controller Script` option. This will add a Controller Script, FKrobot and Joint Control at runtime. - To prevent the joints from slipping set the `Stiffness` and `Damping` to `100,000` and `10,000` respectively. - To be able to apply forces to the joints set the `Force Limit` to `10,000`. From 3825499f1a8c54c53f8c01a97063a612fb2da709 Mon Sep 17 00:00:00 2001 From: LaurieCheers-unity <73140792+LaurieCheers-unity@users.noreply.github.com> Date: Fri, 26 Feb 2021 10:19:08 -0800 Subject: [PATCH 05/13] Added M prefixes to docs (#167) --- tutorials/pick_and_place/2_ros_tcp.md | 12 ++++++------ tutorials/pick_and_place/3_pick_and_place.md | 12 ++++++------ .../Scripts/SourceDestinationPublisher.cs | 7 ++++--- .../Scripts/TrajectoryPlanner.cs | 18 +++++++++--------- .../Scripts_Part4/RealSimPickAndPlace.cs | 18 +++++++++--------- tutorials/ros_unity_integration/publisher.md | 2 +- tutorials/ros_unity_integration/service.md | 6 +++--- tutorials/ros_unity_integration/subscriber.md | 2 +- .../unity_scripts/RosPublisherExample.cs | 2 +- .../unity_scripts/RosServiceExample.cs | 8 ++++---- .../unity_scripts/RosSubscriberExample.cs | 2 +- 11 files changed, 45 insertions(+), 44 deletions(-) diff --git a/tutorials/pick_and_place/2_ros_tcp.md b/tutorials/pick_and_place/2_ros_tcp.md index 56d8d5f4..360a012d 100644 --- a/tutorials/pick_and_place/2_ros_tcp.md +++ b/tutorials/pick_and_place/2_ros_tcp.md @@ -55,7 +55,7 @@ To enable communication between Unity and ROS, a TCP endpoint running as a ROS n ![](img/2_robottraj.png) - - One new C# script should populate the `Assets/RosMessages/Moveit/msg` directory: RobotTrajectory. + - One new C# script should populate the `Assets/RosMessages/Moveit/msg` directory: MRobotTrajectory. This name is the same as the message you built, with an "M" prefix (for message). 1. Next, the custom message scripts for this tutorial will need to be generated. @@ -63,7 +63,7 @@ To enable communication between Unity and ROS, a TCP endpoint running as a ROS n ![](img/2_msg.png) - - Two new C# scripts should populate the `Assets/RosMessages/NiryoMoveit/msg` directory: NiryoMoveitJoints and NiryoTrajectory. NiryoMoveitJoints describes a value for each joint in the Niryo arm as well as poses for the target object and target goal. NiryoTrajectory describes a list of RobotTrajectory values, which will hold the calculated trajectories for the pick-and-place task. + - Two new C# scripts should populate the `Assets/RosMessages/NiryoMoveit/msg` directory: MNiryoMoveitJoints and MNiryoTrajectory. MNiryoMoveitJoints describes a value for each joint in the Niryo arm as well as poses for the target object and target goal. MNiryoTrajectory describes a list of RobotTrajectory values, which will hold the calculated trajectories for the pick-and-place task. > MessageGeneration generates a C# class from a ROS msg file with protections for use of C# reserved keywords and conversion to C# datatypes. Learn more about [ROS Messages](https://wiki.ros.org/Messages). @@ -73,7 +73,7 @@ To enable communication between Unity and ROS, a TCP endpoint running as a ROS n ![](img/2_srv.png) - - Two new C# scripts should populate the `Assets/RosMessages/NiryoMoveit/srv` directory: MoverServiceRequest and MoverServiceResponse. These files describe the expected input and output formats for the service requests and responses when calculating trajectories. + - Two new C# scripts should populate the `Assets/RosMessages/NiryoMoveit/srv` directory: MMoverServiceRequest and MMoverServiceResponse. These files describe the expected input and output formats for the service requests and responses when calculating trajectories. > MessageGeneration generates two C# classes, a request and response, from a ROS srv file with protections for use of C# reserved keywords and conversion to C# datatypes. Learn more about [ROS Services](https://wiki.ros.org/Services). @@ -86,7 +86,7 @@ To enable communication between Unity and ROS, a TCP endpoint running as a ROS n ```csharp public void Publish() { - NiryoMoveitJoints sourceDestinationMessage = new NiryoMoveitJoints(); + MNiryoMoveitJoints sourceDestinationMessage = new MNiryoMoveitJoints(); sourceDestinationMessage.joint_00 = jointArticulationBodies[0].xDrive.target; sourceDestinationMessage.joint_01 = jointArticulationBodies[1].xDrive.target; @@ -96,7 +96,7 @@ To enable communication between Unity and ROS, a TCP endpoint running as a ROS n sourceDestinationMessage.joint_05 = jointArticulationBodies[5].xDrive.target; // Pick Pose - sourceDestinationMessage.pick_pose = new RosMessageTypes.Geometry.Pose + sourceDestinationMessage.pick_pose = new MPose { position = target.transform.position.To(), // The hardcoded x/z angles assure that the gripper is always positioned above the target cube before grasping. @@ -104,7 +104,7 @@ To enable communication between Unity and ROS, a TCP endpoint running as a ROS n }; // Place Pose - sourceDestinationMessage.place_pose = new RosMessageTypes.Geometry.Pose + sourceDestinationMessage.place_pose = new MPose { position = targetPlacement.transform.position.To(), orientation = pickOrientation.To() diff --git a/tutorials/pick_and_place/3_pick_and_place.md b/tutorials/pick_and_place/3_pick_and_place.md index f6fd9498..5d525a8f 100644 --- a/tutorials/pick_and_place/3_pick_and_place.md +++ b/tutorials/pick_and_place/3_pick_and_place.md @@ -31,11 +31,11 @@ Steps covered in this tutorial includes invoking a motion planning service in RO ```csharp public void PublishJoints() { - MoverServiceRequest request = new MoverServiceRequest(); + MMoverServiceRequest request = new MMoverServiceRequest(); request.joints_input = CurrentJointConfig(); // Pick Pose - request.pick_pose = new RosMessageTypes.Geometry.Pose + request.pick_pose = new MPose { position = (target.transform.position + pickPoseOffset).To(), // The hardcoded x/z angles assure that the gripper is always positioned above the target cube before grasping. @@ -43,16 +43,16 @@ Steps covered in this tutorial includes invoking a motion planning service in RO }; // Place Pose - request.place_pose = new RosMessageTypes.Geometry.Pose + request.place_pose = new MPose { position = (targetPlacement.transform.position + pickPoseOffset).To(), orientation = pickOrientation.To() }; - ros.SendServiceMessage(rosServiceName, request, TrajectoryResponse); + ros.SendServiceMessage(rosServiceName, request, TrajectoryResponse); } - void TrajectoryResponse(MoverServiceResponse response) + void TrajectoryResponse(MMoverServiceResponse response) { if (response.trajectories != null) { @@ -71,7 +71,7 @@ Steps covered in this tutorial includes invoking a motion planning service in RO > The `response.trajectories` are received in the `TrajectoryResponse()` callback, as defined in the `ros.SendServiceMessage` parameters. These trajectories are passed to `ExecuteTrajectories()` and executed as a [coroutine](https://docs.unity3d.com/Manual/Coroutines.html): ```csharp - private IEnumerator ExecuteTrajectories(MoverServiceResponse response) + private IEnumerator ExecuteTrajectories(MMoverServiceResponse response) { if (response.trajectories != null) { diff --git a/tutorials/pick_and_place/Scripts/SourceDestinationPublisher.cs b/tutorials/pick_and_place/Scripts/SourceDestinationPublisher.cs index f0aa675c..c5e0a6b2 100644 --- a/tutorials/pick_and_place/Scripts/SourceDestinationPublisher.cs +++ b/tutorials/pick_and_place/Scripts/SourceDestinationPublisher.cs @@ -2,6 +2,7 @@ using UnityEngine; using Unity.Robotics.ROSTCPConnector; using Unity.Robotics.ROSTCPConnector.ROSGeometry; +using RosMessageTypes.Geometry; public class SourceDestinationPublisher : MonoBehaviour { @@ -51,7 +52,7 @@ void Start() public void Publish() { - NiryoMoveitJoints sourceDestinationMessage = new NiryoMoveitJoints(); + MNiryoMoveitJoints sourceDestinationMessage = new MNiryoMoveitJoints(); sourceDestinationMessage.joint_00 = jointArticulationBodies[0].xDrive.target; sourceDestinationMessage.joint_01 = jointArticulationBodies[1].xDrive.target; @@ -61,14 +62,14 @@ public void Publish() sourceDestinationMessage.joint_05 = jointArticulationBodies[5].xDrive.target; // Pick Pose - sourceDestinationMessage.pick_pose = new RosMessageTypes.Geometry.Pose + sourceDestinationMessage.pick_pose = new MPose { position = target.transform.position.To(), orientation = Quaternion.Euler(90, target.transform.eulerAngles.y, 0).To() }; // Place Pose - sourceDestinationMessage.place_pose = new RosMessageTypes.Geometry.Pose + sourceDestinationMessage.place_pose = new MPose { position = targetPlacement.transform.position.To(), orientation = pickOrientation.To() diff --git a/tutorials/pick_and_place/Scripts/TrajectoryPlanner.cs b/tutorials/pick_and_place/Scripts/TrajectoryPlanner.cs index f14015a1..ead3e41b 100644 --- a/tutorials/pick_and_place/Scripts/TrajectoryPlanner.cs +++ b/tutorials/pick_and_place/Scripts/TrajectoryPlanner.cs @@ -4,7 +4,7 @@ using UnityEngine; using Unity.Robotics.ROSTCPConnector; using Unity.Robotics.ROSTCPConnector.ROSGeometry; - +using RosMessageTypes.Geometry; public class TrajectoryPlanner : MonoBehaviour { @@ -78,9 +78,9 @@ private void OpenGripper() /// Get the current values of the robot's joint angles. /// /// NiryoMoveitJoints - NiryoMoveitJoints CurrentJointConfig() + MNiryoMoveitJoints CurrentJointConfig() { - NiryoMoveitJoints joints = new NiryoMoveitJoints(); + MNiryoMoveitJoints joints = new MNiryoMoveitJoints(); joints.joint_00 = jointArticulationBodies[0].xDrive.target; joints.joint_01 = jointArticulationBodies[1].xDrive.target; @@ -101,11 +101,11 @@ NiryoMoveitJoints CurrentJointConfig() /// public void PublishJoints() { - MoverServiceRequest request = new MoverServiceRequest(); + MMoverServiceRequest request = new MMoverServiceRequest(); request.joints_input = CurrentJointConfig(); // Pick Pose - request.pick_pose = new RosMessageTypes.Geometry.Pose + request.pick_pose = new MPose { position = (target.transform.position + pickPoseOffset).To(), // The hardcoded x/z angles assure that the gripper is always positioned above the target cube before grasping. @@ -113,16 +113,16 @@ public void PublishJoints() }; // Place Pose - request.place_pose = new RosMessageTypes.Geometry.Pose + request.place_pose = new MPose { position = (targetPlacement.transform.position + pickPoseOffset).To(), orientation = pickOrientation.To() }; - ros.SendServiceMessage(rosServiceName, request, TrajectoryResponse); + ros.SendServiceMessage(rosServiceName, request, TrajectoryResponse); } - void TrajectoryResponse(MoverServiceResponse response) + void TrajectoryResponse(MMoverServiceResponse response) { if (response.trajectories.Length > 0) { @@ -149,7 +149,7 @@ void TrajectoryResponse(MoverServiceResponse response) /// /// MoverServiceResponse received from niryo_moveit mover service running in ROS /// - private IEnumerator ExecuteTrajectories(MoverServiceResponse response) + private IEnumerator ExecuteTrajectories(MMoverServiceResponse response) { if (response.trajectories != null) { diff --git a/tutorials/pick_and_place/Scripts_Part4/RealSimPickAndPlace.cs b/tutorials/pick_and_place/Scripts_Part4/RealSimPickAndPlace.cs index c322b356..8a118002 100644 --- a/tutorials/pick_and_place/Scripts_Part4/RealSimPickAndPlace.cs +++ b/tutorials/pick_and_place/Scripts_Part4/RealSimPickAndPlace.cs @@ -1,12 +1,12 @@ using System.Collections; using System.Linq; -using ROSGeometry; +using RosMessageTypes.Geometry; using RosMessageTypes.Moveit; using RosMessageTypes.NiryoMoveit; using RosMessageTypes.NiryoOne; +using Unity.Robotics.ROSTCPConnector; +using Unity.Robotics.ROSTCPConnector.ROSGeometry; using UnityEngine; -using Pose = RosMessageTypes.Geometry.Pose; -using RosQuaternion = RosMessageTypes.Geometry.Quaternion; public class RealSimPickAndPlace : MonoBehaviour { @@ -81,7 +81,7 @@ private void OpenGripper() /// public void PublishJoints() { - MoverServiceRequest request = new MoverServiceRequest + MMoverServiceRequest request = new MMoverServiceRequest { joints_input = { @@ -92,13 +92,13 @@ public void PublishJoints() joint_04 = jointArticulationBodies[4].xDrive.target, joint_05 = jointArticulationBodies[5].xDrive.target }, - pick_pose = new Pose + pick_pose = new MPose { position = (target.transform.position + PICK_POSE_OFFSET).To(), // The hardcoded x/z angles assure that the gripper is always positioned above the target cube before grasping. orientation = Quaternion.Euler(90, target.transform.eulerAngles.y, 0).To() }, - place_pose = new Pose + place_pose = new MPose { position = (targetPlacement.transform.position + PICK_POSE_OFFSET).To(), orientation = pickOrientation.To() @@ -146,7 +146,7 @@ void Awake() void Start() { - ros.Subscribe(rosRobotCommandsTopicName, ExecuteRobotCommands); + ros.Subscribe(rosRobotCommandsTopicName, ExecuteRobotCommands); } /// @@ -155,7 +155,7 @@ void Start() /// executed in a coroutine. /// /// RobotMoveActionGoal of trajectory or gripper commands - void ExecuteRobotCommands(RobotMoveActionGoal robotAction) + void ExecuteRobotCommands(MRobotMoveActionGoal robotAction) { if (robotAction.goal.cmd.cmd_type == TRAJECTORY_COMMAND_EXECUTION) { @@ -184,7 +184,7 @@ void ExecuteRobotCommands(RobotMoveActionGoal robotAction) /// /// /// The array of poses for the robot to execute - private IEnumerator ExecuteTrajectories(RobotTrajectory trajectories) + private IEnumerator ExecuteTrajectories(MRobotTrajectory trajectories) { // For every robot pose in trajectory plan foreach (var point in trajectories.joint_trajectory.points) diff --git a/tutorials/ros_unity_integration/publisher.md b/tutorials/ros_unity_integration/publisher.md index b50b3e47..f736af41 100644 --- a/tutorials/ros_unity_integration/publisher.md +++ b/tutorials/ros_unity_integration/publisher.md @@ -71,7 +71,7 @@ public class RosPublisherExample : MonoBehaviour { cube.transform.rotation = Random.rotation; - PosRot cubePos = new PosRot( + MPosRot cubePos = new MPosRot( cube.transform.position.x, cube.transform.position.y, cube.transform.position.z, diff --git a/tutorials/ros_unity_integration/service.md b/tutorials/ros_unity_integration/service.md index 865c8864..9582482b 100644 --- a/tutorials/ros_unity_integration/service.md +++ b/tutorials/ros_unity_integration/service.md @@ -84,15 +84,15 @@ public class RosServiceExample : MonoBehaviour cube.transform.rotation.w ); - PositionServiceRequest positionServiceRequest = new PositionServiceRequest(cubePos); + MPositionServiceRequest positionServiceRequest = new MPositionServiceRequest(cubePos); // Send message to ROS and return the response - ros.SendServiceMessage(serviceName, positionServiceRequest, Callback_Destination); + ros.SendServiceMessage(serviceName, positionServiceRequest, Callback_Destination); awaitingResponseUntilTimestamp = Time.time+1.0f; // don't send again for 1 second, or until we receive a response } } - void Callback_Destination(PositionServiceResponse response) + void Callback_Destination(MPositionServiceResponse response) { awaitingResponseUntilTimestamp = -1; destination = new Vector3(response.output.pos_x, response.output.pos_y, response.output.pos_z); diff --git a/tutorials/ros_unity_integration/subscriber.md b/tutorials/ros_unity_integration/subscriber.md index 70f5e250..ac5164e9 100644 --- a/tutorials/ros_unity_integration/subscriber.md +++ b/tutorials/ros_unity_integration/subscriber.md @@ -34,7 +34,7 @@ Once the server_endpoint has started, it will print something similar to `[INFO] ```csharp using UnityEngine; using Unity.Robotics.ROSTCPConnector; -using RosColor = RosMessageTypes.RoboticsDemo.UnityColor; +using RosColor = RosMessageTypes.RoboticsDemo.MUnityColor; public class RosSubscriberExample : MonoBehaviour { diff --git a/tutorials/ros_unity_integration/unity_scripts/RosPublisherExample.cs b/tutorials/ros_unity_integration/unity_scripts/RosPublisherExample.cs index fdbdd393..f91bf2a0 100644 --- a/tutorials/ros_unity_integration/unity_scripts/RosPublisherExample.cs +++ b/tutorials/ros_unity_integration/unity_scripts/RosPublisherExample.cs @@ -32,7 +32,7 @@ private void Update() { cube.transform.rotation = Random.rotation; - PosRot cubePos = new PosRot( + MPosRot cubePos = new MPosRot( cube.transform.position.x, cube.transform.position.y, cube.transform.position.z, diff --git a/tutorials/ros_unity_integration/unity_scripts/RosServiceExample.cs b/tutorials/ros_unity_integration/unity_scripts/RosServiceExample.cs index 3091e231..3a715a0b 100644 --- a/tutorials/ros_unity_integration/unity_scripts/RosServiceExample.cs +++ b/tutorials/ros_unity_integration/unity_scripts/RosServiceExample.cs @@ -33,7 +33,7 @@ private void Update() { Debug.Log("Destination reached."); - PosRot cubePos = new PosRot( + MPosRot cubePos = new MPosRot( cube.transform.position.x, cube.transform.position.y, cube.transform.position.z, @@ -43,15 +43,15 @@ private void Update() cube.transform.rotation.w ); - PositionServiceRequest positionServiceRequest = new PositionServiceRequest(cubePos); + MPositionServiceRequest positionServiceRequest = new MPositionServiceRequest(cubePos); // Send message to ROS and return the response - ros.SendServiceMessage(serviceName, positionServiceRequest, Callback_Destination); + ros.SendServiceMessage(serviceName, positionServiceRequest, Callback_Destination); awaitingResponseUntilTimestamp = Time.time+1.0f; // don't send again for 1 second, or until we receive a response } } - void Callback_Destination(PositionServiceResponse response) + void Callback_Destination(MPositionServiceResponse response) { awaitingResponseUntilTimestamp = -1; destination = new Vector3(response.output.pos_x, response.output.pos_y, response.output.pos_z); diff --git a/tutorials/ros_unity_integration/unity_scripts/RosSubscriberExample.cs b/tutorials/ros_unity_integration/unity_scripts/RosSubscriberExample.cs index 7040b625..6b3a69a6 100644 --- a/tutorials/ros_unity_integration/unity_scripts/RosSubscriberExample.cs +++ b/tutorials/ros_unity_integration/unity_scripts/RosSubscriberExample.cs @@ -1,6 +1,6 @@ using UnityEngine; using Unity.Robotics.ROSTCPConnector; -using RosColor = RosMessageTypes.RoboticsDemo.UnityColor; +using RosColor = RosMessageTypes.RoboticsDemo.MUnityColor; public class RosSubscriberExample : MonoBehaviour { From cc928997fe9000055a6b4a9f8d93f57cd17373a3 Mon Sep 17 00:00:00 2001 From: "Devin Miller (Unity)" Date: Wed, 10 Mar 2021 12:12:19 -0800 Subject: [PATCH 06/13] Adding Editor version to Ros Integration Readme --- tutorials/ros_unity_integration/README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tutorials/ros_unity_integration/README.md b/tutorials/ros_unity_integration/README.md index b29b7279..8ed68633 100644 --- a/tutorials/ros_unity_integration/README.md +++ b/tutorials/ros_unity_integration/README.md @@ -1,5 +1,8 @@ # ROS–Unity Integration +## Editor Version +Most of our projects are developed/tested on Unity Editor version 2020.2.0f9 or later. We expect that anything 2020.2+ should be compatible, and will be actively working to ensure this for future versions. 2020.1.X and below are unlikely to work well, if at all, and we strongly encourage updating to a more recent version to support the bleeding edge updates to Unity's physics and simulation components that we are leveraging. + ## ROS–Unity Communication ![](images/unity_ros.png) @@ -27,4 +30,4 @@ Example scripts implemented in tutorials: - Returns a destination position for a GameObject to move towards each time the service is called. - `unity_scripts/RosSubscriberExample.cs` - - Subscribes to a topic that accepts color messages and uses them to change the color of a GameObject in the Unity scene. \ No newline at end of file + - Subscribes to a topic that accepts color messages and uses them to change the color of a GameObject in the Unity scene. From 7583ddbee166174bfdad5f1f3f33ef97a78e0896 Mon Sep 17 00:00:00 2001 From: Devin Miller Date: Wed, 17 Mar 2021 12:55:59 -0700 Subject: [PATCH 07/13] Updating package dependencies to proper versions Pick and place tutorial was failing to compile its scripts because the package manifest was pointing to an older version of ROS-TCP-Connector. Updated the manifest and also pulled latest changes for ros_tcp_endpoint. Tested by running DemoScene --- .../pick_and_place/PickAndPlaceProject/Packages/manifest.json | 3 ++- tutorials/pick_and_place/ROS/src/ros_tcp_endpoint | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/tutorials/pick_and_place/PickAndPlaceProject/Packages/manifest.json b/tutorials/pick_and_place/PickAndPlaceProject/Packages/manifest.json index c2a1a3db..812be142 100644 --- a/tutorials/pick_and_place/PickAndPlaceProject/Packages/manifest.json +++ b/tutorials/pick_and_place/PickAndPlaceProject/Packages/manifest.json @@ -4,7 +4,8 @@ "com.unity.ide.rider": "2.0.7", "com.unity.ide.visualstudio": "2.0.3", "com.unity.ide.vscode": "1.2.2", - "com.unity.robotics.ros-tcp-connector": "https://github.com/Unity-Technologies/ROS-TCP-Connector.git?path=/com.unity.robotics.ros-tcp-connector#v0.2.0", + "com.unity.robotics.ros-tcp-connector": + "https://github.com/Unity-Technologies/ROS-TCP-Connector.git?path=/com.unity.robotics.ros-tcp-connector#dev", "com.unity.robotics.urdf-importer": "https://github.com/Unity-Technologies/URDF-Importer.git?path=/com.unity.robotics.urdf-importer#v0.2.0", "com.unity.test-framework": "1.1.18", "com.unity.textmeshpro": "3.0.1", diff --git a/tutorials/pick_and_place/ROS/src/ros_tcp_endpoint b/tutorials/pick_and_place/ROS/src/ros_tcp_endpoint index c56f5586..97bb44e9 160000 --- a/tutorials/pick_and_place/ROS/src/ros_tcp_endpoint +++ b/tutorials/pick_and_place/ROS/src/ros_tcp_endpoint @@ -1 +1 @@ -Subproject commit c56f558687c2467f1e9782b58d12393c9bc47bc7 +Subproject commit 97bb44e9e99596d1af54cce116eb0d91e697ad87 From a09594623cec8a6f5e7c00c8da586d036a1389a0 Mon Sep 17 00:00:00 2001 From: Amanda <31416491+at669@users.noreply.github.com> Date: Mon, 29 Mar 2021 17:05:31 -0600 Subject: [PATCH 08/13] Updating Contribution Content (#186) * Contributing content * PR feedback --- .github/ISSUE_TEMPLATE/bug_report.md | 37 ++++++++++++ .github/ISSUE_TEMPLATE/feature_request.md | 20 ++++++ CODE_OF_CONDUCT.md | 74 +++++++++++++++++++++++ CONTRIBUTING.md | 64 ++++++++++++++++++++ LICENSE | 14 +++++ README.md | 14 ++++- 6 files changed, 221 insertions(+), 2 deletions(-) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md create mode 100644 CODE_OF_CONDUCT.md create mode 100644 CONTRIBUTING.md diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 00000000..c53b622d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,37 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: '' +assignees: '' + +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +**Console logs / stack traces** +Please wrap in [triple backticks (```)](https://help.github.com/en/articles/creating-and-highlighting-code-blocks) to make it easier to read. + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots or videos to help explain your problem. + +**Environment (please complete the following information, where applicable):** +- Unity Version: [e.g. Unity 2020.2.0f1] +- Unity machine OS + version: [e.g. Windows 10] +- ROS machine OS + version: [e.g. Ubuntu 18.04, ROS Noetic] +- ROS–Unity communication: [e.g. Docker] +- Branch or version: [e.g. v0.2.0] + +**Additional context** +Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 00000000..bbcbbe7d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,20 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: '' +assignees: '' + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 00000000..a7a4c577 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,74 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, gender identity and expression, level of experience, +nationality, personal appearance, race, religion, or sexual identity and +orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or + advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at [unity-robotics@unity3d.com](mailto:unity-robotics@unity3d.com). All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], +version 1.4, available at +https://www.contributor-covenant.org/version/1/4/code-of-conduct/ + +[homepage]: https://www.contributor-covenant.org \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000..de34ac98 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,64 @@ +# Contribution Guidelines + +Thank you for your interest in contributing to Unity Robotics! To facilitate your +contributions, we've outlined a brief set of guidelines to ensure that your extensions +can be easily integrated. + +## Communication + +First, please read through our +[code of conduct](CODE_OF_CONDUCT.md), +as we expect all our contributors to follow it. + +Second, before starting on a project that you intend to contribute to any of our +Unity Robotics packages or tutorials, we **strongly** recommend posting on the repository's +[Issues page](https://github.com/Unity-Technologies/Unity-Robotics-Hub/issues) and +briefly outlining the changes you plan to make. This will enable us to provide +some context that may be helpful for you. This could range from advice and +feedback on how to optimally perform your changes or reasons for not doing it. + +## Git Branches + +The `main` branch corresponds to the most recent stable version of the project. The `dev` branch +contains changes that are staged to be merged into `main` as the team sees fit. + +When contributing to the project, please make sure that your Pull Request (PR) +does the following: + +- Is up-to-date with and targets the `dev` branch +- Contains a detailed description of the changes performed +- Has corresponding changes to documentation, unit tests and sample environments (if + applicable) +- Contains a summary of the tests performed to validate your changes +- Links to issue numbers that the PR resolves (if any) + + + +## Code style + +All Python code should follow the [PEP 8 style guidelines](https://pep8.org/). + +All C# code should follow the [Microsoft C# Coding Conventions](https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/inside-a-program/coding-conventions). +Additionally, the [Unity Coding package](https://docs.unity3d.com/Packages/com.unity.coding@0.1/manual/index.html) +can be used to format, encode, and lint your code according to the standard Unity +development conventions. Be aware that these Unity conventions will supersede the +Microsoft C# Coding Conventions where applicable. + +Please note that even if the code you are changing does not adhere to these guidelines, +we expect your submissions to follow these conventions. + +## Contributor License Agreements + +When you open a pull request, you will be asked to acknowledge our Contributor +License Agreement. We allow both individual contributions and contributions made +on behalf of companies. We use an open source tool called CLA assistant. If you +have any questions on our CLA, please +[submit an issue](https://github.com/Unity-Technologies/Unity-Robotics-Hub/issues) or +email us at [unity-robotics@unity3d.com](mailto:unity-robotics@unity3d.com). + +## Contribution review + +Once you have a change ready following the above ground rules, simply make a +pull request in GitHub. \ No newline at end of file diff --git a/LICENSE b/LICENSE index d9a10c0d..54541744 100644 --- a/LICENSE +++ b/LICENSE @@ -174,3 +174,17 @@ of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS + + Copyright 2020 Unity Technologies + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/README.md b/README.md index ac1c7328..54d3eb8f 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,8 @@ # Unity Robotics Hub +[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) + This is a central repository for tools, tutorials, resources, and documentation for robotic simulation in Unity. > The contents of this repository are in active development. Its features and API are subject to significant change as development progresses. @@ -60,10 +62,18 @@ Here’s a peek into what our Physics Team is hard at work on… ## FAQs [FAQs](faq.md) +## Community and Feedback + +The Unity Robotics projects are open-source and we encourage and welcome contributions. +If you wish to contribute, be sure to review our [contribution guidelines](CONTRIBUTING.md) +and [code of conduct](CODE_OF_CONDUCT.md). + ## Support -For general questions, feedback, or feature requests, connect directly with the Robotics team at [unity-robotics@unity3d.com](mailto:unity-robotics@unity3d.com). +For general questions, feedback, or feature requests, connect directly with the +Robotics team at [unity-robotics@unity3d.com](mailto:unity-robotics@unity3d.com). -For bugs or other issues, please file a GitHub issue and the Robotics team will investigate the issue as soon as possible. +For bugs or other issues, please file a GitHub issue and the Robotics team will +investigate the issue as soon as possible. ## License [Apache License 2.0](LICENSE) \ No newline at end of file From eb19b1aa127c358c0f96ec8f4d7a5f622d1e9ad6 Mon Sep 17 00:00:00 2001 From: Amanda <31416491+at669@users.noreply.github.com> Date: Wed, 7 Apr 2021 09:31:18 -0600 Subject: [PATCH 09/13] Adding PR template (#191) --- .github/PULL_REQUEST_TEMPLATE.md | 34 ++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 .github/PULL_REQUEST_TEMPLATE.md diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 00000000..6c88fdec --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,34 @@ +## Proposed change(s) + +Describe the changes made in this PR. + +### Useful links (GitHub issues, JIRA tickets, forum threads, etc.) + +Provide any relevant links here. + +### Types of change(s) + +- [ ] Bug fix +- [ ] New feature +- [ ] Code refactor +- [ ] Documentation update +- [ ] Other (please describe) + +## Testing and Verification + +Please describe the tests that you ran to verify your changes. Please also provide instructions, ROS packages, and Unity project files as appropriate so we can reproduce the test environment. + +### Test Configuration: +- Unity Version: [e.g. Unity 2020.2.0f1] +- Unity machine OS + version: [e.g. Windows 10] +- ROS machine OS + version: [e.g. Ubuntu 18.04, ROS Noetic] +- ROS–Unity communication: [e.g. Docker] + +## Checklist +- [ ] Ensured this PR is up-to-date with the `dev` branch +- [ ] Created this PR to target the `dev` branch +- [ ] Followed the style guidelines as described in the [Contribution Guidelines](../CONTRIBUTING.md) +- [ ] Added tests that prove my fix is effective or that my feature works +- [ ] Updated the documentation as appropriate + +## Other comments \ No newline at end of file From 5ae4bb2e43787abdc4a55ac1c7e3e692d8bc9104 Mon Sep 17 00:00:00 2001 From: Hamid Younesy Date: Tue, 13 Apr 2021 15:37:38 -0700 Subject: [PATCH 10/13] fixing typo in ros-unity service tutorial (#198) --- tutorials/ros_unity_integration/service.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tutorials/ros_unity_integration/service.md b/tutorials/ros_unity_integration/service.md index 9582482b..dc210fdd 100644 --- a/tutorials/ros_unity_integration/service.md +++ b/tutorials/ros_unity_integration/service.md @@ -74,7 +74,7 @@ public class RosServiceExample : MonoBehaviour { Debug.Log("Destination reached."); - PosRot cubePos = new PosRot( + MPosRot cubePos = new MPosRot( cube.transform.position.x, cube.transform.position.y, cube.transform.position.z, From 7c4708d72c80917730e92da61ae091a67dfb3bec Mon Sep 17 00:00:00 2001 From: Hamid Younesy Date: Wed, 14 Apr 2021 18:35:30 -0700 Subject: [PATCH 11/13] Unity service example (#199) * added example of implementing a UnityService * adding tutorial for unity service * added a couple comments to the example code * typos and code standard fixes * consistency: changing the service name for position_service to pos_srv * updating the tutorial to match the corresponding script --- .../scripts/object_pose_client.py | 32 +++++ .../robotics_demo/scripts/position_service.py | 2 +- .../robotics_demo/scripts/server_endpoint.py | 9 +- .../robotics_demo/srv/ObjectPoseService.srv | 3 + tutorials/ros_unity_integration/README.md | 9 +- .../images/generate_messages_1.png | Bin 67787 -> 42017 bytes .../images/generate_messages_2.png | Bin 67627 -> 37057 bytes .../ros_unity_integration/server_endpoint.md | 22 +-- tutorials/ros_unity_integration/service.md | 2 +- .../unity_scripts/RosUnityServiceExample.cs | 43 ++++++ .../ros_unity_integration/unity_service.md | 126 ++++++++++++++++++ 11 files changed, 230 insertions(+), 18 deletions(-) create mode 100755 tutorials/ros_packages/robotics_demo/scripts/object_pose_client.py create mode 100644 tutorials/ros_packages/robotics_demo/srv/ObjectPoseService.srv create mode 100644 tutorials/ros_unity_integration/unity_scripts/RosUnityServiceExample.cs create mode 100644 tutorials/ros_unity_integration/unity_service.md diff --git a/tutorials/ros_packages/robotics_demo/scripts/object_pose_client.py b/tutorials/ros_packages/robotics_demo/scripts/object_pose_client.py new file mode 100755 index 00000000..3ebe8b07 --- /dev/null +++ b/tutorials/ros_packages/robotics_demo/scripts/object_pose_client.py @@ -0,0 +1,32 @@ +#!/usr/bin/env python + +from __future__ import print_function + +import random +import rospy +import sys + +from robotics_demo.srv import ObjectPoseService, ObjectPoseServiceResponse + + +def get_object_pose_client(name): + rospy.wait_for_service('obj_pose_srv') + try: + get_obj_pose = rospy.ServiceProxy('obj_pose_srv', ObjectPoseService) + obj_pose_resp = get_obj_pose(name) + return obj_pose_resp.object_pose + except rospy.ServiceException as e: + print("Service call failed: %s"%e) + + +def usage(): + return "%s [object_name]"%sys.argv[0] + +if __name__ == "__main__": + if len(sys.argv) == 2: + name = str(sys.argv[1]) + else: + print(usage()) + sys.exit(1) + print("Requesting pose for %s"%(name)) + print("Pose for %s: %s"%(name, get_object_pose_client(name))) diff --git a/tutorials/ros_packages/robotics_demo/scripts/position_service.py b/tutorials/ros_packages/robotics_demo/scripts/position_service.py index d9ce9a9f..1a0e11a5 100755 --- a/tutorials/ros_packages/robotics_demo/scripts/position_service.py +++ b/tutorials/ros_packages/robotics_demo/scripts/position_service.py @@ -18,7 +18,7 @@ def new_position(req): def translate_position_server(): rospy.init_node('position_server') - s = rospy.Service('position_service', PositionService, new_position) + s = rospy.Service('pos_srv', PositionService, new_position) print("Ready to move cubes!") rospy.spin() diff --git a/tutorials/ros_packages/robotics_demo/scripts/server_endpoint.py b/tutorials/ros_packages/robotics_demo/scripts/server_endpoint.py index 1fcb647e..ababf68c 100644 --- a/tutorials/ros_packages/robotics_demo/scripts/server_endpoint.py +++ b/tutorials/ros_packages/robotics_demo/scripts/server_endpoint.py @@ -2,9 +2,9 @@ import rospy -from ros_tcp_endpoint import TcpServer, RosPublisher, RosSubscriber, RosService +from ros_tcp_endpoint import TcpServer, RosPublisher, RosSubscriber, RosService, UnityService from robotics_demo.msg import PosRot, UnityColor -from robotics_demo.srv import PositionService +from robotics_demo.srv import PositionService, ObjectPoseService def main(): ros_node_name = rospy.get_param("/TCP_NODE_NAME", 'TCPServer') @@ -14,9 +14,10 @@ def main(): rospy.init_node(ros_node_name, anonymous=True) tcp_server.start({ - 'pos_srv': RosService('position_service', PositionService), 'pos_rot': RosPublisher('pos_rot', PosRot, queue_size=10), - 'color': RosSubscriber('color', UnityColor, tcp_server) + 'color': RosSubscriber('color', UnityColor, tcp_server), + 'pos_srv': RosService('pos_srv', PositionService), + 'obj_pose_srv': UnityService('obj_pose_srv', ObjectPoseService, tcp_server), }) rospy.spin() diff --git a/tutorials/ros_packages/robotics_demo/srv/ObjectPoseService.srv b/tutorials/ros_packages/robotics_demo/srv/ObjectPoseService.srv new file mode 100644 index 00000000..83d3c5b9 --- /dev/null +++ b/tutorials/ros_packages/robotics_demo/srv/ObjectPoseService.srv @@ -0,0 +1,3 @@ +string object_name +--- +geometry_msgs/Pose object_pose diff --git a/tutorials/ros_unity_integration/README.md b/tutorials/ros_unity_integration/README.md index 8ed68633..2f985cef 100644 --- a/tutorials/ros_unity_integration/README.md +++ b/tutorials/ros_unity_integration/README.md @@ -17,6 +17,7 @@ The `ROSConnection` plugin (also from [ROS TCP Connector](https://github.com/Uni - [ROS–Unity Integration: Publisher](publisher.md) - Adding a Publisher to a Unity Scene - [ROS–Unity Integration: Subscriber](subscriber.md) - Adding a Subscriber to a Unity Scene - [ROS–Unity Integration: Service](service.md) - Adding a Service call to a Unity Scene +- [ROS–Unity Integration: UnityService](unity_service.md) - Adding a Service that runs in a Unity Scene - [ROS–Unity Integration: Server Endpoint](server_endpoint.md) - How to write a Server Endpoint ## Example Unity Scripts @@ -26,8 +27,12 @@ Example scripts implemented in tutorials: - `unity_scripts/RosPublisherExample.cs` - Publishes the position of a GameObject every 0.5 seconds. +- `unity_scripts/RosSubscriberExample.cs` + - Subscribes to a topic that accepts color messages and uses them to change the color of a GameObject in the Unity scene. + - `unity_scripts/RosServiceExample.cs` - Returns a destination position for a GameObject to move towards each time the service is called. -- `unity_scripts/RosSubscriberExample.cs` - - Subscribes to a topic that accepts color messages and uses them to change the color of a GameObject in the Unity scene. +- `unity_scripts/RosUnityServiceExample.cs` + - Runs a service in the Unity scene that takes a GameObject's name and responds with the Pose of that object. + diff --git a/tutorials/ros_unity_integration/images/generate_messages_1.png b/tutorials/ros_unity_integration/images/generate_messages_1.png index 5b58923bc8f5208e64a52e89b255fe6f5b02e92f..96b0c13aa0f1aea2a5429ec540e065f435c8387a 100644 GIT binary patch literal 42017 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 literal 67787 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%0DDNjCmDHxm-e)QJR>?~9=K+*uJ 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 literal 67627 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 diff --git a/tutorials/ros_unity_integration/server_endpoint.md b/tutorials/ros_unity_integration/server_endpoint.md index 25fa8345..aa65fdc6 100644 --- a/tutorials/ros_unity_integration/server_endpoint.md +++ b/tutorials/ros_unity_integration/server_endpoint.md @@ -14,9 +14,9 @@ The following is an example of a server endpoint Python script that: import rospy -from ros_tcp_endpoint import TcpServer, RosPublisher, RosSubscriber, RosService +from ros_tcp_endpoint import TcpServer, RosPublisher, RosSubscriber, RosService, UnityService from robotics_demo.msg import PosRot, UnityColor -from robotics_demo.srv import PositionService +from robotics_demo.srv import PositionService, ObjectPoseService def main(): ros_node_name = rospy.get_param("/TCP_NODE_NAME", 'TCPServer') @@ -26,9 +26,10 @@ def main(): rospy.init_node(ros_node_name, anonymous=True) tcp_server.start({ - 'pos_srv': RosService('position_service', PositionService), 'pos_rot': RosPublisher('pos_rot', PosRot, queue_size=10), - 'color': RosSubscriber('color', UnityColor, tcp_server) + 'color': RosSubscriber('color', UnityColor, tcp_server), + 'pos_srv': RosService('pos_srv', PositionService), + 'obj_pose_srv': UnityService('obj_pose_srv', ObjectPoseService, tcp_server), }) rospy.spin() @@ -41,9 +42,9 @@ if __name__ == "__main__": ## Import Statements for Services and Messages ```python -from ros_tcp_endpoint import TcpServer, RosPublisher, RosSubscriber, RosService +from ros_tcp_endpoint import TcpServer, RosPublisher, RosSubscriber, RosService, UnityService from robotics_demo.msg import PosRot, UnityColor -from robotics_demo.srv import PositionService +from robotics_demo.srv import PositionService, ObjectPoseService ``` ## Creating the Server @@ -68,9 +69,10 @@ The `ros_node_name` argument is required and the `buffer_size` and `connections` ```python tcp_server.start({ - 'pos_srv': RosService('position_service', PositionService), 'pos_rot': RosPublisher('pos_rot', PosRot, queue_size=10), - 'color': RosSubscriber('color', UnityColor, tcp_server) + 'color': RosSubscriber('color', UnityColor, tcp_server), + 'pos_srv': RosService('pos_srv', PositionService), + 'obj_pose_srv': UnityService('obj_pose_srv', ObjectPoseService, tcp_server), }) rospy.spin() @@ -104,7 +106,7 @@ A ROS Service is similar to a RosPublisher, in that a Unity component sends a Re - Service name - ROS Service class generated from running `catkin_make` command -`RosService('position_service', PositionService)` +`RosService('pos_srv', PositionService)` ## Unity Service @@ -114,7 +116,7 @@ A Unity Service is similar to a RosSubscriber, in that a Unity component receive - ROS Service class generated from running `catkin_make` command - The tcp server that will connect to Unity -`UnityService('unity_service', PositionService, tcp_server)` +`UnityService('obj_pose_srv', ObjectPoseService, tcp_server)` ## Parameters diff --git a/tutorials/ros_unity_integration/service.md b/tutorials/ros_unity_integration/service.md index dc210fdd..e98d36d7 100644 --- a/tutorials/ros_unity_integration/service.md +++ b/tutorials/ros_unity_integration/service.md @@ -29,7 +29,7 @@ Once the server_endpoint has started, it will print something similar to `[INFO] ## Setting Up Unity Scene - Generate the C# code for `PositionService`'s messages by going to `Robotics` -> `Generate ROS Messages...` -- Set the input file path to `PATH/TO/Unity-Robotics-Hub/tutorials/ros_packages/robotics_demo`, expand the robotics_demo folder and click `Build 1 srv`. +- Set the input file path to `PATH/TO/Unity-Robotics-Hub/tutorials/ros_packages/robotics_demo`, expand the robotics_demo folder and click `Build 2 srvs`. ![](images/generate_messages_2.png) diff --git a/tutorials/ros_unity_integration/unity_scripts/RosUnityServiceExample.cs b/tutorials/ros_unity_integration/unity_scripts/RosUnityServiceExample.cs new file mode 100644 index 00000000..c9d3f50d --- /dev/null +++ b/tutorials/ros_unity_integration/unity_scripts/RosUnityServiceExample.cs @@ -0,0 +1,43 @@ +using RosMessageTypes.RoboticsDemo; +using UnityEngine; +using Unity.Robotics.ROSTCPConnector; +using Unity.Robotics.ROSTCPConnector.ROSGeometry; + +///

+/// Example demonstration of implementing a UnityService that receives a Request message from another ROS node and sends a Response back +/// +public class RosUnityServiceExample : MonoBehaviour +{ + [SerializeField] + string m_ServiceName = "obj_pose_srv"; + + void Start() + { + // register the service with ROS + ROSConnection.instance.ImplementService(m_ServiceName, GetObjectPose); + } + + /// + /// Callback to respond to the request + /// + /// service request containing the object name + /// service response containing the object pose (or 0 if object not found) + private MObjectPoseServiceResponse GetObjectPose(MObjectPoseServiceRequest request) + { + // process the service request + Debug.Log("Received request for object: " + request.object_name); + + // prepare a response + MObjectPoseServiceResponse objectPoseResponse = new MObjectPoseServiceResponse(); + // Find a game object with the requested name + GameObject gameObject = GameObject.Find(request.object_name); + if (gameObject) + { + // Fill-in the response with the object pose converted from Unity coordinate to ROS coordinate system + objectPoseResponse.object_pose.position = gameObject.transform.position.To(); + objectPoseResponse.object_pose.orientation = gameObject.transform.rotation.To(); + } + + return objectPoseResponse; + } +} diff --git a/tutorials/ros_unity_integration/unity_service.md b/tutorials/ros_unity_integration/unity_service.md new file mode 100644 index 00000000..366656e5 --- /dev/null +++ b/tutorials/ros_unity_integration/unity_service.md @@ -0,0 +1,126 @@ +# ROS–Unity Integration: UnityService + +Create a simple Unity scene which create a [Service](http://wiki.ros.org/Services) in Unity that takes a request with a GameObject's name and responds with the GameObject's pose (position and orientation) in the ROS coordinate system. + +## Setting Up ROS + +(Skip to [Setting Up the Unity Scene](unity_service.md#setting-up-the-unity-scene) if you already did the [ROS–Unity Integration Publisher](publisher.md) or [Subscriber](subscriber.md) tutorials.) + +- Copy the `tutorials/ros_packages/robotics_demo` folder of this repo into the `src` folder in your Catkin workspace. + +- Follow the [ROS–Unity Initial Setup](setup.md) guide. + +- Open a new terminal window, navigate to your ROS workspace, and run the following commands: + + ```bash + source devel/setup.bash + rosrun robotics_demo server_endpoint.py + ``` + +Once the server_endpoint has started, it will print something similar to `[INFO] [1603488341.950794]: Starting server on 192.168.50.149:10000`. + +## Setting Up the Unity Scene +- Generate the C# code for `ObjectPoseService`'s messages by going to `Robotics` -> `Generate ROS Messages...` + - Set the input file path to `PATH/TO/Unity-Robotics-Hub/tutorials/ros_packages/robotics_demo`, expand the robotics_demo folder and click `Build 2 srvs` (Note that you may skip this step if you have already done it in the previous tutorial). + + ![](images/generate_messages_2.png) + + - The generated files will be saved in the default directory `Assets/RosMessages/RoboticsDemo/srv`. + +- Create a new C# script and name it `RosUnityServiceExample.cs` +- Paste the following code into `RosUnityServiceExample.cs` + - **Note:** This script can be found at `tutorials/ros_unity_integration/unity_scripts`. + +```csharp +using RosMessageTypes.RoboticsDemo; +using UnityEngine; +using Unity.Robotics.ROSTCPConnector; +using Unity.Robotics.ROSTCPConnector.ROSGeometry; + +/// +/// Example demonstration of implementing a UnityService that receives a Request message from another ROS node and sends a Response back +/// +public class RosUnityServiceExample : MonoBehaviour +{ + [SerializeField] + string m_ServiceName = "obj_pose_srv"; + + void Start() + { + // register the service with ROS + ROSConnection.instance.ImplementService(m_ServiceName, GetObjectPose); + } + + /// + /// Callback to respond to the request + /// + /// service request containing the object name + /// service response containing the object pose (or 0 if object not found) + private MObjectPoseServiceResponse GetObjectPose(MObjectPoseServiceRequest request) + { + // process the service request + Debug.Log("Received request for object: " + request.object_name); + + // prepare a response + MObjectPoseServiceResponse objectPoseResponse = new MObjectPoseServiceResponse(); + // Find a game object with the requested name + GameObject gameObject = GameObject.Find(request.object_name); + if (gameObject) + { + // Fill-in the response with the object pose converted from Unity coordinate to ROS coordinate system + objectPoseResponse.object_pose.position = gameObject.transform.position.To(); + objectPoseResponse.object_pose.orientation = gameObject.transform.rotation.To(); + } + + return objectPoseResponse; + } +} +``` + +- From the main menu bar, open `Robotics/ROS Settings`, and change the `ROS IP Address` variable to the ROS IP. +- Create an empty GameObject and name it `UnityService`. +- Attach the `RosUnityServiceExample` script to the `UnityService` GameObject. +- Pressing play in the Editor should start running as a ROS node, waiting to accept ObjectPose requests. Once a connection to ROS has been established, a message will be printed on the ROS terminal similar to `ROS-Unity Handshake received, will connect to 192.168.50.130:5005`. + + +## Start the Client +- On your ROS system, open a new terminal window, navigate to your ROS workspace, and run the following commands: + + ```bash + source devel/setup.bash + rosrun robotics_demo object_pose_client.py Cube + ``` +- This wil print an output similar to the following with the current pose information of the game object (note that the coordinates are converted to the ROS coordinate system in our Unity Service): + + ```bash + Requesting pose for Cube + Pose for Cube: + position: + x: 0.0 + y: -1.0 + z: 0.20000000298023224 + orientation: + x: 0.0 + y: -0.0 + z: 0.0 + w: -1.0 + ``` +You may replace `Cube` with the name of any other GameObject currently present in the Unity hierarchy. + +- Alternatively you may also call the ROS service using `rosservice call`: + + ```bash + rosservice call /obj_pose_srv Cube + ``` + ```bash + object_pose: + position: + x: 0.0 + y: -1.0 + z: 0.20000000298023224 + orientation: + x: 0.0 + y: -0.0 + z: 0.0 + w: -1.0 + ``` \ No newline at end of file From b5b1a4acd5407b25686f5832a2496936b0a63980 Mon Sep 17 00:00:00 2001 From: peifeng-unity <56408141+peifeng-unity@users.noreply.github.com> Date: Fri, 16 Apr 2021 10:27:54 -0700 Subject: [PATCH 12/13] Update the list of new physics features (#204) * add new sections for the released new physics features Co-authored-by: Amanda <31416491+at669@users.noreply.github.com> --- README.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 54d3eb8f..4b76a093 100644 --- a/README.md +++ b/README.md @@ -50,12 +50,15 @@ Use articulation bodies to easily prototype industrial designs with realistic mo - [Unity Industrial Simulation](https://unity.com/products/unity-simulation) - [Unity Computer Vision](https://unity.com/computer-vision) -## Coming Soon - New Physics Features in Unity! +## New Physics Features in Unity +### New Features +- **Contact Modification API** This API will allow users to define custom contact reactions, such as ignoring subsets of contact points, in order to help simulate holes, slippery surfaces, soft contacts, and more. It is available in Unity versions **2021.2a12+**. [Read more about the new Contact Modification API](https://forum.unity.com/threads/experimental-contacts-modification-api.924809/). +- **Collision detection modes exposed for ArticulationBody: discrete, sweep-based CCD, and speculative CCD**. New continuous collision detection (CCD) modes will ensure that fast-moving objects collide with objects, instead of tunneling or passing through those objects, which can happen in the default “discrete” mode. This API is available in Unity versions **2020.3.5f1+**. [Read more about continuous collision detection](https://docs.unity3d.com/2020.3/Documentation/ScriptReference/ArticulationBody-collisionDetectionMode.html). + +### Coming Soon Here’s a peek into what our Physics Team is hard at work on… -- **Contact Modification API**. This API will allow users to define custom contact reactions, such as ignoring subsets of contact points, in order to help simulate holes, slippery surfaces, soft contacts, and more. [Read more about the new Contact Modification API](https://forum.unity.com/threads/experimental-contacts-modification-api.924809/). - **Wheel Collider shapes**. This feature will allow the user to specify the shape of the collider to be used for collision detection. Currently the collider shape is fixed to a cylinder, and collision detection is performed by casting a ray from the center of the cylinder. Custom shapes will improve the accuracy of simulating wheels over rough terrains, holes, etc. [Read more about Wheel Collider](https://docs.unity3d.com/Manual/class-WheelCollider.html). -- **Collision detection modes exposed for ArticulationBody: discrete, sweep-based ccd, and speculative ccd**. New continuous collision detection (ccd) modes will ensure that fast-moving objects collide with objects, instead of tunneling or passing through those objects, which can happen in the default “discrete” mode. [Read more about continuous collision detection](https://docs.unity3d.com/Manual/ContinuousCollisionDetection.html). - **Force/Torque Sensor API**. This API will allow users to get the force and torque acting on an articulation body (useful for simulating a force/torque sensor!), as well as to get the motor torque applied by an articulation drive. - **Query primitives**. These simple, GameObject-less shapes allow for collision detection without requiring simulation (i.e., without calling Physics.Simulate). This feature will allow users to initialize objects in feasible locations, and can also be used for motion planning. @@ -76,4 +79,4 @@ For bugs or other issues, please file a GitHub issue and the Robotics team will investigate the issue as soon as possible. ## License -[Apache License 2.0](LICENSE) \ No newline at end of file +[Apache License 2.0](LICENSE) From 179f4898c348cd99002524fcb4fd6e123f6fea0d Mon Sep 17 00:00:00 2001 From: LaurieCheers-unity <73140792+LaurieCheers-unity@users.noreply.github.com> Date: Wed, 21 Apr 2021 11:42:36 -0700 Subject: [PATCH 13/13] Update to 0.3.0 (#207) --- .../pick_and_place/PickAndPlaceProject/Packages/manifest.json | 4 ++-- tutorials/pick_and_place/ROS/src/ros_tcp_endpoint | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tutorials/pick_and_place/PickAndPlaceProject/Packages/manifest.json b/tutorials/pick_and_place/PickAndPlaceProject/Packages/manifest.json index 812be142..c0a03b65 100644 --- a/tutorials/pick_and_place/PickAndPlaceProject/Packages/manifest.json +++ b/tutorials/pick_and_place/PickAndPlaceProject/Packages/manifest.json @@ -5,8 +5,8 @@ "com.unity.ide.visualstudio": "2.0.3", "com.unity.ide.vscode": "1.2.2", "com.unity.robotics.ros-tcp-connector": - "https://github.com/Unity-Technologies/ROS-TCP-Connector.git?path=/com.unity.robotics.ros-tcp-connector#dev", - "com.unity.robotics.urdf-importer": "https://github.com/Unity-Technologies/URDF-Importer.git?path=/com.unity.robotics.urdf-importer#v0.2.0", + "https://github.com/Unity-Technologies/ROS-TCP-Connector.git?path=/com.unity.robotics.ros-tcp-connector#v0.3.0", + "com.unity.robotics.urdf-importer": "https://github.com/Unity-Technologies/URDF-Importer.git?path=/com.unity.robotics.urdf-importer#v0.3.0", "com.unity.test-framework": "1.1.18", "com.unity.textmeshpro": "3.0.1", "com.unity.timeline": "1.4.3", diff --git a/tutorials/pick_and_place/ROS/src/ros_tcp_endpoint b/tutorials/pick_and_place/ROS/src/ros_tcp_endpoint index 97bb44e9..a5e0fd1c 160000 --- a/tutorials/pick_and_place/ROS/src/ros_tcp_endpoint +++ b/tutorials/pick_and_place/ROS/src/ros_tcp_endpoint @@ -1 +1 @@ -Subproject commit 97bb44e9e99596d1af54cce116eb0d91e697ad87 +Subproject commit a5e0fd1ce1a711f557fe67e73657c74f92482fbe