关于wiki 中rosjava教程自定义server和client遇到的问题以及解决方法

首先看这篇文章的前提是你已经按照wiki上的rosjava操作了前面的步骤。

然后到了这一步的教程。即创建server和client,这一步的教程的网址如下:

http://wiki.ros.org/rosjava_build_tools/Tutorials/indigo/UsingServices

按照步骤其中其中在修改

 add_service_files(
   DIRECTORY srv
   FILES
   CustomService.srv #这个就是你自定义的哪srv文件 ,上面的保持不变就好
#   Service2.srv
 )

请参照以上的写法。tips:该写法参照于/home/lll/rosjava/src下的 rosjava_test_msgs,里面有教你如何自定义message还有srv。请多参考该test工程。

接着一步一步然后幸运的话,就没有问题。不幸的话,估计会遇到和我一类的问题,找不到文件。

以下是编译出错的信息:

AILURE: Build failed with an exception.

* What went wrong:
Could not resolve all dependencies for configuration ':client_server:compileClasspath'.

> Could not find any matches for org.ros.rosjava_messages:rosjava_custom_srv:[0.1, 0.2) as no versions of org.ros.rosjava_messages:rosjava_custom_srv are available.

lll@ubuntu:~$ env|grep ROS
ROS_ROOT=/opt/ros/kinetic/share/ros
ROS_PACKAGE_PATH=/home/lll/rosjava/src:/opt/ros/kinetic/share
ROS_MASTER_URI=http://localhost:11311
ROS_MAVEN_DEPLOYMENT_REPOSITORY=/home/lll/rosjava/devel/share/maven
ROS_MAVEN_PATH=/home/lll/rosjava/devel/share/maven:/opt/ros/kinetic/share/maven
ROS_MAVEN_REPOSITORY=https://github.com/rosjava/rosjava_mvn_repo/raw/master
ROSLISP_PACKAGE_DIRECTORIES=/home/lll/rosjava/devel/share/common-lisp
ROS_DISTRO=kinetic
ROS_ETC_DIR=/opt/ros/kinetic/etc/ros

聪明的小伙伴一下就知道应该是哪个环境变量有问题了吧。对的,可是是哪个呢?no!愚蠢的我居然找了半天资料。

那么具体是哪个呢,别急,找一下。


看到了,介么多,哪一个呢。先把这些变量记一下,打开一个新的终端。

在workspace的根目录执行catkin_make
[plain] view plain copy
lcz@ubuntu:~/rosjava_srv_ws$ catkin_make
该命令会将srv包里的.srv文件编译成jar包,并放到本地maven仓库里,一般位于下面2个之一
    /home/lcz/android_core/devel/share/maven  
    /home/lcz/rosjava/devel/share/maven  

所以根据之前在编译srv包的时候会生成一个对应名字的jar包。当然名字还包含对应的版本,因为你配置过了。

在相关的目录下并没有找到我要的rosjava_custom_srv相关的jar包。返回去看一下下/home/lcz/rosjava_srv_ws/src/tutorial_custom_srv/client_server下的配置文件 build.gradle

dependencies {
  /* An external maven artifact dependency */
  compile 'org.ros.rosjava_core:rosjava:[0.3,0.4)'
  compile 'org.ros.rosjava_messages:rosjava_custom_srv:[0.1, 0.2)'
  /* Example of a local subproject dependency */
  /* compile project(':sibling_gradle_project') */
}

看配置org.ros.rosjava_core和org.ros.rosjava_messages相关的jar很可能位于同一目录下,按照这个思路。在/home/lcz/rosjava/devel/share/maven/org/ros 下找到了rosjava_core和rosjava_messages。那么是不是编译的时候在这里的rosjava_messages查找的jar包呢。先找到之前编译rosjava_custom_srv生成的jar包。

通过tree命令查看文件夹下所有文件 找到了rosjava_custom_srv-0.1.0.jar然后定位具体位置

find -name rosjava_custom_srv-0.1.0.jar
./src/tutorial_custom_srv/client_server/build/install/client_server/lib/rosjava_custom_srv-0.1.0.jar
./build/rosjava_custom_srv/java/rosjava_custom_srv/build/tmp/publishMavenJavaPublicationToMavenRepository/org/ros/rosjava_messages/rosjava_custom_srv/0.1.0/rosjava_custom_srv-0.1.0.jar
./build/rosjava_custom_srv/java/rosjava_custom_srv/build/libs/rosjava_custom_srv-0.1.0.jar

./build/rosjava_custom_srv/java/rosjava_custom_srv/build/tmp/publishMavenJavaPublicationToMavenRepository/org/ros/rosjava_messages/rosjava_custom_srv/0.1.0/rosjava_custom_srv-0.1.0.jar这个包中含有MD5校验,和rosjava中的test工程生成的jar文件下的目录结构相似程度最高。但其实这几个jar是一样的。

找到后将该jar目录按照对应的目录结构复制到/home/lcz/rosjava/devel/share/maven/org/ros/rosjava_messages下

cp -r rosjava_messages/ /home/lcz/rosjava/devel/share/maven/org/ros/rosjava_messages

然后再回到工作空间下

/home/lcz/rosjava_srv_ws 执行 catkin_make

ok,执行成功。

最后回过头来看,ROS_MAVEN_PATH=/home/lcz/rosjava/devel/share/maven:/opt/ros/kinetic/share/maven

就是相关的查找导致编译出错的jar的相关环境变量。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值