您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
3.2 KiB
3.2 KiB
ROS–Unity Integration: Subscriber
Create a simple Unity scene which subscribes to a ROS topic to change the colour of a GameObject.
NOTE: If following from Publisher tutorial proceed to Setting Up Unity Scene step.
Setting Up ROS
(You can skip this if you already did the ROS–Unity Integration Publisher tutorial.)
-
Copy the
tutorials/ros_packages/robotics_demo
folder of this repo into thesrc
folder in your Catkin workspace. -
Follow the ROS–Unity Initial Setup guide.
-
Open a new terminal window, navigate to your Catkin workspace, and run the following commands:
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 Unity Scene
- Generate the C# code for
UnityColor
message by going toRosMessageGeneration
->AutoGenerateMessages
->Single Message...
- Set the input file path to
PATH/TO/Unity-Robotics-Hub/tutorials/ros_packages/robotics_demo/msg/UnityColor.msg
and clickGENERATE!
- The generated file will be saved in the default directory
Assets/RosMessages/msg
- The generated file will be saved in the default directory
- Create a script and name it
RosSubscriberExample.cs
- Paste the following code into
RosSubscriberExample.cs
- Note Script can be found at
tutorials/ros_unity_integration/unity_scripts
- Note Script can be found at
using System.Net.Sockets;
using System.Threading.Tasks;
using UnityEngine;
using RosColor = RosMessageTypes.RoboticsDemo.UnityColor;
public class RosSubscriberExample : RosSubscriber
{
public GameObject cube;
protected override async Task HandleConnectionAsync(TcpClient tcpClient)
{
await Task.Yield();
using (var networkStream = tcpClient.GetStream())
{
RosColor colorMessage = (RosColor)ReadMessage(networkStream, new RosColor());
Debug.Log("Color(" + colorMessage.r + ", "+ colorMessage.g + ", "+ colorMessage.b + ", "+ colorMessage.a +")");
cube.GetComponent<Renderer>().material.color = new Color32((byte)colorMessage.r, (byte)colorMessage.g, (byte)colorMessage.b, (byte)colorMessage.a);
}
}
void Start()
{
StartMessageServer();
}
}
- Create an empty GameObject and name it
RosSubscriber
- Attach the
RosSubscriberExample
script to theRosSubscriber
GameObject and drag the cube GameObject onto thecube
parameter in the Inspector window. - In the Inspector window of the Editor change the
unityHostName
parameter on theRosSubscriber
GameObject to the Unity machine's URI. (Note for Windows users: the connection will be rejected unless you put the actual IP address ROS is connecting to. That's not necessarily the same as your machine's main IP address.) - Press play in the editor
In ROS Terminal Window
- After the scene has entered Play mode, run the following command:
rosrun robotics_demo color_publisher.py
to change the color of the cube GameObject in Unity to a random color
Continue to the ROS–Unity Integration Service.