Re: KDL in ROS - error in kdl/jntspaceinertiamatrix.hpp?

Ruben Smits <[email protected]> Fri, 19 Sep 2014 09:44:37 +0200
Newsgroups gmane.science.robotics.orocos.devel
Message-ID <CAN8PhbnxZtxGL6zig3GdP4cs-LKxx6QHZuA3qzNxD07j-HfMmQ@mail.gmail.com>
On Thu, Sep 18, 2014 at 12:55 PM, Nicola Pedrocchi <
[email protected]> wrote:

> Hi Ruben:
>
>
>
> OS: Linux 3.2.0-4-486
>
> Distro: Debian stable ( Debian 3.2.57-3+deb7u1 i686 GNU/Linux)
>
> Compiler: gcc-4.7  ( debian package : gcc-4.7-base:i386    version
>  4.7.2-5 )
>
>
>
> There was an error in my post due to an erroneous copy&paste, sorry.
>
> The function not declared outside the JntSpaceInertiaMatrix class is:
>
>
>
> *void Multiply(const JntSpaceInertiaMatrix& src,const double&
> factor,JntSpaceInertiaMatrix& dest);*
>
>
>
> and not the
>
>
>
> *void Multiply(const KDL::JntArray&, const double&, KDL::JntArray&)*
>
>
>
> as I indicated in the previous post. I am sorry for the inaccuracy in the
> error reporting.
>
>
>

I guess you mean
void Multiply(const JntSpaceInertiaMatrix& src, const JntArray& vec,
JntArray& dest);

which is the function used on line 55 of kukaLWRtestHCG.cpp

For some reason the compiler wants to use the Multiply(const
KDL::JntArray&, const double&, KDL::JntArray&) instead and fails in
converting the JntSpaceInertiaMatrix into a JntArray.

We probably miss the explicit keyword for some of our copy-constructors as
explained here
http://stackoverflow.com/questions/3112602/c-implicit-conversions-and-ambiguity-in-overloaded-function-call

I was able to reproduce your problem, I'm currently working on a solution.

R.




> Thanks
>
> Nicola
>
>
>
>
>
>
>
> *Da:* Ruben Smits [mailto:[email protected]]
> *Inviato:* giovedì 18 settembre 2014 11:39
> *A:* Nicola Pedrocchi
> *Cc:* [email protected]
> *Oggetto:* Re: [Orocos-Dev] KDL in ROS - error in
> kdl/jntspaceinertiamatrix.hpp?
>
>
>
> Hi Nicola,
>
>
>
> On Thu, Sep 18, 2014 at 9:44 AM, Nicola Pedrocchi <
> [email protected]> wrote:
>
> Hi,
>
>   I’ve encountered a small error in compiling the KDL library from ROS
> repository in a Debian stable PC.
>
> I’ve found that in “kdl/jntspaceinertiamatrix.hpp” the function *Multiply(const
> KDL::JntArray&, const double&, KDL::JntArray&)* is indicated as friend in
> the declaration of the JntSpaceInertiaMatrix class, but it is not declared
> externally to the class – even though it is correctly defined in the
> jntspaceinertiamatrix.cpp.
>
>
>
> Below you find the test that has arisen the problem:
>
>
>
> 1.       I’ve compiled also the “models”, that is, in the cmake
> configuration I have imposed –DBUILD_MODELS=ON -DBUILD_MODELS_DEMO=ON
>
> 2.       I’ve made a slight modification to the kukaLWRtestHCG.cpp:  I’ve
> commented the using namespace KDL  ( I’ve commented line 11 as below )
>
> 3.       Then, I’ve added manually the KDL namespace everywhere needed.
>
> 4.       In compiling I’ve got the following error:
>
>
>
> *../orocos_kinematics_dynamics/orocos_kdl/models/kukaLWRtestHCG.cpp: In
> function ‘int main(int, char**)’:*
>
> *…/orocos_kinematics_dynamics/orocos_kdl/models/kukaLWRtestHCG.cpp:55:37:
> error: invalid initialization of reference of type ‘const KDL::JntArray&’
> from expression of type ‘KDL::JntSpaceInertiaMatrix’*
>
> *In file included from
> …/orocos_kinematics_dynamics/orocos_kdl/src/frames_io.hpp:81:0,*
>
> *                 from
> ../orocos_kinematics_dynamics/orocos_kdl/models/kukaLWRtestHCG.cpp:3:*
>
> *…/orocos_kinematics_dynamics/orocos_kdl/src/jntarray.hpp:182:10: error:
> in passing argument 1 of ‘void KDL::Multiply(const KDL::JntArray&, const
> double&, KDL::JntArray&)’*
>
>
>
>
>
> Could tell us which compiler you are using in what kind of OS?
>
>
>
> Ruben
>
>
>
> 5.       The problem has been solved by adding the declaration of *Multiply(const
> KDL::JntArray&, const double&, KDL::JntArray&) *outside the class
> JntSpaceInertiaMatrix.
>
>
>
> I am not a skilled programmer, is it correct what I have done?
>
>
>
> Nicola
>
>
>
>
>
> --
>
> Eng. Nicola Pedrocchi, PhD, Researcher
>
> Institute of Industrial Technology and Automation
>
> National Council of Research
>
> Via Bassini, 15, 20133, Milan, Italy
>
>
>
> office : +390223699625
>
> lab.   : +390223699944
>
> mobile : +393665797833
>
> skypeid: nicola.pedrocchi
>
>
>
>
> --
> Orocos-Dev mailing list
> [email protected]
> http://lists.mech.kuleuven.be/mailman/listinfo/orocos-dev
>
>
>
>
>
> --
> Ruben Smits, CTO
> +32 479 511 786
> Intermodalics - Kapeldreef 60, 3001 Heverlee - BELGIUM
> www.intermodalics.eu
>
>
> ---------------------------------------------------------------------------------------------------------------------------------------
> This email and any attached files are confidential and may be legally
> privileged. Any copy, print or forward of this email, without the agreement
> of sender or addressee, is strictly prohibited. Misuse is a violation of
> the law on personal data protection (D. Lgs. 196/2003) and on secrecy of
> correspondence (art. 616 cp). If you have received this transmission in
> error please notify the sender immediately and then delete this email and
> any attached files.
>



-- 
Ruben Smits, CTO
+32 479 511 786
Intermodalics - Kapeldreef 60, 3001 Heverlee - BELGIUM
www.intermodalics.eu

---------------------------------------------------------------------------------------------------------------------------------------
This email and any attached files are confidential and may be legally
privileged. Any copy, print or forward of this email, without the agreement
of sender or addressee, is strictly prohibited. Misuse is a violation of
the law on personal data protection (D. Lgs. 196/2003) and on secrecy of
correspondence (art. 616 cp). If you have received this transmission in
error please notify the sender immediately and then delete this email and
any attached files.

-- 
Orocos-Dev mailing list
[email protected]
http://lists.mech.kuleuven.be/mailman/listinfo/orocos-dev