내 머릿속

[강화학습] 실제 예제로 배우는 아이작 심 기반 강화학습 -1편- 본문

자율주행

[강화학습] 실제 예제로 배우는 아이작 심 기반 강화학습 -1편-

두구궁 2025. 1. 21. 16:39
728x90
반응형
SMALL

 

https://www.youtube.com/watch?v=rVCHgXl9E6o

 

본 예제는 다음 영상을 보고 한국인을 위해 제작된 예제입니다.

 

사실 저도 강화학습에 대해 1도 모르지만, 이론은 나중에 공부하더라도 써먹을 수 있는 수준이 되기 위한 글입니다.

 

예제에서 사용하는 환경은 다음과 같습니다.

Ubuntu 22.04
ROS2 Humble

Issac sim 바이너리 설치 방법( Nvidia Omniverse )

https://challenge-sam.tistory.com/entry/NVIDIA-Omniverse-Isaac-Sim-%EC%84%A4%EC%B9%98

 

[NVIDIA Omniverse] Isaac Sim 설치

💡아이작 심(Isaac Sim) NVIDIA Omniverse Platform의 로봇 시뮬레이션 툴킷이다. 주로 로봇 개발 및 테스트를 위해 사용한다. 아이작 심의 시뮬레이션 환경을 활용하여 인공지능의 테스트 및 합성 데이터

challenge-sam.tistory.com

이 블로그에 자세히 나와있으며, 주의해야할 사항은 다음과 같습니다.

1. 그래픽 카드 드라이버 510 이상으로 세팅해주기 ( 470등은 불가능 )

2. 실행할 때 이런 화면을 보게 될 건데, ROS Bridge Extension은 ros2로, 그리고 그 아래 버전을 humble로 세팅.


Issac Python 환경 설치

https://howtobemechanic.tistory.com/37

 

[Ubuntu 22.04] ROS humble환경 Issac sim 설치

https://docs.omniverse.nvidia.com/isaacsim/latest/installation/install_python.html Python Environment Installation — Omniverse IsaacSimThe first time isaacsim is imported, a prompt will ask about accepting the EULA at runtime. Once the EULA is accepted,

howtobemechanic.tistory.com

이전에 쓴 글에 나와있으며, Extension 설치를 빼먹으면 예제를 실행할 수 없음.


예제 파일 다운 받기. ( 출처는 동일하게 유튜브에서 가져왔으며, 이후 영상이 내려가는것을 대비해 파일을 첨부합니다)

Isaac_SAC.zip
1.90MB


URDF 불러오기

URDF는 로봇공학에서 링크, 조인트 간의 관계를 다룬 하나의 xml문서로써, 단순히 생각하면 로봇 껍데기라고 보면 된다.

상단 메뉴에 Isaac Utils -> Workflows -> URDF Importer를 눌러준다.

 


평면 설정

이 상태에서는 로봇이 바닥으로 떨어지고 만다, 그래서 바닥면을 설정해주는데 Create->Physics->Ground Plane 순이다.


라이다 설정

현재 urdf의 lrf_link가 라이다에 해당하는데 urdf만 불러와서 껍데기만 존재한다.

이제 그 껍데기에 라이다가 시뮬레이션 상에서 나오게 하고, 이후에 ROS연동으로 토픽을 받아주면 된다.

우선 시뮬레이션에서 라이다 데이터를 나오게 하는 과정은 다음과 같다.

우측 Stage 메뉴에서 omni_robot->lrf_link를 클릭한 상태로,

Create->Isaac->Sensors->RTX Lidar->Rotating 을 지정해준다.

그러면 이제 lfr_link에 Camera type의 Rotating 이라는 라이다가 생기게 된다.

왜 타입이 카메라냐면 Isaac sim자체가 라이다 타입이 없고 카메라로 라이다를 구현한 느낌이다.(추측)


ROS Interface

이제 ROS로 데이터를 받을 수 있으면 되는데, 아이작 시뮬레이터는 모든 데이터를 Action Graph로 관리하기 때문에 ROS 인터페이스도 이를 통해 만들어주면 된다.

Isaac Utils -> Common Omnigraphs-> ROS2 RTX Lidar를 선택해준다.

그리고 Lidar Prim에 Rotating을 찾아서 선택해주고 OK로 넘어간다.

그러면 그림과 같이 ROS_LidarRTX가 생기게 되는데, 이를 우클릭해서 Open Graph로 진입하자.

그러면 그림과 같이 아래 화면이 바뀌는데,

제일 오른쪽 노드인 ROS2 RTX Lidar Helper에서 frameId를 sim_lidar에서 lrf_link로 변경해준다.

 

다음은 TF다.

TF는 로봇공학에서 맵 좌표계에서 로봇으로, 혹은 각 로봇끼리, 로봇 내의 링크와 조인트 간의 관계를 정의해주는 좌표계라고 보면된다. 이걸 설정해줘야 맵에서 라이다의 포인트가 어디를 찍고 있는지 등의 관계가 설정된다.

Isaac Utils -> Common Omnigraphs -> ROS2 TF Publisher

그리고, Target Prim을 omni_robot으로 지정해준다. 그러면 이번에는 ROS_TF 라는 Action Graph가 Stage메뉴에 추가되고, 이를 Open graph를 통해서 열어주자.

이번에도 제일 우측의 ROS2 Publish Transform Tree 노드를 선택해주고,

우측 메뉴에서 TragetPrims아래의 Add Target을 눌러준다.

그리고 omni_robot의 lrf_link를 지정해주면 이와 같이 설정되는데.

이제 로봇에서 라이다의 위치관계를 지정해 주게 된것이다.

이제 Create->Mesh->Cube 로 큐브 하나를 스폰하고 차 앞에 두자.

그리고 좌측의 Play를 누른 상태에서 rviz2로 시각화 툴을 키면

Add -> By topic 했을때 /laser_scan 토픽이 보일것이다.

이를 추가해주고, 좌측의 Global Options의 Fixed Frame을 omni_robot으로 바꿔주면

이렇게 라이다 데이터를 ROS로 받아볼 수 있다.

728x90
반응형
LIST