记录一下在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设备的开源代码,代码量不算多,通过阅读可以发现主要有三个步骤

  1. 链接动态链接库:
    在创建的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}
)
  1. 设置头文件
    将sdk-3.9.1 include目录下的头文件拷贝到 ros_haptic_driver功能包的include/ros_haptic_driver目录下
  2. 封装类
    新建cpp文件,根据sdk中提供的API函数封装类

上面所有步骤完成后就可以使用catkin_make命令进行编译了,编译后运行节点可以看到输出的力反馈设备末端的位置。到这里所有的工作就做完了,后续可以基于此进行进一步的开发。