로봇/ROS
URDF를 이용해 만든 로봇에 Unity 자동차 연결하기 (2)
with-RL
2023. 8. 15. 17:20
이번 포스팅은 URDF를 이용해 만든 로봇에 Unity 자동차 연결하기 (1) 과정을 통해서 만들어진 로봇을 Unity 로봇을 C# 코드를 이용해서 직접 운전해 보는 기능을 만들어 보는 과정입니다.
이 포스트는 다음 과정을 완료한 후에 참고하시길 바랍니다.
- URDF를 이용한 간단한 로봇 만들기 (1)
- URDF를 이용한 간단한 로봇 만들기 (2)
- URDF를 이용한 간단한 로봇 만들기 (3)
- URDF를 이용해 만든 로봇에 가상 자동차 연결하기 (1)
- URDF를 이용해 만든 로봇에 가상 자동차 연결하기 (2)
- URDF를 이용해 만든 로봇에 Unity 자동차 연결하기 (1)
1. Camera Controller Script 추가하기
- 이전 과정을 통해서 만들어진 자동차는 10m x 10m의 땅을 이동하는 자동차입니다. 고정된 카메라로는 자동차의 이동을 확인하기 어려우므로 카메라가 자동차를 따라다니도록 하는 기능을 만드는 과정입니다.
- Project 탭에서 'Assets' 폴더 아래 'Scripts >> 2WD Car' 폴더를 만듭니다.
- '2WD Car' 폴더를 선택하고 마우스 메뉴버튼을 누른 후 메뉴에서 'Create >> C# Script'를 선택합니다.
- Script 이름을 'CameraController'로 지정 후 Script를 선택하고 마우스 메뉴 버튼을 누른 후 메뉴에서 'Open C# Project'를 선택합니다.
- 실행되는 Visual Studio에서 CameraController.cs의 내용을 아래와 같이 수정하고 저장합니다.
using UnityEngine;
public class CameraController : MonoBehaviour
{
[SerializeField] private Vector3 offset;
[SerializeField] private Transform target;
[SerializeField] private float translateSpeed;
[SerializeField] private float rotationSpeed;
private void FixedUpdate()
{
HandleTranslation();
HandleRotation();
}
private void HandleTranslation()
{
var targetPosition = target.TransformPoint(offset);
transform.position = Vector3.Lerp(transform.position, targetPosition, translateSpeed * Time.deltaTime);
}
private void HandleRotation()
{
var direction = target.position - transform.position;
var rotation = Quaternion.LookRotation(direction, Vector3.up);
transform.rotation = Quaternion.Lerp(transform.rotation, rotation, rotationSpeed * Time.deltaTime);
}
}
- 'Main Camera' Object를 선택 후 'Camera Controlller' Script를 추가합니다.
- 'Main Camera' Object의 'Camera Controlller' 정보를 아래와 같이 설정합니다.
◦ Offset: (0, 0.2, -1)
◦ Target: Car Object
◦ Translate Speed: 2
◦ Rotation Speed: 2
- Play 번튼을 눌러보면 아래와 같이 카메라가 자연스럽게 이동하는 것을 확인할 수 있습니다.
2. Car Controller Script 추가하기
- 화살표 키보드를 이용해 자동차를 운전하는 Script를 추가하는 과정입니다.
- '2WD Car' 폴더를 선택하고 마우스 메뉴버튼을 누른 후 메뉴에서 'Create >> C# Script'를 선택 후 이름을 CarController로 변경합니다.
- Visual Studio에서 CarController.cs의 내용을 아래와 같이 수정하고 저장합니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CarController : MonoBehaviour
{
private const string HORIZONTAL = "Horizontal";
private const string VERTICAL = "Vertical";
private float horizontalInput;
private float verticalInput;
[SerializeField] private float motorForce;
[SerializeField] private float horizontalRate;
[SerializeField] private WheelCollider leftWheelCollider;
[SerializeField] private WheelCollider rightWheelCollider;
private void FixedUpdate()
{
GetInput();
HandleMotor();
}
private void GetInput()
{
horizontalInput = Input.GetAxis(HORIZONTAL);
verticalInput = Input.GetAxis(VERTICAL);
}
private void HandleMotor()
{
leftWheelCollider.motorTorque = (verticalInput + horizontalInput * horizontalRate) * motorForce;
rightWheelCollider.motorTorque = (verticalInput - horizontalInput * horizontalRate) * motorForce;
}
}
- 우선 Play를 중지합니다.
- Car Object를 선택하고 'Car Controller' Component를 추가합니다.
- Car Component에 아래 내용을 설정합니다.
◦ Mortor Force: 0.01
◦ Horizontal Rage: 0.5
◦ Left Weel Collider: LeftWheel Object
◦ Right Wheel Collider: RightWheel Object
- Play 버튼을 누르고 키보드의 화살표 키를 이용해서 자동차를 조정해 봅니다. 키보드 입력에 따라서 자동차가 이동하는 것을 확인할 수 있습니다.