ROS, Docker 및 Unity 3D를 사용한 WSL2 로봇 기술(두 번째 부분)

11243 단어 wslunity3drosrobotics
WSL2()를 사용하기 위해 ROS를 설정하는 방법에 대한 두 번째 부분은 아닙니다.그러나 다음 부분은 전체 Linux 설정에서도 사용할 수 있습니다.

단결 로봇


Unity for robotics을 사용할 수 있는 몇 가지 방법이 있다.연합 로봇 기술은 새로운 분야로 지원은 여전히 맞춤형이다.대부분의 응용 프로그램은 개인 회사에서 만든 전용 소프트웨어로 다른 사람들이 쉽게 접근하거나 설정하지 못한다.Unity는 최근 ROS support을 출시했다. 서문자 RosSharp 이전의 도서관 지점이다.내 설정에서 나는 Unity ROS library을 사용했는데, 이것은 최신 ArticulationBody 유형에 적용된다.
이 시범 프로젝트에 대해 나는 귀여운 기계 손을 선택했다. 그것은 기원된 것이다. Reachy from Pollen Robotics이다.Unity에서 ROS가 있는 로봇을 사용하려면 기존의 URDF(로봇 파일 설명자)이 필요합니다. 이 설명자는 일반적으로 로봇 제조업체에서 제공합니다.구체적으로 말하면, 나는 정적 기계의 손에서 일하기로 결정했고, MoveIt!으로 그것을 조작하기로 결정했다.
Unity에서 이 점을 어떻게 실현하는지에 대한 강좌는 많지 않지만, 나는 이 기회를 이용하여 MoveIt를 만들었다!Unity 연결기는 다른 강좌처럼 사용자 정의 서비스를 만들지 않고 MoveIt! MoveGroup API으로 로봇을 제어할 수 있습니다.나는 이 해결 방안이 모든 표준 ROS 메시지를 사용하고 추가 서비스가 필요하지 않기 때문에 다른 로봇과 더욱 쉽게 연결될 수 있다는 것을 발견했다.

Unity와 ROS는 동일한 로봇 설명자 URDF를 공유합니다.통일은 로봇 관절 상태의 주요 원천이 될 것이다.빨리!유니티의 정보 흐름을 이용해 노선을 계획하고 팔 궤적을 유니티로 보내 관절을 구동한다.
빨리!사용자 정의 ROS 주제를 사용하여 Unity에 트래픽을 전달하고 사용자 정의로 작성된 Unity MoveIt 프로세서가 해당 주제에 실행할 트래픽을 게시합니다.
이 프로젝트의 사용자 정의 코드는 Github에서 세 가지 주요 구성 요소로 구성됩니다.

  • unity_connector_manager.cpp, 계획된 MoveIt에서 execute () 를 호출한 후 Unity로 궤적을 보냅니다!탄도

  • unity_tcp_server.py(ROS 및 Unity
  • 사이의 에이전트로서 사용

  • ROSMoveItControllerGeneric.cs, 로봇을 통합 제어하고 ROS와 통신합니다.
  • 로스


    이제 ROS 배포판을 설치합니다.ROS1을 사용하는 이유는 ROS2에 필요한 라이브러리가 부족하기 때문입니다.ROS는 docker 내부에만 설치됩니다. 비록 제 WLS2에도 ROS 버전이 설치되어 있지만, 빠른 테스트에 사용됩니다.
    ROS를 제외하고, docker 이미지에는 Github에서 제공하는 몇 개의 라이브러리가 포함되어 있으며, 프레젠테이션에서 이 라이브러리를 사용할 것입니다.
  • 먼저, WSL 홈 페이지(또는 당신이 좋아하는 곳)에 작업 영역 폴더를 만듭니다.
  • zandara@XXX:$ cd ~
    zandara@XXX:$ mkdir unity_demo
    zandara@XXX:$ cd unity_demo
    zandara@XXX:$ git clone https://github.com/szandara/unity_reachy_tutorial
    zandara@XXX:$ cd unity_reachy_tutorial
    
  • 은 현재 사용자 정의 코드와 ROS 릴리스를 포함하는 Docker image을 구축합니다.뛰어다니다./build_docker차 한잔 마시러 가자.
  • 다음으로 ROS에서 Reachy 코드를 수집합니다.이 코드는 Docker 외부에 있으며 Docker가 시작될 때 불러옵니다.
  • zandara@XXX:$ cd src
    zandara@XXX:$ git clone https://github.com/szandara/reachy_description_ros1
    zandara@XXX:$ git clone https://github.com/pollen-robotics/reachy_moveit_config
    
    그들이 최근에 ROS2로 이사한 이후로 나는 Reachy의 URDF를 썼다.
    이제 ROS 시스템을 사용할 준비가 되었습니다!

    통합 3D


    이제 Docker가 아닌 ROS와의 Unity 제휴를 설정합니다.그러나 먼저 Unity3D가 없으면 설치합니다.https://unity3d.com/get-unity/download . 커뮤니티 버전(2020.2.5f1)을 사용하고 있습니다.
  • reachy demo라는 프로젝트를 만듭니다.
  • Unity를 열고 패키지 관리자로 이동합니다.창 -> 패키지 관리자 ->+ 서명->*git URL에서 패키지를 추가합니다.
  • 에 다음 패키지가 추가되었습니다.
  • https://github.com/Unity-Technologies/ROS-TCP-Connector.git#v0.1.2 
    https://github.com/Unity-Technologies/URDF-Importer.git#v0.1.2
    
  • 에서 컴파일할 때 오류가 없는지 확인하십시오.이 두 가지 시나리오를 통해 Unity는 다음과 같은 이점을 얻을 수 있습니다.
  • 로봇 모델의 URDF 파일을 가져옵니다(ROS 표준).
  • 은 Docker에서 실행되는 ROS 에이전트와 통신합니다.
  • 은 Robotics->ROS 설정의 ROS/Unity 설정을 기본 설정으로 유지합니다(어떤 이유로 변경이 필요하지 않은 경우).
  • 은 ROS에서 Unity와 통화할 수 있도록 TCP 5005 포트를 최종적으로 엽니다.straight-forward as explained here에 해당한다.이유를 봐.
  • 일치단결

  • 에서 GitHub로 이동하여 https://github.com/szandara/reachy_description_ros1을 zip 파일로 다운로드합니다.
  • 에서 Unity 자산 디렉토리로 이동하여 URDF라는 하위 폴더를 만듭니다.
  • 다운로드한 Reachy 설명을 복사하고 추출합니다.Assets/URDF/reachy로 압축
  • 파일 Assets/URDF/reachy/reachy description ros1/reachy를 복사합니다.URDF - 자산/URDF/reachy/reachy울드프
  • reachy 를 마우스 오른쪽 버튼으로 클릭합니다.URDF 및 선택한 URDF에서 Robot을 가져옵니다.몇 가지 옵션을 제공하는 창이 팝업됩니다.VHACD가 없는 한 메쉬 분해기를 Unity로 변경합니다.
  • 왼쪽 게임 대상 목록에서 Reachy를 선택하십시오.오른쪽 검사기에서 컨트롤러(스크립트)를 찾아 다음 값을 설정합니다.

  • 이것은 내가 수동으로 조정한 임의의 값입니다.제조업체는 정확한 수치를 제공할 수 있다.
  • 왼쪽 게임 대상 목록에서 신체를 선택하고'몸에 고정'

  • Reachy 가져오기를 완료했습니다.우리는 지금 시뮬레이션 세계에서 그것을 보아야 한다.

    설치 이동!일치단결


    여기에 MoveIt로 Unity의 관절체 대상을 제어하는 스크립트를 설치했습니다!로스로부터 온 소식.이 저장소 https://github.com/szandara/unity_moveit_connector/blob/master/Editor/ROSMoveItControllerGeneric.cs에 스크립트를 업로드했습니다.
  • 복사는 the file의 내용을 Assets/moveit/ROSMoveIt ControllerGeneric라는 파일에 직접 붙여넣습니다.cs는 Unity 컴파일 시 오류가 없는지 확인합니다.
  • 마지막으로 r 어깨를 선택하여 Reachy에 스크립트를 추가한 다음 구성 요소 -> 스크립트->ROS 이동 컨트롤러 공통

  • 이 예와 같은 매개 변수를 추가합니다

  • Universion Team Name: Universion

  • 이동 그룹: unity right arm 컨트롤러

  • 관절조:Unity 트리에서 r 어깨 관절을 끌어다 놓으면 이 화면 캡처와 같습니다.

  • 우리 망했어!우리는 이미 로스와 통화할 준비가 되어 있다!

    종합 소유


    마지막 단계에서 우리는 시스템을 시작해야 한다.직접 썰어봅시다.
  • 먼저 Unity를 시작하고 아직 시작하지 않은 경우 프로젝트 reachy 데모를 엽니다.
  • WSL 셸을 열고 프로젝트 폴더 unity demo로 이동
  • 파일 unity_demo/src/unity_reachy_tutorial/src/unity_reachy_tutorial/launch/unity_connector.launch을 편집하고 configured in Unity의 값을 사용하여 이 매개 변수를 설정합니다.UNITY IP는 WSL2와 통신하는 데 사용되는 Windows에서 설정합니다.실행grep nameserver /etc/resolv.conf
  •     <param name="ROS_IP" type="str" value="$(env ROS_IP)" />
        <param name="ROS_TCP_PORT" type="int" value="10000" />
        <param name="TCP_NODE_NAME" type="str" value="TCPServer" />
        <param name="TCP_BUFFER_SIZE" type="int" value="1024" />
        <param name="TCP_CONNECTIONS" type="int" value="10" />
    
        <param name="UNITY_IP" type="str" value="XXX.XXX.XXX.XXX" />
        <param name="UNITY_SERVER_PORT" type="int" value="5005" />
    
  • 다음 명령 실행
  • zandara@XXX:$ ./launch_docker
    root@docker:~# source /opt/unity_demo/unity_reachy_tutorial/devel/setup.bash 
    root@docker:~# roslaunch unity_reachy_tutorial reachy_demo.launch
    
    너는 네가 계획을 시작할 수 있다는 확인서를 보았을 것이다.
  • 다른 WSL을 열고 프로젝트 폴더 unity demo로 이동
  • 다음 명령 실행
  • zandara@XXX:$ ./launch_docker
    root@docker:~# rosrun moveit_commander moveit_commander_cmdline.py
    
    MoveIt 명령줄을 보아야 합니다.
  • Unity로 이동하여 게임을 시작합니다. 콘솔
  • 에 오류가 없을 것입니다.
  • 에서 MoveIt 명령줄(WSL2)로 이동하고 다음 명령을 실행합니다.
  • > use right_arm
    > current
    
    오류가 없음을 확보하다.오류가 발생하면 WSL2와 Windows의 시간 오프셋과 관련된 문제가 발생할 수 있습니다.이를 수정하려면 WSL2 콘솔을 열고 다음 명령을 실행하십시오.sudo ntpdate time.windows.com
  • 오류가 없는 경우 MoveIt에서 경로 계획
  • > rec c
    > goal = c
    > goal[0] = -2.1
    > plan goal
    > execute
    
    너는 Reachy가 그의 오른팔을 꼭대기로 옮기는 것을 보았을 것이다.첫 유닛 시뮬레이션을 계획하신 것을 축하합니다!

    결론

  • 에서는 Windows를 강력한 Linux 개발 환경으로 설정하는 방법을 보여줍니다.
  • Unity가 로봇의 모방 환경으로 어떻게 사용되는지 보여줍니다.
  • ROS 및 Unity에서 정보를 교환하는 방법을 보여줍니다.
  • MoveIt! Unity의 Reachy를 제어하는 방법을 보여줍니다.
  • 나는 이 프로젝트를 할 때 매우 기뻤다. 나는 이 설정으로 개인 프로젝트를 진행할 계획이다.그러나 해결 방안은 완벽하지 않다.Windows와 WSL2가 잘 협동하지 못해 겪는 함정은 크고 전문 사용자에게 가벼운 개발 환경을 제공할 수 없다는 보장이 없다.
    Unity는 ROS2에 대한 지원이 부족해서 곧 유행이 지날 수도 있는 ROS 프로젝트의 발생과 최종적인 고통스러운 이전을 초래했다.Unity has announced은 ROS2 지원이 개발 중이라고 밝혔습니다. 저는 새로운 ROS2 버전으로 본문을 업데이트할 것입니다.
    그럼에도 불구하고 내가 지금 윈도 호스트에서 로봇 기술을 쉽게 개발할 수 있다는 것을 아는 것은 매우 의미가 있다!

    좋은 웹페이지 즐겨찾기