닥터 쥰
긁어모으고. 기록하고. 고민하고.
닥터 쥰
전체 방문자
오늘
어제
  • 분류 전체보기
    • Robot Theory
      • Manipulator Theory
    • Project notes
      • Robot Operating System
      • Arduino
      • CAD program
    • 도전, 코딩테스트
      • Python version
    • Tutorial
    • Hobby Life
      • 짬짬이 독서!
      • 출퇴근 독서!
      • 레고
    • etc.

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • 튜토리얼
  • 동역학
  • 기구학
  • theory
  • SWEA
  • Tutorial
  • 출퇴근독서
  • 로봇 동역학
  • python
  • manipulator
  • UR3
  • 매니퓰레이터
  • 라그랑지안
  • Universal robot
  • control
  • Robot arm
  • control theory
  • manipulator robot
  • 짬짬이 독서
  • 로봇
  • 뉴턴 오일러 운동방정식
  • 코딩테스트
  • 로봇 제어
  • 독서
  • ros
  • robot
  • 출퇴근 독서
  • 수학
  • speed champions
  • kinematics

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
닥터 쥰

긁어모으고. 기록하고. 고민하고.

Project notes/Robot Operating System

[ROS] Universal Robot manipulator with Moveit!

2020. 4. 28. 10:45

개요

지난 포스팅에서 Universal robot의 manipulator ROS package를 사용해보았습니다.

이번에는 Moveit!을 활용하여 manipulator를 제어해 보겠습니다.

개발환경 구축

개발 환경은 Kinetic, Melodic 상관없구요, UR ROS package를 설치해야합니다.

물론 설치 하신 분들은 건너뛰시구요.

UR 로봇의 공식 ROS git에서 다음과 같이 설치 방법 및 실행 방법을 설명하고 있습니다.

- Kinetic
sudo apt-get install ros-kinetic-universal-robot

- Melodic
sudo apt-get install ros-melodic-universal-robot

- 공통사항
rospack profile && rosstack profile

그리고 나서 Moveit! 설치를 진행합니다.

- Kinetic
rosdep update
sudo apt-get update
sudo apt-get dist-upgrade
sudo apt-get install ros-kinetic-catkin python-catkin-tools
sudo apt install ros-kinetic-moveit

- Melodic
rosdep update
sudo apt-get update
sudo apt-get dist-upgrade
sudo apt-get install ros-melodic-catkin python-catkin-tools
sudo apt install ros-melodic-moveit

- 공통사항
rospack profile && rosstack profile

제 깃허브에 python으로 작성한 테스트 파일이 있습니다.
깃허브 제목은 'ur3-moveit-test' 입니다만, 사실 ur3, 5, 10 모두 사용 가능합니다.
ROS version도 무관합니다.

- git clone
$ cd ~/catkin_ws/src && git clone https://github.com/MrLacquer/ur3-moveit-test.git
$ cd ~/catkin_ws && catkin_make
$ rospack profile && rosstack profile

- Registration
$ cd ~/catkin_ws/src/ur3-moveit-test/ur3_moveit/script
$ chmod +x ur3_move.py
$ chmod +x ur3_demo.py 

Gazebo 시뮬레이터 실행

이제 실제로 동작시켜보기 위해 ur 로봇의 Gazebo 시뮬레이터를 불러옵니다.

- Bring up Gazebo and the URx manipulator:
$ roslaunch ur_gazebo ur3.launch
$ roslaunch ur3_moveit_config ur3_moveit_planning_execution.launch sim:=true
$ roslaunch ur3_moveit_config moveit_rviz.launch config:=true

- Moveit! python code 실행
$ rosrun ur3_moveit ur3_move.py 
or
$ rosrun ur3_moveit ur3_demo.py 

우선, ur3_demo.py 코드는,

import sys
import rospy
import copy, math
from math import pi

from moveit_commander import RobotCommander, MoveGroupCommander
from moveit_commander import PlanningSceneInterface, roscpp_initialize, roscpp_shutdown
from geometry_msgs.msg import PoseStamped
from moveit_msgs.msg import Grasp, GripperTranslation, PlaceLocation, MoveItErrorCodes
from trajectory_msgs.msg import JointTrajectory, JointTrajectoryPoint
from tf.transformations import euler_from_quaternion, quaternion_from_euler
import random

GROUP_NAME_ARM = "manipulator"        # moveit setup assistant에서 설정한 arm group 이름
FIXED_FRAME = 'world'
#GROUP_NAME_GRIPPER = "NAME OF GRIPPER"

class TestMove():

    def __init__(self):
        roscpp_initialize(sys.argv)        
        rospy.init_node('ur3_move',anonymous=True)

        self.scene = PlanningSceneInterface()
        self.robot_cmd = RobotCommander()

        self.robot_arm = MoveGroupCommander(GROUP_NAME_ARM)
        #robot_gripper = MoveGroupCommander(GROUP_NAME_GRIPPER)
        self.robot_arm.set_goal_orientation_tolerance(0.005)
        self.robot_arm.set_planning_time(5)
        self.robot_arm.set_num_planning_attempts(5)

        rospy.sleep(2)
        # Allow replanning to increase the odds of a solution
        self.robot_arm.allow_replanning(True)        

    def move_code(self):

        self.robot_arm.set_named_target("home")  # moveit setup assistant에서 설정한 동작
        self.robot_arm.go(wait=True)
        print("====== move plan go to home 1 ======")        
        rospy.sleep(1)        

        self.robot_arm.set_named_target("zeros")  # moveit setup assistant에서 설정한 동작
        self.robot_arm.go(wait=True)
        print("====== move plan go to zeros ======")        
        rospy.sleep(1)       

        robot_state = self.robot_arm.get_current_pose();
        robot_angle = self.robot_arm.get_current_joint_values();

        print(robot_state)


if __name__=='__main__':
    tm = TestMove()
    tm.__init__()
    tm.move_code()

    rospy.spin()
    roscpp_shutdown()
  • 동작사진 추가 예정
    이와 같이 moveit setup assistant에서 설정한 자세인 'home'과 'zero' 모션을 순차적으로 동작합니다.
    물론 tm.move_code()를 반복문안에 넣으면 반복동작합니다.

ur3_demo.py코드는,

import sys
import rospy
import tf
import moveit_commander  # https://answers.ros.org/question/285216/importerror-no-module-named-moveit_commander/
import random
from geometry_msgs.msg import Pose, Point, Quaternion
from math import pi

pose_goal = Pose()
moveit_commander.roscpp_initialize(sys.argv)
rospy.init_node('ur3_move',anonymous=True)
group = [moveit_commander.MoveGroupCommander("manipulator")]  # ur3 moveit group name: manipulator

xx = 1

while not rospy.is_shutdown():  
  if(xx%2 == 1):        
    pose_goal.orientation.w = 0.0
    pose_goal.position.x = 0.4 # red line      0.2   0.2
    pose_goal.position.y = 0.15  # green line  0.15   0.15
    pose_goal.position.z = 0.2  # blue line   # 0.35   0.6
    group[0].set_pose_target(pose_goal)
    group[0].go(True)

    #print(xx)
    rospy.sleep(2)

  else:
    pose_goal.orientation.w = 0.0
    pose_goal.position.x = 0.2 # red line      0.2   0.2
    pose_goal.position.y = 0.15  # green line  0.15   0.15
    pose_goal.position.z = 0.2  # blue line   # 0.35   0.6
    group[0].set_pose_target(pose_goal)
    group[0].go(True)

    #print(xx)
    rospy.sleep(2) 

  xx = xx + 1   

moveit_commander.roscpp_shutdown()
  • 동작사진 추가예정

본 코드는 UR3에서만 제대로 작동합니다.
왜냐면 while문 안에 설정한 좌표들은 UR3의 resion of motion 에 맞춘 좌표이기 때문이지요.

저는 해당 좌표들을 Rviz에서 interactive marker를 조절하여 excute 한 뒤에, rosrun tf tf_echo /base_link /eef_link 로 end-effector의 좌표를 읽어서 설정하거나, Moveit! interface의 get_current_pose()함수를 활용했습니다.

저작자표시 비영리 (새창열림)

'Project notes > Robot Operating System' 카테고리의 다른 글

[ROS] UR3 xacro file을 이용한 양팔 로봇 만들기  (3) 2018.03.05
[ROS] Universal Robot Co.의 ROS package 사용하기  (1) 2017.12.31
    'Project notes/Robot Operating System' 카테고리의 다른 글
    • [ROS] UR3 xacro file을 이용한 양팔 로봇 만들기
    • [ROS] Universal Robot Co.의 ROS package 사용하기
    닥터 쥰
    닥터 쥰
    로봇 공학, 개인관심사를 기록하려구요.

    티스토리툴바