[실행환경]
- Ubuntu 18.04
- ROS Melodic
- Nvidia GPU driver (CUDA 11.2 지원이 가능한 GPU 디바이스. e.g., GTX 1080Ti)
[Content]
[Tutorial]
- 설치 및 사용방법에 대한 영상자료
- (18.04 : melodic, 20.04 : noetic); ros install
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
```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```
- Docker Engine을 설치
- Docker Compose를 설치
- Nvidia-docker를 설치
- 루트(root) 권한 설정;
sudo
없이 도커 사용하기~$ sudo usermod -aG docker $USER #현재 접속중인 사용자에게 권한주기
- 현재 깃허브 레포지토리에 있는 파일을 가지고 아래 명령어를 순서대로 실행
~$ 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
- 로컬 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가 실행된다.
# RGB image topic
/CAM/camera/image
# Depth image topic
/CAM/range_finder/range_image
- 영상 데이터의 메시지 타입은
sensor_msgs/Image
- Image topic subscribe 예시
[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
# 도커 컨테이너의 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 참고
-
간단한 Gripper 조작을 위한 토픽 발행 형태는
~$ rostopic pub /grp_follow_joint_trajectory/goal control_msgs/FollowJointTrajectoryActionGoal
을 통해 제어할 수 있음 -
UR10e 로봇도 유사한 방식으로
~$ rostopic pub /follow_joint_trajectory/goal control_msgs/FollowJointTrajectoryActionGoal
을 통해 제어 가능- 자세한 UR10 로봇 제어과 관련된 내용은 메뉴얼을 참고
- ur_e_webots 코드를 바탕으로 webots world가 설계됨
- webots_ros를 통한 컨트롤러 예시
- UR10e 로봇의 joints 정보
(3) Gripper에 distance sensor추가
- 아래 토픽으로 Subscribe 가능
- std_msg/Range 타입으로
range
,max_range
,min_range
값을 받을 수 있음 - ※ 대회에서는 distance sensor 를 사용하지 않음
/gripper_distance_sensor # rostopic name
- 그 이외 webots과 관련된 내용은 webots_ros github 및 ros.org의 webots 위키 참고
[대회공지]
[경기 내용]
- 경기는 물리적으로 분리된 두 대의 컴퓨터로 진행된다.
- 한 대는
ROS_MASTER
와webots world
가 실행될 경연 당일 준비될 경기장 컴퓨터(주최 측에서 준비), 다른 하나는 대회 참여자의 개인 컴퓨터이다. - 경기장 컴퓨터는
ROS_MASTER
및webots world
가 실행되는 서버 역할이다. - 대회 참여자의
ROS_HOST
는ROS_MASTER
에 연결되어webots world
로 부터 센싱 데이터를 받고 UR10e 로봇 제어를 통해 재활용 쓰레기를 분리수거 하는 과업(task)을 수행한다. - 매 경기마다 물체의 위치는 랜덤으로 생성된다;
~(도커 컨테이너)# python ~/objects_random_place.py 활용
[대회 참여자가 준비해야할 코드]
- webots world의 UR10e 로봇과 Gripper는 actionlib.ActionServer() 노드로 제어할 수 있다.
- 따라서, 대회 참여자는 actionlib를 활용해 actionlib.ActionServer의
goal
값으로 UR10e 와 Gripper 관절(joints)을 제어하는 값을 입력으로 발행하면 된다. - UR10e.urdf 파일은 현재 레포지토리에 첨부되어 있다.
- (덧) MoveIt 으로 제어하셔도 됩니다 ('UR10 로봇 제어' 섹션 참고)
# 사용할 관절 목록
[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
- 물체 인식을 위한
학습 Dataset은 따로 제공하지 않습니다
.- webots 도커에서
~# python ~/objects_random_place.py
을 활용해 매번 랜덤으로 배치되는 장면을 바탕으로 각 팀별로 레이블링 하시기 바랍니다.
- webots 도커에서
- 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 # 물체 랜덤 위치에 시드 부여
- ROS & webots 설치
- universal_robots 설치
- WEBOTS_HOME 환경변수 설정
- UR 로봇 프로젝트 파일을 catkin_ws로 옮기고 rviz에 띄우기
- webots의 URe 로봇 모델을 ROS로 보내기 위해서는 → webots 월드에서 URe의 컨트롤러를
extern
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.