Skip to content

Latest commit

 

History

History
316 lines (220 loc) · 14.2 KB

README.md

File metadata and controls

316 lines (220 loc) · 14.2 KB

Webots World (Ver 1.0.5)

[실행환경]

  • Ubuntu 18.04
  • ROS Melodic
  • Nvidia GPU driver (CUDA 11.2 지원이 가능한 GPU 디바이스. e.g., GTX 1080Ti)

[Content]


[Tutorial]



Installation

로컬 PC에 universal_robot ROS 패키지 설치하기

0. PC OS환경에 맞게 ROS 설치

1. universal_robots 패키지 설치

  • apt-get 이 아닌 git clone으로 소스 빌드할 것을 권장
cd $HOME/catkin_ws/src

# retrieve the sources (replace '$DISTRO' with the ROS version you are using)
# 아직 noetic버전이 없기 때문에 melodic-devel 버전으로 깃클론 
git clone -b melodic-devel https://github.com/ros-industrial/universal_robot.git  

cd $HOME/catkin_ws

# checking dependencies (replace '$DISTRO' with the ROS version you are using)
rosdep update
rosdep install --from-paths src --ignore-src --rosdistro $ROS_DISTRO

# building
catkin_make

# source this workspace (careful when also sourcing others)
source $HOME/catkin_ws/devel/setup.bash

2. ROS_NETWORK는 다음과 같이 설정

```bash
# 로컬 PC의 ~/.bashrc 에서 

export ROS_IP=x.x.x.x   # 로컬 PC의 이더넷 IP 
export ROS_HOSTNAME=$ROS_IP
export ROS_ROS_MASTER_URI=http://$ROS_IP:11311   # eth IP of your local PC for ROS Master 
```

```bash
# 경기장에서 대회 참여자의 로컬 PC의 ~/.bashrc 예시 

export ROS_IP=x.x.x.x   # 대회 참여자의 이더넷 IP 
export ROS_HOSTNAME=$ROS_IP
export ROS_ROS_MASTER_URI=http://<경기장 PC의 IP>:11311   # eth IP for ROS Master 
```

* 끝난 뒤 반드시 ```~$ source ~/.bashrc```

Webots World 설치하기

1. Install Docker and Nvidia-docker

  • Docker Engine을 설치
  • Docker Compose를 설치
  • Nvidia-docker를 설치
  • 루트(root) 권한 설정; sudo 없이 도커 사용하기
    ~$ sudo usermod -aG docker $USER #현재 접속중인 사용자에게 권한주기 

2. Pull and Install the docker image

  • 현재 깃허브 레포지토리에 있는 파일을 가지고 아래 명령어를 순서대로 실행
~$ git clone https://github.com/DoranLyong/webots-ros-melodic-project.git

~$ cd ./webots-ros-melodic-project

~$ sudo chmod a+x make_webots-ros_container.bash run_webots-ros_container.bash  # 실행 권한 부여 

~$ ./make_webots-ros_container.bash  # 도커 이미지 설치 및 컨테이너 생성 

~$ ./run_webots-ros_container.bash   # webots world가 설치된 컨테이너 실행 

  • 해당 컨테이너를 다시 실행하고 싶다면 ~$ ./run_webots-ros_container.bash
  • 도커 컨테이너의 ~/.bashrc에서 ROS_IP, ROS_HOSTNAME, ROS_MASTER_URI 환경 변수 값을 아래와 같이 할당(참고 링크):
# 도커의 ~/.bashrc 에서 

export ROS_IP=172.17.0.x  # in the docker container for webots world
                          # 현재 생성된 도커 컨테이너의 주소를 확인하고 입력하기  
export ROS_HOSTNAME=$ROS_IP
export ROS_ROS_MASTER_URI=http://172.17.0.1:11311   # docker IP of your local PC for ROS Master 
  • 끝난 뒤 반드시 ~# source ~/.bashrc

3. Run the webots world and Connect with ROS in the docker container (여기서 부터는 도커 환경에서...)

  • 로컬 PC 에서 roscore

Method 01. 도커 환경에서 아래 명령어를 각각 실행 (각각 새로운 도커 터미널에서 실행)

~# webots

~# ~/ur_e_webots.bash   # webots world의 스텝을 실행시킬 수 있는 ROS 패키지 실행 

~# ~/sensor_enable.bash  # webots world의 센서 장비가 토픽을 ROS_MASTER터로 발행하도록 서비스 요청(call)

~# python ~/objects_random_place.py --seed=42   # 물체 위치 랜덤 

Method 02. 위의 명령은 다음과 같이 간략하게 실행가능

~# ~/run_WebotsWorld_all.bash  # webots -> ur_e_webots.bash -> sensor_enable.bash 순으로 실행됨 

~# python ~/objects_random_place.py --seed=42   # 새로운 도커 터미널에서 실행할 것 

※ 두 방법중에 하나라도 빠짐없이 실행되어야 webots world가 실행된다.


Robot Control

로컬 PC에서 Webots World 제어하기

1. 영상 데이터

# RGB image topic 
/CAM/camera/image

# Depth image topic 
/CAM/range_finder/range_image
※ Camera world → Robot world 변환 행렬을 구하기 위한 파라미터
[RGB & depth_map devices]

- Translation[x, y, z] : 1.35272 , 1.3315 , 5.97883e-07
- Rotation(quaternions)[w, x, y, z] : 0.653284 , -0.270596 , 0.65328 , 0.270597

[UR10e robot base]
- Translation[x, y, z] : 0 , 0.7 , -1.00693e-08
- Rotation(quaternions)[w, x, y, z] : -0.707107 , 0.707107 , 0 , 0 

[World center] 
- Translation[x, y, z] : 0 , 0 , 0 
- Rotation(quaternions)[w, x, y, z] : 1 , 0 , 0 , 0 

2. UR10 로봇 제어

(1) MoveIt 활용 예시
# 도커 컨테이너의 Webots World에서 좌측 상단에 TimeStep이 동작하는지 확인한 후 실행

# MoveIt 연동 패키지 예시 
~$ roslaunch ur10_e_moveit_config ur10_e_moveit_planning_execution.launch

~$ roslaunch ur10_e_moveit_config moveit_rviz.launch config:=true   
  • 여기까지 실행이 끝났다면 webots의 가상환경이 MoveIt과 연동되어 제어되는 것을 확인할 수 있다
  • User Guide 참고
(2) 커스텀 제어 예시 - Grippers & URe joints 제어
(3) Gripper에 distance sensor추가
  • 아래 토픽으로 Subscribe 가능
  • std_msg/Range 타입으로 range, max_range, min_range 값을 받을 수 있음
  • ※ 대회에서는 distance sensor 를 사용하지 않음
/gripper_distance_sensor     # rostopic name 

3. 기타


대회 준비를 위한 Tip

[대회공지]

[경기 내용]

  • 경기는 물리적으로 분리된 두 대의 컴퓨터로 진행된다.
  • 한 대는 ROS_MASTERwebots world가 실행될 경연 당일 준비될 경기장 컴퓨터(주최 측에서 준비), 다른 하나는 대회 참여자의 개인 컴퓨터이다.
  • 경기장 컴퓨터는 ROS_MASTERwebots world가 실행되는 서버 역할이다.
  • 대회 참여자의 ROS_HOSTROS_MASTER 에 연결되어 webots world로 부터 센싱 데이터를 받고 UR10e 로봇 제어를 통해 재활용 쓰레기를 분리수거 하는 과업(task)을 수행한다.
  • 매 경기마다 물체의 위치는 랜덤으로 생성된다; ~(도커 컨테이너)# python ~/objects_random_place.py 활용

[대회 참여자가 준비해야할 코드]

# 사용할 관절 목록 

[UR10e의 관절 목록]
- shoulder_pan_joint
- shoulder_lift_joint
- elbow_joint
- wrist_1_joint
- wrist_2_joint
- wrist_3_joint


[Gripper의 관절 목록]
- finger_1_joint_1
- finger_2_joint_1
- finger_middle_joint_1

[Notice]

  • 물체 인식을 위한 학습 Dataset은 따로 제공하지 않습니다.
    • webots 도커에서 ~# python ~/objects_random_place.py을 활용해 매번 랜덤으로 배치되는 장면을 바탕으로 각 팀별로 레이블링 하시기 바랍니다.
  • webots world에 활용된 물체의 .wrl 파일과 Texture 이미지는 objects_wrl 폴더에 업로드 되었습니다.
    • MeshLab 프로그램을 사용하면 간단하게 확인 가능

(2021/10/19 업데이트) rviz-moveit-v1.0.5 로 업데이트 (참고)

  • timestep := 64 로 수정; 물리엔진의 부하를 줄이기 위해
  • tissue(휴지) 오브젝트 제거; 물리엔진이 복잡해서 제거됨
  • plastic_bag(과자봉지)의 물리엔진 수정됨 (물리영역 폭 증가)
  • 물체 랜덤 위치 실행 코드에 seed 할당 기능 추가
    ~# python ~/objects_random_place.py --seed=42  # 물체 랜덤 위치에 시드 부여

Reference

MIT License

Copyright (c) 2021 Guhnoo yun, Kijung Kim, Jeongho Lee 

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.