前言

注意:因为版本原因没能成功操作R2,还在探索阶段,这里只是记录安装过程。   NASA的R2机器人已经在空间站成功的部署了,可是这个开源机器人在ros平台上的资源很少,估计都被人遗忘了,R2机器人拥有两条机械臂以及人形的外壳,对于初学ros的人来说应该是非常有吸引力的,今天参考书上的例子尝试下R2的操作。    

实验环境

ros:kinetic Ubuntu:16.04 gazebo:7.0.0

安装

现在下载github的资源是真的慢。。。解决办法可以看我这篇微博:解决github资源下载慢  
mkdir -p ~/r2_ws/src
cd r2_ws/src
catkin_init_workspace
catkin_create_pkg r2 rospy geometry_msgs
git clone https://gitee.com/xmy0916/nasa_r2_simulator.git
git clone https://gitee.com/xmy0916/nasa_r2_common
  你可以看到这两个谷仓是我从NASA的github上拉到我的gitee上的,从gitee下载资源非常的快。

编译

cd ~/r2_ws
catkin_make
  不出意外要很多报错,这也是这篇博客这么晚写的原因,初学的时候看到这些问题头都大了,无从下手,慢慢的发现作者给的包肯定是能用的,问题都出在版本不同上了,所以解决这些问题的方法就是看不同版本软件的源码,寻找差异。debug过程我个人觉得还是最重要的。  

错误一

    细看一下好像是c的标准不一样,这个好解决。
修改CMakeLists.txt中,SET(CMAKE_CXX_FLAGS " ")为SET(CMAKE_CXX_FLAGS “-std=c++0x”)
 
cd ~/r2_ws/src
sudo vi CMakeLists.txt 
   

错误二:

  再次编译
cd ~/r2_ws
catkin_make
    可以看到刚才的问题解决了,然后是gazebo的 问题,这个比较棘手。。。作者用的gazebo版本非常老。。。好像是gazebo0.几的版本这些函数都废弃了。我于是下载了作者用的版本的gazebo源码,对比了缺少的代码,但是能力有限,本以为添加这几个函数就可以了,结果这些函数间互相牵连的太多了。。。改动起来要大改,而且不太清楚这些函数的用处,所以只能放弃了。这里我只整明白了修改一部分代码。  
sudo gedit /home/xmy/r2_ws/src/nasa_r2_simulator/gazebo_gripper/src/gazebo_gripper/GazeboGripper.cpp
  打开报错的cpp文件,ctrl+F搜索报错关键字AddContact     修改为:
                if (collisionPtrs.find(name1) == collisionPtrs.end())
                {
                    cc[name1] = contacts[i].collision1;
                    contactCounts[name1] += 1;
                }
                if (collisionPtrs.find(name2) == collisionPtrs.end())
                {
                    cc[name2] = contacts[i].collision2;
                    contactCounts[name2] += 1;
                }
 

错误三

  再次编译
cd ~/r2_ws
catkin_make
    可以看到AddContact的报错已经没有了。
然后处理这个replace_all replace_all是c语言boost库里面的函数,这个肯定很好解决 网上搜了下源码发现replace_all在algorithm类里面,显然调用的代码应该是
 
boost::algorithm::replace_all 
  再次编辑文本
sudo gedit /home/xmy/r2_ws/src/nasa_r2_simulator/gazebo_taskboard/src/gazebo_taskboard/GazeboTaskboard.cpp
 
包含下头文件#include “boost/algorithm/string.hpp” 全改成boost::algorithm::replace_all 即可。
   

错误四

  再次编译
cd ~/r2_ws
catkin_make
    最后一个错误了。。。真不容易,这个吧,就是设置一个属性,之前学java都会有set、get方法,然后我看了0.几版本的gazebo源码,他确实就是修改了类里面一个成员的值为true,也不知道这个成员在那些文件都被用上了,我也不好直接加上。。。哎。。那就只能把这句话删了呗。。。  
sudo gedit /home/xmy/r2_ws/src/nasa_r2_simulator/gazebo_gripper/src/gazebo_gripper/GazeboGripper.cpp
    再次编译
cd ~/r2_ws
catkin_make
    大功告成。。但是这个注释操作估计会带来隐患。。。

测试

cd ~/r2_ws
source ./devel/setup.bash
roslaunch r2_gazebo r2_gazebo.launch
    看样子安装是有点问题的,初始化之后他应该是会抬头收起手臂的。。。。