[ros-users] Groovy issue: genlisp generating multiple ASDF references for the same action using catkin

Jan Winkler winkler at cs.uni-bremen.de
Wed Jun 5 10:43:55 UTC 2013


Hey guys,

we just realized a problematic issue when generating action message 
using the catkin message generation mechanism.

When catkin_make'ing a package that includes actions, the corresponding 
messages (`.msg`-files) containing the Request, Result, and Feedback 
structures are referenced multiple times in the resulting `.asd`-Lisp 
file for that package.

This practically breaks loading the message definitions into roslisp, 
making the message types unusable this way.

The issue arises once you define more than one action in a package. If 
only one action is defined, it does not come up. When defining more than 
one `.action`-file (say, n files) and putting them into your 
CMakeLists.txt file, the block in the `.asd`-file for that action gets 
written n times.

Just for clarification, if a message is defined more than once in the 
`.asd`-file by the same name (which is the case here), it is unloadable 
by ASDF (and therefore, roslisp!).

The issue does not arise when configuring the package as a rosbuild 
package (i.e. all `.asd`-files get generated just fine).

The consequence of this issue is, that every package built using catkin 
has this problem. Actually, the _officially_released_ packages include 
this error.
I'm on Quantal (12.10), using ros-groovy. A good example is the 
`moveit_msgs` package. If you look into the file 
`/opt/ros/groovy/share/common-lisp/ros/moveit_msgs/msg/moveit_msgs-msg.asd`, 
you will most probably find, for example, the "PickupResult" file being 
referenced several times (three times, that is).
The MoveIt! messages (and any other released catkin package messages 
including a number of actions > 1) are therefore not usable in ANY 
roslisp code in groovy.

I attached a sample setup once configured as a rosbuild package and once 
as a catkin package. The resulting .asd files for both cases as well as 
their diff are attached as well (speak `diff action_test_catkin-msg.asd 
action_test_rosbuild-msg.asd`). As you can see, there is an additional 
block describing the Test.action and Test2.action messages, hence 
breaking the load process of the ASDF system.

We added two individual messages `MessageTest.msg` and 
`MessageTest2.msg`. These get generated only once in every case.

Correcting the file by hand makes the ASDF system load and work just fine.
A wild guess would be that genlisp is doing something wrong when 
enumerating the things it has to write into the `.asd`-file.

Can anyone confirm this issue?


Best regards,
Jan

-- 
Dipl. Ing. Jan Winkler
Technologie-Zentrum Informatik und Informationstechnik
Raum 1.56
Am Fallturm 1 (TAB Gebaeude)
Universitaet Bremen
28359 Bremen, Deutschland

E-Mail: winkler at cs.uni-bremen.de
Tel: +49 (0)421-218-64019
Fax: +49 (0)421-218-64047

-------------- next part --------------

(cl:in-package :asdf)

(defsystem "action_test_catkin-msg"
  :depends-on (:roslisp-msg-protocol :roslisp-utils :actionlib_msgs-msg
               :std_msgs-msg
)
  :components ((:file "_package")
    (:file "TestActionGoal" :depends-on ("_package_TestActionGoal"))
    (:file "_package_TestActionGoal" :depends-on ("_package"))
    (:file "Test2Action" :depends-on ("_package_Test2Action"))
    (:file "_package_Test2Action" :depends-on ("_package"))
    (:file "Test2Goal" :depends-on ("_package_Test2Goal"))
    (:file "_package_Test2Goal" :depends-on ("_package"))
    (:file "Test2ActionResult" :depends-on ("_package_Test2ActionResult"))
    (:file "_package_Test2ActionResult" :depends-on ("_package"))
    (:file "Test2ActionFeedback" :depends-on ("_package_Test2ActionFeedback"))
    (:file "_package_Test2ActionFeedback" :depends-on ("_package"))
    (:file "TestFeedback" :depends-on ("_package_TestFeedback"))
    (:file "_package_TestFeedback" :depends-on ("_package"))
    (:file "TestResult" :depends-on ("_package_TestResult"))
    (:file "_package_TestResult" :depends-on ("_package"))
    (:file "Test2Feedback" :depends-on ("_package_Test2Feedback"))
    (:file "_package_Test2Feedback" :depends-on ("_package"))
    (:file "TestActionResult" :depends-on ("_package_TestActionResult"))
    (:file "_package_TestActionResult" :depends-on ("_package"))
    (:file "TestGoal" :depends-on ("_package_TestGoal"))
    (:file "_package_TestGoal" :depends-on ("_package"))
    (:file "Test2Result" :depends-on ("_package_Test2Result"))
    (:file "_package_Test2Result" :depends-on ("_package"))
    (:file "Test2ActionGoal" :depends-on ("_package_Test2ActionGoal"))
    (:file "_package_Test2ActionGoal" :depends-on ("_package"))
    (:file "TestAction" :depends-on ("_package_TestAction"))
    (:file "_package_TestAction" :depends-on ("_package"))
    (:file "TestActionFeedback" :depends-on ("_package_TestActionFeedback"))
    (:file "_package_TestActionFeedback" :depends-on ("_package"))
    (:file "MessageTest" :depends-on ("_package_MessageTest"))
    (:file "_package_MessageTest" :depends-on ("_package"))
    (:file "MessageTest2" :depends-on ("_package_MessageTest2"))
    (:file "_package_MessageTest2" :depends-on ("_package"))
  ))
-------------- next part --------------
4c4
< (defsystem "action_test_catkin-msg"
---
> (defsystem "action_test_rosbuild-msg"
20a21,22
>     (:file "MessageTest" :depends-on ("_package_MessageTest"))
>     (:file "_package_MessageTest" :depends-on ("_package"))
30a33,34
>     (:file "MessageTest2" :depends-on ("_package_MessageTest2"))
>     (:file "_package_MessageTest2" :depends-on ("_package"))
37,68d40
<     (:file "TestActionGoal" :depends-on ("_package_TestActionGoal"))
<     (:file "_package_TestActionGoal" :depends-on ("_package"))
<     (:file "Test2Action" :depends-on ("_package_Test2Action"))
<     (:file "_package_Test2Action" :depends-on ("_package"))
<     (:file "Test2Goal" :depends-on ("_package_Test2Goal"))
<     (:file "_package_Test2Goal" :depends-on ("_package"))
<     (:file "Test2ActionResult" :depends-on ("_package_Test2ActionResult"))
<     (:file "_package_Test2ActionResult" :depends-on ("_package"))
<     (:file "Test2ActionFeedback" :depends-on ("_package_Test2ActionFeedback"))
<     (:file "_package_Test2ActionFeedback" :depends-on ("_package"))
<     (:file "TestFeedback" :depends-on ("_package_TestFeedback"))
<     (:file "_package_TestFeedback" :depends-on ("_package"))
<     (:file "TestResult" :depends-on ("_package_TestResult"))
<     (:file "_package_TestResult" :depends-on ("_package"))
<     (:file "Test2Feedback" :depends-on ("_package_Test2Feedback"))
<     (:file "_package_Test2Feedback" :depends-on ("_package"))
<     (:file "TestActionResult" :depends-on ("_package_TestActionResult"))
<     (:file "_package_TestActionResult" :depends-on ("_package"))
<     (:file "TestGoal" :depends-on ("_package_TestGoal"))
<     (:file "_package_TestGoal" :depends-on ("_package"))
<     (:file "Test2Result" :depends-on ("_package_Test2Result"))
<     (:file "_package_Test2Result" :depends-on ("_package"))
<     (:file "Test2ActionGoal" :depends-on ("_package_Test2ActionGoal"))
<     (:file "_package_Test2ActionGoal" :depends-on ("_package"))
<     (:file "TestAction" :depends-on ("_package_TestAction"))
<     (:file "_package_TestAction" :depends-on ("_package"))
<     (:file "TestActionFeedback" :depends-on ("_package_TestActionFeedback"))
<     (:file "_package_TestActionFeedback" :depends-on ("_package"))
<     (:file "MessageTest" :depends-on ("_package_MessageTest"))
<     (:file "_package_MessageTest" :depends-on ("_package"))
<     (:file "MessageTest2" :depends-on ("_package_MessageTest2"))
<     (:file "_package_MessageTest2" :depends-on ("_package"))
-------------- next part --------------
A non-text attachment was scrubbed...
Name: action_test_catkin.tar.gz
Type: application/x-gzip
Size: 2613 bytes
Desc: not available
URL: <http://lists.osuosl.org/pipermail/ros-users/attachments/20130605/3b91f52a/attachment-0006.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: action_test_rosbuild.tar.gz
Type: application/x-gzip
Size: 1340 bytes
Desc: not available
URL: <http://lists.osuosl.org/pipermail/ros-users/attachments/20130605/3b91f52a/attachment-0007.bin>
-------------- next part --------------

(cl:in-package :asdf)

(defsystem "action_test_rosbuild-msg"
  :depends-on (:roslisp-msg-protocol :roslisp-utils :actionlib_msgs-msg
               :std_msgs-msg
)
  :components ((:file "_package")
    (:file "TestActionGoal" :depends-on ("_package_TestActionGoal"))
    (:file "_package_TestActionGoal" :depends-on ("_package"))
    (:file "Test2Action" :depends-on ("_package_Test2Action"))
    (:file "_package_Test2Action" :depends-on ("_package"))
    (:file "Test2Goal" :depends-on ("_package_Test2Goal"))
    (:file "_package_Test2Goal" :depends-on ("_package"))
    (:file "Test2ActionResult" :depends-on ("_package_Test2ActionResult"))
    (:file "_package_Test2ActionResult" :depends-on ("_package"))
    (:file "Test2ActionFeedback" :depends-on ("_package_Test2ActionFeedback"))
    (:file "_package_Test2ActionFeedback" :depends-on ("_package"))
    (:file "TestFeedback" :depends-on ("_package_TestFeedback"))
    (:file "_package_TestFeedback" :depends-on ("_package"))
    (:file "MessageTest" :depends-on ("_package_MessageTest"))
    (:file "_package_MessageTest" :depends-on ("_package"))
    (:file "TestResult" :depends-on ("_package_TestResult"))
    (:file "_package_TestResult" :depends-on ("_package"))
    (:file "Test2Feedback" :depends-on ("_package_Test2Feedback"))
    (:file "_package_Test2Feedback" :depends-on ("_package"))
    (:file "TestActionResult" :depends-on ("_package_TestActionResult"))
    (:file "_package_TestActionResult" :depends-on ("_package"))
    (:file "TestGoal" :depends-on ("_package_TestGoal"))
    (:file "_package_TestGoal" :depends-on ("_package"))
    (:file "Test2Result" :depends-on ("_package_Test2Result"))
    (:file "_package_Test2Result" :depends-on ("_package"))
    (:file "MessageTest2" :depends-on ("_package_MessageTest2"))
    (:file "_package_MessageTest2" :depends-on ("_package"))
    (:file "Test2ActionGoal" :depends-on ("_package_Test2ActionGoal"))
    (:file "_package_Test2ActionGoal" :depends-on ("_package"))
    (:file "TestAction" :depends-on ("_package_TestAction"))
    (:file "_package_TestAction" :depends-on ("_package"))
    (:file "TestActionFeedback" :depends-on ("_package_TestActionFeedback"))
    (:file "_package_TestActionFeedback" :depends-on ("_package"))
  ))


More information about the ros-users mailing list