手术机器人DVRK学习系列之(1)-安装和编译

手术机器人DaVinci由美国Intuitive公司开发,感兴趣的同学自己Baidu,google或者Being。Intuitive将部分产品送给了许多大学和研究机构进行研究。在此基础上形成了基于达芬奇硬件系统的开源代码,在GitHub上都有下载,对于广大从事手术机器人研发的同仁而言,是一个很不错的借鉴和参考。这里要介绍的是由约翰霍普金斯大学(JHU)维护的代码,本篇从安装和编译开始。

1.安装ROS

ubuntu上安装ROS,这是机器人行业的必修课,JHU-DVRK最终生成的可执行的程序是需要ROS环境的。说明一下,本人使用的ubuntu的版本是14.04.5_x64,ROS的版本是indigo。至于安装ROS的step by step,同学们直接去ROS官网吧,或者网络上搜索。无奈本人刚入行不久(还没入门),就不继续献丑了。

2.从GitHub上下载源码

我用的是JHU提供的代码,同学们可以从这个链接从GitHub上下载(https://github.com/jhu-dvrk)
JHU提供了整套的代码,那我们该下载哪些呢,JHU是怎样组织这个工程的呢?
JHU提供的代码整体而言分成两部分:dvrk-ros和cisst-saw。
dvrk-ros是最后运行于ROS之上的应用程序,属于应用层。
cisst-saw(Computer-Integrated Surgical Systems and Technology,计算机集成外科系统与技术,Surgical Assistant Workstation,外科辅助工作站)是dvrk-ros要调用的各种组件和库,包括运动学、动力学、立体视觉等等,属于中间层和底层,应该说cisst-saw是整套工程的重点,对于热心研究自动控制的同学而言是一份不错的自学材料,不要错过哦。
这两部分的代码在不同地址下载:
dvrk-ros:https://github.com/jhu-dvrk/dvrk-ros
cisst-saw:https://github.com/jhu-cisst/cisst-saw,同学们若是按照这个地址下载会发现,从GitHub下载得来的cisst-saw-master.zip文件只有9K左右,进一步解压之后会发现,每个目录下面都是空的!说好的是重点的呢?怎么什么都没有呢?同学们不要着急,让晚生解释给你听。这其实是JHU告诉大家,cisst-saw这一层的工程组织就是按照这些空目录的方式组织的。至于具体的干货,需要按照这些目录指出的工程去https://github.com/jhu-cisst和https://github.com/jhu-saw下面去找。
这个cisst-saw分两部分,一个是cisst目录,一个是以saw打头的目录(不止一个哦)。见图1:
图1:
OMG,怎么这么多工程?确实很多,不过作为第一步,先玩起来才是目标,经过晚生琢磨,简化结果如下:
图2
是不是少了很多?有人会有怀疑了,凭什么这么少呢?其实,这也是有根据的,同学们去https://github.com/jhu-dvrk看一下,有两个重要的工程:dvrk-ros和sawIntuitiveResearchKit,其实dvrk-ros要依赖的是sawIntuitiveResearchKit!进一步进入sawIntuitiveResearchKit的链接https://github.com/jhu-dvrk/sawIntuitiveResearchKit,会发现JHU说,sawIntuitiveResearchKit要依赖cisst、sawRobotIO1394、sawControllers和sawConstraintController,经过进一步测试,发现还需要sawKeboard和sawTextToSpeech。因此最终要下载的cisst-saw工程就如图2所示。
至此,相信吃瓜群众都能看明白我们需要从JHU的GitHub上下载什么了,好,下面贴一下各个工程的下载地址。
cisst的下载地址,https://github.com/jhu-cisst/cisst。这个目录下面都是干货,所有的底层代码全部在里面,包括前面提到的运动学、动力学、立体视觉等等,见图3
图3

saw*部分的下载链接:
sawConstraintController,https://github.com/jhu-saw/sawConstraintController,不清楚这个是干什么的
sawControllers,https://github.com/jhu-saw/sawControllers,不清楚这个是干什么的
sawIntuitiveResearchKit,https://github.com/jhu-dvrk/sawIntuitiveResearchKit,记住,dvrk-ros就是依赖这个,这个在依赖其他的哦
sawKeyboard,https://github.com/jhu-saw/sawKeyboard,不清楚这个是干什么的
sawRobotIO1394,https://github.com/jhu-saw/sawRobotIO1394,这个应该是连1394相机用的,机器人需要眼睛的嘛。也有可能是其他高速设备连接用的lib。
sawTextToSpeech,https://github.com/jhu-saw/sawTextToSpeech,这个应该是文字转语音的,看来daVinci还是很智能的,会说话。

需要下载的代码就是上面提到的,还有一些编译时要用到的工具性软件,在后面逐步介绍。


3.编译下载得到的代码

前面提到,总的来说分成两个目录去编译:dvrk-ros和cisst-saw。
因为dvrk-ros要依赖cisst-saw,因此咱们先编译cisst-saw。

3.1 编译cisst-saw

在JHU的wiki上,JHU反复强调cisst-saw部分要用CMake去编译,那我们就按照CMake的一般规则,先在cisst-saw的同级目录下建立一个build目录,咱们就建议build_cisst_saw吧:
sudo mkdir build_cisst_saw
cd build_cisst_saw
编译之前注意备份好cisst-saw目录,后面要删掉重来的,因此需要备份
好,直接cmake吧:
cmake  ../cisst-saw,成功了,继续make吧。等了好久,终于结束了,全部编译通过了,So easy。
不幸的是,没这么简单。
上面提到的,dvrk要依赖sawIntuitivResearchKit,sawIntuitiveResearchKit又要依赖其他5个。看一下JHU在cisst-saw目录下提供的CMakeList.txt,发现内容如下:
cisst_offer_saw_component (sawKeyboard ON)
cisst_offer_saw_component (sawTextToSpeech ON)
cisst_offer_saw_component (saw3Dconnexion OFF)
cisst_offer_saw_component (sawCANBus OFF)
cisst_offer_saw_component (sawControllers OFF)
cisst_offer_saw_component (sawConstraintController OFF)
cisst_offer_saw_component (sawTrajectories OFF)
cisst_offer_saw_component (sawBarrett OFF)
cisst_offer_saw_component (sawCMUSphinx4 OFF)
cisst_offer_saw_component (sawClaronMicronTracker OFF)
cisst_offer_saw_component (sawDataPlayer OFF)
cisst_offer_saw_component (sawGLUTSimulator OFF)
cisst_offer_saw_component (sawIntuitiveDaVinci OFF)
set (IS_QNX FALSE)
if ("${CMAKE_SYSTEM_NAME}" STREQUAL "QNX")
  set (IS_QNX TRUE)
endif ("${CMAKE_SYSTEM_NAME}" STREQUAL "QNX")
cisst_offer_saw_component (sawJR3ForceSensor OFF)
cisst_offer_saw_component (sawLoPoMoCo OFF)
cisst_offer_saw_component (sawMedtronicStealthlink OFF)
cisst_offer_saw_component (sawMicroScribeDigitizer OFF)
cisst_offer_saw_component (sawNDITracker OFF)
cisst_offer_saw_component (sawNovintFalcon OFF)
cisst_offer_saw_component (sawOpenAL OFF)
cisst_offer_saw_component (sawOpenDynamicsEngine OFF)
cisst_offer_saw_component (sawOpenIGTLink OFF)
cisst_offer_saw_component (sawOpenNI OFF)
cisst_offer_saw_component (sawOpenSceneGraph OFF)
cisst_offer_saw_component (sawSartoriusScale OFF)
cisst_offer_saw_component (sawSensablePhantom OFF)
cisst_offer_saw_component (sawRobotIO1394 OFF)
cisst_offer_saw_component (sawATIForceSensor OFF)
cisst_offer_saw_component (sawAtracsysFusionTrack OFF)
if (UNIX)
  cisst_offer_saw_component (sawIntuitiveResearchKit OFF)
endif (UNIX)

OMG,需要编译的,JHU几乎默认全部都关闭了,如果要让后面的dvrk-ros顺利进行下去就必须把要依赖的工程改成ON,
这里需要做这些修改:
cisst_offer_saw_component (sawControllers OFF)                  -> cisst_offer_saw_component (sawControllers ON)  
cisst_offer_saw_component (sawConstraintController OFF)   -> cisst_offer_saw_component (sawConstraintController ON)
cisst_offer_saw_component (sawRobotIO1394 OFF)              -> cisst_offer_saw_component (sawRobotIO1394 ON)
cisst_offer_saw_component (sawIntuitiveResearchKit OFF)   -> cisst_offer_saw_component (sawIntuitiveResearchKit ON)
不过若是不做上面的修改,最重要的cisst倒是编译通过了,只关心底层技术的同学可以就此结束了。当然,要想把daVinci整套代码跑起来,还是得继续下去。

现在在build_cisst-saw下面执行rm -rf *,把这个目录全部清空。
好,现在可以继续了,在build_cisst-saw目录下执行cmake ../cisst-saw,这回发现cmake失败了,提示信息如下:
-- Could NOT find Curses (missing:  CURSES_LIBRARY CURSES_INCLUDE_PATH)
Can't compile curses based test programs for Amp1394, make sure you have libcurses dev installed
CMake Warning at /home/shaquille/WorkSpace/DVRK/build_cisst-saw/cisst/cisst-config.cmake:143 (message):
  find_package: cisst library "cisstTestsDriver" doesn't exist or hasn't been
  compiled
Call Stack (most recent call first):
  sawRobotIO1394/tests/CMakeLists.txt:25 (find_package)

CMake Error at sawIntuitiveResearchKit/components/CMakeLists.txt:38 (message):
  You need to make sure CISST_USE_SI_UNITS to ON

-- Configuring incomplete, errors occurred!

首先cmake提示咱们没有安装libcurses-dev,那咱们就安装吧,apt-get install libncurses5-dev
安装完成之后,继续rm -rf *,继续cmake ../cisst-saw,还是有错,提示如下:
CMake Error at sawIntuitiveResearchKit/components/CMakeLists.txt:38 (message):
  You need to make sure CISST_USE_SI_UNITS to ON

-- Configuring incomplete, errors occurred!
从这些信息可以看出,ncurses已经被cmake找到了,但是其他地方还有错。

怎么回事呢?其实,cisst-saw这个目录下的工程是要根据实际情况去配置的,因此需要修改一些cmake的工程配置,那如何修改cmake的工程配置呢?这里就不能简单的命令行操作了,需要用到cmake-gui。没用过的同学没关系,在Terminal里面试一下cmake-gui,没有的话就apt-get install cmake-gui。具体cisst-saw如何编译,最好先看一下JHU的官方声明,具体链接地址:https://github.com/jhu-cisst/cisst/wiki/Compiling-cisst-and-SAW-with-CMake。在继续任务之前,最好安装好qt5,本人的ubuntu是14.04.5,按照JHU的提示安装Qt5,执行sudo apt-get install qt5-default libqt5xmlpatterns5-dev。现在假设你装好了cmake-gui,先将build_cisst_saw下的文件全部删掉sudo rm -rf *,再清空cisst-saw目录下的内容,把刚才备份的cisst-saw目录下的内容全部拷贝到刚才被清空的cisst-saw目录下。在build_cisst_saw目录下执行:
sudo cmake-gui ../cisst_saw

3.2 使用cmake进行编译配置

执行cmake-gui之后出现cmake的配置界面,点击“Browse Source”指定cisst-saw目录(其实就是指定cisst-saw目录下CMakeList.txt的位置)。再点击“Browse Build”按钮,选择已经建立好的build_cisst-saw目录。最后勾选“Grouped”和“Advance”复选框,最终如图4所示:
图4

在这个界面上结合JHU的说明(https://github.com/jhu-cisst/cisst/wiki/Compiling-cisst-and-SAW-with-CMake)和咱们的实际情况,就可以进行工程的配置了。按照JHU的要求有几个是必须要选的:
CISSTNETLIB_DOWNLOAD_NOW
CISST_HAS_CISSTNETLIB
有几个是可选的,不过还是建议选上
CISST_XML_LIB,这个需要有libxml2的支持哦,强烈建议选上
CISST_HAS_SWIG_PYTHON ,这个需要有Python的支持,如果同学门的ubuntu上已经有SWIG和numpy的话,最好装上。本人没有,就没选了。
CISST_HAS_QT5,刚才本文已经提示要安装了,选上CISST_HAS_QT5就不能再选CISST_HAS_QT4了,这个一定要注意哦,不然CMake会提示出错的。
CISST_BUILD_TESTS,这个需要CPPUnit的支持,ubuntu上直接apt-get install libcppunit-dev就可以了
CISST_USE_SI_UNITS,之前编译不过就是因为没选这个,现在选上吧
CISST_cisstRobot,这个看起来就不明觉厉,还是选上吧
CISST_HAS_JSON,这个一定要选上哦,不然后面编译不过的。没有安装JSON的需要执行apt-get install libjsoncpp-dev
SAW_sawTrajectories,这个应该是搞路径规划的,在SAW目录下,里面有不少干货,强烈建议选上
根据实际情况设定好之后,就点击“Configure”按钮,让cmake帮你生成make所需的文件吧。
不过cmake提示有错,如图5和图6所示:
图5

图6

其实这个和之前的CISST_HAS_CISSTNETLIB有关,这次配置选项里多了一个Ungrouped Entries和CISSTNETLIB,展开它们,在CISSTNETLIB_DOWNLOAD_ARCHITECTURE中填写“x86_64”,在CISSTNETLIB中勾选其中的CISSTNETLIB_DOWNLOAD_NOW。
再次点击“Configure”按钮,从cmake的log中就会看到cmake在下载cisstNetlib:
Downloading: http://unittest.lcsr.jhu.edu/cisst/downloads/cisstNetlib/uncompressed/cisstNetlib-Fortran-3.0.0-Linux-x86_64.tgz
因为要下载,所以会耽误一点时间,天朝的网络访问外网本来就慢,大家耐心等个半小时吧
等待下载完成之后,cmake会提示配置成功。这个时候要留意一下QT目录下面cmake给生成的qt的路径是否是qt5的(cmake默认生成的是qt4的),要保证那些目录对应qt5的目录。改完之后再次点击“Configure”。
一切准备就绪之后点击“Generate”,这样配置阶段就大功告成,开始make吧。


由于工程很多,编译需要一点时间。编译结束时,make提示编译成功了,进行最后一步make install。


3.3 编译dvrk-ros

dvrk-ros的编译工作相对少一点,参考一下JHU的说明即可:https://github.com/jhu-dvrk/sawIntuitiveResearchKit/wiki/CatkinBuild
dvrk-ros需要依赖cisst-ros,因此还要编译cisst-ros(下载地址:https://github.com/jhu-cisst/cisst-ros)
需要说明的是,dvrk-ros不是用catkin make,需要用catkin build,编译之前需要安装这个工具sudo apt-get install python-catkin-tools。具体编译步骤如下:
1.建立一个build目录,mkdir catkin_dvrkros_ws,进入这个目录cd catkin_dvrkros_ws
2.建立src目录,mkdir src
3.初始化ROS的工作空间,catkin build
4.将当前workspace路径告诉ROS,source ./devel/setup.bash
5.进入src目录,cd src
6.在src中建立cisst-ros,mkdir cisst-ros
7.进入cisst-ros目录,从git上获取cisst-ros源码,git clone https://github.com/jhu-cisst/cisst-ros
8.在src中建立dvrk-ros,mkdir dvrk-ros
9.进入cisst-ros目录,从git上获取dvrk-ros源码,git clone https://github.com/jhu-dvrk/dvrk-ros
10.一切准备妥当,开始编译,执行catkin build


执行到sawRobotIO1394的时候提示出错了,出错信息如下:
Errors     << dvrk_robot:cmake /home/shaquille/WorkSpace/DVRK/catkin_dvrkros_ws/logs/dvrk_robot/build.cmake.002.log                                                                                        
Information: cisst has been found in "/usr/local/", headers are in "/usr/local//include"
CMake Error at /home/shaquille/WorkSpace/DVRK/catkin_dvrkros_ws/src/dvrk-ros/dvrk-ros/dvrk_robot/CMakeLists.txt:63 (find_package):
  Could not find a configuration file for package "sawControllers" that is
  compatible with requested version "1.4.0".
  The following configuration files were considered but not accepted:
    /usr/local/share/sawRobotIO1394/sawRobotIO1394Config.cmake, version: unknown

实际上,这个地方实际上是因为cmake漏掉了一些copy的工作,参照一下/usr/local/share/sawRobotIO1394和/usr/local/share/sawTextToSpeech目录下的文件的区别,如图7和图8所示:
图7


图8

发现/usr/local/share/sawRobotIO1394下有一个文件,而/usr/local/share/sawTextToSpeech下有两个文件。实际上sawTextToSpeechConfigVersion.cmake仅仅指明了sawTextToSpeech版本信息。弄清楚这个问题,将sawTextToSpeechConfigVersion.cmake复制到/usr/local/share/sawRobotIO1394目录下,并且改名为sawsawRobotIO1394ConfigVersion.cmake。打开sawRobotIO1394Config.cmake中规定了版本号是1.4.0,那就需要将sawsawRobotIO1394ConfigVersion.cmake中的版本号也改成1.4.0。此外,sawControllers和sawIntuitiveResearchKit也有同样的问题,那就用同样的方法做一些修改。
继续编译,版本信息出错的问题没有了,但是还有其他错,提示说
/usr/bin/ld: cannot find -lsawControllersQt
这个很显然是因为没找到sawControllersQt,在/usr/local/lib下面只有其他编译出来的.a文件,确实没有libsawControllersQt.a,如图9所示:
图9


那libsawControllersQt.a在哪呢?去build_cisst_saw目录下的cisst/lib下面去找一下,那些.a都在里面,找到libsawControllersQt.a,并将其copy到/usr/local/lib目录下。
继续catkin_build,又提示出错了:
Errors     << dvrk_robot:make /home/shaquille/WorkSpace/DVRK/catkin_dvrkros_ws/logs/dvrk_robot/build.make.002.log                                                                                          
/home/shaquille/WorkSpace/DVRK/catkin_dvrkros_ws/src/dvrk-ros/dvrk-ros/dvrk_robot/src/dvrk_full_ros.cpp:53:6: warning: unused parameter ‘sig’ [-Wunused-parameter]
 void mySigintHandler(int sig)
      ^
In file included from /usr/local/include/sawIntuitiveResearchKit/mtsIntuitiveResearchKitMTM.h:23:0,
                 from /home/shaquille/WorkSpace/DVRK/catkin_dvrkros_ws/src/dvrk-ros/dvrk-ros/dvrk_robot/src/dvrk_mtm_ros.cpp:28:
/usr/local/include/sawIntuitiveResearchKit/mtsIntuitiveResearchKitArm.h:39:69: fatal error: sawIntuitiveResearchKit/mtsIntuitiveResearchKitArmTypes.h: No such file or directory
 #include <sawIntuitiveResearchKit/mtsIntuitiveResearchKitArmTypes.h>
                                                                     ^
compilation terminated.
make[2]: *** [CMakeFiles/dvrk_mtm_ros.dir/src/dvrk_mtm_ros.cpp.o] Error 1
make[1]: *** [CMakeFiles/dvrk_mtm_ros.dir/all] Error 2
make: *** [all] Error 2
意思就是说在下面没找到mtsIntuitiveResearchKitArmTypes.h,继续在~/build_cisst_saw里面找,找到include目录,找到sawIntuitiveResearchKit目下,果然有mtsIntuitiveResearchKitArmTypes.h,继续将其copy到/usr/local/include/sawIntuitiveResearchKit目录下。
继续编译,继续说缺少mtsVFDataFollow.h,回到刚才那个目录,继续将mtsVFDataFollow.h往/usr/local/include/sawIntuitiveResearchKit下面copy。
继续编译,终于全部成功了,提示如下:
Finished  <<< dvrk_teleop                      [ 23.0 seconds ]               
[build] Summary: All 9 packages succeeded!                                    
[build]   Ignored:   None.                                                    
[build]   Warnings:  1 packages succeeded with warnings.                      
[build]   Abandoned: None.                                                    
[build]   Failed:    None.                                                    
[build] Runtime: 32.9 seconds total.                                          
[build] Note: Workspace packages have changed, please re-source setup files to use them.

好了,今天就到这里吧,希望对同学们有用。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
机器人的D-H(Denavit-Hartenberg)模型是一种用于描述机器人关节间关系的数学模型。该模型使用四个参数来描述每个关节之间的转动和平移关系,即旋转角度、平移距离、关节长度和角度偏移量。以下是D-H模型的建立和推导过程: 1. 定义基坐标系和机器人坐标系 机器人通常有多个关节,每个关节都有一个旋转轴和平移轴。为了方便描述机器人的运动,需要建立一个基坐标系和多个机器人坐标系。基坐标系通常是固定不动的,而机器人坐标系则随着机器人关节的运动而变化。 2. 设计机器人关节 每个机器人关节都有一个旋转轴和平移轴,这些轴可以沿着基坐标系的x、y、z轴方向。为了方便描述,需要将每个关节的轴线转换到机器人坐标系中。 3. 定义D-H参数 D-H参数用于描述每个关节之间的转动和平移关系。每个关节都有四个参数,分别是旋转角度、平移距离、关节长度和角度偏移量。这些参数需要根据机器人的实际设计和运动方式来确定。 4. 建立转移矩阵 转移矩阵用于描述机器人坐标系之间的转换关系。每个机器人坐标系都可以通过一个转移矩阵来表示,这个矩阵包含了旋转和平移的信息。转移矩阵可以通过矩阵乘法来实现多个坐标系之间的转换。 5. 推导机器人的运动方程 通过D-H参数和转移矩阵,可以推导出机器人的运动方程。这个方程可以用于描述机器人关节的运动和末端执行器的位置和姿态。根据运动方程,可以控制机器人的运动,完成各种任务。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值