ROS는 Robot Operating System의 약자로 로봇 개발, 운용에 필요한 많은 메세지들을 간단히 주고받을 수 있는 일종의 Framework 이다.

ROS에 있는 시뮬레이션 환경을 통해 다양한 로봇을 실제 로봇이 없이도 구동해볼 수 있다.

이번에는 저가형 산업용 6축 로봇으로 유명한 UR로봇의 6축 로봇을 시뮬레이션 환경에서 구동하는 방법을 정리해 보았다.


역시 Ubuntu 16.04 운영체제가 설치되어 있고 ROS-Kinetic 이 설치된 환경이다.

자세한 설치방법은 http://wiki.ros.org/kinetic/Installation/Ubuntu 에 있고 apt-get 설치 방법을 추천한다.


사전 준비 작업

Gazebo 와 rviz 그리고 moveit 을 설치해야 한다. 설치방법은 다음과 같다.

$ sudo apt-get update $ sudo apt-get install ros-kinetic-gazebo-ros-pkgs ros-kinetic-gazebo-msgs ros-kinetic-gazebo-plugins ros-kinetic-gazebo-ros-control $ sudo apt-get install ros-kinetic-rviz $ sudo apt-get install ros-kinetic-moveit

노트> 최근 우분투 한국 서버가 다운되어서 업데이트 도중 다음과 같은 오류가 발생하는 경우가 있다.


W: Failed to fetch http://kr.archive.ubuntu.com/ubuntu/dists/xenial/InRelease  Could not connect to kr.archive.ubuntu.com:80 (103.22.220.133), connection timed out


이럴때는 "System Settings" -> "Software & Updates" 를 열고 

Download from 항목에서  Other를 선택한 다음 Select best server를 선택해 본다. 

이 글을 작성하는 현재 http://ftp.neowiz.com/ubuntu 에서 정상 동작 함


ROS Industrial / Universal Robot 설치하기


로봇을 설치하는 자세한 방법은 

https://github.com/ros-industrial/universal_robot 에 나와있다.

간단히 정리하면 다음과 같다.


home 폴더에 ros_catkinws 폴더를 만들고 그 하위에 src 를 만든 다음 catkin_make 를 실행하여 실행 환경을 만든다.

$ mkdir ros_catkinws $ cd ros_catkinws $ mkdir src $ catkin_make

ros_catkinws 폴더 안에 builddevel 이라는 폴더가 추가된 것을 확인할 수 있다.


이제 src폴더로 이동하여 위의 github 프로젝트를 clone 한다.

$ cd src $ git clone https://github.com/ros-industrial/universal_robot.git

src 폴더 안에 universal_robot 이라는 폴더가 생성되었다.

이제 ros_catkinws폴더로 이동하여 catkin_make 를 다시 실행한다.

$ cd .. $ catkin_make

문제 없이 [100%]까지 진행되면 성공이다.

이제 rosrus에서 빌드한 프로젝트를 바로 실행할 수 있도록 하기 위해 bashrc에 경로를 등록해야한다.

방법은 다음과 같다.

$ echo -e "source ~/ros_catkinws/devel/setup.bash" >> ~/.bashrc $ source ~/.bashrc

이제 다른 터미널을 열때 자동으로 경로가 적용되어 rosrun 에서 바로 실행시킬 수 있다.


로봇 시뮬레이션 구동하기


3개의 터미널 창을 열고 각 창에 다음을 실행한다.

Gazebo에 가상의 로봇을 불러오기 위해 ur_gazebo를 실행한다:

$ roslaunch ur_gazebo ur5.launch

MoveIt! 을 사용하여 가상의 로봇을 제어한다.

$ roslaunch ur5_moveit_config ur5_moveit_planning_execution.launch sim:=true

MoveIt! 모션 플래닝 플러그인이 포함된 RViz를 실행한다.

$ roslaunch ur5_moveit_config moveit_rviz.launch config:=true

주의: 

MoveIt! 은 회전 리밋 [-2pi, 2pi] 범위에서 경로를 찾는데 어려움이 있으므로 회전 범위를 [-pi, pi]로 제한할 필요가 있다.

이렇게 제한된 버전으로 구동하기 위해서는 아래와 같이 전달 인자에 "limited"를 사용하면 된다.



roslaunch ur_gazebo ur5.launch limited:=true

roslaunch ur5_moveit_config ur5_moveit_planning_execution.launch sim:=true limited:=true

roslaunch ur5_moveit_config moveit_rviz.launch config:=true


아래는 실행 결과의 모습이다


문제해결


위와 같이 실행하고 rviz에서 로봇의 축을 이동시킨다음 좌측 MotionPlanning Tab -> Planning 에서 Plan and Execute 누르면 Failed 라고 뜨고 로봇이 동작하지 않는다. 


https://github.com/ros-industrial/universal_robot/issues/281 의 이슈 항목을 보면 gazebo에 적절한 arm 컨트롤러 패키지가 설치되지 않아서 발생하는 문제로 보여진다.

http://wiki.ros.org/ur_gazebo 에 나와있는 패키지 설치 안내를 따라서 다음을 수행해준다.

$ sudo apt-get install \ ros-kinetic-ur-gazebo \ ros-kinetic-ur5-moveit-config \ ros-kinetic-ur-kinematics


이 패키지들을 설치하고 나서 다시 시뮬레이션을 구동하면 rostopic 에서 gazebo의 arm 컨트롤러 항목을 확인해볼 수 있다.


$ rostopic list /arm_controller/command /arm_controller/follow_joint_trajectory/cancel /arm_controller/follow_joint_trajectory/feedback /arm_controller/follow_joint_trajectory/goal /arm_controller/follow_joint_trajectory/result /arm_controller/follow_joint_trajectory/status /arm_controller/state /attached_collision_object /calibrated /clicked_point /clock /collision_object /execute_trajectory/cancel /execute_trajectory/feedback /execute_trajectory/goal /execute_trajectory/result /execute_trajectory/status /gazebo/link_states /gazebo/model_states /gazebo/parameter_descriptions /gazebo/parameter_updates /gazebo/set_link_state /gazebo/set_model_state /initialpose /joint_states /move_base_simple/goal /move_group/cancel /move_group/display_contacts /move_group/display_planned_path /move_group/feedback /move_group/goal /move_group/monitored_planning_scene /move_group/ompl/parameter_descriptions /move_group/ompl/parameter_updates /move_group/plan_execution/parameter_descriptions /move_group/plan_execution/parameter_updates /move_group/planning_scene_monitor/parameter_descriptions /move_group/planning_scene_monitor/parameter_updates /move_group/result /move_group/sense_for_plan/parameter_descriptions /move_group/sense_for_plan/parameter_updates /move_group/status /move_group/trajectory_execution/parameter_descriptions /move_group/trajectory_execution/parameter_updates /pickup/cancel /pickup/feedback /pickup/goal /pickup/result /pickup/status /place/cancel /place/feedback /place/goal /place/result /place/status /planning_scene /planning_scene_world /recognized_object_array /rosout /rosout_agg /rviz_ladar_P1_27757_2406743404560138663/motionplanning_planning_scene_monitor/parameter_descriptions /rviz_ladar_P1_27757_2406743404560138663/motionplanning_planning_scene_monitor/parameter_updates /rviz_moveit_motion_planning_display/robot_interaction_interactive_marker_topic/feedback /rviz_moveit_motion_planning_display/robot_interaction_interactive_marker_topic/update /rviz_moveit_motion_planning_display/robot_interaction_interactive_marker_topic/update_full /tf /tf_static /trajectory_execution_event


이제 gazebo에서 로봇이 구동된 것을 확인할 수 있다.










'ROBOTICS > ROS Robotics' 카테고리의 다른 글

ROS python node 만들기  (0) 2022.07.22
CMAKE 업그레이드 하기  (0) 2022.07.19

+ Recent posts