记录一下在ubuntu系统下配置omega.7力反馈设备的过程以及中间踩过的坑,同时笔者对该设备进行二次开发,将其封装成ROS功能包。
- Omega.7 Linux SDK下载
- 更改USB权限
- 封装ROS功能包
Omega.7 Linux SDK下载
首先下载对应的SDK,omega.7支持windows,linux,MacOs多平台,笔者使用的是ubunut16.04,使用官方提供的SDK进行二次开发,并将其集成到ROS框架中。在force dimension官网上下载对应的sdk包,笔者使用目前最新的linux_x64 SDK,下载后放到相应的目录,这里我放在了/home文件夹下,然后使用命令行进行解压。
解压完成后我们会看到 sdk-3.9.1文件夹下包含若干个目录
-bin 包含编译生成的可执行文件以及一些二进制文件
-doc 说明文档以及许可
-example c++源代码
-external 软件开发工具包需要的一些外部库,例如Eigen
-include 头文件,主要是
-lib 静态库(.a)动态库(.so)
可以cd到bin目录,然后sudo ./autoinit 运行里面的自动初始化demo,这里必须要加上sudo
,否则会提示找不到设备,具体原因下面会进行分析,并且给出对应方案
更改USB权限
Omega.7设备使用usb与电脑进行连接与通信,该设备使用usb通信时需要提升权限,因此必须要在执行文件时加上sudo
,但是这是非常不方便的,尤其是在进行ros代码封装时,当编写完成一个节点并生成可执行文件后需要使用rosrun
命令运行,但我们又不得不提升至超级用户权限,因此首先需要 sudo su
,然后在进入工作空间目录source
一下,最后 rosrun package node
,这是非常麻烦的事情。为了从根本上解决这个问题,我们需要修改usb的权限,修改过程可以参考这篇博客
封装ROS功能包
我主要参考了github上一个omega.3设备的开源代码,代码量不算多,通过阅读可以发现主要有三个步骤
- 链接动态链接库:
在创建的ros_haptic_driver功能包中创建lib文件夹,并且将sdk-3.9.1中lib目录下的.so文件拷贝到自己功能包中的lib目录下,并且重命名为libdhd.so.3和libdrd.so.3,这里作者是根据封装后运行时的错误提示大胆重命名的。然后在CmakeLists中进行相应的设置,主要是加入如下内容
include_directories(
include ${catkin_INCLUDE_DIRS} // 添加头文件
)
link_directories(
${catkin_LIB_DIRS} lib // 加入链接库的目录
)
find_library(DHDLIB libdhd.so.3 lib) // 设置动态链接库环境变量
find_library(DRDLIB libdrd.so.3 lib)
find_library(USB1LIB libusb-1.0.so)
add_executable(haptic_ros_driver // 生成可执行文件
src/haptic_ros_driver.cpp
src/HapticDevice.cpp
)
add_dependencies(haptic_ros_driver ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
target_link_libraries(haptic_ros_driver // 链接节点依赖的库
${DHDLIB}
${DRDLIB}
${USB1LIB}
${catkin_LIBRARIES}
)
- 设置头文件
将sdk-3.9.1 include目录下的头文件拷贝到 ros_haptic_driver功能包的include/ros_haptic_driver目录下 - 封装类
新建cpp文件,根据sdk中提供的API函数封装类
上面所有步骤完成后就可以使用catkin_make
命令进行编译了,编译后运行节点可以看到输出的力反馈设备末端的位置。到这里所有的工作就做完了,后续可以基于此进行进一步的开发。