본문 바로가기

개인 프로젝트

2021-2+ Moveit!입문 #3 ros_control

반응형

[Moveit! 공부3]

 

2.5~2.6 ros_control

ros_control이 무엇인지는 읽어봤는데 솔직히 어려웠다.

 

 

구글링을 해서 읽어봐도 와닿지 않았다. 일단은 중간에서 HW(실제 로봇이나 gazebo상의 시뮬레이션)으로 ros의 명령을 전달해주는 역할 정도로 이해했다.(정확 X)

 

 

 

 

●일단은 강의에 있는 launch 코드와 yaml을 내 ros_arm에 맞게 수정했다.

 

 

추가로 강의에선 robot_description 패키지와 launch파일의 패키지가 구분되어 있는 거 같은데 일단 나는 익숙한 대로 모두 한 패키지 안에서 구성했다.

#launch 파일


<launch>

  <include file="$(find gazebo_ros)/launch/empty_world.launch"/>
  <arg name="model" default="$(find ros_arm)/urdf/ros_arm.urdf.xacro"/>
  <param name="robot_description" command="$(find xacro)/xacro $(arg model)"/>
  <node name="spawn_urdf" pkg="gazebo_ros" type="spawn_model" args="-param robot_description -x 0    -y 0 -z 0 -urdf -model ros_arm"/>
  <node pkg="robot_state_publisher" type="robot_state_publisher" name="robot_state_publisher"/>     
  <rosparam file="$(find ros_arm)/config/controllers.yaml" command="load"/>
  <node name="controller_spawner" pkg="controller_manager" type="spawner" respawn="true"   
  output="screen" args=" joint_state_controller arm_controller "/>

</launch>

 

#controllers.yaml 파일


joint_state_controller:
  type: joint_state_controller/JointStateController
  publish_rate: 20

arm_controller:
  type: position_controllers/JointTrajectoryController
  joints: - motor_1 - motor_2 - motor_3
  constraints: goal_time: 0.6
  stopped_velocity_tolerance: 0.05
  motor_1: {trajectory: 0.1, goal: 0.1}
  motor_2: {trajectory: 0.1, goal: 0.1}
  motor_3: {trajectory: 0.1, goal: 0.1}
  stop_trajectory_duration: 0.5
  state_publish_rate: 25
  action_monitor_rate: 10

#end_effector_controller:         (추후 추가될 end_effector 부분 주석 처리)
# type: position_controllers/JointPositionController
# joint: finger_joint

 

일단 위처럼 구성 후 실행하니 잘 작동했다. 

 

 

●확실히 rviz로 움직이는 것보다 gazebo로 움직이는 게 좀 더 현실적으로 움직인다.

 

 

다만 오직 link와 ground(world)와의 충돌만 있고 link끼리는 충돌하지 않았다. 이 부분도 추가로 알아봐야겠다.

 

 

 

 

 

 

 

2.7 RobotHW를 이용해 ros_control과 실제 로봇을 연결해보기

●이 부분은 내가 c++에 대한 지식이 부족해서 전부 이해하진 못했다.

 

 

대신 추후 내가 ros_arm을 실제로 만든 후 ros_control로 그 실제 로봇을 어떻게 연결하는지를 알 수 있었다.

 

 

강의에선 로봇을 만들지 않고 가상의 로봇(dummy robot)을 만들어 명령어가 전달되는가만 확인한 것 같다.

 

 

 

 

 

 

추가 공부 사항

1. JointTrajectoryController를 쓴 이유와 그 외에 무엇이 있는지

 

2. constraints: goal_time은 무엇인지

 

3. trajectory와 goal의 값은 무엇인지를 강의를 끝낸 후 추가적으로 더 공부하자

 

4. gazebo상에서 움직일 때 world와는 충돌이 있는데 link끼리는 충돌하지 않는다. 이 부분도 알아보자

      └2021-2 #6에서 해결

 

5. gazebo상에서는 urdf의 색깔이 정상적으로 나오지 않음

      └2021-2 #6에서 해결

 

 

 

 

 

 

========================================================================

정확한 정보 전달보단 공부 겸 기록에 초점을 둔 글입니다.

틀린 내용이 있을 수 있습니다.

틀린 내용이나 다른 문제가 있으면 댓글에 남겨주시면 감사하겠습니다.   : )

========================================================================

반응형