add collision detection
parent
670e77f091
commit
c0c2a4d197
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,59 @@
|
||||
using UnityEngine;
|
||||
using System.Collections.Generic;
|
||||
|
||||
public class CollisionDetector : MonoBehaviour
|
||||
{
|
||||
public ROSCollissionDetectionPublisher publisher;
|
||||
|
||||
[Header("Gizmo Settings")]
|
||||
public float gizmoRadius = 0.02f;
|
||||
public Color gizmoColor = Color.red;
|
||||
private Vector3 collision_point;
|
||||
private Transform collision_obj;
|
||||
|
||||
private bool selfCollisionStatus = false;
|
||||
|
||||
private List<Vector3> collisionPoints = new List<Vector3>();
|
||||
|
||||
private void OnCollisionEnter(Collision collision)
|
||||
{
|
||||
// Filter by the tag of the object you hit
|
||||
if (collision.gameObject.CompareTag("obstacles"))
|
||||
{
|
||||
collision_point = collision.contacts[^1].point; //last elem
|
||||
//Debug.Log($"Collision {transform.name} with {collision.gameObject.name} {transform.position} occurred at point: {collision_point}");
|
||||
selfCollisionStatus = transform.name.Contains("wheel") ? collision_point.y >= transform.position.y : true;
|
||||
if (selfCollisionStatus)
|
||||
{
|
||||
collisionPoints.Add(collision_point);
|
||||
//Debug.Log($"{transform.name} collide with {collision.gameObject.name} occurred at point: {collision_point}");
|
||||
}
|
||||
publisher.result.data = publisher.result.data ? publisher.result.data : selfCollisionStatus;
|
||||
//publisher.ros.Publish(publisher.topicName, publisher.result);
|
||||
}
|
||||
}
|
||||
|
||||
void OnCollisionStay(Collision collision)
|
||||
{
|
||||
if (collision.gameObject.CompareTag("obstacles"))
|
||||
{
|
||||
collision_point = collision.contacts[^1].point; //last elem
|
||||
//Debug.Log($"Collision {transform.name} with {collision.gameObject.name} {transform.position} occurred at point: {collision_point}");
|
||||
selfCollisionStatus = transform.name.Contains("wheel") ? collision_point.y >= transform.position.y : true;
|
||||
publisher.result.data = publisher.result.data ? publisher.result.data : selfCollisionStatus;
|
||||
//publisher.ros.Publish(publisher.topicName, publisher.result);
|
||||
}
|
||||
}
|
||||
|
||||
void OnCollisionExit(Collision collisionInfo)
|
||||
{
|
||||
publisher.result.data = false;
|
||||
}
|
||||
|
||||
private void OnDrawGizmos()
|
||||
{
|
||||
Gizmos.color = gizmoColor;
|
||||
foreach (Vector3 point in collisionPoints)
|
||||
Gizmos.DrawSphere(point, gizmoRadius);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2855ede88eab60feb8b47d1c566dcfa4
|
||||
@ -0,0 +1,38 @@
|
||||
using UnityEngine;
|
||||
using Unity.Robotics.Core;
|
||||
using Unity.Robotics.ROSTCPConnector;
|
||||
using RosMessageTypes.Std;
|
||||
|
||||
public class ROSCollissionDetectionPublisher : MonoBehaviour
|
||||
{
|
||||
public string topicName = "/collision_detection";
|
||||
public bool useNamespace = true;
|
||||
public BoolMsg result;
|
||||
|
||||
|
||||
protected string _namespace;
|
||||
|
||||
ROSConnection ros;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
if (useNamespace)
|
||||
{
|
||||
_namespace = "/" + gameObject.name;
|
||||
topicName = topicName[0] == '/' ? _namespace + topicName : _namespace + "/" + topicName;
|
||||
}
|
||||
}
|
||||
// Start is called once before the first execution of Update after the MonoBehaviour is created
|
||||
void Start()
|
||||
{
|
||||
ros = ROSConnection.GetOrCreateInstance();
|
||||
ros.RegisterPublisher<BoolMsg>(topicName);
|
||||
result = new BoolMsg(false);
|
||||
}
|
||||
|
||||
// Update is called once per frame
|
||||
void Update()
|
||||
{
|
||||
ros.Publish(topicName, result);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f62432182a83cb21ea0a7d83986579b3
|
||||
Loading…
Reference in New Issue