한 2달 전부터, 이직한 직장에서 개발(을 빙자한 학습) 중인 로봇 제어입니다.
moveit_servo를 이용해서 로봇을 움직이는 거구요.
원래 moveit에는 move_group 노드가 있어서 여기에 로봇의 위치를 적어주면 움직이게 되어있는데,
이게 가까운 위치여도 경로제한이 없으면 엉뚱하게 움직이거든요.
그렇다고 경로제약을 켜자니, 이게 버그가 많아 쓰기가 애매합니다.
(데모 로봇 예제에서도 제대로 동작 안합니다. 이제 오픈소스라고 업데이트를 안해주는 건가 싶고.. 심지어 unstable 버전에서도 오락가락합니다.)
다행히 문서 상에 실시간 제어에는 moveit_servo 패키지를 사용하는 걸 추천하다고 하여 다시 스터디를 했습니다.
개발에 쓰고 있는(연습용) ur_robot_driver안에 moveit_servo를 실행시키는 servo_node가 포함이 되어있어서
moveit_servo를 실행하는 건 문제가 없었고요.
원래 로봇 제어에 쓰고 있는 scaled_joint_trajectory_contoller가 moveit_servo에 사용하는 forward_position_controller와 충돌이 나는지, 이 둘을 동시에 쓸 수는 없더라구요.
그래서 둘을 스위칭해주고 테스트를 진행하니 다행히 로봇이 잘 움직였습니다.
이 역시 코드로 제어가 가능한 부분이여서, 외부 제어 수단으로 움직일 때는 forward_position_controller를 활성화 시키고
내부적으로 움직일 땐 scaled_joint_trajectory_controller를 쓰게 해주면 될 거 같네요.
슬슬 ros2로 로봇을 움직이는 방법에 대해 알아가는 거 같아서 기쁩니다만, 움직이다보면 또 무슨 함정이 저를 괴롭힐까
무섭기도 합니다...
그래도 오늘 로봇을 움직이는데 성공하여 기쁜 마음에 올려봅니다.