关于在ROS里运行机械臂SDK这件事?

2022.1.4由于项目需要,我在想能不能再ROS操作系统下运行aubo机械臂的SDK文件,我想理论上讲是能实现的,如果有大佬以前做过还望能指点一二。

目前想到两种方式:

一是利用官网给的SDK包,里面找到了aubo_driver这个文件包,里面包含了sdk文件的库,因此可以考虑直接在原包里面编写;

二是自己建立ros功能包,缺点自己要搞cmake文件把需要用到的库连接上。

2022.1.5经过两天的折磨,程序调通了。

上面讲的两种方式归根结底就一种方式,就还是在ROS架构下做个功能包,然后把aubo机器人SDK里需要连接的文件都链接上,然后写代码就完了。

在提出具体的步骤之前,先了解一下aubo官方给的sdk包,下载地址在aubo官网:资料下载 (aubo-robotics.cn)

1.了解Aubo机器人SDK的文件夹架构:

|SDK
    |-->dependents
        |-->libconfig
        |-->log4cplus
        |-->protobuf
        |-->robotCotroller
        |-->robotSDK
            |-->inc
                |-->AuboRobotMetaType.h
                ......(.h文件)
            |-->lib(里面有一些静态链接库和动态链接库)
    |-->example(内含一些例程)
        |-->***.h
        |-->***.cpp

综上,可以知道文件夹里面主要包含三大类文件:1)动态链接库(.so)和静态链接库(.a)

2)Headers头文件(.h) 3)Sources源文件(.cpp)

我们再用QT打开,可以更好的理解给出的例子工程是什么样的:

可以看到,这是个外部工程有main.cpp文件,内部的子工程由有两个example和application_point

了解了文件夹结构和工程结构之后,我们再看一下编译器的内容,因为aubo官方给的工程文件是qmake编译器编译的,但我们要做ros下的文件,最根本的就是把qmake的语句变为cmake编译。

1)外部工程qmake

2)内部子工程qmake

 我的linux系统是64位的,所以只看第二大部分,具体的怎么把Qmake转为cmake以及qmake和cmake各个语句具体是有什么用,是什么意思,可以去百度一搜一堆,这里就不赘述了,只提关键的地方:

可以看到,我们只需要把前面提到的三大类文件全连接上就能实现用机械臂的sdk进行编程了!

实现步骤:

1.创建工作空间:

$  mkdir -p ~/catkin_ws/src
$  cd ~/catkin_ws/src

注:这里因为我们下载的aubo给出的功能包,因此我的功能包就直接用的aubo机器人的工作空间aubo_robot_ws.

2. 编译catkin工作空间

$  cd ~/catkin_ws/
$  catkin_make

3.配置环境变量(给CmakeList用的,里面有很多诸如${PROJECT_NAME}的使用,这里的大写字母部分就是环境变量)

$  source devel/setup.bash

为了方面可以把上述指令添加至.bashrc文件中,如下:

通过命令:vim ~/.bashrc , 在.bashrc文件中添加相应的命令

(这样就不用每次都执行source命令了,只需要catkin_make一下,就自动source环境变量了)

4. 创建工作包

cd catkin_ws/src
catkin_create_pkg  robot_sdk_test std_msgs  roscpp  rospy

粗体部分robot_sdk_test为功能包的名字,随意更改即可。

我们可以看见功能包内包含以下文件:

CMakeLists.txt 

package.xml

5.修改功能包内的CMakeList.txt文件,参考文档.

这里是关键,就是把qmake改为cmake文件,主要目的就是把上述三大类文件(链接库、头文件、源文件)都链接到工程中来。

1).链接头文件

        在将官网给的SDK文件中的exmple文件夹中的.h文件都放到include中。(这里把其他所有用到的.h文件都放进来也行,原理就是为了能让编译器找到这些文件就可以)

之后,在cmakelists.txt中,将包含两个头文件的文件夹路径都添加进来

(头文件链接完毕!)

2).链接动态链接库和静态链接库

 这里,有-L或者后缀为.so的是动态链接库:

没有-L或后缀为.a的为静态链接库.

(一)连接动态链接库:

link_directories(${PROJECT_SOURCE_DIR}/lib) #添加动态连接库的路径
target_link_libraries(project_name -lXXX ) #添加XXX库,或者说连接libXXX.so文件

 注意:第一行:PROJECT_SOURCE_DIR是环境变量,关于更具体地可以学习:

"cmake常用环境变量";而%{XXX}符号就是使用这个变量值,只需要知道这个值是本功能包最上层地文件路径就可以了。

        第二行,动态链接库在Linux系统下,文件名字是libXXXXX.so,所以上面地project_name和后面的-lxxx中的xxx都要改为自己需要的动态库的名字。

(二)连接静态链接库:

add_library(XXX STATIC IMPORTED)
set_property(TARGET XXX PROPERTY IMPORTED_LOCATION /XXX/XXX/XXX/libXXX.a)
target_link_libraries(project_name XXX) #添加XXX库,或者说连接libXXX.a文件

 注意:同样,XXX为静态库的名字,第二行注意/XXX/XXX/XXX/libXXX.a为文件的路径。第三行,project_name名字是项目的名字一般在第一行自己设置。

3)源文件

源文件的包含相对简单,只需要把main函数内用到的源文件内函数所在的源文件写在下面这句话中即可,中间用空格空开:

add_executable(robot_sdk_test src/robot_sdk_test.cpp src/example_ik.cpp src/util.cpp)

解释:就比如上面这个,因为我的main函数在robot_sdk_test.cpp源文件中,但是除此之外我还用到了example_ik.cpp和util.cpp文件中的函数,因此我需要在此用空格隔开这几个文件的相对路径,保证各个源文件都能链接到。

至此,三大类文件都已连接完毕后就可以了,不过有些系统可能还是存在链接库连接不上问题,报一些bug,不过直接从网上搜索这些bug基本都是小问题能解决,比如最常见的bug:

lderror:xxxxx

就是因为这几个动态链接库是自己复制粘贴的,所以/usr/local/lib这个文件目录下连接不到,这里有两种方式:

1)直接将用到的.so或者.a文件一股脑复制粘贴进该目录下,但注意只能在终端下用命令:

sudo cp /xxx /usr/local/lib

因为没有管理员权限只能在终端用sudo命令,这里/xxx是需要复制的文件路径。

2)用ln -s 命令,这个可以参考这个用法,一搜一堆就不展开说了。

参考连接:linux ln 命令使用参数详解(ln -s 软链接) - 那些年的代码 - 博客园 (cnblogs.com)

6.改完cmake后,就完成了,打开终端cd到工作空间下catkin_make一下,(别忘了source如果没预先设置的话)

7.用rosrun命令运行就可以了,比如我这个文件就运行

rosrun robot_sdk_test robot_sdk_test

8.大功告成,机械臂正常运动.

  • 2
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

D124lab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值