Comments (17)
For both of you: did you follow the installation and setup tutorials?
from abb.
@gavanderhoorn : Yes ,I followed the same procedure only.
from abb.
Please describe exactly how you are starting the programs on the robot, in what mode it is, what you do with the TP after having started the programs, etc.
Also: please verify that you've correctly configured all programs on the controller.
A robot not moving is typically caused by the robot being in Manual mode but you're not holding the enabling device or because the tasks have not been correctly configured.
from abb.
We repeated the entire procedure with an older version of the same package https://github.com/arjunskumar/ABB-IRB-1200 and this worked.
from abb.
As that is not a fork, it's inconvenient for me to compare the two.
Could I ask you to compare the contents of abb_driver
in arjunskumar
repository and the one in ros-industrial/abb_driver
? Perhaps that will provide a clue.
from abb.
There are not too many changes between those two versions, mainly the addition of the external axes support and a hard-coded IP (192.168.125.5
) which I expect you had to change:
18c18
< <arg name="robot_ip" doc="IP of the controller"/>
---
> <arg name="robot_ip" />
21c21
< <arg name="J23_coupled" default="false" doc="If true, compensate for J2-J3 parallel linkage" />
---
> <arg name="J23_coupled" default="false" />
diff -Nr abb/abb_driver/package.xml ABB-IRB-1200/abb_driver/package.xml
16,17c16,17
< <author>Shaun Edwards</author>
< <maintainer email="[email protected]">Levi Armstrong (Southwest Research Institute)</maintainer>
---
> <author email="[email protected]">Shaun Edwards</author>
> <maintainer email="[email protected]">Shaun Edwards</maintainer>
diff -Nr abb/abb_driver/rapid/ROS_common.sys ABB-IRB-1200/abb_driver/rapid/ROS_common.sys
33d32
< extjoint extax_pos;
diff -Nr abb/abb_driver/rapid/ROS_messages.sys ABB-IRB-1200/abb_driver/rapid/ROS_messages.sys
44d43
< extjoint ext_axes;
53d51
< extjoint ext_axes;
112,118c110,113
< UnpackRawBytes raw_message.data, 29, message.ext_axes.eax_a, \Float4;
< UnpackRawBytes raw_message.data, 33, message.ext_axes.eax_b, \Float4;
< UnpackRawBytes raw_message.data, 37, message.ext_axes.eax_c, \Float4;
< UnpackRawBytes raw_message.data, 41, message.ext_axes.eax_d, \Float4;
< UnpackRawBytes raw_message.data, 45, message.velocity, \Float4;
< UnpackRawBytes raw_message.data, 49, message.duration, \Float4;
<
---
> ! Skip bytes 29-44. UNUSED. Reserved for Joints 7-10. TBD: copy to extAx?
> UnpackRawBytes raw_message.data, 29+(ROS_MSG_MAX_JOINTS-6)*4, message.velocity, \Float4;
> UnpackRawBytes raw_message.data, 33+(ROS_MSG_MAX_JOINTS-6)*4, message.duration, \Float4;
>
121d115
< message.ext_axes := m2mm_extjoint(message.ext_axes);
131d124
< VAR extjoint ROS_ext_axes;
141d133
< ROS_ext_axes := mm2m_extjoint(message.ext_axes);
151,154c143,145
< PackRawBytes ROS_ext_axes.eax_a, raw_message.data, 29, \Float4;
< PackRawBytes ROS_ext_axes.eax_b, raw_message.data, 33, \Float4;
< PackRawBytes ROS_ext_axes.eax_c, raw_message.data, 37, \Float4;
< PackRawBytes ROS_ext_axes.eax_d, raw_message.data, 41, \Float4;
---
> FOR i FROM 1 TO ROS_MSG_MAX_JOINTS-6 DO ! Insert placeholders for joints 7-10 (message expects 10 joints)
> PackRawBytes 0, raw_message.data, 25+i*4, \Float4;
> ENDFOR
164,192d154
< ENDFUNC
<
< LOCAL FUNC num connected_eax(num eax)
< ! The value 9E9 is defined for axes which are not connected
< IF eax <> 9E9 THEN
< RETURN eax;
< ENDIF
< RETURN 0;
< ENDFUNC
<
< ! Returns only connected external axes in METERS
< LOCAL FUNC extjoint mm2m_extjoint(extjoint all_eax)
< VAR extjoint eax;
< eax.eax_a := connected_eax(all_eax.eax_a) / 1000;
< eax.eax_b := connected_eax(all_eax.eax_b) / 1000;
< eax.eax_c := connected_eax(all_eax.eax_c) / 1000;
< eax.eax_d := connected_eax(all_eax.eax_d) / 1000;
< RETURN eax;
< ENDFUNC
<
< ! Returns external axes in MILLIMETERS
< LOCAL FUNC extjoint m2mm_extjoint(extjoint eax_in_m)
< VAR extjoint eax_in_mm;
< eax_in_mm.eax_a := eax_in_m.eax_a * 1000;
< eax_in_mm.eax_b := eax_in_m.eax_b * 1000;
< eax_in_mm.eax_c := eax_in_m.eax_c * 1000;
< eax_in_mm.eax_d := eax_in_m.eax_d * 1000;
<
< RETURN eax_in_mm;
diff -Nr abb/abb_driver/rapid/ROS_motion.mod ABB-IRB-1200/abb_driver/rapid/ROS_motion.mod
57d56
< target.extax := trajectory{current_index}.extax_pos;
59c58
< skip_move := (current_index = 1) AND is_near(target, 0.1, 0.1);
---
> skip_move := (current_index = 1) AND is_near(target.robax, 0.1);
89c88
< LOCAL FUNC bool is_near(jointtarget target, num deg_tol, num mm_tol)
---
> LOCAL FUNC bool is_near(robjoint target, num tol)
94,103c93,98
< RETURN ( ABS(curr_jnt.robax.rax_1 - target.robax.rax_1) < deg_tol )
< AND ( ABS(curr_jnt.robax.rax_2 - target.robax.rax_2) < deg_tol )
< AND ( ABS(curr_jnt.robax.rax_3 - target.robax.rax_3) < deg_tol )
< AND ( ABS(curr_jnt.robax.rax_4 - target.robax.rax_4) < deg_tol )
< AND ( ABS(curr_jnt.robax.rax_5 - target.robax.rax_5) < deg_tol )
< AND ( ABS(curr_jnt.robax.rax_6 - target.robax.rax_6) < deg_tol )
< AND ( ABS(curr_jnt.extax.eax_a - target.extax.eax_a) < mm_tol )
< AND ( ABS(curr_jnt.extax.eax_b - target.extax.eax_b) < mm_tol )
< AND ( ABS(curr_jnt.extax.eax_c - target.extax.eax_c) < mm_tol )
< AND ( ABS(curr_jnt.extax.eax_d - target.extax.eax_d) < mm_tol );
---
> RETURN ( ABS(curr_jnt.robax.rax_1 - target.rax_1) < tol )
> AND ( ABS(curr_jnt.robax.rax_2 - target.rax_2) < tol )
> AND ( ABS(curr_jnt.robax.rax_3 - target.rax_3) < tol )
> AND ( ABS(curr_jnt.robax.rax_4 - target.rax_4) < tol )
> AND ( ABS(curr_jnt.robax.rax_5 - target.rax_5) < tol )
> AND ( ABS(curr_jnt.robax.rax_6 - target.rax_6) < tol );
diff -Nr abb/abb_driver/rapid/ROS_motionServer.mod ABB-IRB-1200/abb_driver/rapid/ROS_motionServer.mod
69c69
< point := [message.joints, message.ext_axes, message.duration];
---
> point := [message.joints, message.duration];
diff -Nr abb/abb_driver/rapid/ROS_socket.sys ABB-IRB-1200/abb_driver/rapid/ROS_socket.sys
32c32
< IF (SocketGetStatus(server_socket) = SOCKET_CREATED) SocketBind server_socket, GetSysInfo(\LanIp), port;
---
> IF (SocketGetStatus(server_socket) = SOCKET_CREATED) SocketBind server_socket, 192.168.125.5, port;
104c104
< ENDMODULE
\ No newline at end of file
---
> ENDMODULE
diff -Nr abb/abb_driver/rapid/ROS_stateServer.mod ABB-IRB-1200/abb_driver/rapid/ROS_stateServer.mod
70d69
< message.ext_axes := joints.extax;
As the robot didn't move for you, I'm suspecting something wrong with bool is_near(robjoint target, num tol)
.
@gonzalocasas: any ideas?
from abb.
@gavanderhoorn I'll check. Afaik, the IRB-1200 has the same controller version, so I would expect this to behave the same, but judging from the diff you posted, I would tend to agree with you in your suspicion.
@rajmohan747 in the meantime, could you please confirm which exact robotware version you have? Also, have you tried the same in simulation, i.e. RobotStudio?
from abb.
@gonzalocasas : I am using Roboware version 6.05.00.00
from abb.
@rajmohan747 and did you try in simulation as well? Does it behave the same way? Or does the RobotStudio simulation move fine but not the real robot?
from abb.
@gonzalocasas I have not tried on RobotStudio simulation.
It was directly experimented with real robot
from abb.
@gonzalocasas: have you have a chance to test things?
from abb.
@gavanderhoorn unfortunately, not yet. I don't have a real IRB-1200 available. I want to test on simulation, but I will only be able to do it in about 2 weeks from now.
from abb.
@rajmohan747 would it be possible for you to send me a backup of your controller to reproduce the issue? thx!
from abb.
@gavanderhoorn yesterday we tested the driver on an ABB IRB 120 (not 1200!). I realize it is not the exact same robot, but both use the compact IRC5, so perhaps there's some connection beyond the model name.
And we did see an issue indeed, but it was not related to is_near
. What we noticed is that the first point in the trajectory has a duration set to 10 seconds. And since the first point is rather close anyway, 10 seconds duration means the robot appears as not moving (even if it is, because we heard the breaks releasing).
Our test was as simple as it gets, MoveIt with all default configurations, abb driver up to date, abb_experimental for the support package of the ABB IRB120 and the following launch file:
<?xml version="1.0" ?>
<launch>
<arg name="robot_ip" default="192.168.10.10" />
<include file="$(find abb_irb120_moveit_config)/launch/planning_context.launch">
<arg name="load_robot_description" value="true" />
</include>
<node pkg="tf" type="static_transform_publisher" name="gort" args="0.0 0.0 0.0 0 0 0 1 map base_link 10" />
<include file="$(find abb_driver)/launch/robot_interface.launch" >
<arg name="robot_ip" value="$(arg robot_ip)" />
</include>
<include file="$(find abb_irb120_moveit_config)/launch/move_group.launch" />
<include file="$(find abb_irb120_moveit_config)/launch/moveit_rviz.launch">
<arg name="config" value="true" />
<arg name="debug" default="false" />
</include>
</launch>
Could it be this the same problem that @rajmohan747 is seeing? And if so... @gavanderhoorn do you have any hints as to where the problem might be originating? Could it be that at some serialization level, a value that corresponds to some other field is spilling into the duration field and affecting the value that RAPID sees?
/cc @codeJRV
from abb.
@gonzalocasas: thanks for reporting back.
I'm not entirely sure how reverting to an older version got things to work for @rajmohan747 in this case though.
Related / duplicates of what you report: #142 and ros-industrial/abb#146.
from abb.
Please see whether #155 fixes this.
from abb.
I'm going to close this as I believe #155 fixes what @rajmohan747 described.
If that is not the case then please re-open and clarify.
from abb.
Related Issues (20)
- How to control the velocity of the end effector? HOT 3
- How to improve the max trajectory size of abb_driver HOT 10
- ABB IRB120 does not move when trajectory command is sent from Moveit HOT 16
- Pass extra information to RAPID HOT 10
- OmniCore and IRB 1100 support HOT 4
- Not able to execute cartesian trajectory on ABB IRB120 HOT 2
- Unable to connect ROS with Robotstudio (ROS in Parallels VM) HOT 13
- Melodic release HOT 1
- Fixed the release track configuration for Kinetic HOT 1
- can't locate node [robot_state] in package [abb_driver] HOT 3
- REST based interface for ABB HOT 2
- Planned migration of abb_driver to its own repository HOT 4
- Too many close points while executing in Robot Studio. HOT 4
- Support package GoFa CRB 15000 HOT 6
- why abb ibr1410 is not supported? HOT 2
- Dependency on abb_driver HOT 6
- IRB2400 URDF Seems Wrong
- Production Support for GoFa CRB 15000 HOT 1
- ROS 2 Support
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from abb.