<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>teramiku39 님의 블로그</title>
    <link>https://teramiku39.tistory.com/</link>
    <description>teramiku39 님의 블로그 입니다.</description>
    <language>ko</language>
    <pubDate>Fri, 5 Jun 2026 12:21:39 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>teramiku39</managingEditor>
    <item>
      <title>2025-03-01~2025-09-01까지의 진행사항 요약</title>
      <link>https://teramiku39.tistory.com/2</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;# 핵심 요약&lt;/b&gt;&amp;nbsp;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;Ubuntu 22.04 부팅, Isaac Sim 4.5.0, Lab 2.1.0 설치, 데이비드 실버 RL 강의 듣기&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;Ubuntu Terminal 환경 적응, 로보틱스/AI 조사용 에세이 작성&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;Isaac Sim gui, script 튜토리얼 진행, 이륜 로봇 모델 제작, Isaac Lab 튜토리얼 진행&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그래픽 카드 교체 후 Pytorch 호환성 문제 해결, Isaac Sim 5.0, Isaac Lab branch 빌드&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;★&lt;/span&gt;이륜 로봇 목표 지점 유도 제어&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;Ubuntu 24.04 듀얼부팅, 카메라, 라이다 센서 부착 시도, ROS 2 설치&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;Windows 듀얼부팅, 문서 작성, Github repository 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;# 2025년 3월&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Ubuntu 22.04 부팅, Isaac Sim 4.5.0, Lab 2.1.0 설치, 데이비드 실버 RL 강의 듣기&amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- 빠른 적응을 위해 듀얼부팅 없이 윈도우 11에서 우분투로 OS 교체 결정. isaac lab stable과 호환되는 22.04 LTS 설치&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- 윈도우에 있던 자료는 하드 드라이브에 백업&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- Gnome 환경 윈도우와 유사하게 구성, GUI 신뢰성이 떨어져서 터미널로 작업&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;(모르는 명령어는 함부로 치지 않기!!!)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- 문서 보고 아이작 심 빌드 &lt;a href=&quot;https://github.com/isaac-sim/IsaacSim&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/isaac-sim/IsaacSim&lt;/a&gt;&amp;nbsp;&lt;b&gt;(pip 패키지로 설치하면 더 효율적)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- 아이작 랩 빌드 &lt;a href=&quot;https://github.com/isaac-sim/IsaacLab&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/isaac-sim/IsaacLab &lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- 각각을 빌드했을때는 프로젝트 디렉토리를 isaaclab.sh에서 수동으로 연결해야 함&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- 설치 테스트 코드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;./isaaclab.sh -p scripts/reinforcement_learning/rsl_rl/train.py --task=Isaac-Ant-v0 --headless&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- 데이비드 실버 RL course 듣기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &lt;a href=&quot;https://www.youtube.com/watch?v=2pWv7GOvuf0&amp;amp;list=PLqYmG7hTraZDM-OYHWgPebj2MfCFzFObQ&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=2pWv7GOvuf0&amp;amp;list=PLqYmG7hTraZDM-OYHWgPebj2MfCFzFObQ&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- MDP, Model-Free, Value Function, Policy gradient 학습&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- 이해 안되는 개념(대부분 수식)은 gemini에게 물어보며 진행&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;# 2025년 4월 ~ 6월&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Ubuntu Terminal 환경 적응, 로보틱스/AI 조사용 에세이 작성&amp;nbsp;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- 1학기 진행중 산발적으로 터져 나오는 Ubuntu 에러, 문제 해결.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; (Windows와 다르게 사용자가 직접 터미널로 수정해야 하는 부분이 많음.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- Windows에서만 실행되는 프로그램들 대체재 찾기. --&amp;gt; github에 있는 프로젝트들 찾은 후 설치/빌드해서 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- 최근 로보틱스 업계 동향 자투리 시간에 검색&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;=&amp;gt; 국내에서는 4족(quadrupedal), 바퀴 로봇 많이 사용, 이동 플랫폼과 팔/손 만드는 업체가 다른 경우 많음&amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- 전문학술영어 시간에 주제를 로봇 강화학습 제어로 선정해서 개념 복습 겸 과거 논문들 훑어보고 분석글 작성후 발표&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;=&amp;gt; PILCO, SAC 등이 있지만 아직은 PPO가 주류&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/dbZvp2/dJMb9N9xqHY/kvjE7cbE9qSNK3BGZv4Il0/Evaluating%20The%20efficiency%20of%20Reinforcement%20Learning%20in%20Robotic%20control%20systems-1.pdf?attach=1&amp;amp;knm=tfile.pdf&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;Evaluating The efficiency of Reinforcement Learning in Robotic control systems-1.pdf&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.06MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;# 2025년 7월 초 ~ 7월 2주차&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Isaac Sim gui, script 튜토리얼 진행, 이륜 로봇 모델 제작, Isaac Lab 튜토리얼 진행&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- 본격적인 학습 진행. 드라이브 위치가 바뀌었더니 작동이 안되서 재설치&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- 문서가 업데이트되서 Pip 패키지 설치 방법으로 수월하게 진행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- Isaac Sim 튜토리얼로 간단한 이륜 로봇 모델링&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.isaacsim.omniverse.nvidia.com/latest/robot_setup_tutorials/index.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.isaacsim.omniverse.nvidia.com/latest/robot_setup_tutorials/index.html&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- 추후 Articulation을 심층 시뮬레이션하려면 Mujoco 등 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- Isaac Lab 튜토리얼 진행 (python 스크립트 방식에 적응)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://isaac-sim.github.io/IsaacLab/release/2.1.0/source/tutorials/03_envs/modify_direct_rl_env.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://isaac-sim.github.io/IsaacLab/release/2.1.0/source/tutorials/03_envs/modify_direct_rl_env.html&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;# 2025년 7월 3주차&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;그래픽 카드 교체 후 Pytorch 호환성 문제 해결, Isaac Sim 5.0, Isaac Lab branch 빌드&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- 컴퓨터 그래픽 카드를 반강제로 5080으로 교체. Blackwell 아키텍처와 Pytorch, Isaac Sim 의존성 지옥 해결&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- Isaac Sim 예제 실행은 가능하나 렌더링에 심각한 노이즈가 발생&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- 공식 디스코드 탐색 결과 isaac sim 5.0.0 unstable branch로 버전업밖에 없음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://discord.com/channels/827959428476174346/1288159667973001347&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://discord.com/channels/827959428476174346/1288159667973001347&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- Github에서 5.0.0 branch를 찾아서 직접 터미널로 빌드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- 5.0.0과의 호환을 위해 Isaac Lab도 2.2.0을 직접 빌드한 후 두 프로그램과 외부 프로젝트를 연결&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- 수많은 버그와 에러 해결 후 Isaac Lab scene과 robotCfg 로드 성공&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;# 2025년 7월 4주차 ~ 8월 1주차&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;이륜 로봇 목표 지점 유도 제어&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;nbsp; Direct RL Environment, SKRL PPO로 외부 프로젝트 MyFirstCar 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;nbsp; &lt;span&gt;지정된 방향을 따라가는 예제 환경을 지정된 &lt;/span&gt;&lt;span&gt;목표 지점까지 도달후 정지하게 수정&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;nbsp; 자세한 사항은 하위 문서 참조&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;431&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EK7Hn/btsQ2feLpbD/tzyklMgYrGKDqcCuziLmjK/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EK7Hn/btsQ2feLpbD/tzyklMgYrGKDqcCuziLmjK/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EK7Hn/btsQ2feLpbD/tzyklMgYrGKDqcCuziLmjK/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEK7Hn%2FbtsQ2feLpbD%2FtzyklMgYrGKDqcCuziLmjK%2Fimg.webp&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;431&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;431&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://teramiku39.tistory.com/1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2025.08.13 - [아이작 랩] - 아이작 랩 - 이륜 로봇 강화학습 제어&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;# 2025년 8월 2주차 ~ 8월 3주차&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Ubuntu 24.04 듀얼부팅, 카메라, 라이다 센서 부착 시도, ROS 2 설치&amp;nbsp;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- 8월 9일 드디어 Isaac Sim 5.0.0 정식 버전 출시&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- 22.04를 기본 OS로 쓰기에는 업무 외 프로그램 호환성 문제가 계속 심해져서 외장 드라이브에 24.04를 듀얼부팅&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- 듀얼 부팅 후 안정성 검증을 위해 프로젝트는 22.04 유지&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- 유도 제어 마친 후 카메라 부착해 목표 지점 인식 시도&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;479&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VPR2S/btsQ2skzQ6a/8HkxRNDjjanHKE9hvzkEJk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VPR2S/btsQ2skzQ6a/8HkxRNDjjanHKE9hvzkEJk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VPR2S/btsQ2skzQ6a/8HkxRNDjjanHKE9hvzkEJk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVPR2S%2FbtsQ2skzQ6a%2F8HkxRNDjjanHKE9hvzkEJk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;406&quot; height=&quot;304&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;479&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- 목표 지점에 박아놓은 object 인식이 잘 작동하지 않고, 설령 object 인식해도 거리 인지를 못함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- LIDAR 센서 시뮬레이션을 위해 ROS 2 extension 설치&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- 센서는 Sim이 아니라 Isaac Lab에서 설정&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- 예제에 있던 LIDAR 거리 센서를 사용해보려 했으나 프로젝트에 센서 로딩 실패&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- 적절한 예제 코드가 없으니 작업이 급격하게 늘어짐을 체감&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;# 2025년 8월 4주차&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Windows 듀얼부팅, 문서 작성, Github Repository 생성&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- 키보드 보안 프로그램, Microsoft 365 미지원 등 linux 단독 OS으로는 어려운 점 발생&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- NVME쪽 SSD에 윈도우11을 듀얼부팅, 외장드라이브는 24.04 유지(듀얼 드라이브/듀얼 부트로더 부팅)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- 22.04에서 파일 백업하여 전부 이동, 24.04용으로 Isaac Sim, Isaac Lab 빌드해 개발 환경 통합&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;842&quot; data-origin-height=&quot;190&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVATu1/btsQ3ExHOFt/Jmjhk24JTHV2QomRhvN0CK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVATu1/btsQ3ExHOFt/Jmjhk24JTHV2QomRhvN0CK/img.png&quot; data-alt=&quot;8월 4주차 프로젝트 폴더 상태&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVATu1/btsQ3ExHOFt/Jmjhk24JTHV2QomRhvN0CK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVATu1%2FbtsQ3ExHOFt%2FJmjhk24JTHV2QomRhvN0CK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;842&quot; height=&quot;190&quot; data-origin-width=&quot;842&quot; data-origin-height=&quot;190&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;8월 4주차 프로젝트 폴더 상태&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- 이륜 로봇 제어 부분 까먹지 않게 문서화 완료&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- 오픈 소스화 후 Isaac Lab 공식 문서도 업데이트가 활발하게 진행중(좋은 문서들은 왜 이렇게 늦게 올라오는가...)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://isaac-sim.github.io/IsaacLab/main/source/setup/ecosystem.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://isaac-sim.github.io/IsaacLab/main/source/setup/ecosystem.html&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- 여러가지 로보틱스 분야 정보 탐색&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- github repository 생성 &lt;a href=&quot;https://github.com/teramiku39/IsaacLab&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/teramiku39/IsaacLab&lt;/a&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;i&gt;# 진로 관련 질문&lt;/i&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;- 수식(이론)과 코드(실무)를 잘 연결하려면?&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;배웠던 지식을 코드로 바꾸는 과정이 많은 어려움이 있고, 튜토리얼이나 예제 코드가 없으면 쉽게 진행할 수가 없었습니다. 이론과 실무, 어떤 부분에 집중을 해야 문제해결역량을 성장시킬 수 있을까요?&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;- 대학원 진학은 필수일까요?&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이 외에도 프로젝트를 진행하면서 부족한 점이 많음을 느꼈습니다. 제대로 된 실무를 수행하려면 학부 때 선행경험뿐만 아니라 대학원에서의 전문적 경험을 따로 쌓아야 할까요?&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;- 군 입대 전까지 무엇을 하면 좋을까요?&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;현재 1월~2월 중에 공군 입대 예정인데, 남은 기간(2학기 중~전역 후) 동안 어떤 경험을 쌓으면 좋을지 궁금합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;Mujoco, robosuite, ROS 등 다른 프레임워크를 다뤄볼지, SAC, Dagger나 다익스트라 등 다른 방법론, 알고리즘을 공부할지, 아니면 Jetson nano 등 하드웨어를 다뤄볼지 어떤 조언이든 도움이 될 것 같습니다.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;# 궁금한 점&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;- 마블, 디든30 설계 차이의 이유?&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; 각각 다리 길이, 동체 비율, 액추에이터 위치가 다른데, 해당 공학적 설계가 왜 적용되었는지가 궁금합니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 디든워커 &amp;lt;-&amp;gt; KAIST DRCD Lab humanoid와의 연관관계?&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;920&quot; data-origin-height=&quot;491&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sT7sI/btsQ3ovmDWU/CDwIWj79zbScftfKpjNWlk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sT7sI/btsQ3ovmDWU/CDwIWj79zbScftfKpjNWlk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sT7sI/btsQ3ovmDWU/CDwIWj79zbScftfKpjNWlk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsT7sI%2FbtsQ3ovmDWU%2FCDwIWj79zbScftfKpjNWlk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;491&quot; data-origin-width=&quot;920&quot; data-origin-height=&quot;491&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;- 최근 로보틱스 랩실에서의 창업이 활발한 이유?&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;- world model, model-based RL의 전망?&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &lt;a href=&quot;https://arxiv.org/abs/2506.01622v2&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://arxiv.org/abs/2506.01622v2 &lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 논문 초록, 서론 결론을 보고 궁금해졌습니다. 로봇이 특정 작업이 아니라 범용적인 작업을 수행하려면 model이 꼭 필요할지 대표님의 의견이 궁금합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>isaac lab</category>
      <category>Isaac Sim</category>
      <category>reinforcement learning</category>
      <category>robotics</category>
      <author>teramiku39</author>
      <guid isPermaLink="true">https://teramiku39.tistory.com/2</guid>
      <comments>https://teramiku39.tistory.com/2#entry2comment</comments>
      <pubDate>Wed, 24 Sep 2025 18:11:28 +0900</pubDate>
    </item>
    <item>
      <title>아이작 랩 - 이륜 로봇 목표 지점 유도 제어</title>
      <link>https://teramiku39.tistory.com/1</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.isaacsim.omniverse.nvidia.com/latest/robot_setup_tutorials/index.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.isaacsim.omniverse.nvidia.com/latest/robot_setup_tutorials/index.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1754822045064&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Robot Setup Tutorials Series &amp;mdash; Isaac Sim Documentation&quot; data-og-description=&quot;Robot Setup Tutorials Series The GUI tutorials walk you through setting up your virtual world and building robot digital twins with various NVIDIA Isaac Sim features. In the process, you will learn where to find frequently used properties, settings, and to&quot; data-og-host=&quot;docs.isaacsim.omniverse.nvidia.com&quot; data-og-source-url=&quot;https://docs.isaacsim.omniverse.nvidia.com/latest/robot_setup_tutorials/index.html&quot; data-og-url=&quot;https://docs.isaacsim.omniverse.nvidia.com/latest/robot_setup_tutorials/index.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://docs.isaacsim.omniverse.nvidia.com/latest/robot_setup_tutorials/index.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.isaacsim.omniverse.nvidia.com/latest/robot_setup_tutorials/index.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Robot Setup Tutorials Series &amp;mdash; Isaac Sim Documentation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Robot Setup Tutorials Series The GUI tutorials walk you through setting up your virtual world and building robot digital twins with various NVIDIA Isaac Sim features. In the process, you will learn where to find frequently used properties, settings, and to&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.isaacsim.omniverse.nvidia.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 문서를 참고하여 강화학습 제어용 이륜 로봇을 제작하였다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://isaac-sim.github.io/IsaacLab/main/source/setup/walkthrough/training_jetbot_gt.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://isaac-sim.github.io/IsaacLab/main/source/setup/walkthrough/training_jetbot_gt.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1754822811836&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Training the Jetbot: Ground Truth &amp;mdash; Isaac Lab Documentation&quot; data-og-description=&quot;Training the Jetbot: Ground Truth With the environment defined, we can now start modifying our observations and rewards in order to train a policy to act as a controller for the Jetbot. As a user, we would like to be able to specify the desired direction f&quot; data-og-host=&quot;isaac-sim.github.io&quot; data-og-source-url=&quot;https://isaac-sim.github.io/IsaacLab/main/source/setup/walkthrough/training_jetbot_gt.html&quot; data-og-url=&quot;https://isaac-sim.github.io/IsaacLab/main/source/setup/walkthrough/training_jetbot_gt.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dnUbtV/hyZygAW6fz/D6h09huAqhnaChfzd5ZvzK/img.jpg?width=1321&amp;amp;height=592&amp;amp;face=0_0_1321_592&quot;&gt;&lt;a href=&quot;https://isaac-sim.github.io/IsaacLab/main/source/setup/walkthrough/training_jetbot_gt.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://isaac-sim.github.io/IsaacLab/main/source/setup/walkthrough/training_jetbot_gt.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dnUbtV/hyZygAW6fz/D6h09huAqhnaChfzd5ZvzK/img.jpg?width=1321&amp;amp;height=592&amp;amp;face=0_0_1321_592');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Training the Jetbot: Ground Truth &amp;mdash; Isaac Lab Documentation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Training the Jetbot: Ground Truth With the environment defined, we can now start modifying our observations and rewards in order to train a policy to act as a controller for the Jetbot. As a user, we would like to be able to specify the desired direction f&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;isaac-sim.github.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 해당 예제를 통해 같은 종류의 이륜 로봇의 방향을 제어하는 예제 코드를 기반으로 시작하였다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주로 수정한 파일은 Task의 env.py 파일이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/isaac-sim/IsaacLabTutorial/blob/jetbot-intro-1-2/source/isaac_lab_tutorial/isaac_lab_tutorial/tasks/direct/isaac_lab_tutorial/isaac_lab_tutorial_env.py&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/isaac-sim/IsaacLabTutorial/blob/jetbot-intro-1-2/source/isaac_lab_tutorial/isaac_lab_tutorial/tasks/direct/isaac_lab_tutorial/isaac_lab_tutorial_env.py&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;576&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EZDZT/btsQ0r1agv7/63zaZyJekyHT6CWVkVkowk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EZDZT/btsQ0r1agv7/63zaZyJekyHT6CWVkVkowk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EZDZT/btsQ0r1agv7/63zaZyJekyHT6CWVkVkowk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEZDZT%2FbtsQ0r1agv7%2F63zaZyJekyHT6CWVkVkowk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;399&quot; height=&quot;499&quot; data-origin-width=&quot;576&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. RL 에이전트가 수행할 작업(Task) 변경&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;831&quot; data-origin-height=&quot;77&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GDyOg/btsQ0voZH0k/yFQ9knQzoKrG3UpWRxo3DK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GDyOg/btsQ0voZH0k/yFQ9knQzoKrG3UpWRxo3DK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GDyOg/btsQ0voZH0k/yFQ9knQzoKrG3UpWRxo3DK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGDyOg%2FbtsQ0voZH0k%2FyFQ9knQzoKrG3UpWRxo3DK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;831&quot; height=&quot;77&quot; data-origin-width=&quot;831&quot; data-origin-height=&quot;77&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;b&gt;원래 코드&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; - _reset_idx 함수에서 self.commands라는 &lt;b&gt;임의의 방향 벡터&lt;/b&gt; 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; - 에이전트가 self.commands 벡터 방향으로 최대한 정렬, 해당 방향으로 빠르게 나아가는 것이 목표&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; - 목표 시각화를 위한 waypoint 마커가 존재&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;764&quot; data-origin-height=&quot;198&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ytnVh/btsQ3fZpI55/3ivSKTQsr2UVCRyWcYY52k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ytnVh/btsQ3fZpI55/3ivSKTQsr2UVCRyWcYY52k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ytnVh/btsQ3fZpI55/3ivSKTQsr2UVCRyWcYY52k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FytnVh%2FbtsQ3fZpI55%2F3ivSKTQsr2UVCRyWcYY52k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;764&quot; height=&quot;198&quot; data-origin-width=&quot;764&quot; data-origin-height=&quot;198&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp;수정된 코드&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; - _reset_idx 함수에서 self.waypoint_locations&lt;b&gt;&amp;nbsp;목표 좌표&lt;/b&gt; 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; - self.commands 벡터 생성은 삭제&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; - 에이전트는 현재 위치에서 self.waypoint_locations까지 스스로 경로를 찾아 도달하는 것이 목표&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; - 조금 더 복잡하고 일반적인 내비게이션(Navigation) 문제&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. 시각화(Visualization) 마커 로직 변경&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;학습 환경 시각화를 도와주는 마커(_visualize_markers) 작동 방식 변경&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;779&quot; data-origin-height=&quot;281&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9oP5T/btsQ4oBgPiU/fBktH4eyEW2EZ7ZRrKIZ3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9oP5T/btsQ4oBgPiU/fBktH4eyEW2EZ7ZRrKIZ3k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9oP5T/btsQ4oBgPiU/fBktH4eyEW2EZ7ZRrKIZ3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9oP5T%2FbtsQ4oBgPiU%2FfBktH4eyEW2EZ7ZRrKIZ3k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;779&quot; height=&quot;281&quot; data-origin-width=&quot;779&quot; data-origin-height=&quot;281&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; 원래 코드&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;- forward 마커&lt;span&gt;&lt;span&gt;(파란색 화살표)는 로봇의 전진 방향 벡터 표시&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;- command 마커(빨간색 화살표)는 임의로 생성된 self.commands 벡터 방향 표시&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;581&quot; data-origin-height=&quot;100&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QwiZd/btsQ310C1Ht/OyGKjCTk57lbmo8HPCn280/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QwiZd/btsQ310C1Ht/OyGKjCTk57lbmo8HPCn280/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QwiZd/btsQ310C1Ht/OyGKjCTk57lbmo8HPCn280/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQwiZd%2FbtsQ310C1Ht%2FOyGKjCTk57lbmo8HPCn280%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;504&quot; height=&quot;246&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;581&quot; data-origin-height=&quot;100&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;826&quot; data-origin-height=&quot;688&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bR1pxp/btsQ1n5gGQ5/BR9Gy5fw0hxmt8bRNGiark/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bR1pxp/btsQ1n5gGQ5/BR9Gy5fw0hxmt8bRNGiark/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bR1pxp/btsQ1n5gGQ5/BR9Gy5fw0hxmt8bRNGiark/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbR1pxp%2FbtsQ1n5gGQ5%2FBR9Gy5fw0hxmt8bRNGiark%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;825&quot; height=&quot;687&quot; data-origin-width=&quot;826&quot; data-origin-height=&quot;688&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;402&quot; data-origin-height=&quot;301&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwzWJm/btsQ3mEipQh/6Gayg7TgumOY1q4W76ITok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwzWJm/btsQ3mEipQh/6Gayg7TgumOY1q4W76ITok/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwzWJm/btsQ3mEipQh/6Gayg7TgumOY1q4W76ITok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwzWJm%2FbtsQ3mEipQh%2F6Gayg7TgumOY1q4W76ITok%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;402&quot; height=&quot;301&quot; data-origin-width=&quot;402&quot; data-origin-height=&quot;301&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;수정된 코드&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; - &lt;span&gt;&lt;/span&gt;&lt;span&gt;waypoint&lt;/span&gt;&lt;span&gt; 마커 추가해&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;목표 지점 (녹색 화살표)&lt;/span&gt;&lt;/b&gt;&lt;span&gt; 시각화&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; - command 마커가 현재 로봇 위치에서 목표 지점(waypoint)을 가리키는 방향을 실시간으로 계산&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; - 현재 로봇이 목표를 향해 주행중인지 직관적으로 파악 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;3. 관측 (&lt;span&gt;_get_observations&lt;/span&gt;) 재구성&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;784&quot; data-origin-height=&quot;250&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rryXS/btsQ3xZOlgN/PJEpxCvF8BbiFEud1LB9Ok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rryXS/btsQ3xZOlgN/PJEpxCvF8BbiFEud1LB9Ok/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rryXS/btsQ3xZOlgN/PJEpxCvF8BbiFEud1LB9Ok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrryXS%2FbtsQ3xZOlgN%2FPJEpxCvF8BbiFEud1LB9Ok%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;784&quot; height=&quot;250&quot; data-origin-width=&quot;784&quot; data-origin-height=&quot;250&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;원래 코드&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 로봇의 foward.commands 와 &lt;/span&gt;&lt;span&gt;self.commands&lt;/span&gt;&lt;span&gt; 벡터 간의 관계 관측&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - dot&lt;/span&gt;&lt;span&gt;: 두 벡터의 내적 (방향 일치도).&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - cross&lt;/span&gt;&lt;span&gt;: 두 벡터의 외적 (방향 차이).&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - forward_speed&lt;/span&gt;&lt;span&gt;: 로봇의 전진 속도.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;685&quot; data-origin-height=&quot;202&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b6Dnfg/btsQ1wOT2R2/N7kzCPy35MDIxPLXlXaRoK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b6Dnfg/btsQ1wOT2R2/N7kzCPy35MDIxPLXlXaRoK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6Dnfg/btsQ1wOT2R2/N7kzCPy35MDIxPLXlXaRoK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6Dnfg%2FbtsQ1wOT2R2%2FN7kzCPy35MDIxPLXlXaRoK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;685&quot; height=&quot;202&quot; data-origin-width=&quot;685&quot; data-origin-height=&quot;202&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; 수정된 코드&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 목표 지점 도달에 필수적인 정보들로 관측 데이터 구성&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - vec_to_target_local&lt;/span&gt;&lt;span&gt;: 로봇의 현재 위치와 방향 기준 목표 지점까지의 상대 위치 벡터&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - robot_lin_vel_local&lt;/span&gt;&lt;span&gt;: 로봇의 로컬 좌표계 기준 선속도&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - robot_ang_vel_local&lt;/span&gt;&lt;span&gt;: 로봇의 로컬 좌표계 기준 각속도&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;4. 보상 (Reward) 시스템 설계 변경 (&lt;/span&gt;&lt;span&gt;_get_rewards&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;635&quot; data-origin-height=&quot;169&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Cb7YR/btsQ2b4jiV9/f18MXzKZ7joALVhcwghRAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Cb7YR/btsQ2b4jiV9/f18MXzKZ7joALVhcwghRAk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Cb7YR/btsQ2b4jiV9/f18MXzKZ7joALVhcwghRAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCb7YR%2FbtsQ2b4jiV9%2Ff18MXzKZ7joALVhcwghRAk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;635&quot; height=&quot;169&quot; data-origin-width=&quot;635&quot; data-origin-height=&quot;169&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;원래 코드&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 전진 속도 보상 (&lt;/span&gt;&lt;span&gt;forward_reward&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 명령 방향 정렬 보상 (&lt;/span&gt;&lt;span&gt;alignment_reward&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;812&quot; data-origin-height=&quot;560&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d4TGRN/btsQ3Xqn7KJ/HLBMWz8Mnru3Ys6uZong9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d4TGRN/btsQ3Xqn7KJ/HLBMWz8Mnru3Ys6uZong9K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d4TGRN/btsQ3Xqn7KJ/HLBMWz8Mnru3Ys6uZong9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd4TGRN%2FbtsQ3Xqn7KJ%2FHLBMWz8Mnru3Ys6uZong9K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;812&quot; height=&quot;560&quot; data-origin-width=&quot;812&quot; data-origin-height=&quot;560&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;b&gt;수정된 코드&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 목표 지점 도달을 위한 복합적이고 정교한 보상 구조 도입&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - progress_reward&lt;/span&gt;&lt;span&gt;: 목표 지점과의 거리에 따른 보상 (포텐셜 기반)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - velocity_reward&lt;/span&gt;&lt;span&gt;: 목표 지점을 향해 움직이는 속도에 대한 보상&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - heading_reward&lt;/span&gt;&lt;span&gt;: 로봇이 목표 지점을 바라보도록 유도하는 보상&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - success_reward&lt;/span&gt;&lt;span&gt;: 목표 근접 시 주어지는 큰 성공 보상&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - action_penalty&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;time_penalty&lt;/span&gt;&lt;span&gt;: 불필요한 움직임, 시간 단축을 위한 페널티&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 이론 지식이 부족해서 대부분의 시간이 Reward function 수정에 소요&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;5. episode 관리 로직 변경 (&lt;/span&gt;&lt;span&gt;_get_dones&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;_reset_idx&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;846&quot; data-origin-height=&quot;278&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zXLZF/btsQ4kezdlV/AssBdTZ7UNjqYLOHkGdzl1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zXLZF/btsQ4kezdlV/AssBdTZ7UNjqYLOHkGdzl1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zXLZF/btsQ4kezdlV/AssBdTZ7UNjqYLOHkGdzl1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzXLZF%2FbtsQ4kezdlV%2FAssBdTZ7UNjqYLOHkGdzl1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;846&quot; height=&quot;278&quot; data-origin-width=&quot;846&quot; data-origin-height=&quot;278&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;b&gt;원래 코드&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 종료 조건&lt;/span&gt;&lt;span&gt;: 최대 스텝 도달 시&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 리셋&lt;/span&gt;&lt;span&gt;: 무작위 &lt;/span&gt;&lt;span&gt;'방향'&lt;/span&gt;&lt;span&gt; 벡터(&lt;/span&gt;&lt;span&gt;commands&lt;/span&gt;&lt;span&gt;) 생성&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;804&quot; data-origin-height=&quot;412&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PPJjM/btsQ1tYYGZx/Qu6U6693jMjtEe0FShOc50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PPJjM/btsQ1tYYGZx/Qu6U6693jMjtEe0FShOc50/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PPJjM/btsQ1tYYGZx/Qu6U6693jMjtEe0FShOc50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPPJjM%2FbtsQ1tYYGZx%2FQu6U6693jMjtEe0FShOc50%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;804&quot; height=&quot;412&quot; data-origin-width=&quot;804&quot; data-origin-height=&quot;412&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;수정된 코드&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 종료 조건&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;목표 지점 도달&lt;/span&gt;&lt;span&gt; 조건 추가&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 리셋&lt;/span&gt;&lt;span&gt;: 무작위 &lt;/span&gt;&lt;span&gt;'목표 지점'&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;waypoint_locations&lt;/span&gt;&lt;span&gt;) 반경 내 생성&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 리셋 시, 거리 기반 보상(&lt;/span&gt;&lt;span&gt;potentials&lt;/span&gt;&lt;span&gt;) 값 초기화&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;6. env_cfg 설정 변경&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;931&quot; data-origin-height=&quot;396&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cAYks3/btsQ37Na7yj/qxJOPWsZgrZIxijHAkH5M1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cAYks3/btsQ37Na7yj/qxJOPWsZgrZIxijHAkH5M1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cAYks3/btsQ37Na7yj/qxJOPWsZgrZIxijHAkH5M1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcAYks3%2FbtsQ37Na7yj%2FqxJOPWsZgrZIxijHAkH5M1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;931&quot; height=&quot;396&quot; data-origin-width=&quot;931&quot; data-origin-height=&quot;396&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;- 환경 이름 외부 프로젝트(Myfirstcar)에 맞춰 수정&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;- robot_cfg를 jetbot에서 직접 설계한 이륜 로봇으로 교체 (ground plane 간섭 방지용 pos 옵션 추가)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;- episode 세션 시간 2배로 증가(waypoint 도달 전에 episode 종료 막음)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;- action scale 값 0.5로 최적화&amp;nbsp; episode 세션 시간 2배로 증가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;4800 epoch 학습 결과&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;431&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sYypq/btsQ4Cfi5PJ/CZm4gA2xh8cdy9Xw7T4gi1/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sYypq/btsQ4Cfi5PJ/CZm4gA2xh8cdy9Xw7T4gi1/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sYypq/btsQ4Cfi5PJ/CZm4gA2xh8cdy9Xw7T4gi1/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsYypq%2FbtsQ4Cfi5PJ%2FCZm4gA2xh8cdy9Xw7T4gi1%2Fimg.webp&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;431&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;431&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/bzugGn/dJMb9V7yfhT/JbvdtZ6sC38djhXQlNP0H1/%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%BA%90%EC%8A%A4%ED%8A%B8%202025-10-03%2018-24-11.webm?attach=1&amp;amp;knm=tfile.webm&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;스크린캐스트 2025-10-03 18-24-11.webm&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;2.94MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;수정된 env.py 코드&lt;/p&gt;
&lt;div style=&quot;background-color: #1f1f1f; color: #cccccc;&quot; data-darkreader-inline-bgcolor=&quot;&quot; data-darkreader-inline-color=&quot;&quot;&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#&amp;nbsp;Copyright&amp;nbsp;(c)&amp;nbsp;2022-2025,&amp;nbsp;The&amp;nbsp;Isaac&amp;nbsp;Lab&amp;nbsp;Project&amp;nbsp;Developers&amp;nbsp;(&lt;a href=&quot;https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md).&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md).&lt;/a&gt;&lt;br /&gt;#&amp;nbsp;All&amp;nbsp;rights&amp;nbsp;reserved.&lt;br /&gt;#&lt;br /&gt;#&amp;nbsp;SPDX-License-Identifier:&amp;nbsp;BSD-3-Clause&lt;br /&gt;&lt;br /&gt;from&amp;nbsp;__future__&amp;nbsp;import&amp;nbsp;annotations&lt;br /&gt;&lt;br /&gt;import&amp;nbsp;math&lt;br /&gt;import&amp;nbsp;torch&lt;br /&gt;from&amp;nbsp;collections.abc&amp;nbsp;import&amp;nbsp;Sequence&lt;br /&gt;&lt;br /&gt;import&amp;nbsp;isaaclab.sim&amp;nbsp;as&amp;nbsp;sim_utils&lt;br /&gt;from&amp;nbsp;isaaclab.assets&amp;nbsp;import&amp;nbsp;Articulation&lt;br /&gt;from&amp;nbsp;isaaclab.envs&amp;nbsp;import&amp;nbsp;DirectRLEnv&lt;br /&gt;from&amp;nbsp;isaaclab.sim.spawners.from_files&amp;nbsp;import&amp;nbsp;GroundPlaneCfg,&amp;nbsp;spawn_ground_plane&lt;br /&gt;from&amp;nbsp;isaaclab.utils.math&amp;nbsp;import&amp;nbsp;sample_uniform&lt;br /&gt;&lt;br /&gt;from&amp;nbsp;isaaclab.assets&amp;nbsp;import&amp;nbsp;RigidObject,&amp;nbsp;RigidObjectCfg&lt;br /&gt;from&amp;nbsp;isaaclab.sensors.ray_caster&amp;nbsp;import&amp;nbsp;RayCaster,&amp;nbsp;RayCasterCfg,&amp;nbsp;patterns&lt;br /&gt;&lt;br /&gt;from&amp;nbsp;.myfirstcar_env_cfg&amp;nbsp;import&amp;nbsp;MyfirstcarEnvCfg&lt;br /&gt;&lt;br /&gt;from&amp;nbsp;isaaclab.markers&amp;nbsp;import&amp;nbsp;VisualizationMarkers,&amp;nbsp;VisualizationMarkersCfg&lt;br /&gt;from&amp;nbsp;isaaclab.utils.timer&amp;nbsp;import&amp;nbsp;Timer&lt;br /&gt;from&amp;nbsp;isaaclab.utils.assets&amp;nbsp;import&amp;nbsp;ISAAC_NUCLEUS_DIR&lt;br /&gt;import&amp;nbsp;isaaclab.utils.math&amp;nbsp;as&amp;nbsp;math_utils&lt;br /&gt;&lt;br /&gt;def&amp;nbsp;define_markers()&amp;nbsp;-&amp;gt;&amp;nbsp;VisualizationMarkers:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;&quot;&quot;Define&amp;nbsp;markers&amp;nbsp;with&amp;nbsp;various&amp;nbsp;different&amp;nbsp;shapes.&quot;&quot;&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;marker_cfg&amp;nbsp;=&amp;nbsp;VisualizationMarkersCfg(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;prim_path=&quot;/Visuals/myMarkers&quot;,&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;markers={&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;forward&quot;:&amp;nbsp;sim_utils.UsdFileCfg(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;usd_path=f&quot;{ISAAC_NUCLEUS_DIR}/Props/UIElements/arrow_x.usd&quot;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;scale=(0.25,&amp;nbsp;0.25,&amp;nbsp;0.5),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;visual_material=sim_utils.PreviewSurfaceCfg(diffuse_color=(0.0,&amp;nbsp;1.0,&amp;nbsp;1.0)),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;command&quot;:&amp;nbsp;sim_utils.UsdFileCfg(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;usd_path=f&quot;{ISAAC_NUCLEUS_DIR}/Props/UIElements/arrow_x.usd&quot;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;scale=(0.25,&amp;nbsp;0.25,&amp;nbsp;0.5),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;visual_material=sim_utils.PreviewSurfaceCfg(diffuse_color=(1.0,&amp;nbsp;0.0,&amp;nbsp;0.0)),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;waypoint&quot;:&amp;nbsp;sim_utils.UsdFileCfg(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;usd_path=f&quot;{ISAAC_NUCLEUS_DIR}/Props/UIElements/arrow_x.usd&quot;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;scale=(0.3,&amp;nbsp;0.3,&amp;nbsp;0.6),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;visual_material=sim_utils.PreviewSurfaceCfg(diffuse_color=(0.0,&amp;nbsp;1.0,&amp;nbsp;0.0)),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;lidar&quot;:&amp;nbsp;sim_utils.UsdFileCfg(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;usd_path=f&quot;{ISAAC_NUCLEUS_DIR}/Props/UIElements/arrow_x.usd&quot;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;scale=(0.3,&amp;nbsp;0.3,&amp;nbsp;0.6),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;visual_material=sim_utils.PreviewSurfaceCfg(diffuse_color=(0.5,&amp;nbsp;1.0,&amp;nbsp;0.0)),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;VisualizationMarkers(cfg=marker_cfg)&lt;br /&gt;&lt;br /&gt;class&amp;nbsp;MyfirstcarEnv(DirectRLEnv):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cfg:&amp;nbsp;MyfirstcarEnvCfg&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def&amp;nbsp;__init__(self,&amp;nbsp;cfg:&amp;nbsp;MyfirstcarEnvCfg,&amp;nbsp;render_mode:&amp;nbsp;str&amp;nbsp;|&amp;nbsp;None&amp;nbsp;=&amp;nbsp;None,&amp;nbsp;**kwargs):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;super().__init__(cfg,&amp;nbsp;render_mode,&amp;nbsp;**kwargs)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.dof_idx,&amp;nbsp;_&amp;nbsp;=&amp;nbsp;self.robot.find_joints(self.cfg.dof_names)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.action_scale&amp;nbsp;=&amp;nbsp;torch.tensor(self.cfg.action_scale,&amp;nbsp;device=self.device)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def&amp;nbsp;_define_sensor(self)&amp;nbsp;-&amp;gt;&amp;nbsp;RayCaster:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;&quot;&quot;Defines&amp;nbsp;the&amp;nbsp;ray-caster&amp;nbsp;sensor&amp;nbsp;to&amp;nbsp;add&amp;nbsp;to&amp;nbsp;the&amp;nbsp;scene.&quot;&quot;&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;Lidar&amp;nbsp;sensor&amp;nbsp;configuration&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.ray_caster_cfg&amp;nbsp;=&amp;nbsp;RayCasterCfg(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;prim_path=&quot;/World/envs/env_.*/Robot/&quot;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mesh_prim_paths=[&quot;/World/ground&quot;],&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;update_period=0.02,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pattern_cfg=patterns.GridPatternCfg(resolution=0.1,&amp;nbsp;size=(1.6,&amp;nbsp;1.0)),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;offset=RayCasterCfg.OffsetCfg(pos=(0.2,&amp;nbsp;0.0,&amp;nbsp;0.05)),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ray_alignment=&quot;yaw&quot;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;debug_vis=True,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;RayCaster(cfg=self.ray_caster_cfg)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def&amp;nbsp;_setup_scene(self):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.robot&amp;nbsp;=&amp;nbsp;Articulation(self.cfg.robot_cfg)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;add&amp;nbsp;ground&amp;nbsp;plane&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;spawn_ground_plane(prim_path=&quot;/World/ground&quot;,&amp;nbsp;cfg=GroundPlaneCfg())&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;clone&amp;nbsp;and&amp;nbsp;replicate&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.scene.clone_environments(copy_from_source=False)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;add&amp;nbsp;articulation&amp;nbsp;to&amp;nbsp;scene&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.scene.articulations[&quot;robot&quot;]&amp;nbsp;=&amp;nbsp;self.robot&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;add&amp;nbsp;lights&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;light_cfg&amp;nbsp;=&amp;nbsp;sim_utils.DomeLightCfg(intensity=2000.0,&amp;nbsp;color=(0.75,&amp;nbsp;0.75,&amp;nbsp;0.75))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;light_cfg.func(&quot;/World/Light&quot;,&amp;nbsp;light_cfg)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.visualization_markers&amp;nbsp;=&amp;nbsp;define_markers()&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;Initialize&amp;nbsp;sensors&amp;nbsp;and&amp;nbsp;add&amp;nbsp;them&amp;nbsp;to&amp;nbsp;the&amp;nbsp;scene&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.ray_caster&amp;nbsp;=&amp;nbsp;self._define_sensor()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.scene.sensors[&quot;lidar&quot;]&amp;nbsp;=&amp;nbsp;self.lidar&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;setting&amp;nbsp;aside&amp;nbsp;useful&amp;nbsp;variables&amp;nbsp;for&amp;nbsp;later&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.up_dir&amp;nbsp;=&amp;nbsp;torch.tensor([0.0,&amp;nbsp;0.0,&amp;nbsp;1.0],&amp;nbsp;device=self.device)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.waypoint_locations&amp;nbsp;=&amp;nbsp;torch.zeros((self.cfg.scene.num_envs,&amp;nbsp;3),&amp;nbsp;device=self.device)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;initialize&amp;nbsp;buffers&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.dist_to_target&amp;nbsp;=&amp;nbsp;torch.zeros(self.num_envs,&amp;nbsp;device=self.device)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.potentials&amp;nbsp;=&amp;nbsp;torch.zeros(self.num_envs,&amp;nbsp;device=self.device)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.marker_offset&amp;nbsp;=&amp;nbsp;torch.zeros((self.cfg.scene.num_envs,&amp;nbsp;3),&amp;nbsp;device=self.device)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.marker_offset[:,-1]&amp;nbsp;=&amp;nbsp;0.5&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def&amp;nbsp;_visualize_markers(self):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;get&amp;nbsp;marker&amp;nbsp;locations&amp;nbsp;and&amp;nbsp;orientations&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;robot_locations&amp;nbsp;=&amp;nbsp;self.robot.data.root_pos_w&amp;nbsp;+&amp;nbsp;self.marker_offset&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;forward_orientations&amp;nbsp;=&amp;nbsp;self.robot.data.root_quat_w&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;Command&amp;nbsp;marker&amp;nbsp;points&amp;nbsp;towards&amp;nbsp;the&amp;nbsp;waypoint&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vec_to_target&amp;nbsp;=&amp;nbsp;self.waypoint_locations&amp;nbsp;-&amp;nbsp;robot_locations&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vec_to_target[:,&amp;nbsp;2]&amp;nbsp;=&amp;nbsp;0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;Normalize&amp;nbsp;the&amp;nbsp;target&amp;nbsp;vector&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vec_to_target_norm&amp;nbsp;=&amp;nbsp;torch.linalg.norm(vec_to_target,&amp;nbsp;dim=1,&amp;nbsp;keepdim=True)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vec_to_target_safe&amp;nbsp;=&amp;nbsp;vec_to_target&amp;nbsp;/&amp;nbsp;(vec_to_target_norm&amp;nbsp;+&amp;nbsp;1e-6)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;The&amp;nbsp;command&amp;nbsp;marker&amp;nbsp;(arrow_x.usd)&amp;nbsp;points&amp;nbsp;along&amp;nbsp;the&amp;nbsp;x-axis&amp;nbsp;by&amp;nbsp;default.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;This&amp;nbsp;is&amp;nbsp;our&amp;nbsp;starting&amp;nbsp;vector&amp;nbsp;for&amp;nbsp;the&amp;nbsp;rotation&amp;nbsp;calculation.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;start_vec&amp;nbsp;=&amp;nbsp;torch.tensor([1.0,&amp;nbsp;0.0,&amp;nbsp;0.0],&amp;nbsp;device=self.device).expand_as(vec_to_target_safe)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;Calculate&amp;nbsp;angle&amp;nbsp;and&amp;nbsp;axis&amp;nbsp;for&amp;nbsp;rotation&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dot_product&amp;nbsp;=&amp;nbsp;torch.sum(start_vec&amp;nbsp;*&amp;nbsp;vec_to_target_safe,&amp;nbsp;dim=-1).clamp(-1.0,&amp;nbsp;1.0)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;angle&amp;nbsp;=&amp;nbsp;torch.acos(dot_product)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;axis&amp;nbsp;=&amp;nbsp;torch.cross(start_vec,&amp;nbsp;vec_to_target_safe,&amp;nbsp;dim=-1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;Normalize&amp;nbsp;the&amp;nbsp;rotation&amp;nbsp;axis&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;axis_norm&amp;nbsp;=&amp;nbsp;torch.linalg.norm(axis,&amp;nbsp;dim=-1,&amp;nbsp;keepdim=True)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;Handle&amp;nbsp;cases&amp;nbsp;where&amp;nbsp;vectors&amp;nbsp;are&amp;nbsp;collinear&amp;nbsp;(axis&amp;nbsp;norm&amp;nbsp;is&amp;nbsp;near&amp;nbsp;zero)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;up_vec&amp;nbsp;=&amp;nbsp;torch.tensor([0.0,&amp;nbsp;0.0,&amp;nbsp;1.0],&amp;nbsp;device=self.device).expand_as(axis)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;axis&amp;nbsp;=&amp;nbsp;torch.where(axis_norm&amp;nbsp;&amp;gt;&amp;nbsp;1e-6,&amp;nbsp;axis&amp;nbsp;/&amp;nbsp;(axis_norm&amp;nbsp;+&amp;nbsp;1e-8),&amp;nbsp;up_vec)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;Create&amp;nbsp;quaternion&amp;nbsp;from&amp;nbsp;angle&amp;nbsp;and&amp;nbsp;axis&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;command_orientations&amp;nbsp;=&amp;nbsp;math_utils.quat_from_angle_axis(angle,&amp;nbsp;axis)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;--&amp;nbsp;waypoint&amp;nbsp;marker&amp;nbsp;is&amp;nbsp;at&amp;nbsp;the&amp;nbsp;target&amp;nbsp;location&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;waypoint_locations&amp;nbsp;=&amp;nbsp;self.waypoint_locations&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;waypoint&amp;nbsp;orientation&amp;nbsp;is&amp;nbsp;fixed&amp;nbsp;(identity)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;waypoint_orientations&amp;nbsp;=&amp;nbsp;torch.tensor([-0.7071,&amp;nbsp;0.0,&amp;nbsp;-0.7071,&amp;nbsp;0.0],&amp;nbsp;device=self.device).repeat(self.num_envs,&amp;nbsp;1)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;stack&amp;nbsp;all&amp;nbsp;marker&amp;nbsp;information&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;locs&amp;nbsp;=&amp;nbsp;torch.vstack((robot_locations,&amp;nbsp;robot_locations,&amp;nbsp;waypoint_locations))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rots&amp;nbsp;=&amp;nbsp;torch.vstack((forward_orientations,&amp;nbsp;command_orientations,&amp;nbsp;waypoint_orientations))&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;render&amp;nbsp;the&amp;nbsp;markers&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;all_envs&amp;nbsp;=&amp;nbsp;torch.arange(self.num_envs,&amp;nbsp;device=self.device)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;indices&amp;nbsp;=&amp;nbsp;torch.hstack((torch.zeros_like(all_envs),&amp;nbsp;torch.ones_like(all_envs),&amp;nbsp;torch.full_like(all_envs,&amp;nbsp;2)))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.visualization_markers.visualize(locs,&amp;nbsp;rots,&amp;nbsp;marker_indices=indices)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def&amp;nbsp;_pre_physics_step(self,&amp;nbsp;actions:&amp;nbsp;torch.Tensor)&amp;nbsp;-&amp;gt;&amp;nbsp;None:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.actions&amp;nbsp;=&amp;nbsp;actions.clone()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self._visualize_markers()&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def&amp;nbsp;_apply_action(self)&amp;nbsp;-&amp;gt;&amp;nbsp;None:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;apply&amp;nbsp;action&amp;nbsp;scaling&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;scaled_actions&amp;nbsp;=&amp;nbsp;self.actions&amp;nbsp;*&amp;nbsp;self.action_scale&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.robot.set_joint_velocity_target(scaled_actions,&amp;nbsp;joint_ids=self.dof_idx)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def&amp;nbsp;_get_observations(self)&amp;nbsp;-&amp;gt;&amp;nbsp;dict:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;robot&amp;nbsp;position&amp;nbsp;and&amp;nbsp;orientation&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;robot_pos&amp;nbsp;=&amp;nbsp;self.robot.data.root_pos_w&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;robot_quat&amp;nbsp;=&amp;nbsp;self.robot.data.root_quat_w&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;vector&amp;nbsp;to&amp;nbsp;target&amp;nbsp;in&amp;nbsp;world&amp;nbsp;frame&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.vec_to_target_world&amp;nbsp;=&amp;nbsp;self.waypoint_locations&amp;nbsp;-&amp;nbsp;robot_pos&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.dist_to_target&amp;nbsp;=&amp;nbsp;torch.norm(self.vec_to_target_world[:,&amp;nbsp;:2],&amp;nbsp;p=2,&amp;nbsp;dim=-1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;vector&amp;nbsp;to&amp;nbsp;target&amp;nbsp;in&amp;nbsp;robot's&amp;nbsp;local&amp;nbsp;frame&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vec_to_target_local&amp;nbsp;=&amp;nbsp;math_utils.quat_apply_inverse(robot_quat,&amp;nbsp;self.vec_to_target_world)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;robot&amp;nbsp;velocities&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;robot_lin_vel_local&amp;nbsp;=&amp;nbsp;math_utils.quat_apply_inverse(robot_quat,&amp;nbsp;self.robot.data.root_lin_vel_w)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;robot_ang_vel_local&amp;nbsp;=&amp;nbsp;math_utils.quat_apply_inverse(robot_quat,&amp;nbsp;self.robot.data.root_ang_vel_w)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;lidar&amp;nbsp;data&amp;nbsp;-&amp;nbsp;거리&amp;nbsp;값만&amp;nbsp;사용&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#lidar_scan&amp;nbsp;=&amp;nbsp;self.lidar.data.distance.squeeze(1)&amp;nbsp;#&amp;nbsp;(num_envs,&amp;nbsp;num_rays)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;observations&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obs&amp;nbsp;=&amp;nbsp;torch.cat(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vec_to_target_local,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;robot_lin_vel_local,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;robot_ang_vel_local,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#lidar_scan,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dim=-1,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;observations&amp;nbsp;=&amp;nbsp;{&quot;policy&quot;:&amp;nbsp;obs}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;observations&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def&amp;nbsp;_get_rewards(self)&amp;nbsp;-&amp;gt;&amp;nbsp;torch.Tensor:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;--&amp;nbsp;distance-based&amp;nbsp;reward&amp;nbsp;(potential-based)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;progress_reward&amp;nbsp;=&amp;nbsp;2.0&amp;nbsp;*&amp;nbsp;(self.potentials&amp;nbsp;-&amp;nbsp;self.dist_to_target)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.potentials&amp;nbsp;=&amp;nbsp;self.dist_to_target.clone()&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;--&amp;nbsp;velocity&amp;nbsp;reward&amp;nbsp;(towards&amp;nbsp;target)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;get&amp;nbsp;the&amp;nbsp;unit&amp;nbsp;vector&amp;nbsp;to&amp;nbsp;the&amp;nbsp;target&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vec_to_target_unit&amp;nbsp;=&amp;nbsp;self.vec_to_target_world&amp;nbsp;/&amp;nbsp;(torch.norm(self.vec_to_target_world,&amp;nbsp;dim=1,&amp;nbsp;keepdim=True)&amp;nbsp;+&amp;nbsp;1e-6)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;project&amp;nbsp;the&amp;nbsp;robot's&amp;nbsp;velocity&amp;nbsp;onto&amp;nbsp;the&amp;nbsp;vector&amp;nbsp;to&amp;nbsp;the&amp;nbsp;target&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;velocity_to_target&amp;nbsp;=&amp;nbsp;torch.sum(self.robot.data.root_lin_vel_w&amp;nbsp;*&amp;nbsp;vec_to_target_unit,&amp;nbsp;dim=1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;reward&amp;nbsp;for&amp;nbsp;moving&amp;nbsp;towards&amp;nbsp;the&amp;nbsp;target&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;velocity_reward&amp;nbsp;=&amp;nbsp;1.0&amp;nbsp;*&amp;nbsp;torch.clamp(velocity_to_target,&amp;nbsp;min=0)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;--&amp;nbsp;orientation&amp;nbsp;reward&amp;nbsp;(facing&amp;nbsp;target)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;get&amp;nbsp;the&amp;nbsp;robot's&amp;nbsp;forward&amp;nbsp;direction&amp;nbsp;vector&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;forward_vec&amp;nbsp;=&amp;nbsp;torch.tensor([1.0,&amp;nbsp;0.0,&amp;nbsp;0.0],&amp;nbsp;device=self.device).repeat(self.num_envs,&amp;nbsp;1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;robot_fwd_vec&amp;nbsp;=&amp;nbsp;math_utils.quat_apply(self.robot.data.root_quat_w,&amp;nbsp;forward_vec)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;compute&amp;nbsp;the&amp;nbsp;cosine&amp;nbsp;similarity&amp;nbsp;to&amp;nbsp;reward&amp;nbsp;facing&amp;nbsp;the&amp;nbsp;target&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;heading_reward&amp;nbsp;=&amp;nbsp;0.1&amp;nbsp;*&amp;nbsp;torch.sum(robot_fwd_vec&amp;nbsp;*&amp;nbsp;vec_to_target_unit,&amp;nbsp;dim=1)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;--&amp;nbsp;success&amp;nbsp;reward&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;success_reward&amp;nbsp;=&amp;nbsp;torch.zeros_like(progress_reward)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;success_reward[self.dist_to_target&amp;nbsp;&amp;lt;&amp;nbsp;0.5]&amp;nbsp;=&amp;nbsp;50.0&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;reward&amp;nbsp;for&amp;nbsp;reaching&amp;nbsp;the&amp;nbsp;goal&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;--&amp;nbsp;action&amp;nbsp;penalty&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;action_penalty&amp;nbsp;=&amp;nbsp;-0.001&amp;nbsp;*&amp;nbsp;torch.sum(torch.square(self.actions),&amp;nbsp;dim=-1)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;--&amp;nbsp;time&amp;nbsp;penalty&amp;nbsp;(to&amp;nbsp;encourage&amp;nbsp;speed)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;time_penalty&amp;nbsp;=&amp;nbsp;-0.01&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;--&amp;nbsp;total&amp;nbsp;reward&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;total_reward&amp;nbsp;=&amp;nbsp;(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;progress_reward&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;+&amp;nbsp;velocity_reward&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;+&amp;nbsp;heading_reward&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;+&amp;nbsp;success_reward&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;+&amp;nbsp;action_penalty&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;+&amp;nbsp;time_penalty&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;total_reward.unsqueeze(1)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def&amp;nbsp;_get_dones(self)&amp;nbsp;-&amp;gt;&amp;nbsp;tuple[torch.Tensor,&amp;nbsp;torch.Tensor]:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;time_out&amp;nbsp;=&amp;nbsp;self.episode_length_buf&amp;nbsp;&amp;gt;=&amp;nbsp;self.max_episode_length&amp;nbsp;-&amp;nbsp;1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;reset&amp;nbsp;if&amp;nbsp;goal&amp;nbsp;is&amp;nbsp;reached&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;reset_goal&amp;nbsp;=&amp;nbsp;self.dist_to_target&amp;nbsp;&amp;lt;&amp;nbsp;0.5&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;reset_goal,&amp;nbsp;time_out&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def&amp;nbsp;_reset_idx(self,&amp;nbsp;env_ids:&amp;nbsp;Sequence[int]&amp;nbsp;|&amp;nbsp;None):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;env_ids&amp;nbsp;is&amp;nbsp;None:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;env_ids&amp;nbsp;=&amp;nbsp;self.robot._ALL_INDICES&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;super()._reset_idx(env_ids)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;--&amp;nbsp;Waypoint&amp;nbsp;goal&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;sample&amp;nbsp;new&amp;nbsp;goal&amp;nbsp;locations&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;radius_minimum&amp;nbsp;=&amp;nbsp;0.5&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;radius&amp;nbsp;=&amp;nbsp;4.5&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rand_dist&amp;nbsp;=&amp;nbsp;torch.rand(len(env_ids),&amp;nbsp;device=self.device)&amp;nbsp;*&amp;nbsp;radius&amp;nbsp;+&amp;nbsp;radius_minimum&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rand_angle&amp;nbsp;=&amp;nbsp;torch.rand(len(env_ids),&amp;nbsp;device=self.device)&amp;nbsp;*&amp;nbsp;2&amp;nbsp;*&amp;nbsp;math.pi&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;set&amp;nbsp;the&amp;nbsp;new&amp;nbsp;goals&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.waypoint_locations[env_ids,&amp;nbsp;0]&amp;nbsp;=&amp;nbsp;self.scene.env_origins[env_ids,&amp;nbsp;0]&amp;nbsp;+&amp;nbsp;rand_dist&amp;nbsp;*&amp;nbsp;torch.cos(rand_angle)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.waypoint_locations[env_ids,&amp;nbsp;1]&amp;nbsp;=&amp;nbsp;self.scene.env_origins[env_ids,&amp;nbsp;1]&amp;nbsp;+&amp;nbsp;rand_dist&amp;nbsp;*&amp;nbsp;torch.sin(rand_angle)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.waypoint_locations[env_ids,&amp;nbsp;2]&amp;nbsp;=&amp;nbsp;0.3&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;fixed&amp;nbsp;height&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;set&amp;nbsp;the&amp;nbsp;root&amp;nbsp;state&amp;nbsp;for&amp;nbsp;the&amp;nbsp;reset&amp;nbsp;envs&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;default_root_state&amp;nbsp;=&amp;nbsp;self.robot.data.default_root_state[env_ids]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;default_root_state[:,&amp;nbsp;:3]&amp;nbsp;+=&amp;nbsp;self.scene.env_origins[env_ids]&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.robot.write_root_state_to_sim(default_root_state,&amp;nbsp;env_ids)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;reset&amp;nbsp;potentials&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;robot_pos&amp;nbsp;=&amp;nbsp;self.robot.data.root_pos_w[env_ids]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vec_to_target_world&amp;nbsp;=&amp;nbsp;self.waypoint_locations[env_ids]&amp;nbsp;-&amp;nbsp;robot_pos&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.dist_to_target[env_ids]&amp;nbsp;=&amp;nbsp;torch.norm(vec_to_target_world[:,&amp;nbsp;:2],&amp;nbsp;p=2,&amp;nbsp;dim=-1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.potentials[env_ids]&amp;nbsp;=&amp;nbsp;self.dist_to_target[env_ids].clone()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;self.lidar.reset(env_ids)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self._visualize_markers()&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수정된 env_cfg.py 코드&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#&amp;nbsp;Copyright&amp;nbsp;(c)&amp;nbsp;2022-2025,&amp;nbsp;The&amp;nbsp;Isaac&amp;nbsp;Lab&amp;nbsp;Project&amp;nbsp;Developers&amp;nbsp;(&lt;a href=&quot;https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md).&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md).&lt;/a&gt;&lt;br /&gt;#&amp;nbsp;All&amp;nbsp;rights&amp;nbsp;reserved.&lt;br /&gt;#&lt;br /&gt;#&amp;nbsp;SPDX-License-Identifier:&amp;nbsp;BSD-3-Clause&lt;br /&gt;&lt;br /&gt;from&amp;nbsp;MyFirstCar.robots.jetbot&amp;nbsp;import&amp;nbsp;JETBOT_CONFIG&lt;br /&gt;&lt;br /&gt;from&amp;nbsp;isaaclab.assets&amp;nbsp;import&amp;nbsp;ArticulationCfg&lt;br /&gt;from&amp;nbsp;isaaclab.envs&amp;nbsp;import&amp;nbsp;DirectRLEnvCfg&lt;br /&gt;from&amp;nbsp;isaaclab.scene&amp;nbsp;import&amp;nbsp;InteractiveSceneCfg&lt;br /&gt;from&amp;nbsp;isaaclab.sim&amp;nbsp;import&amp;nbsp;SimulationCfg&lt;br /&gt;from&amp;nbsp;isaaclab.utils&amp;nbsp;import&amp;nbsp;configclass&lt;br /&gt;&lt;br /&gt;@configclass&lt;br /&gt;class&amp;nbsp;MyfirstcarEnvCfg(DirectRLEnvCfg):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;env&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;decimation&amp;nbsp;=&amp;nbsp;2&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;episode_length_s&amp;nbsp;=&amp;nbsp;10.0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;-&amp;nbsp;spaces&amp;nbsp;definition&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;action_space&amp;nbsp;=&amp;nbsp;2&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;observation_space&amp;nbsp;=&amp;nbsp;3&amp;nbsp;&amp;nbsp;#Lidar&amp;nbsp;scan&amp;nbsp;data&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;state_space&amp;nbsp;=&amp;nbsp;0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;simulation&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sim:&amp;nbsp;SimulationCfg&amp;nbsp;=&amp;nbsp;SimulationCfg(dt=1&amp;nbsp;/&amp;nbsp;120,&amp;nbsp;render_interval=decimation)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;robot(s)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;robot_cfg:&amp;nbsp;ArticulationCfg&amp;nbsp;=&amp;nbsp;JETBOT_CONFIG.replace(prim_path=&quot;/World/envs/env_.*/Robot&quot;,init_state=ArticulationCfg.InitialStateCfg(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pos=(0.0,&amp;nbsp;0.0,&amp;nbsp;0.8)))&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;scene&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;scene:&amp;nbsp;InteractiveSceneCfg&amp;nbsp;=&amp;nbsp;InteractiveSceneCfg(num_envs=16,&amp;nbsp;env_spacing=20,&amp;nbsp;replicate_physics=True)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dof_names&amp;nbsp;=&amp;nbsp;[&quot;wheel_joint_left&quot;,&amp;nbsp;&quot;wheel_joint_right&quot;]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;action_scale&amp;nbsp;=&amp;nbsp;(0.5,&amp;nbsp;0.5)&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>아이작 랩</category>
      <category>isaac lab</category>
      <category>Isaac Sim</category>
      <category>reinforcement learning</category>
      <category>robotics</category>
      <author>teramiku39</author>
      <guid isPermaLink="true">https://teramiku39.tistory.com/1</guid>
      <comments>https://teramiku39.tistory.com/1#entry1comment</comments>
      <pubDate>Wed, 13 Aug 2025 02:38:34 +0900</pubDate>
    </item>
  </channel>
</rss>