Difference in trajectory Execution between MoveIt and Real Robot
Hi,
I'm using YuMi with MoveIt (OMPL, RRTstar) python interface through my own script to move ABB YuMi IRB14000, but the visualized trajectory seems to be different from the actual one which has led to a collision
.
My setup is : ros-noetic, abb-robot-driver, ros_control: JointTrajectoryController/velocity_controller
Can you please tell me what is the possible cause/s of this odd behavior, and how can I possibly avoid it? thanks in advance.
Note that: I have modified the following files in abb_robot_driver
to work with MoveIt
ex3_controllers.yaml
joint_state_controller:
type: joint_state_controller/JointStateController
publish_rate: 250
egm_state_controller:
type : abb_egm_state_controller/EGMStateController
publish_rate : 250
jnt_traj_vel_controller:
type: velocity_controllers/JointTrajectoryController
joints:
- yumi_robl_joint_1
- yumi_robl_joint_2
- yumi_robl_joint_3
- yumi_robl_joint_4
- yumi_robl_joint_5
- yumi_robl_joint_6
- yumi_robl_joint_7
- yumi_robr_joint_1
- yumi_robr_joint_2
- yumi_robr_joint_3
- yumi_robr_joint_4
- yumi_robr_joint_5
- yumi_robr_joint_6
- yumi_robr_joint_7
constraints:
stopped_velocity_tolerance: 0
gains:
yumi_robl_joint_1: {p: 1.0, i: 0, d: 0.00, i_clamp: 0.1}
yumi_robl_joint_2: {p: 1.0, i: 0, d: 0.00, i_clamp: 0.1}
yumi_robl_joint_3: {p: 1.0, i: 0, d: 0.00, i_clamp: 0.1}
yumi_robl_joint_4: {p: 1.0, i: 0, d: 0.00, i_clamp: 0.1}
yumi_robl_joint_5: {p: 1.0, i: 0, d: 0.00, i_clamp: 0.1}
yumi_robl_joint_6: {p: 1.0, i: 0, d: 0.00, i_clamp: 0.1}
yumi_robl_joint_7: {p: 1.0, i: 0, d: 0.00, i_clamp: 0.1}
yumi_robr_joint_1: {p: 1.0, i: 0, d: 0.00, i_clamp: 0.1}
yumi_robr_joint_2: {p: 1.0, i: 0, d: 0.00, i_clamp: 0.1}
yumi_robr_joint_3: {p: 1.0, i: 0, d: 0.00, i_clamp: 0.1}
yumi_robr_joint_4: {p: 1.0, i: 0, d: 0.00, i_clamp: 0.1}
yumi_robr_joint_5: {p: 1.0, i: 0, d: 0.00, i_clamp: 0.1}
yumi_robr_joint_6: {p: 1.0, i: 0, d: 0.00, i_clamp: 0.1}
yumi_robr_joint_7: {p: 1.0, i: 0, d: 0.00, i_clamp: 0.1}
ex3_rws_and_egm_yumi_robot.launch
<node pkg="controller_manager" type="spawner" name="stopped" args="--stopped jnt_traj_vel_controller"/>
and here is my launch file:
and my launch file moveit_planning_execution.launch
looks like this:
<launch>
<!-- the "sim" argument controls whether we connect to a Simulated or Real robot -->
<!-- - if sim=false, a robot_ip argument is required -->
<arg name="sim" default="false" doc="Use industrial robot simulator instead of real robot" />
<arg name="robot_ip" unless="$(arg sim)" value="192.168.125.1" doc="IP of controller (only required if not using industrial simulator)" />
<!-- By default, we do not start a database (it can be large) -->
<arg name="db" default="false" doc="Start the MoveIt database" />
<!-- Allow user to specify database location -->
<arg name="db_path" default="$(find yumi_moveit_config)/default_warehouse_mongo_db" doc="Path to database files" />
<!-- load the robot_description parameter before launching ROS-I nodes -->
<include file="$(find yumi_moveit_config)/launch/planning_context.launch" >
<arg name="load_robot_description" value="true" />
</include>
<!-- run the robot simulator and action interface nodes -->
<group if="$(arg sim)">
<include file="$(find industrial_robot_simulator)/launch/robot_interface_simulator.launch" />
</group>
<!-- run the "real robot" interface nodes -->
<!-- - this typically includes: robot_state, motion_interface, and joint_trajectory_action nodes -->
<!-- - replace these ...
I don't have an answer, but I'm wondering whether you feel you've provided sufficient information.
It's really difficult to see what's going on in the
.gif
, whether it shows what is supposed to happen or not and what you observed. Additionally, you don't explain what you were doing, what happened exactly and how you were trying to do what you were trying to do (ie: used RViz with the MoveIt Motion Planning plugin, wrote your own scripts, something else, etc).I'd recommend to provide more information, as I don't expect anyone to be able to give any insightful answers like this.
If your code ran the RRT* planner a second time to move the physical arm, there is no guarantee that the plan is anything like the first one.
@MikeScheutzow do you think that
movegroup.allow_replanning(False)
might solve this problem? or should I do further steps?@gvdhoorn
I have edited the question, and still not sure if the provided info represents a minimal reproducible example, but I'm not sure which extra info should I provide.
The
.gif
shows the planned trajectory (what was supposed to happen) and the collision state (what actually happened) during the actual execution with a real robot.I was using executing a joint-space movement using MoveIt-API in python and added a table object to the scene., the visualization RViz, and MoveIt, but I'm using my python script to do the interfacing with MoveIt instead of the RViz GUI interface.
You have another problem to handle: unless something has changed,
moveit
does not do collision checking when executing a Joint Trajectory path. There is a method you can call to check a particular set of joint values for collision in the scene, but it's up to you to call it periodically and stop the arm if there is a problem.Regarding your question above, I don't know the semantics of
allow_replanning()
.