[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