본문 바로가기

개인 프로젝트

2021-2+ Moveit!입문 #4 Moveit!-1

반응형

[Moveit! 공부4]

 

3.6 Moveit!소개

●일단 Moveit!을 잘못 이해하고 있던 게 나는 모든 로봇에 대해 기구학, 역기구학 계산, planning등을 해주는 것으로 알고 있었는데 사실은 로봇팔, manipulator 한정으로 가능한 것이었다.

 

 

●팔의 컨트롤을 기구학, 역기구학 계산으로 매우 쉽게 할 수 있고 그에 따른 링크 간 충돌 등도 함께 확인할 수 있다.

 

 

●카메라의 정보도 활용 가능하다.(처음 알았다, 이후 좀 더 알아봐야겠다.)

 

 

 

 

 

 

3.7~ 

●표 박사님 강의 때는 실패했는데 이번에는 제대로 만들고 성공했다.

 

 

이전에도 애먹던 것 중 하나가 패키지 경로를 어떻게 하는가 였는데 원래 패키지 안네가 아닌 밖에 새로운 패키지를 만드는 것이 맞는 것이었다.

 

 

 

+) 강의 블로그에서 알려준 실행 명령어 3개 중 마지막 것이 잘못된 거 같다. 강의 블로그대로 실행하면 moveit.rviz를 정상적으로 불러오지 않아 rviz에 MotionPlanning 등의 탭이 열리지 않고 그냥 기본 rviz창이 열리게 된다.

 

마지막 코드를 다음과 같이 입력해야 할거 같다.

 

$ roslaunch ros_arm_moveit moveit_rviz.launch rviz_config:=$(rospack find ros_arm_moveit)/launch/moveit.rviz

 

블로그에는 rospack 부분을 따옴표 ' '로 묶고 앞에 $가 빠져있다.

 

 

 

 

●일단은 demo로 테스트는 잘 된다. 다만 자유도가 부족해서 인지 커서를 움직이는 게 제약이 좀 있었다. motor1은 아예 안 움직여졌고 좌측의 joint 탭으로 움직일 수 있었다. 더 배워야 할 거 같지만 이 ros_arm으로 직선 이동(motor1의 회전 접선방향?)을 하려면 추가적인 작업이 필요할 거 같다.

 

 

●그냥 움직이면 역기구학 분석을 엄밀하게(?)해서 정확한 움직임이 가능한 대신 제약이 많이 걸리는데 Planning 탭의 Approx IK soulution(근사 역기구학 해) 옵션을 체크하면 엄밀해가 아닌 근사해로 역기구학 계산을 시행해서 정확도가 조금 떨어지는 대신 움직임이 비교적 자유로워졌다.

 

 

●rviz상은 가상의 로봇이고 gazebo(실제 로봇의 시뮬레이션)을 연동해서 할 수도 있다. gazebo를 나중에 실제 제작한 로봇으로 치환하면 되는 것 같다.

 

 

●강의대로 잘 진행하다가 한 오류가 발생했었다. Gazebo, Moveit, Rviz를 실행시킨 후 ros_arm을 움직이고 plan > execute를 하면 failed가 나오고 다음의 오류가 떴다.

 

[ERROR] [1641109969.933593902, 73.277000000]: Unable to identify any set of controllers that can actuate the specified joints: [ motor_1 motor_2 motor_3 motor_4 ]
[ERROR] [1641109969.933619673, 73.277000000]: Known controllers and their joints:

 

또 이거 오류 해결하느라 구글링 하고 책 뒤져가면서 이틀을 보냈다.

 

 

여러 질문글이나 블로그를 보니 이 문제가 상당히 많이 발생했지만 정확하게 해결해주는 글을 없었다.

 

 

다만 모든 글이 원래 패키지의 controllers.yaml 이나 moveit으로 만든 패키지의 ros_controllers.yaml을 건드는 방향으로 설명하고 있었다.

 

 

거의 모든 글을 따라 해 봤지만 안됐었다.

 

 

그래도 결국에는 해결책을 찾았다.

 

https://ros-planning.github.io/moveit_tutorials/doc/gazebo_simulation/gazebo_simulation.html#after-moveit-setup-assistant

 

Gazebo Simulation Integration — moveit_tutorials Noetic documentation

Gazebo is the most popular robotics simulator in the ROS ecosystem, so is naturally a good fit to integrate with MoveIt. The MoveIt Setup Assistant helps setup your robot to work with Gazebo, but there are still additional steps required to successfully ru

ros-planning.github.io

 

Moveit! 의 Tutorial/Gazebo Simulation Integration에서 ros_controllers.yaml 양식을 가져다가 수정해서 적용하니 잘 작동했다.

 

 

역시 공식 사이트가 자료가 가장 좋은 거 같다.

<ros_controllers.yaml>


moveit_sim_hw_interface:
    joint_model_group: arm
    joint_model_group_pose: initial

generic_hw_control_loop:
    loop_hz: 300
    cycle_time_error_threshold: 0.01

hardware_interface:
    joints:
        - motor_1
        - motor_2
        - motor_3
        - motor_4
    sim_control_mode: 0 # 0: position, 1: velocity
# Publish all joint states
# Creates the /joint_states topic necessary in ROS

joint_state_controller:
    type: joint_state_controller/JointStateController
    publish_rate: 50

arm_controller:
    type: postition_controllers/JointTrajectoryController
    joints:
        - motor_1
        - motor_2
        - motor_3
        - motor_4
        gains:
        goal_time: 2.0
    state_publish_rate: 25

controller_list:
    -name: arm_controller
     action_ns: follow_joint_trajectory
     type: FollowJointTrajectory
     default: true
     joints:
        - motor_1
        - motor_2
        - motor_3
        - motor_4

 

rivz에서 이동시킨대로 가상의 로봇(gazebo)가 움직인다.

 

●만약 gazebo가 움직이는 게 너무 느리다면 velocity scaling과 accel scaling을 높여주면 된다. 

 

 

●여기까지 해보니 한 가지 생각이 든 게 rviz상에서 ros_arm을 움직이는 커서? 가 end_pin의 pin 끝이 아닌 motor_4와의 접하는 부분에 있어서 실제 역기구학 계산에서 자유도가 적게 적용되지 않았나 하는 생각이 들었다.

 

 

그래서 end_pin끝에 가짜 link를 하나 추가해서 urdf와 moveit을 다시 해보았다.

 

 

결론부터 말하면 크게 바뀐 거는 없었다. 그래도 저 끝의 커서가 끝의 link에 생기는 것이 아닌 group상의 마지막 joint에 생기는 것임을 찾을 수는 있었다.

 

 

추가로 만약 저 커서가 너무 작게 나오면 Planning Request > Interactive Marker Size를 바꿔주면 된다. 이 Size는 %가 아닌 urdf와 같은 m(meter) 단위이다.

 

 

이후 강의를 몇 개 대충 보니까 tool 등을 추가하는 등 다른 기능이 또 있는 거 같다.

 

 

강의대로 계속하면 되겠다.

 

 

오류가 계속 나던 거를 방법을 찾고 해결하니 기분이 진짜 좋았다. ㅎ

 

 

 

 

 

 

 

 

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

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

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

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

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

반응형