SlideShare a Scribd company logo
1 of 70
Download to read offline
Gazebo, MoveIt!, ros_control을 활용한 로봇팔 모델링 및 제어
2nd Open Robotics Seminar

December 22, 2014

Byeong-Kyu Ahn (byeongkyu@gmail.com)
✓ Prerequisite
✓ Robot (Target)
✓ UDRF
✓ Gazebo
✓ Controller
✓ MoveIt
✓ Demo
✓ Real Robot
An Overview
준비해야 할것들
Prerequisite
ROS Indigo Igloo 1)
Ubuntu 14.04 LTS (Trusty)
Gazebo 4.1.0 2) MoveIt 3)
1) ROS Installation: http://wiki.ros.org/indigo/Installation/Ubuntu
2) Gazebo Installation: http://gazebosim.org/tutorials?tut=install&ver=4.0&cat=get_started
3) MoveIt Installation: http://moveit.ros.org/install
4) ros_control: http://wiki.ros.org/ros_control
ROS control, an ove
ROSCon 2014
September 12, 2014
Adolfo Rodríguez Tsouroukdissian
ros_control 4)
$ sudo apt-get install ros-indigo-moveit-*
$ sudo apt-get install ros-indigo-ros-control
$ sudo apt-get install ros-indigo-ros-controller
$ sudo apt-get install ros-indigo-joint-state-controller
$ sudo apt-get install ros-indigo-effort-controllers
$ sudo apt-get install ros-indigo-position-controllers
$ sudo apt-get install ros-indigo-joint-trajectory-controller
Install packages for MoveIt, ros_control
타겟 선정 (로봇)
Robot
고기능 작업용 팔
항목 설명
재원
길이: 670.73mm
무게: 7.63kg
자유도
8 DoF
(어깨 4, 팔꿈치 1, 손목 3)
가반하중 3.0kg
종단속도 0.6m/s
통신 CAN
전원 24V
제어방식 위치, 속도, 전류제어
-	어깨와 몸통 사이의 자유도 구현 (총 8자유도)

-	외력 반응성 (Backdrivablity) 향상을 위한 저기어비 설계 (100/1)

-	타이밍 벨트 및 풀리에서 생기는 마찰 및 손실 방지를 위해 모터/기어 직결모듈 방식

-	각 관절의 절대위치 인식 (엡솔루트 엔코더)

-	토크 제어 (전류제어)

-	외부와 접촉 시 접촉 힘 측정 및 대응 (F/T 센서 장착시)

-	중공형 기어, 모터, 엔코더 사용로봇산업원천기술개발사업 - 로봇 H/W플랫폼기술 개발 (2009. 06 ~ 2011.05)
Specification
Characteristic
Part별
Mass(kg)
Inertia Tensor
Center of Mass
Separate
Parts
(Link)
Part별
COLLADA 파일
or STL
Joint 정보
회전축, 한계값
최대속도 등
알아내야 할 것들
COLLADA.org - https://collada.org
http://ko.wikipedia.org/wiki/관성_모멘트
Mass(kg)
Inertia Tensor
Center of Mass
설계한 사람한테 물어보기
어떻게 구하나?
직접 구하기(근사치)
MeshLab
- Find out inertial parameters: http://gazebosim.org/tutorials?tut=inertia&cat=
Menu > Filters > Quality Measure and Computations Compute > Geometric Measures
Mesh Bounding Box Size 115.100006 83.000015 85.500000
Mesh Bounding Box Diag 165.672150
Mesh Volume is 223733.125000
Mesh Surface is 126935.031250
Thin shell barycenter 14.123314 -0.036923 8.072087
Center of Mass is 8.950365 0.008595 7.867443
Inertia Tensor is :
| 252065328.000000 150681.546875 -32695376.000000 |
| 150681.546875 417160000.000000 -490.519348 |
| -32695376.000000 -490.519348 423229216.000000 |
Principal axes are :
| -0.983400 0.000865 -0.181451 |
| -0.000434 -0.999997 -0.002418 |
| -0.181453 -0.002299 0.983397 |
axis momenta are :
| 246032432.000000 417160032.000000 429262048.000000 |
shoulder_baseshoulder_yawshoulder_roll
shoulder_pitchunderarm
elbow_pitch
elbow_yawwrist_pitch
wrist_roll
URDF 작성 및 확인
Adolfo Rodríguez Tsouroukdissian, “ros_control: An overview”, ROSCon 2014
URDF : URDF Tutorial - http://wiki.ros.org/urdf/Tutorials
- Build up your own robot models, sensors, scenes, etc.
- XML format for representing a robot model
<robot name="test_robot">
<link name="link1" />
<link name="link2" />
<link name="link3" />
<link name="link4" />
<joint name="joint1" type="continuous">
<parent link="link1"/>
<child link="link2"/>
</joint>
<joint name="joint2" type="continuous">
<parent link="link1"/>
<child link="link3"/>
</joint>
<joint name="joint3" type="continuous">
<parent link="link3"/>
<child link="link4"/>
</joint>
</robot>
http://wiki.ros.org/urdf/XML/linkLink
<link name="my_link">
<inertial>
<origin xyz="0 0 0.5" rpy="0 0 0"/>
<mass value="1"/>
<inertia ixx="1.0" ixy="0" ixz="0" iyy="1.0" iyz="0" izz="1.0" />
</inertial>
<visual>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<box size="1 1 1" />
</geometry>
<material name="Cyan">
<color rgba="0 1.0 1.0 1.0"/>
</material>
</visual>
<collision>
<origin xyz="0 0 0" rpy="0 0 0"/>
<geometry>
<cylinder radius="1" length="0.5"/>
</geometry>
</collision>
</link>
<inertial>
<origin xyz="0 0 0.5" rpy="0 0 0"/>
<mass value="1"/>
<inertia ixx=“1.0" ixy="0" ixz="0" iyy=“1.0" iyz="0" izz=“1.0" />
</inertial>
- Center of mass (meter)
- Mass (kg)
- Moments of inertia (kg * m2)
<visual>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<box size="1 1 1" />
<mesh filename="package://safe_arm_meshes/meshes/link1.dae" scale="0.001 0.001 0.001" />
</geometry>
<material name="Cyan">
<color rgba="0 1.0 1.0 1.0"/>
</material>
</visual>
<collision>
<origin xyz="0 0 0" rpy="0 0 0"/>
<geometry>
<cylinder radius="1" length="0.5"/>
</geometry>
</collision>
<geometry> (required)

	▪	The shape of the visual object. This can be one of the following: 

▪ <box> 

▪ size attribute contains the three side lengths of the box. The origin of the box is in its center. 

▪ <cylinder> 

	 ▪	Specify the radius and length. The origin of the cylinder is in its center. 

▪ <sphere> 

	 ▪	Specify the radius. The origin of the sphere is in its center. 

▪ <mesh> 

	 ▪	A trimesh element specified by a filename, and an optional scale that scales the mesh's axis-
aligned-bounding-box. The recommended format for best texture and color support is
Collada .dae files, though .stl files are also supported. The mesh file is not transferred between
machines referencing the same model. It must be a local file.
http://wiki.ros.org/urdf/XML/jointJoint
<joint name="my_joint" type="floating">
<origin xyz="0 0 1" rpy="0 0 3.1416"/>
<parent link="link1"/>
<child link="link2"/>
<calibration rising="0.0"/>
<dynamics damping="0.0" friction="0.0"/>
<limit effort="30" velocity="1.0" lower="-2.2" upper="0.7" />
<safety_controller k_velocity="10" k_position="15" soft_lower_limit="-2.0" soft_upper_limit="0.5" />
</joint>
	 ▪	 revolute - a hinge joint that rotates along the axis and has a limited range specified by the upper and
lower limits.

	 ▪	 continuous - a continuous hinge joint that rotates around the axis and has no upper and lower limits

	 ▪	 prismatic - a sliding joint that slides along the axis, and has a limited range specified by the upper and
lower limits.

	 ▪	 fixed - This is not really a joint because it cannot move. All degrees of freedom are locked. This type of
joint does not require the axis, calibration, dynamics, limits or safety_controller.

	 ▪	 floating - This joint allows motion for all 6 degrees of freedom.

	 ▪	 planar - This joint allows motion in a plane perpendicular to the axis.
<transmission name="${name}_tran">
<type>transmission_interface/SimpleTransmission</type>
<joint name="${name}">
<hardwareInterface>EffortJointInterface</hardwareInterface>
</joint>
<actuator name="${name}_motor">
<hardwareInterface>EffortJointInterface</hardwareInterface>
<mechanicalReduction>1</mechanicalReduction>
</actuator>
</transmission>
http://wiki.ros.org/urdf/XML/TransmissionTransmission
actuator: actuator the transmission is connected to
joint: the joint the transmission is connected to
mechanicalReduction: a value for overall mechanical reduction at the joint/actuator transmission
http://wiki.ros.org/urdf/XML/GazeboGazebo
The gazebo element is an extension to the URDF robot description format, used for simulation purposes in the Gazebo simulator.
<gazebo>
<plugin name="gazebo_ros_control" filename="libgazebo_ros_control.so">
<robotNamespace>/safe_arm</robotNamespace>
<robotSimType>gazebo_ros_control/DefaultRobotHWSim</robotSimType>
</plugin>
</gazebo>
The default behavior provides the following ros_control interfaces:
	▪	hardware_interface::JointStateInterface
	▪	hardware_interface::EffortJointInterface
http://wiki.ros.org/urdf/Tutorials/Using%20Xacro%20to%20Clean%20Up%20a%20URD
http://wiki.ros.org/xacroXacro
URDF 등의 XML을 작성할때 유용하게 사용할수 있는 패키지. Macro, Property, Math, Conditional 등의 기능을 지원함
<?xml version="1.0"?>
<robot xmlns:xacro="http://ros.org/wiki/xacro" name="safe_arm">
<xacro:include filename="$(find safe_arm_description)/urdf/visuals.xacro" />
<xacro:include filename="$(find safe_arm_description)/urdf/safe_arm_v1_limits.xacro" />
<xacro:include filename="$(find safe_arm_description)/urdf/safe_arm_v1_structure.urdf.xacro" />
<xacro:include filename="$(find safe_arm_description)/urdf/safe_arm_v1.transmission.xacro" />
<xacro:include filename="$(find safe_arm_description)/urdf/safe_arm_v1.gazebo.xacro" />
<link name="world"/>
<joint name="fixed" type="fixed">
<parent link="world"/>
<child link="base_link"/>
</joint>
<link name="base_link" />
<link name="torso" />
<joint name="base_joint" type="fixed">
<origin xyz="0 0 1.0" rpy="0 0 0" />
<parent link="base_link" />
<child link="torso" />
</joint>
<!-- Attatch Left and Right Safe Arm to Torso Link -->
<xacro:safe_arm side="l" reflect="1" parent="torso" />
<xacro:safe_arm side="r" reflect="-1" parent="torso" />
</robot>
작성된 URDF에 대한 검증 작업 http://wiki.ros.org/urdf#Verification
$ check_urdf my_robot.urdf
robot name is: safe_arm
---------- Successfully Parsed XML ---------------
root Link: world has 1 child(ren)
child(1): base_footprint
child(1): base_link
child(1): torso
child(1): l_shoulder_base_link
child(1): l_shoulder_yaw_link
child(1): l_shoulder_pitch_link
child(1): l_shoulder_roll_link
child(1): l_underarm_link
child(1): l_elbow_pitch_link
child(1): l_elbow_yaw_link
child(1): l_wrist_pitch_link
child(1): l_wrist_roll_link
child(1): l_end_effector_link
child(2): r_shoulder_base_link
child(1): r_shoulder_yaw_link
child(1): r_shoulder_pitch_link
child(1): r_shoulder_roll_link
child(1): r_underarm_link
child(1): r_elbow_pitch_link
child(1): r_elbow_yaw_link
child(1): r_wrist_pitch_link
child(1): r_wrist_roll_link
child(1): r_end_effector_link
$ urdf_to_graphiz my_robot.urdf
world
world_base_footprint_joint
xyz: 0 0 0
rpy: 0 -0 0
base_footprint
base_footprint_link_joint
xyz: 0 0 0
rpy: 0 -0 0
base_link
base_link_torso_joint
xyz: 0 0 1
rpy: 0 -0 0
torso
l_shoulder_base
xyz: 0 0 0
rpy: 0 -0 0
r_shoulder_base
xyz: 0 0 0
rpy: 0 -0 0
l_shoulder_base_link
l_shoulder_yaw_joint
xyz: 0 0.044 0.01
rpy: 0 -0 0
r_shoulder_base_link
r_shoulder_yaw_joint
xyz: 0 -0.044 0.01
rpy: 0 -0 0
base_link_torso_joint
xyz: 0 0 1
rpy: 0 -0 0
torso
l_shoulder_base
xyz: 0 0 0
rpy: 0 -0 0
r_shoulder_base
xyz: 0 0 0
rpy: 0 -0 0
l_shoulder_base_link
l_shoulder_yaw_joint
xyz: 0 0.044 0.01
rpy: 0 -0 0
l_shoulder_yaw_link
l_shoulder_pitch_joint
xyz: 0 0.0555 0
rpy: 0 -0 0
l_shoulder_pitch_link
l_shoulder_roll_joint
xyz: 0 0.119 0
rpy: 0 -0 0
l_shoulder_roll_link
l_underarm_joint
xyz: 0 0 -0.058
rpy: 0 -0 0
l_underarm_link
l_elbow_pitch_joint
xyz: 0.025 0 -0.24
rpy: 0 -0 0
l_elbow_pitch_link
l_elbow_yaw_joint
xyz: -0.025 0 -0.045
rpy: 0 -0 0
r_shoulder_base_link
r_shoulder_yaw_joint
xyz: 0 -0.044 0.01
rpy: 0 -0 0
r_shoulder_yaw_link
r_shoulder_pitch_joint
xyz: 0 -0.0555 0
rpy: 0 -0 0
r_shoulder_pitch_link
r_shoulder_roll_joint
xyz: 0 -0.119 0
rpy: 0 -0 0
r_shoulder_roll_link
r_underarm_joint
xyz: 0 0 -0.058
rpy: 0 -0 0
r_underarm_link
r_elbow_pitch_joint
xyz: 0.025 0 -0.24
rpy: 0 -0 0
r_elbow_pitch_link
r_elbow_yaw_joint
xyz: -0.025 0 -0.045
rpy: 0 -0 0
<launch>
<param name="robot_description" command="$(find xacro)/xacro.py $(find safe_arm_description)/urdf/
safe_arm_v1.urdf.xacro" />
<node pkg="robot_state_publisher" type="state_publisher" name="robot_state_publisher" />
<node pkg="joint_state_publisher" type="joint_state_publisher" name="joint_state_publisher">
<param name="use_gui" value="1" />
</node>
</launch>
작성된 URDF에 대한 검증 작업
로봇의 동작 범위, 모델(Mesh) 등등 검증
$ roslaunch safe_arm_description safe_arm_publisher.launch
$ rosrun rqt_rviz rqt_rviz
http://wiki.ros.org/robot_state_publisherrobot_state_publisher
/joint_states 토픽을 구독하여, /tf로 출력
robot_description 파라미터에 명시된 로
봇의 정보를 이용하여 Joint의 각도값, 링크
의 3D 포즈, 로봇의 기구학적 트리 등에 대
한 정보를 /tf로 Publish한다.
http://wiki.ros.org/joint_state_publisherjoint_state_publisher
robot_description 파
라미터에 명시된 로봇의
Joint 정보를 이용하여
Joint의 각도값을
Publish한다.
Adolfo Rodríguez Tsouroukdissian, “ros_control: An overview”, ROSCon 2014
Gazebo를 이용한 시뮬레이션
Gazebo
3D 로봇 시뮬레이터로 다양한 종류의 물리엔진을 지원하여 동력한 시뮬레이션을 지원, 추가로 일반적으로 사용되는 센서(LRF, 카메라,
Depth Sensor, 접촉센서, 힘-토크센서 등)을 지원함.
safe_arm gazebo 실행
$ roslaunch safe_arm_bringup sim.launch
<launch>
<arg name="paused" default="false"/>
<arg name="use_sim_time" default="true"/>
<arg name="gui" default="true"/>
<arg name="headless" default="false"/>
<arg name="debug" default="false"/>
<include file="$(find safe_arm_bringup)/launch/empty_world.launch">
<arg name="debug" value="$(arg debug)" />
<arg name="gui" value="$(arg gui)" />
<arg name="paused" value="$(arg paused)"/>
<arg name="use_sim_time" value="$(arg use_sim_time)"/>
<arg name="headless" value="$(arg headless)"/>
</include>
<param name="robot_description" command="$(find xacro)/xacro.py $(find safe_arm_description)/urdf/safe_arm_v1.urdf.xacro" />
<node name="urdf_spawner" pkg="gazebo_ros" type="spawn_model" respawn="false" output="screen"
args="-urdf -model safe_arm -param robot_description"/>
</launch>
<launch>
<!-- these are the arguments you can pass this launch file, for example paused:=true -->
<arg name="paused" default="false"/>
<arg name="use_sim_time" default="true"/>
<arg name="gui" default="true"/>
<arg name="headless" default="true"/>
<arg name="debug" default="false"/>
<arg name="verbose" default="false"/>
<arg name="world_name" default="worlds/empty.world"/> <!-- Note: the world_name is with respect to GAZEBO_RESOURCE_PATH environmental variable -->
<!-- set use_sim_time flag -->
<group if="$(arg use_sim_time)">
<param name="/use_sim_time" value="true" />
</group>
<!-- set command arguments -->
<arg unless="$(arg paused)" name="command_arg1" value=""/>
<arg if="$(arg paused)" name="command_arg1" value="-u"/>
<arg unless="$(arg headless)" name="command_arg2" value=""/>
<arg if="$(arg headless)" name="command_arg2" value="-r"/>
<arg unless="$(arg verbose)" name="command_arg3" value=""/>
<arg if="$(arg verbose)" name="command_arg3" value="--verbose"/>
<arg unless="$(arg debug)" name="script_type" value="gzserver"/>
<arg if="$(arg debug)" name="script_type" value="debug"/>
<!-- start gazebo server-->
<node name="gazebo" pkg="gazebo_ros" type="$(arg script_type)" respawn="false" output="screen"
args="$(arg command_arg1) $(arg command_arg2) $(arg command_arg3) $(arg world_name) -e simbody" />
<!-- start gazebo client -->
<group if="$(arg gui)">
<node name="gazebo_gui" pkg="gazebo_ros" type="gzclient" respawn="false" output="screen"/>
</group>
</launch>
empty.world 기존 empty_world에서 물리엔진 선택 부분 추가
Adolfo Rodríguez Tsouroukdissian, “ros_control: An overview”, ROSCon 2014
Gazebo + ros_control
ros_control
➔ Lower entry barrier for exposing HW to ROS
➔ Promote reuse of control code

➔ Provide ready-to-use tools

➔ Real-time ready implementation
Adolfo Rodríguez Tsouroukdissian, “ros_control: An overview”, ROSCon 2014
☐ Goal
➔ pr2_controller_manager (2009)

- developed mainly by Willow Garage (WG)
- PR2-specific

➔ ros_control (late 2012)
- started by hiDOF, in collaboration with WG 

- continuedbyPALRoboticsandcommunity 

- robot-agnostic version of the pr2_controller_manager 

☐ History
Adolfo Rodríguez Tsouroukdissian, “ros_control: An overview”, ROSCon 2014
Adolfo Rodríguez Tsouroukdissian, “ros_control: An overview”, ROSCon 2014
Controllers
	•	 effort_controllers

	 ◦	joint_effort_controller

	 ◦	joint_position_controller

	 ◦	joint_velocity_controller

	•	 joint_state_controller

	 ◦	joint_state_controller

	•	 position_controllers

	 ◦	joint_position_controller

	•	 velocity_controllers

	 ◦	joint_velocity_controllers
	•	 Joint Command Interfaces

	 ◦	Effort Joint Interface

	 ◦	Velocity Joint Interface

	 ◦	Position Joint Interface

	•	 Joint State Interfaces

	•	 Actuator State Interfaces

	•	 Actuator Command Interfaces

	 ◦	Effort Actuator Interface

	 ◦	Velocity Actuator Interface

	 ◦	Position Actuator Interface

	•	 Force-torque sensor Interface

	•	 IMU sensor Interface
Hardware Interfaces
!! You can of course create your own
<?xml version="1.0"?>
<robot xmlns:xacro="http://ros.org/wiki/xacro">
<xacro:macro name="insert_transmission" params="name">
<transmission name="${name}_tran">
<type>transmission_interface/SimpleTransmission</type>
<joint name="${name}">
<hardwareInterface>EffortJointInterface</hardwareInterface>
</joint>
<actuator name="${name}_motor">
<hardwareInterface>EffortJointInterface</hardwareInterface>
<mechanicalReduction>1</mechanicalReduction>
</actuator>
</transmission>
</xacro:macro>
</robot>
safe_arm_v1.transmission.xacro
<xacro:insert_transmission name="${side}_shoulder_yaw_joint" />
safe_arm:
joint_state_controller:
type: joint_state_controller/JointStateController
publish_rate: 100
safe_arm_joint_state.yaml
<launch>
<rosparam file="$(find safe_arm_control)/config/safe_arm_joint_state.yaml" command="load"/>
<node name="joint_controller_spawner" pkg="controller_manager" type="spawner" respawn="false"
output="screen" ns="/safe_arm" args="joint_state_controller" />
<node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher"
respawn="false" output="screen">
<remap from="/joint_states" to="/safe_arm/joint_states" />
</node>
</launch>
safe_arm_joint_state_controller.launch
std_msgs/Header header

string[] name

float64[] position

float64[] velocity

float64[] effort
sensor_msgs/JointState Message
safe_arm:
l_arm_joint_controller:
type: "effort_controllers/JointTrajectoryController"
joints:
- l_shoulder_yaw_joint
- l_shoulder_pitch_joint
- l_shoulder_roll_joint
- l_underarm_joint
- l_elbow_pitch_joint
- l_elbow_yaw_joint
- l_wrist_pitch_joint
- l_wrist_roll_joint
gains:
l_shoulder_yaw_joint:
{p: 1500.0, i: 0.01, d: 0.1, i_clamp: 1000}
l_shoulder_pitch_joint:
{p: 1500.0, i: 0.01, d: 0.1, i_clamp: 1000}
l_shoulder_roll_joint:
{p: 1500.0, i: 0.01, d: 0.1, i_clamp: 1000}
l_underarm_joint:
{p: 1500.0, i: 0.01, d: 0.1, i_clamp: 1000}
l_elbow_pitch_joint:
{p: 1500.0, i: 0.01, d: 0.1, i_clamp: 1000}
l_elbow_yaw_joint:
{p: 1500.0, i: 0.01, d: 0.1, i_clamp: 1000}
l_wrist_pitch_joint:
{p: 1500.0, i: 0.01, d: 0.1, i_clamp: 1000}
l_wrist_roll_joint:
{p: 1500.0, i: 0.01, d: 0.1, i_clamp: 1000}
safe_arm_l_control.yaml
<launch>
<rosparam file="$(find safe_arm_control)/config/safe_arm_l_control.yaml"
command="load"/>
<node name="l_controller_spawner" pkg="controller_manager" type="spawner"
respawn="false"
output="screen" ns="/safe_arm" args="l_arm_joint_controller"/>
</launch>
safe_arm_l_controller.launch
safe_arm:
r_arm_joint_controller:
type: "effort_controllers/JointTrajectoryController"
joints:
- r_shoulder_yaw_joint
- r_shoulder_pitch_joint
- r_shoulder_roll_joint
- r_underarm_joint
- r_elbow_pitch_joint
- r_elbow_yaw_joint
- r_wrist_pitch_joint
- r_wrist_roll_joint
gains:
r_shoulder_yaw_joint:
{p: 1000.0, i: 0.05, d: 0.1, i_clamp: 1000}
r_shoulder_pitch_joint:
{p: 1000.0, i: 0.05, d: 0.1, i_clamp: 1000}
r_shoulder_roll_joint:
{p: 1000.0, i: 0.05, d: 0.1, i_clamp: 1000}
r_underarm_joint:
{p: 1000.0, i: 0.05, d: 0.1, i_clamp: 1000}
r_elbow_pitch_joint:
{p: 1000.0, i: 0.05, d: 0.1, i_clamp: 1000}
r_elbow_yaw_joint:
{p: 1000.0, i: 0.05, d: 0.1, i_clamp: 1000}
r_wrist_pitch_joint:
{p: 1000.0, i: 0.05, d: 0.1, i_clamp: 1000}
r_wrist_roll_joint:
{p: 1000.0, i: 0.05, d: 0.1, i_clamp: 1000}
safe_arm_r_control.yaml
<launch>
<rosparam file="$(find safe_arm_control)/config/safe_arm_r_control.yaml"
command="load"/>
<node name="r_controller_spawner" pkg="controller_manager" type="spawner"
respawn="false"
output="screen" ns="/safe_arm" args="r_arm_joint_controller"/>
</launch>
safe_arm_r_controller.launch
safe_arm_bringup/bringup.launch
<launch>
<include file="$(find safe_arm_bringup)/launch/safe_arm_sim.launch" />
<include file="$(find safe_arm_control)/launch/safe_arm_joint_state_controller.launch" />
<include file="$(find safe_arm_control)/launch/safe_arm_l_controller.launch" />
<include file="$(find safe_arm_control)/launch/safe_arm_r_controller.launch" />
</launch>
Adolfo Rodríguez Tsouroukdissian, “ros_control: An overview”, ROSCon 2014
MoveIt 연동
MoveIt MoveIt! is state of the art software for mobile manipulation, incorporating the latest advances in
motion planning, manipulation, 3D perception, kinematics, control and navigation
http://www.youtube.com/watch?v=dblCGZzeUqs
System Architecture
MoveIt Setup Assistant
http://docs.ros.org/hydro/api/moveit_setup_assistant/html/doc/tutorial.html
MoveIt와 로봇과의 연동을 위한 환경설정 GUI
결과물로 각종 MoveIt 패키지와 SRDF(Semantic Robot Description Format) 생성
$ roslaunch moveit_setup_assistant setup_assistant.launch
MoveIt과 연동할 로봇의 URDF를 불러옴. XACRO로 되어 있어도 무방 정상적으로 불러온 것을 확인
Sampling Density를 최대값으로 올리고, 모델 링크간의 충돌에 대한
매트릭스 생성
외부환경과 로봇과의 연결을 위한 가상 조인트(고정) 생성
Planning 그룹 설정. safe_arm의 경우, 왼쪽과 오른쪽 팔 두개의 Planning 그룹을 생성함
왼쪽팔에 대한 조인트 그룹, 링크 그룹, Kinematic Chain을 설정해 준다.
왼쪽팔에 대한 조인트 그룹, 링크 그룹, Kinematic Chain을 설정해 준다.
오른쪽 팔에 대해서도 같은 방법으로 설정
로봇의 기본 자세 (Homing Position, Ready, etc)를 만들어준다. (선택사항)
마지막으로 catkin workspace 내에 패키지가 저장될 곳을 선택한 후, 패키지 생성 완료
MoveIt Setup에 대한 검증
$ roslaunch safe_arm_moveit_config demo.launch
MoveIt과 Gazebo와의 연동을 위한 추가 작업
MoveIt Config 패키지 저장 장소가 ~/catkin_ws/src/safe_arm_moveit_config라고 가정
MoveIt Controller Manager 설정
safe_arm_moveit_config/config/controllers.yaml 파일 생성
controller_list:
- name: "safe_arm/l_arm_joint_controller"
action_ns: follow_joint_trajectory
type: FollowJointTrajectory
joints:
- l_shoulder_yaw_joint
- l_shoulder_pitch_joint
- l_shoulder_roll_joint
- l_underarm_joint
- l_elbow_pitch_joint
- l_elbow_yaw_joint
- l_wrist_pitch_joint
- l_wrist_roll_joint
- name: "safe_arm/r_arm_joint_controller"
action_ns: follow_joint_trajectory
type: FollowJointTrajectory
joints:
- r_shoulder_yaw_joint
- r_shoulder_pitch_joint
- r_shoulder_roll_joint
- r_underarm_joint
- r_elbow_pitch_joint
- r_elbow_yaw_joint
- r_wrist_pitch_joint
- r_wrist_roll_joint
ros_control 설정시 보았던 controller의 이름과 Joint 리스트를 적어줌.
<launch>
<!-- Set the param that trajectory_execution_manager needs to find the controller plugin -->
<arg name="moveit_controller_manager" default="moveit_simple_controller_manager/MoveItSimpleControllerManager" />
<param name="moveit_controller_manager" value="$(arg moveit_controller_manager)"/>
<!-- load controller_list -->
<arg name="use_controller_manager" default="true" />
<param name="use_controller_manager" value="$(arg use_controller_manager)" />
<!-- Load joint controller configurations from YAML file to parameter server -->
<rosparam file="$(find safe_arm_moveit_config2)/config/controllers.yaml"/>
</launch>
safe_arm_moveit_config/config/safe_arm_moveit_controller_manager.launch.xml 파일 수정
실행
<launch>
<include file="$(find safe_arm_bringup)/launch/safe_arm_sim.launch" />
<include file="$(find safe_arm_control)/launch/safe_arm_joint_state_controller.launch" />
<include file="$(find safe_arm_control)/launch/safe_arm_l_controller.launch" />
<include file="$(find safe_arm_control)/launch/safe_arm_r_controller.launch" />
<include file="$(find safe_arm_moveit_config)/launch/move_group.launch" />
<include file="$(find safe_arm_moveit_config)/launch/moveit_rviz.launch">
<arg name="config" value="true" />
</include>
<include file="$(find safe_arm_moveit_config)/launch/default_warehouse_db.launch" />
</launch>
$ roslaunch safe_arm_bringup bringup.launch
safe_arm_bringup/launch/bringup.launch
Demo
Real Robot?
Adolfo Rodríguez Tsouroukdissian, “ros_control: An overview”, ROSCon 2014
Q&A?
byeongkyu@gmail.com
http://ahnbk.com
http://facebook.com/ahnbk

More Related Content

What's hot

Lecture 12 localization and navigation
Lecture 12 localization and navigationLecture 12 localization and navigation
Lecture 12 localization and navigationVajira Thambawita
 
ppt on rocker bogie mechanism
ppt on rocker bogie mechanismppt on rocker bogie mechanism
ppt on rocker bogie mechanismAmol Torane
 
Introduction to ROS (Robot Operating System)
Introduction to ROS (Robot Operating System) Introduction to ROS (Robot Operating System)
Introduction to ROS (Robot Operating System) hvcoup
 
Path Planning And Navigation
Path Planning And NavigationPath Planning And Navigation
Path Planning And Navigationguest90654fd
 
입문 Visual SLAM 14강 - 2장 Introduction to slam
입문 Visual SLAM 14강  - 2장 Introduction to slam입문 Visual SLAM 14강  - 2장 Introduction to slam
입문 Visual SLAM 14강 - 2장 Introduction to slamjdo
 
Laravelとテストについて
LaravelとテストについてLaravelとテストについて
LaravelとテストについてTakeo Noda
 
An introduction to robotics classification, kinematics and hardware
An introduction to robotics classification, kinematics and hardwareAn introduction to robotics classification, kinematics and hardware
An introduction to robotics classification, kinematics and hardwareNikhil Shrivas
 
Jacobian | velocity and static forces
Jacobian | velocity and static forcesJacobian | velocity and static forces
Jacobian | velocity and static forcesAbrar Mohamed
 
Deep VO and SLAM
Deep VO and SLAMDeep VO and SLAM
Deep VO and SLAMYu Huang
 
MySQL 8.0で強化されたGIS機能のご紹介:「FOSS4G 2018 Hokkaido」での発表資料
MySQL 8.0で強化されたGIS機能のご紹介:「FOSS4G 2018 Hokkaido」での発表資料MySQL 8.0で強化されたGIS機能のご紹介:「FOSS4G 2018 Hokkaido」での発表資料
MySQL 8.0で強化されたGIS機能のご紹介:「FOSS4G 2018 Hokkaido」での発表資料yoyamasaki
 
ROS+GAZEBO
ROS+GAZEBOROS+GAZEBO
ROS+GAZEBOicmike
 
Introduction au webmapping au-dela de google maps
Introduction au webmapping  au-dela de google mapsIntroduction au webmapping  au-dela de google maps
Introduction au webmapping au-dela de google mapsVisionGÉOMATIQUE2012
 
ROS Based Programming and Visualization of Quadrotor Helicopters
ROS Based Programming and Visualization of Quadrotor HelicoptersROS Based Programming and Visualization of Quadrotor Helicopters
ROS Based Programming and Visualization of Quadrotor HelicoptersAtılay Mayadağ
 
Rocker bogie mechanism (mars rover) final year mini project
Rocker bogie mechanism (mars rover) final year mini projectRocker bogie mechanism (mars rover) final year mini project
Rocker bogie mechanism (mars rover) final year mini projectBIRENDRA KUMAR PANDIT
 
CST 20363 Session 5 Robotics
CST 20363 Session 5 RoboticsCST 20363 Session 5 Robotics
CST 20363 Session 5 Roboticsoudesign
 
NET MAUI for .NET 7 for iOS, Android app development
 NET MAUI for .NET 7 for iOS, Android app development  NET MAUI for .NET 7 for iOS, Android app development
NET MAUI for .NET 7 for iOS, Android app development Shotaro Suzuki
 

What's hot (20)

Lecture 12 localization and navigation
Lecture 12 localization and navigationLecture 12 localization and navigation
Lecture 12 localization and navigation
 
rovers technology
rovers technologyrovers technology
rovers technology
 
ppt on rocker bogie mechanism
ppt on rocker bogie mechanismppt on rocker bogie mechanism
ppt on rocker bogie mechanism
 
Introduction to ROS (Robot Operating System)
Introduction to ROS (Robot Operating System) Introduction to ROS (Robot Operating System)
Introduction to ROS (Robot Operating System)
 
Lego robotics
Lego roboticsLego robotics
Lego robotics
 
Mobile Robot Vechiles
Mobile Robot VechilesMobile Robot Vechiles
Mobile Robot Vechiles
 
Path Planning And Navigation
Path Planning And NavigationPath Planning And Navigation
Path Planning And Navigation
 
입문 Visual SLAM 14강 - 2장 Introduction to slam
입문 Visual SLAM 14강  - 2장 Introduction to slam입문 Visual SLAM 14강  - 2장 Introduction to slam
입문 Visual SLAM 14강 - 2장 Introduction to slam
 
Laravelとテストについて
LaravelとテストについてLaravelとテストについて
Laravelとテストについて
 
An introduction to robotics classification, kinematics and hardware
An introduction to robotics classification, kinematics and hardwareAn introduction to robotics classification, kinematics and hardware
An introduction to robotics classification, kinematics and hardware
 
Jacobian | velocity and static forces
Jacobian | velocity and static forcesJacobian | velocity and static forces
Jacobian | velocity and static forces
 
Deep VO and SLAM
Deep VO and SLAMDeep VO and SLAM
Deep VO and SLAM
 
MySQL 8.0で強化されたGIS機能のご紹介:「FOSS4G 2018 Hokkaido」での発表資料
MySQL 8.0で強化されたGIS機能のご紹介:「FOSS4G 2018 Hokkaido」での発表資料MySQL 8.0で強化されたGIS機能のご紹介:「FOSS4G 2018 Hokkaido」での発表資料
MySQL 8.0で強化されたGIS機能のご紹介:「FOSS4G 2018 Hokkaido」での発表資料
 
ROS+GAZEBO
ROS+GAZEBOROS+GAZEBO
ROS+GAZEBO
 
Introduction au webmapping au-dela de google maps
Introduction au webmapping  au-dela de google mapsIntroduction au webmapping  au-dela de google maps
Introduction au webmapping au-dela de google maps
 
ROS Based Programming and Visualization of Quadrotor Helicopters
ROS Based Programming and Visualization of Quadrotor HelicoptersROS Based Programming and Visualization of Quadrotor Helicopters
ROS Based Programming and Visualization of Quadrotor Helicopters
 
Rocker bogie mechanism (mars rover) final year mini project
Rocker bogie mechanism (mars rover) final year mini projectRocker bogie mechanism (mars rover) final year mini project
Rocker bogie mechanism (mars rover) final year mini project
 
CST 20363 Session 5 Robotics
CST 20363 Session 5 RoboticsCST 20363 Session 5 Robotics
CST 20363 Session 5 Robotics
 
NET MAUI for .NET 7 for iOS, Android app development
 NET MAUI for .NET 7 for iOS, Android app development  NET MAUI for .NET 7 for iOS, Android app development
NET MAUI for .NET 7 for iOS, Android app development
 
Vehicle detection
Vehicle detectionVehicle detection
Vehicle detection
 

Viewers also liked

1st MoveIt! Community Meeting
1st MoveIt! Community Meeting1st MoveIt! Community Meeting
1st MoveIt! Community Meetingmoveitrobot
 
ROS Hands-On Intro/Tutorial (Robotic Vision Summer School 2015) #RVSS #ACRV
ROS Hands-On Intro/Tutorial (Robotic Vision Summer School 2015) #RVSS #ACRVROS Hands-On Intro/Tutorial (Robotic Vision Summer School 2015) #RVSS #ACRV
ROS Hands-On Intro/Tutorial (Robotic Vision Summer School 2015) #RVSS #ACRVJuxi Leitner
 
Human Urdf 2010
Human Urdf 2010Human Urdf 2010
Human Urdf 2010hellooz
 
SLC-Lab Opening Event - Kuka
SLC-Lab Opening Event - KukaSLC-Lab Opening Event - Kuka
SLC-Lab Opening Event - KukaSirris
 
제3회 오픈 로보틱스 세미나 (제12세션) : 로봇 암 모델링과 MoveIt! 사용법
제3회 오픈 로보틱스 세미나 (제12세션) : 로봇 암 모델링과 MoveIt! 사용법제3회 오픈 로보틱스 세미나 (제12세션) : 로봇 암 모델링과 MoveIt! 사용법
제3회 오픈 로보틱스 세미나 (제12세션) : 로봇 암 모델링과 MoveIt! 사용법Yoonseok Pyo
 
Ros with docker 20151107
Ros with docker  20151107Ros with docker  20151107
Ros with docker 20151107Sejin Park
 
PROFACTOR Group | iRob Feeder
PROFACTOR Group | iRob FeederPROFACTOR Group | iRob Feeder
PROFACTOR Group | iRob FeederPROFACTOR Group
 
Iterative Visual Recognition for Learning Based Randomized Bin-picking
Iterative Visual Recognition for Learning Based Randomized Bin-pickingIterative Visual Recognition for Learning Based Randomized Bin-picking
Iterative Visual Recognition for Learning Based Randomized Bin-pickingKensuke Harada
 
Base Position Planning for Dual-arm Mobile Manipulators Performing a Sequence...
Base Position Planning for Dual-arm Mobile Manipulators Performing a Sequence...Base Position Planning for Dual-arm Mobile Manipulators Performing a Sequence...
Base Position Planning for Dual-arm Mobile Manipulators Performing a Sequence...Kensuke Harada
 
2014 IEEE Int. Conf. on Robotics and Automation : A Manipulation Motion Plann...
2014 IEEE Int. Conf. on Robotics and Automation : A Manipulation Motion Plann...2014 IEEE Int. Conf. on Robotics and Automation : A Manipulation Motion Plann...
2014 IEEE Int. Conf. on Robotics and Automation : A Manipulation Motion Plann...Kensuke Harada
 
Ros based programming and visualization of quadrotor helicopters 110090139 a...
Ros based programming and visualization of quadrotor helicopters  110090139 a...Ros based programming and visualization of quadrotor helicopters  110090139 a...
Ros based programming and visualization of quadrotor helicopters 110090139 a...Atılay Mayadağ
 
Utility Domestic Robot Presentation
Utility Domestic Robot PresentationUtility Domestic Robot Presentation
Utility Domestic Robot PresentationNouman Tahir
 
ROS-Industrial Kuka LBR-iiwa community meeting
ROS-Industrial Kuka LBR-iiwa community meetingROS-Industrial Kuka LBR-iiwa community meeting
ROS-Industrial Kuka LBR-iiwa community meetingClay Flannigan
 
2014 IEEE Int. Symposium on System Integration (SII) : Project on Development...
2014 IEEE Int. Symposium on System Integration (SII) : Project on Development...2014 IEEE Int. Symposium on System Integration (SII) : Project on Development...
2014 IEEE Int. Symposium on System Integration (SII) : Project on Development...Kensuke Harada
 
Low cost robotic platform
Low cost robotic platformLow cost robotic platform
Low cost robotic platformbellbm
 

Viewers also liked (20)

1st MoveIt! Community Meeting
1st MoveIt! Community Meeting1st MoveIt! Community Meeting
1st MoveIt! Community Meeting
 
ROS Hands-On Intro/Tutorial (Robotic Vision Summer School 2015) #RVSS #ACRV
ROS Hands-On Intro/Tutorial (Robotic Vision Summer School 2015) #RVSS #ACRVROS Hands-On Intro/Tutorial (Robotic Vision Summer School 2015) #RVSS #ACRV
ROS Hands-On Intro/Tutorial (Robotic Vision Summer School 2015) #RVSS #ACRV
 
ROS distributed architecture
ROS  distributed architectureROS  distributed architecture
ROS distributed architecture
 
Human Urdf 2010
Human Urdf 2010Human Urdf 2010
Human Urdf 2010
 
SLC-Lab Opening Event - Kuka
SLC-Lab Opening Event - KukaSLC-Lab Opening Event - Kuka
SLC-Lab Opening Event - Kuka
 
제3회 오픈 로보틱스 세미나 (제12세션) : 로봇 암 모델링과 MoveIt! 사용법
제3회 오픈 로보틱스 세미나 (제12세션) : 로봇 암 모델링과 MoveIt! 사용법제3회 오픈 로보틱스 세미나 (제12세션) : 로봇 암 모델링과 MoveIt! 사용법
제3회 오픈 로보틱스 세미나 (제12세션) : 로봇 암 모델링과 MoveIt! 사용법
 
Ros with docker 20151107
Ros with docker  20151107Ros with docker  20151107
Ros with docker 20151107
 
Ros platform overview
Ros platform overviewRos platform overview
Ros platform overview
 
Personal Robot Adam
Personal Robot AdamPersonal Robot Adam
Personal Robot Adam
 
PROFACTOR Group | iRob Feeder
PROFACTOR Group | iRob FeederPROFACTOR Group | iRob Feeder
PROFACTOR Group | iRob Feeder
 
Iterative Visual Recognition for Learning Based Randomized Bin-picking
Iterative Visual Recognition for Learning Based Randomized Bin-pickingIterative Visual Recognition for Learning Based Randomized Bin-picking
Iterative Visual Recognition for Learning Based Randomized Bin-picking
 
Base Position Planning for Dual-arm Mobile Manipulators Performing a Sequence...
Base Position Planning for Dual-arm Mobile Manipulators Performing a Sequence...Base Position Planning for Dual-arm Mobile Manipulators Performing a Sequence...
Base Position Planning for Dual-arm Mobile Manipulators Performing a Sequence...
 
2014 IEEE Int. Conf. on Robotics and Automation : A Manipulation Motion Plann...
2014 IEEE Int. Conf. on Robotics and Automation : A Manipulation Motion Plann...2014 IEEE Int. Conf. on Robotics and Automation : A Manipulation Motion Plann...
2014 IEEE Int. Conf. on Robotics and Automation : A Manipulation Motion Plann...
 
Simulation in Robotics
Simulation in RoboticsSimulation in Robotics
Simulation in Robotics
 
Ros based programming and visualization of quadrotor helicopters 110090139 a...
Ros based programming and visualization of quadrotor helicopters  110090139 a...Ros based programming and visualization of quadrotor helicopters  110090139 a...
Ros based programming and visualization of quadrotor helicopters 110090139 a...
 
Utility Domestic Robot Presentation
Utility Domestic Robot PresentationUtility Domestic Robot Presentation
Utility Domestic Robot Presentation
 
ROS-Industrial Kuka LBR-iiwa community meeting
ROS-Industrial Kuka LBR-iiwa community meetingROS-Industrial Kuka LBR-iiwa community meeting
ROS-Industrial Kuka LBR-iiwa community meeting
 
Neurotic Robot
Neurotic RobotNeurotic Robot
Neurotic Robot
 
2014 IEEE Int. Symposium on System Integration (SII) : Project on Development...
2014 IEEE Int. Symposium on System Integration (SII) : Project on Development...2014 IEEE Int. Symposium on System Integration (SII) : Project on Development...
2014 IEEE Int. Symposium on System Integration (SII) : Project on Development...
 
Low cost robotic platform
Low cost robotic platformLow cost robotic platform
Low cost robotic platform
 

Similar to Modeling and Control Robot Arm using Gazebo, MoveIt!, ros_control

Robotics on Java Simplified
Robotics on Java SimplifiedRobotics on Java Simplified
Robotics on Java SimplifiedMarcus Hirt
 
Bfg Ploneconf Oct2008
Bfg Ploneconf Oct2008Bfg Ploneconf Oct2008
Bfg Ploneconf Oct2008Jeffrey Clark
 
Five Pound App talk: hereit.is, Web app architecture, REST, CSS3
Five Pound App talk: hereit.is, Web app architecture, REST, CSS3Five Pound App talk: hereit.is, Web app architecture, REST, CSS3
Five Pound App talk: hereit.is, Web app architecture, REST, CSS3Jamie Matthews
 
Build tons of multi-device JavaScript applications - Part 1 : Boilerplate, de...
Build tons of multi-device JavaScript applications - Part 1 : Boilerplate, de...Build tons of multi-device JavaScript applications - Part 1 : Boilerplate, de...
Build tons of multi-device JavaScript applications - Part 1 : Boilerplate, de...Skilld
 
[convergese] Adaptive Images in Responsive Web Design
[convergese] Adaptive Images in Responsive Web Design[convergese] Adaptive Images in Responsive Web Design
[convergese] Adaptive Images in Responsive Web DesignChristopher Schmitt
 
No instrumentation Golang Logging with eBPF (GoSF talk 11/11/20)
No instrumentation Golang Logging with eBPF (GoSF talk 11/11/20)No instrumentation Golang Logging with eBPF (GoSF talk 11/11/20)
No instrumentation Golang Logging with eBPF (GoSF talk 11/11/20)Pixie Labs
 
No instrumentation Golang Logging with eBPF (GoSF talk 11/11/20)
No instrumentation Golang Logging with eBPF (GoSF talk 11/11/20)No instrumentation Golang Logging with eBPF (GoSF talk 11/11/20)
No instrumentation Golang Logging with eBPF (GoSF talk 11/11/20)Zain Asgar
 
Platform agnostic information systems development
Platform agnostic information systems developmentPlatform agnostic information systems development
Platform agnostic information systems developmentMark Jayson Fuentes
 
企业级软件的组件化和动态化开发实践
企业级软件的组件化和动态化开发实践企业级软件的组件化和动态化开发实践
企业级软件的组件化和动态化开发实践Jacky Chi
 
前瞻性Web性能优化pwpo
前瞻性Web性能优化pwpo前瞻性Web性能优化pwpo
前瞻性Web性能优化pwpoMichael Zhang
 
Improving the performance of Odoo deployments
Improving the performance of Odoo deploymentsImproving the performance of Odoo deployments
Improving the performance of Odoo deploymentsOdoo
 
Cloudy Open Source and DevOps
Cloudy Open Source and DevOpsCloudy Open Source and DevOps
Cloudy Open Source and DevOpsMatt O'Keefe
 
Fragments: Why, How, What For?
Fragments: Why, How, What For?Fragments: Why, How, What For?
Fragments: Why, How, What For?Brenda Cook
 
Best Practices in Handling Performance Issues
Best Practices in Handling Performance IssuesBest Practices in Handling Performance Issues
Best Practices in Handling Performance IssuesOdoo
 
JRuby, Ruby, Rails and You on the Cloud
JRuby, Ruby, Rails and You on the CloudJRuby, Ruby, Rails and You on the Cloud
JRuby, Ruby, Rails and You on the CloudHiro Asari
 
Deep dive into Android async operations
Deep dive into Android async operationsDeep dive into Android async operations
Deep dive into Android async operationsMateusz Grzechociński
 
Noah Zoschke at Waza 2013: Heroku Secrets
Noah Zoschke at Waza 2013: Heroku SecretsNoah Zoschke at Waza 2013: Heroku Secrets
Noah Zoschke at Waza 2013: Heroku SecretsHeroku
 
AFUP Lorraine - Symfony Webpack Encore
AFUP Lorraine - Symfony Webpack EncoreAFUP Lorraine - Symfony Webpack Encore
AFUP Lorraine - Symfony Webpack EncoreEngineor
 
SenchaCon 2016: Handling Undo-Redo in Sencha Applications - Nickolay Platonov
SenchaCon 2016: Handling Undo-Redo in Sencha Applications - Nickolay PlatonovSenchaCon 2016: Handling Undo-Redo in Sencha Applications - Nickolay Platonov
SenchaCon 2016: Handling Undo-Redo in Sencha Applications - Nickolay PlatonovSencha
 

Similar to Modeling and Control Robot Arm using Gazebo, MoveIt!, ros_control (20)

Robotics on Java Simplified
Robotics on Java SimplifiedRobotics on Java Simplified
Robotics on Java Simplified
 
Bfg Ploneconf Oct2008
Bfg Ploneconf Oct2008Bfg Ploneconf Oct2008
Bfg Ploneconf Oct2008
 
Five Pound App talk: hereit.is, Web app architecture, REST, CSS3
Five Pound App talk: hereit.is, Web app architecture, REST, CSS3Five Pound App talk: hereit.is, Web app architecture, REST, CSS3
Five Pound App talk: hereit.is, Web app architecture, REST, CSS3
 
Build tons of multi-device JavaScript applications - Part 1 : Boilerplate, de...
Build tons of multi-device JavaScript applications - Part 1 : Boilerplate, de...Build tons of multi-device JavaScript applications - Part 1 : Boilerplate, de...
Build tons of multi-device JavaScript applications - Part 1 : Boilerplate, de...
 
[convergese] Adaptive Images in Responsive Web Design
[convergese] Adaptive Images in Responsive Web Design[convergese] Adaptive Images in Responsive Web Design
[convergese] Adaptive Images in Responsive Web Design
 
No instrumentation Golang Logging with eBPF (GoSF talk 11/11/20)
No instrumentation Golang Logging with eBPF (GoSF talk 11/11/20)No instrumentation Golang Logging with eBPF (GoSF talk 11/11/20)
No instrumentation Golang Logging with eBPF (GoSF talk 11/11/20)
 
No instrumentation Golang Logging with eBPF (GoSF talk 11/11/20)
No instrumentation Golang Logging with eBPF (GoSF talk 11/11/20)No instrumentation Golang Logging with eBPF (GoSF talk 11/11/20)
No instrumentation Golang Logging with eBPF (GoSF talk 11/11/20)
 
Platform agnostic information systems development
Platform agnostic information systems developmentPlatform agnostic information systems development
Platform agnostic information systems development
 
企业级软件的组件化和动态化开发实践
企业级软件的组件化和动态化开发实践企业级软件的组件化和动态化开发实践
企业级软件的组件化和动态化开发实践
 
前瞻性Web性能优化pwpo
前瞻性Web性能优化pwpo前瞻性Web性能优化pwpo
前瞻性Web性能优化pwpo
 
Improving the performance of Odoo deployments
Improving the performance of Odoo deploymentsImproving the performance of Odoo deployments
Improving the performance of Odoo deployments
 
Cloudy Open Source and DevOps
Cloudy Open Source and DevOpsCloudy Open Source and DevOps
Cloudy Open Source and DevOps
 
Fragments: Why, How, What For?
Fragments: Why, How, What For?Fragments: Why, How, What For?
Fragments: Why, How, What For?
 
Best Practices in Handling Performance Issues
Best Practices in Handling Performance IssuesBest Practices in Handling Performance Issues
Best Practices in Handling Performance Issues
 
JRuby, Ruby, Rails and You on the Cloud
JRuby, Ruby, Rails and You on the CloudJRuby, Ruby, Rails and You on the Cloud
JRuby, Ruby, Rails and You on the Cloud
 
Deep dive into Android async operations
Deep dive into Android async operationsDeep dive into Android async operations
Deep dive into Android async operations
 
Noah Zoschke at Waza 2013: Heroku Secrets
Noah Zoschke at Waza 2013: Heroku SecretsNoah Zoschke at Waza 2013: Heroku Secrets
Noah Zoschke at Waza 2013: Heroku Secrets
 
Struts2 in a nutshell
Struts2 in a nutshellStruts2 in a nutshell
Struts2 in a nutshell
 
AFUP Lorraine - Symfony Webpack Encore
AFUP Lorraine - Symfony Webpack EncoreAFUP Lorraine - Symfony Webpack Encore
AFUP Lorraine - Symfony Webpack Encore
 
SenchaCon 2016: Handling Undo-Redo in Sencha Applications - Nickolay Platonov
SenchaCon 2016: Handling Undo-Redo in Sencha Applications - Nickolay PlatonovSenchaCon 2016: Handling Undo-Redo in Sencha Applications - Nickolay Platonov
SenchaCon 2016: Handling Undo-Redo in Sencha Applications - Nickolay Platonov
 

Recently uploaded

Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 

Recently uploaded (20)

Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 

Modeling and Control Robot Arm using Gazebo, MoveIt!, ros_control

  • 1. Gazebo, MoveIt!, ros_control을 활용한 로봇팔 모델링 및 제어 2nd Open Robotics Seminar December 22, 2014 Byeong-Kyu Ahn (byeongkyu@gmail.com)
  • 2. ✓ Prerequisite ✓ Robot (Target) ✓ UDRF ✓ Gazebo ✓ Controller ✓ MoveIt ✓ Demo ✓ Real Robot An Overview
  • 4. Prerequisite ROS Indigo Igloo 1) Ubuntu 14.04 LTS (Trusty) Gazebo 4.1.0 2) MoveIt 3) 1) ROS Installation: http://wiki.ros.org/indigo/Installation/Ubuntu 2) Gazebo Installation: http://gazebosim.org/tutorials?tut=install&ver=4.0&cat=get_started 3) MoveIt Installation: http://moveit.ros.org/install 4) ros_control: http://wiki.ros.org/ros_control ROS control, an ove ROSCon 2014 September 12, 2014 Adolfo Rodríguez Tsouroukdissian ros_control 4)
  • 5. $ sudo apt-get install ros-indigo-moveit-* $ sudo apt-get install ros-indigo-ros-control $ sudo apt-get install ros-indigo-ros-controller $ sudo apt-get install ros-indigo-joint-state-controller $ sudo apt-get install ros-indigo-effort-controllers $ sudo apt-get install ros-indigo-position-controllers $ sudo apt-get install ros-indigo-joint-trajectory-controller Install packages for MoveIt, ros_control
  • 7. Robot 고기능 작업용 팔 항목 설명 재원 길이: 670.73mm 무게: 7.63kg 자유도 8 DoF (어깨 4, 팔꿈치 1, 손목 3) 가반하중 3.0kg 종단속도 0.6m/s 통신 CAN 전원 24V 제어방식 위치, 속도, 전류제어 - 어깨와 몸통 사이의 자유도 구현 (총 8자유도) - 외력 반응성 (Backdrivablity) 향상을 위한 저기어비 설계 (100/1) - 타이밍 벨트 및 풀리에서 생기는 마찰 및 손실 방지를 위해 모터/기어 직결모듈 방식 - 각 관절의 절대위치 인식 (엡솔루트 엔코더) - 토크 제어 (전류제어) - 외부와 접촉 시 접촉 힘 측정 및 대응 (F/T 센서 장착시) - 중공형 기어, 모터, 엔코더 사용로봇산업원천기술개발사업 - 로봇 H/W플랫폼기술 개발 (2009. 06 ~ 2011.05) Specification Characteristic
  • 8. Part별 Mass(kg) Inertia Tensor Center of Mass Separate Parts (Link) Part별 COLLADA 파일 or STL Joint 정보 회전축, 한계값 최대속도 등 알아내야 할 것들 COLLADA.org - https://collada.org http://ko.wikipedia.org/wiki/관성_모멘트
  • 9. Mass(kg) Inertia Tensor Center of Mass 설계한 사람한테 물어보기 어떻게 구하나? 직접 구하기(근사치) MeshLab - Find out inertial parameters: http://gazebosim.org/tutorials?tut=inertia&cat= Menu > Filters > Quality Measure and Computations Compute > Geometric Measures Mesh Bounding Box Size 115.100006 83.000015 85.500000 Mesh Bounding Box Diag 165.672150 Mesh Volume is 223733.125000 Mesh Surface is 126935.031250 Thin shell barycenter 14.123314 -0.036923 8.072087 Center of Mass is 8.950365 0.008595 7.867443 Inertia Tensor is : | 252065328.000000 150681.546875 -32695376.000000 | | 150681.546875 417160000.000000 -490.519348 | | -32695376.000000 -490.519348 423229216.000000 | Principal axes are : | -0.983400 0.000865 -0.181451 | | -0.000434 -0.999997 -0.002418 | | -0.181453 -0.002299 0.983397 | axis momenta are : | 246032432.000000 417160032.000000 429262048.000000 |
  • 11.
  • 12. URDF 작성 및 확인
  • 13. Adolfo Rodríguez Tsouroukdissian, “ros_control: An overview”, ROSCon 2014
  • 14. URDF : URDF Tutorial - http://wiki.ros.org/urdf/Tutorials - Build up your own robot models, sensors, scenes, etc. - XML format for representing a robot model
  • 15. <robot name="test_robot"> <link name="link1" /> <link name="link2" /> <link name="link3" /> <link name="link4" /> <joint name="joint1" type="continuous"> <parent link="link1"/> <child link="link2"/> </joint> <joint name="joint2" type="continuous"> <parent link="link1"/> <child link="link3"/> </joint> <joint name="joint3" type="continuous"> <parent link="link3"/> <child link="link4"/> </joint> </robot>
  • 16. http://wiki.ros.org/urdf/XML/linkLink <link name="my_link"> <inertial> <origin xyz="0 0 0.5" rpy="0 0 0"/> <mass value="1"/> <inertia ixx="1.0" ixy="0" ixz="0" iyy="1.0" iyz="0" izz="1.0" /> </inertial> <visual> <origin xyz="0 0 0" rpy="0 0 0" /> <geometry> <box size="1 1 1" /> </geometry> <material name="Cyan"> <color rgba="0 1.0 1.0 1.0"/> </material> </visual> <collision> <origin xyz="0 0 0" rpy="0 0 0"/> <geometry> <cylinder radius="1" length="0.5"/> </geometry> </collision> </link>
  • 17. <inertial> <origin xyz="0 0 0.5" rpy="0 0 0"/> <mass value="1"/> <inertia ixx=“1.0" ixy="0" ixz="0" iyy=“1.0" iyz="0" izz=“1.0" /> </inertial> - Center of mass (meter) - Mass (kg) - Moments of inertia (kg * m2) <visual> <origin xyz="0 0 0" rpy="0 0 0" /> <geometry> <box size="1 1 1" /> <mesh filename="package://safe_arm_meshes/meshes/link1.dae" scale="0.001 0.001 0.001" /> </geometry> <material name="Cyan"> <color rgba="0 1.0 1.0 1.0"/> </material> </visual> <collision> <origin xyz="0 0 0" rpy="0 0 0"/> <geometry> <cylinder radius="1" length="0.5"/> </geometry> </collision>
  • 18. <geometry> (required) ▪ The shape of the visual object. This can be one of the following: ▪ <box> ▪ size attribute contains the three side lengths of the box. The origin of the box is in its center. ▪ <cylinder> ▪ Specify the radius and length. The origin of the cylinder is in its center. ▪ <sphere> ▪ Specify the radius. The origin of the sphere is in its center. ▪ <mesh> ▪ A trimesh element specified by a filename, and an optional scale that scales the mesh's axis- aligned-bounding-box. The recommended format for best texture and color support is Collada .dae files, though .stl files are also supported. The mesh file is not transferred between machines referencing the same model. It must be a local file.
  • 19. http://wiki.ros.org/urdf/XML/jointJoint <joint name="my_joint" type="floating"> <origin xyz="0 0 1" rpy="0 0 3.1416"/> <parent link="link1"/> <child link="link2"/> <calibration rising="0.0"/> <dynamics damping="0.0" friction="0.0"/> <limit effort="30" velocity="1.0" lower="-2.2" upper="0.7" /> <safety_controller k_velocity="10" k_position="15" soft_lower_limit="-2.0" soft_upper_limit="0.5" /> </joint> ▪ revolute - a hinge joint that rotates along the axis and has a limited range specified by the upper and lower limits. ▪ continuous - a continuous hinge joint that rotates around the axis and has no upper and lower limits ▪ prismatic - a sliding joint that slides along the axis, and has a limited range specified by the upper and lower limits. ▪ fixed - This is not really a joint because it cannot move. All degrees of freedom are locked. This type of joint does not require the axis, calibration, dynamics, limits or safety_controller. ▪ floating - This joint allows motion for all 6 degrees of freedom. ▪ planar - This joint allows motion in a plane perpendicular to the axis.
  • 20. <transmission name="${name}_tran"> <type>transmission_interface/SimpleTransmission</type> <joint name="${name}"> <hardwareInterface>EffortJointInterface</hardwareInterface> </joint> <actuator name="${name}_motor"> <hardwareInterface>EffortJointInterface</hardwareInterface> <mechanicalReduction>1</mechanicalReduction> </actuator> </transmission> http://wiki.ros.org/urdf/XML/TransmissionTransmission actuator: actuator the transmission is connected to joint: the joint the transmission is connected to mechanicalReduction: a value for overall mechanical reduction at the joint/actuator transmission
  • 21. http://wiki.ros.org/urdf/XML/GazeboGazebo The gazebo element is an extension to the URDF robot description format, used for simulation purposes in the Gazebo simulator. <gazebo> <plugin name="gazebo_ros_control" filename="libgazebo_ros_control.so"> <robotNamespace>/safe_arm</robotNamespace> <robotSimType>gazebo_ros_control/DefaultRobotHWSim</robotSimType> </plugin> </gazebo> The default behavior provides the following ros_control interfaces: ▪ hardware_interface::JointStateInterface ▪ hardware_interface::EffortJointInterface
  • 22. http://wiki.ros.org/urdf/Tutorials/Using%20Xacro%20to%20Clean%20Up%20a%20URD http://wiki.ros.org/xacroXacro URDF 등의 XML을 작성할때 유용하게 사용할수 있는 패키지. Macro, Property, Math, Conditional 등의 기능을 지원함 <?xml version="1.0"?> <robot xmlns:xacro="http://ros.org/wiki/xacro" name="safe_arm"> <xacro:include filename="$(find safe_arm_description)/urdf/visuals.xacro" /> <xacro:include filename="$(find safe_arm_description)/urdf/safe_arm_v1_limits.xacro" /> <xacro:include filename="$(find safe_arm_description)/urdf/safe_arm_v1_structure.urdf.xacro" /> <xacro:include filename="$(find safe_arm_description)/urdf/safe_arm_v1.transmission.xacro" /> <xacro:include filename="$(find safe_arm_description)/urdf/safe_arm_v1.gazebo.xacro" /> <link name="world"/> <joint name="fixed" type="fixed"> <parent link="world"/> <child link="base_link"/> </joint> <link name="base_link" /> <link name="torso" /> <joint name="base_joint" type="fixed"> <origin xyz="0 0 1.0" rpy="0 0 0" /> <parent link="base_link" /> <child link="torso" /> </joint> <!-- Attatch Left and Right Safe Arm to Torso Link --> <xacro:safe_arm side="l" reflect="1" parent="torso" /> <xacro:safe_arm side="r" reflect="-1" parent="torso" /> </robot>
  • 23. 작성된 URDF에 대한 검증 작업 http://wiki.ros.org/urdf#Verification $ check_urdf my_robot.urdf robot name is: safe_arm ---------- Successfully Parsed XML --------------- root Link: world has 1 child(ren) child(1): base_footprint child(1): base_link child(1): torso child(1): l_shoulder_base_link child(1): l_shoulder_yaw_link child(1): l_shoulder_pitch_link child(1): l_shoulder_roll_link child(1): l_underarm_link child(1): l_elbow_pitch_link child(1): l_elbow_yaw_link child(1): l_wrist_pitch_link child(1): l_wrist_roll_link child(1): l_end_effector_link child(2): r_shoulder_base_link child(1): r_shoulder_yaw_link child(1): r_shoulder_pitch_link child(1): r_shoulder_roll_link child(1): r_underarm_link child(1): r_elbow_pitch_link child(1): r_elbow_yaw_link child(1): r_wrist_pitch_link child(1): r_wrist_roll_link child(1): r_end_effector_link $ urdf_to_graphiz my_robot.urdf world world_base_footprint_joint xyz: 0 0 0 rpy: 0 -0 0 base_footprint base_footprint_link_joint xyz: 0 0 0 rpy: 0 -0 0 base_link base_link_torso_joint xyz: 0 0 1 rpy: 0 -0 0 torso l_shoulder_base xyz: 0 0 0 rpy: 0 -0 0 r_shoulder_base xyz: 0 0 0 rpy: 0 -0 0 l_shoulder_base_link l_shoulder_yaw_joint xyz: 0 0.044 0.01 rpy: 0 -0 0 r_shoulder_base_link r_shoulder_yaw_joint xyz: 0 -0.044 0.01 rpy: 0 -0 0 base_link_torso_joint xyz: 0 0 1 rpy: 0 -0 0 torso l_shoulder_base xyz: 0 0 0 rpy: 0 -0 0 r_shoulder_base xyz: 0 0 0 rpy: 0 -0 0 l_shoulder_base_link l_shoulder_yaw_joint xyz: 0 0.044 0.01 rpy: 0 -0 0 l_shoulder_yaw_link l_shoulder_pitch_joint xyz: 0 0.0555 0 rpy: 0 -0 0 l_shoulder_pitch_link l_shoulder_roll_joint xyz: 0 0.119 0 rpy: 0 -0 0 l_shoulder_roll_link l_underarm_joint xyz: 0 0 -0.058 rpy: 0 -0 0 l_underarm_link l_elbow_pitch_joint xyz: 0.025 0 -0.24 rpy: 0 -0 0 l_elbow_pitch_link l_elbow_yaw_joint xyz: -0.025 0 -0.045 rpy: 0 -0 0 r_shoulder_base_link r_shoulder_yaw_joint xyz: 0 -0.044 0.01 rpy: 0 -0 0 r_shoulder_yaw_link r_shoulder_pitch_joint xyz: 0 -0.0555 0 rpy: 0 -0 0 r_shoulder_pitch_link r_shoulder_roll_joint xyz: 0 -0.119 0 rpy: 0 -0 0 r_shoulder_roll_link r_underarm_joint xyz: 0 0 -0.058 rpy: 0 -0 0 r_underarm_link r_elbow_pitch_joint xyz: 0.025 0 -0.24 rpy: 0 -0 0 r_elbow_pitch_link r_elbow_yaw_joint xyz: -0.025 0 -0.045 rpy: 0 -0 0
  • 24. <launch> <param name="robot_description" command="$(find xacro)/xacro.py $(find safe_arm_description)/urdf/ safe_arm_v1.urdf.xacro" /> <node pkg="robot_state_publisher" type="state_publisher" name="robot_state_publisher" /> <node pkg="joint_state_publisher" type="joint_state_publisher" name="joint_state_publisher"> <param name="use_gui" value="1" /> </node> </launch> 작성된 URDF에 대한 검증 작업 로봇의 동작 범위, 모델(Mesh) 등등 검증 $ roslaunch safe_arm_description safe_arm_publisher.launch $ rosrun rqt_rviz rqt_rviz
  • 25. http://wiki.ros.org/robot_state_publisherrobot_state_publisher /joint_states 토픽을 구독하여, /tf로 출력 robot_description 파라미터에 명시된 로 봇의 정보를 이용하여 Joint의 각도값, 링크 의 3D 포즈, 로봇의 기구학적 트리 등에 대 한 정보를 /tf로 Publish한다.
  • 26. http://wiki.ros.org/joint_state_publisherjoint_state_publisher robot_description 파 라미터에 명시된 로봇의 Joint 정보를 이용하여 Joint의 각도값을 Publish한다.
  • 27.
  • 28. Adolfo Rodríguez Tsouroukdissian, “ros_control: An overview”, ROSCon 2014
  • 30. Gazebo 3D 로봇 시뮬레이터로 다양한 종류의 물리엔진을 지원하여 동력한 시뮬레이션을 지원, 추가로 일반적으로 사용되는 센서(LRF, 카메라, Depth Sensor, 접촉센서, 힘-토크센서 등)을 지원함.
  • 31. safe_arm gazebo 실행 $ roslaunch safe_arm_bringup sim.launch <launch> <arg name="paused" default="false"/> <arg name="use_sim_time" default="true"/> <arg name="gui" default="true"/> <arg name="headless" default="false"/> <arg name="debug" default="false"/> <include file="$(find safe_arm_bringup)/launch/empty_world.launch"> <arg name="debug" value="$(arg debug)" /> <arg name="gui" value="$(arg gui)" /> <arg name="paused" value="$(arg paused)"/> <arg name="use_sim_time" value="$(arg use_sim_time)"/> <arg name="headless" value="$(arg headless)"/> </include> <param name="robot_description" command="$(find xacro)/xacro.py $(find safe_arm_description)/urdf/safe_arm_v1.urdf.xacro" /> <node name="urdf_spawner" pkg="gazebo_ros" type="spawn_model" respawn="false" output="screen" args="-urdf -model safe_arm -param robot_description"/> </launch>
  • 32. <launch> <!-- these are the arguments you can pass this launch file, for example paused:=true --> <arg name="paused" default="false"/> <arg name="use_sim_time" default="true"/> <arg name="gui" default="true"/> <arg name="headless" default="true"/> <arg name="debug" default="false"/> <arg name="verbose" default="false"/> <arg name="world_name" default="worlds/empty.world"/> <!-- Note: the world_name is with respect to GAZEBO_RESOURCE_PATH environmental variable --> <!-- set use_sim_time flag --> <group if="$(arg use_sim_time)"> <param name="/use_sim_time" value="true" /> </group> <!-- set command arguments --> <arg unless="$(arg paused)" name="command_arg1" value=""/> <arg if="$(arg paused)" name="command_arg1" value="-u"/> <arg unless="$(arg headless)" name="command_arg2" value=""/> <arg if="$(arg headless)" name="command_arg2" value="-r"/> <arg unless="$(arg verbose)" name="command_arg3" value=""/> <arg if="$(arg verbose)" name="command_arg3" value="--verbose"/> <arg unless="$(arg debug)" name="script_type" value="gzserver"/> <arg if="$(arg debug)" name="script_type" value="debug"/> <!-- start gazebo server--> <node name="gazebo" pkg="gazebo_ros" type="$(arg script_type)" respawn="false" output="screen" args="$(arg command_arg1) $(arg command_arg2) $(arg command_arg3) $(arg world_name) -e simbody" /> <!-- start gazebo client --> <group if="$(arg gui)"> <node name="gazebo_gui" pkg="gazebo_ros" type="gzclient" respawn="false" output="screen"/> </group> </launch> empty.world 기존 empty_world에서 물리엔진 선택 부분 추가
  • 33.
  • 34.
  • 35.
  • 36. Adolfo Rodríguez Tsouroukdissian, “ros_control: An overview”, ROSCon 2014
  • 39. ➔ Lower entry barrier for exposing HW to ROS ➔ Promote reuse of control code
 ➔ Provide ready-to-use tools
 ➔ Real-time ready implementation Adolfo Rodríguez Tsouroukdissian, “ros_control: An overview”, ROSCon 2014 ☐ Goal ➔ pr2_controller_manager (2009)
 - developed mainly by Willow Garage (WG) - PR2-specific
 ➔ ros_control (late 2012) - started by hiDOF, in collaboration with WG 
 - continuedbyPALRoboticsandcommunity 
 - robot-agnostic version of the pr2_controller_manager 
 ☐ History
  • 40. Adolfo Rodríguez Tsouroukdissian, “ros_control: An overview”, ROSCon 2014
  • 41. Adolfo Rodríguez Tsouroukdissian, “ros_control: An overview”, ROSCon 2014
  • 42. Controllers • effort_controllers ◦ joint_effort_controller ◦ joint_position_controller ◦ joint_velocity_controller • joint_state_controller ◦ joint_state_controller • position_controllers ◦ joint_position_controller • velocity_controllers ◦ joint_velocity_controllers • Joint Command Interfaces ◦ Effort Joint Interface ◦ Velocity Joint Interface ◦ Position Joint Interface • Joint State Interfaces • Actuator State Interfaces • Actuator Command Interfaces ◦ Effort Actuator Interface ◦ Velocity Actuator Interface ◦ Position Actuator Interface • Force-torque sensor Interface • IMU sensor Interface Hardware Interfaces !! You can of course create your own
  • 43. <?xml version="1.0"?> <robot xmlns:xacro="http://ros.org/wiki/xacro"> <xacro:macro name="insert_transmission" params="name"> <transmission name="${name}_tran"> <type>transmission_interface/SimpleTransmission</type> <joint name="${name}"> <hardwareInterface>EffortJointInterface</hardwareInterface> </joint> <actuator name="${name}_motor"> <hardwareInterface>EffortJointInterface</hardwareInterface> <mechanicalReduction>1</mechanicalReduction> </actuator> </transmission> </xacro:macro> </robot> safe_arm_v1.transmission.xacro <xacro:insert_transmission name="${side}_shoulder_yaw_joint" />
  • 44. safe_arm: joint_state_controller: type: joint_state_controller/JointStateController publish_rate: 100 safe_arm_joint_state.yaml <launch> <rosparam file="$(find safe_arm_control)/config/safe_arm_joint_state.yaml" command="load"/> <node name="joint_controller_spawner" pkg="controller_manager" type="spawner" respawn="false" output="screen" ns="/safe_arm" args="joint_state_controller" /> <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" respawn="false" output="screen"> <remap from="/joint_states" to="/safe_arm/joint_states" /> </node> </launch> safe_arm_joint_state_controller.launch std_msgs/Header header string[] name float64[] position float64[] velocity float64[] effort sensor_msgs/JointState Message
  • 45. safe_arm: l_arm_joint_controller: type: "effort_controllers/JointTrajectoryController" joints: - l_shoulder_yaw_joint - l_shoulder_pitch_joint - l_shoulder_roll_joint - l_underarm_joint - l_elbow_pitch_joint - l_elbow_yaw_joint - l_wrist_pitch_joint - l_wrist_roll_joint gains: l_shoulder_yaw_joint: {p: 1500.0, i: 0.01, d: 0.1, i_clamp: 1000} l_shoulder_pitch_joint: {p: 1500.0, i: 0.01, d: 0.1, i_clamp: 1000} l_shoulder_roll_joint: {p: 1500.0, i: 0.01, d: 0.1, i_clamp: 1000} l_underarm_joint: {p: 1500.0, i: 0.01, d: 0.1, i_clamp: 1000} l_elbow_pitch_joint: {p: 1500.0, i: 0.01, d: 0.1, i_clamp: 1000} l_elbow_yaw_joint: {p: 1500.0, i: 0.01, d: 0.1, i_clamp: 1000} l_wrist_pitch_joint: {p: 1500.0, i: 0.01, d: 0.1, i_clamp: 1000} l_wrist_roll_joint: {p: 1500.0, i: 0.01, d: 0.1, i_clamp: 1000} safe_arm_l_control.yaml <launch> <rosparam file="$(find safe_arm_control)/config/safe_arm_l_control.yaml" command="load"/> <node name="l_controller_spawner" pkg="controller_manager" type="spawner" respawn="false" output="screen" ns="/safe_arm" args="l_arm_joint_controller"/> </launch> safe_arm_l_controller.launch
  • 46. safe_arm: r_arm_joint_controller: type: "effort_controllers/JointTrajectoryController" joints: - r_shoulder_yaw_joint - r_shoulder_pitch_joint - r_shoulder_roll_joint - r_underarm_joint - r_elbow_pitch_joint - r_elbow_yaw_joint - r_wrist_pitch_joint - r_wrist_roll_joint gains: r_shoulder_yaw_joint: {p: 1000.0, i: 0.05, d: 0.1, i_clamp: 1000} r_shoulder_pitch_joint: {p: 1000.0, i: 0.05, d: 0.1, i_clamp: 1000} r_shoulder_roll_joint: {p: 1000.0, i: 0.05, d: 0.1, i_clamp: 1000} r_underarm_joint: {p: 1000.0, i: 0.05, d: 0.1, i_clamp: 1000} r_elbow_pitch_joint: {p: 1000.0, i: 0.05, d: 0.1, i_clamp: 1000} r_elbow_yaw_joint: {p: 1000.0, i: 0.05, d: 0.1, i_clamp: 1000} r_wrist_pitch_joint: {p: 1000.0, i: 0.05, d: 0.1, i_clamp: 1000} r_wrist_roll_joint: {p: 1000.0, i: 0.05, d: 0.1, i_clamp: 1000} safe_arm_r_control.yaml <launch> <rosparam file="$(find safe_arm_control)/config/safe_arm_r_control.yaml" command="load"/> <node name="r_controller_spawner" pkg="controller_manager" type="spawner" respawn="false" output="screen" ns="/safe_arm" args="r_arm_joint_controller"/> </launch> safe_arm_r_controller.launch
  • 47. safe_arm_bringup/bringup.launch <launch> <include file="$(find safe_arm_bringup)/launch/safe_arm_sim.launch" /> <include file="$(find safe_arm_control)/launch/safe_arm_joint_state_controller.launch" /> <include file="$(find safe_arm_control)/launch/safe_arm_l_controller.launch" /> <include file="$(find safe_arm_control)/launch/safe_arm_r_controller.launch" /> </launch>
  • 48.
  • 49. Adolfo Rodríguez Tsouroukdissian, “ros_control: An overview”, ROSCon 2014
  • 51. MoveIt MoveIt! is state of the art software for mobile manipulation, incorporating the latest advances in motion planning, manipulation, 3D perception, kinematics, control and navigation http://www.youtube.com/watch?v=dblCGZzeUqs
  • 53. MoveIt Setup Assistant http://docs.ros.org/hydro/api/moveit_setup_assistant/html/doc/tutorial.html MoveIt와 로봇과의 연동을 위한 환경설정 GUI 결과물로 각종 MoveIt 패키지와 SRDF(Semantic Robot Description Format) 생성 $ roslaunch moveit_setup_assistant setup_assistant.launch
  • 54. MoveIt과 연동할 로봇의 URDF를 불러옴. XACRO로 되어 있어도 무방 정상적으로 불러온 것을 확인
  • 55. Sampling Density를 최대값으로 올리고, 모델 링크간의 충돌에 대한 매트릭스 생성
  • 56. 외부환경과 로봇과의 연결을 위한 가상 조인트(고정) 생성
  • 57. Planning 그룹 설정. safe_arm의 경우, 왼쪽과 오른쪽 팔 두개의 Planning 그룹을 생성함
  • 58. 왼쪽팔에 대한 조인트 그룹, 링크 그룹, Kinematic Chain을 설정해 준다.
  • 59. 왼쪽팔에 대한 조인트 그룹, 링크 그룹, Kinematic Chain을 설정해 준다. 오른쪽 팔에 대해서도 같은 방법으로 설정
  • 60. 로봇의 기본 자세 (Homing Position, Ready, etc)를 만들어준다. (선택사항)
  • 61. 마지막으로 catkin workspace 내에 패키지가 저장될 곳을 선택한 후, 패키지 생성 완료
  • 62. MoveIt Setup에 대한 검증 $ roslaunch safe_arm_moveit_config demo.launch
  • 63.
  • 64. MoveIt과 Gazebo와의 연동을 위한 추가 작업 MoveIt Config 패키지 저장 장소가 ~/catkin_ws/src/safe_arm_moveit_config라고 가정 MoveIt Controller Manager 설정 safe_arm_moveit_config/config/controllers.yaml 파일 생성 controller_list: - name: "safe_arm/l_arm_joint_controller" action_ns: follow_joint_trajectory type: FollowJointTrajectory joints: - l_shoulder_yaw_joint - l_shoulder_pitch_joint - l_shoulder_roll_joint - l_underarm_joint - l_elbow_pitch_joint - l_elbow_yaw_joint - l_wrist_pitch_joint - l_wrist_roll_joint - name: "safe_arm/r_arm_joint_controller" action_ns: follow_joint_trajectory type: FollowJointTrajectory joints: - r_shoulder_yaw_joint - r_shoulder_pitch_joint - r_shoulder_roll_joint - r_underarm_joint - r_elbow_pitch_joint - r_elbow_yaw_joint - r_wrist_pitch_joint - r_wrist_roll_joint ros_control 설정시 보았던 controller의 이름과 Joint 리스트를 적어줌.
  • 65. <launch> <!-- Set the param that trajectory_execution_manager needs to find the controller plugin --> <arg name="moveit_controller_manager" default="moveit_simple_controller_manager/MoveItSimpleControllerManager" /> <param name="moveit_controller_manager" value="$(arg moveit_controller_manager)"/> <!-- load controller_list --> <arg name="use_controller_manager" default="true" /> <param name="use_controller_manager" value="$(arg use_controller_manager)" /> <!-- Load joint controller configurations from YAML file to parameter server --> <rosparam file="$(find safe_arm_moveit_config2)/config/controllers.yaml"/> </launch> safe_arm_moveit_config/config/safe_arm_moveit_controller_manager.launch.xml 파일 수정
  • 67. <launch> <include file="$(find safe_arm_bringup)/launch/safe_arm_sim.launch" /> <include file="$(find safe_arm_control)/launch/safe_arm_joint_state_controller.launch" /> <include file="$(find safe_arm_control)/launch/safe_arm_l_controller.launch" /> <include file="$(find safe_arm_control)/launch/safe_arm_r_controller.launch" /> <include file="$(find safe_arm_moveit_config)/launch/move_group.launch" /> <include file="$(find safe_arm_moveit_config)/launch/moveit_rviz.launch"> <arg name="config" value="true" /> </include> <include file="$(find safe_arm_moveit_config)/launch/default_warehouse_db.launch" /> </launch> $ roslaunch safe_arm_bringup bringup.launch safe_arm_bringup/launch/bringup.launch Demo
  • 68.
  • 69. Real Robot? Adolfo Rodríguez Tsouroukdissian, “ros_control: An overview”, ROSCon 2014