** Dynamixel로 구성된 로봇 팔들을 ROS2 Control을 이용해서 MoveIt2에서 직접 제어**
문제:
안녕하세요, Dynamixel로 연결된 한쪽 팔에 대해서 MoveIt 프레임워크를 통해서 특정 동작 수행을 하려고 하고 있습니다. URDF 모델링 파일과, SRDF 모델링 파일 및 기본 config 설정 파일을 만들어서 Rviz 화면상에서는 모션 플랜과 실행(plan, execute)이 되는 것을 확인할 수 있는데요
실행시 Rviz 화면상이 아닌 실제 로봇에 control 값이 적용 되도록 프로젝트를 구축하고 싶습니다.
대표적으로, ROS2 Control과 Dynamixel Hardware Interface를 이용해서 만들려고 하는데요
When I created the package, I followed this order: Description → MoveIt Config → Bringup (Gazebo → Hardware) → Teleop
From what you’ve mentioned, it seems that you’ve completed the MoveIt Config setup.
I suggest creating the Gazebo and ROS2 Control files inside the description folder and then proceeding with the bringup process.
저희가 비슷한 상황일 때 kinematics.yaml 파일 내부 kinematics_solver를 다양한 플러그인들로 수정해 보며 가장 잘 작동하는 것을 선정했습니다. plugin 종류는 외부에서 찾거나 moveit_setup_assistant 에서 planning group 설정할 때 확인하실 수 있습니다.
또 다음 코드처럼 Tolerance를 넉넉히 설정하는것도 도움이 될 수 있습니다.
위 방법들을 시도해보시고 잘되는 다른 방법을 찾으신다면 저희에게도 알려주세요!!
감사합니다.
Hello,
Congratulations on getting the robotic arm to move!
For issues with inverse kinematics not solving correctly, I recommend modifying the kinematics.yaml file.
When we encountered a similar situation, we experimented with different kinematics_solver plugins inside the kinematics.yaml file and selected the one that worked best.
You can find available plugins externally or check them when setting up the planning group in MoveIt Setup Assistant.
Additionally, increasing the Tolerance value, as shown in the following code, might help: Example Code - Hello MoveIt
Try these approaches, and if you discover a better solution, please let us know!
target으로 joint values를 넣었을 때 플래닝이 잘 되는 것을 참고해 봤을 때 ompl_planning.yaml 내 파라미터 변경은 상관이 없을까요???
추가로, Rviz에서도 Show Working Space를 보았을 때 2m로 나오는 데 이부분은 단순 Rviz 설정 값일지요
제가 적용한 파라미터 는 다음과 같습니다.
Planner cpp 코드 내
void MotionPlanner::setParameter(){
// move_group_interface_.setPlannerId("RRTConnect"); // 더 빠른 탐색을 위해 RRTConnect 사용
move_group_interface_.setWorkspace(-10.0, -10.0, -10.0, 10.0, 10.0, 10.0);
move_group_interface_.setPlanningTime(10.0); // 플래닝 시간이 충분한지 확인
move_group_interface_.setNumPlanningAttempts(100); // 더 많은 시도를 허용
move_group_interface_.allowReplanning(true); // 재계획(Replanning) 활성화
move_group_interface_.setGoalPositionTolerance(0.3);
move_group_interface_.setGoalOrientationTolerance(3.14);
}