<ros;ubuntu14.04下rosindigoeclipse开发环境搭建(代码片段)

小贝也沉默 小贝也沉默     2023-03-19     161

关键词:

第三次更新
现在我一直采用的编辑方式,再次更新于此,希望能够和大家分享一下,毕竟合理使用IDE能够极大的提高编码的速度和身心愉悦程度。如果对其他不敢兴趣的话,请直接跳到 1. 目前最优解决方案


非常愧疚, 之前写的内容早就已经不能完成想要达到的效果, 就连ROS官网上面, 都推荐使用catkin的方式来管理ROS包, 而非rosbuild。 而之前的内容仅在rosbuild的环境下可以使用。并且, 越来越多的代码使用C++11标准, 而默认的Eclipse是不支持 C++11 的. 前两部分是最新更新的内容, 关于第三部分的内容, 其实对于大部分人而言, 是可以忽略的了。

今天师兄推荐了一本书, Mastering ROS for Robotics Programming, 大致翻了一下, 感觉内容很不错, 做ROS的同学推荐看一看. 另外, 这本书提到了怎么配置Eclipse作为ROS的IDE, 按照书上的步骤, 下述中第一部分的内容就出来了. 亲测好使, 所以记录下来和大家进行分享. 另外在ROS IDEs中的内容, 包含怎么导入catkin工作空间的方法, 之前也试过, 感觉不怎么好用. 配置到Eclipse中后, Eclipse会有很多错误提示, 但编译是没有问题的. 看到满篇的红线, 真的很让人抓狂!! 第二部分是在之前的工作中一直使用的办法, 解决了错误红线的问题, 可以编辑, 可以编译, 在命令行中也可以运行. 但是附加的工作量就是所有代码写好之后, 将要把代码拷贝到对应的catkin工作空间中. 所以有如下结论:

推荐使用第一种方式进行ROS开发环境配置, 可选使用第二种方式, 第三种方式是在rosbuild方式编译的选择. 而关于 ROS IDEs中catkin的环境配置, 建议直接不看了.

1. 目前最优解决方案

第三次更新内容
留个坑在这儿,切换系统之后配图加文字再进行说明。
仍然是在catkin工作目录下创建包


在之前的工作中, 使用另一种方式, 也成功编译过ROS的代码。 事情是这样的, 代码分了两层, 第一层只依赖于Ubuntu, 我是直接在Eclipse里面新建工程, 完成第一层的工作。 第一层完成之后, 在第一层的基础上, 写了跟ROS相关的代码, 通过配置ROS路径以及各种库, 也成功运行了ROS节点。示例如下。

首先, 新建一个C++ Project, 创建文件gen_msg.h, 内容如下:

class GenMsg 
public:
  int getValue() 
    return ++val_;
  
private:
  int val_;
;

再新建一个main.cpp, 内容如下:

#include <ros/ros.h>
#include <std_msgs/Int64.h>
#include "gen_msg.h"

int main(int arc, char* argv[]) 
  ros::init(arc, argv, "test_ros");
  ros::NodeHandle nh;
  GenMsg gen;
  ros::Rate rate(20);
  std_msgs::Int64 msg;

  ros::Publisher pub = nh.advertise<std_msgs::Int64>("/test_ros/Int64", 1);
  while (ros::ok()) 
    msg.data = gen.getValue();
    pub.publish(msg);
    rate.sleep();
  

  ros::shutdown();

显然, #include <ros/ros.h>, 出现了黄线, 找不到这个头文件。 点击[Project] -> [Properties] -> [C/C++ Build] -> [Settings] -> [GCC C++ Compiler] -> [Inlucdes], 新增下列包含目录:



[GCC C++ Linker] -> [Libraries]中新增库路径以及需要链接的库, 按照上述代码中的需求, 只是链接下图所示的库就足够了。 若是用到了别的库, 那么再新增对应的库名称就好。

roscpp
rosconsole_backend_interface
rosconsole_log4cxx
cpp_common
xmlrpcpp
rostime
roscpp_serialization
rosconsole



点击[OK], 返回主界面, 又可以开开心心的编译了。



这种方式可以在Eclipse中编写代码以及编译代码, 但不能直接在Eclipse中运行。可以直接在命令行中运行。 当然, 首先需要在一个命令行中运行roscore

cd /path/to/your/workspace/test_ros/Debug/
./test_ros

没有任何输出, 没有消息就是最好的消息。 在打开一个命令行, 可以通过rostopic list来查看我们发布的话题/test_ros/Int64是否存在, 或者通过rostopic echo /test_ros/Int64来打印消息。结果如下图所示:



这种方式可以一步一步, 从新建工程, 到完成代码, 都在Eclipse中完成。 但是不能调试, 不能在Eclipse中运行该二进制文件。 具体原因是什么, 我也不太清楚。 但能够编写并编译代码, 已经很开心了。 关于调试的问题, 只能另想办法了, 比如写日志等。所有代码写好之后, 再将代码复制到catkin_ws/src中去, 写好CMakeLists.txt, 一个工程就完成了。

2. 配置已有Catkin包到Eclipse

对于一个程序员来说, 有一个好用的IDE绝对是必要的, 对于写代码能够带来极大的好处。 接触ROS也有好几年了, 之前一直也受到在编辑器里面写代码的困扰。很苦比…

2.1. Global settings in Eclipse IDE

  • [Window] -> [Preferences] -> [C/C++] -> [Build] -> [Settings]中, 选择Discovery标签, 选中CDT GCC Build Output Parser [Shared] 选项, 更改下面的Compiler command pattern为:(.*gcc)|(.*[gc]\\+\\+)|(.*clang), 更改Container to keep discovered entries为最后一个选项: Project(use when settings are the same for all files in the project). 设置过程如图所示:



  • 还是在刚刚的标签页, 选中 CDT GCC Buillt-in Compiler Settings [Shared], 更改下面的选项Command to get compiler specs: $COMMAND -E -P -v -dD -std=c++11 "$INPUTS"



2.2. ROS compile script for Eclipse IDE

在解决使用Eclipse编译代码的问题之前, 首先要解决的就是source /opt/ros/indigo/setup.bash的问题. 在命令行中通过命令catkin_make可以完成编译, 是因为这个脚本已经写入到~/.bashrc中, 打开命令行时已经被source.

打开命令行, 输入: sudo vim /usr/local/bin/eclipsemake, 将下述内容复制到该文件中:

#!/bin/bash
source /opt/ros/indigo/setup.bash
make "$@" VERBOSE=1 -j8

打开命令行, 输入: sudo vim /usr/local/bin/eclipsemake-tests, 将下述内容复制到该文件中:

#!/bin/bash
source /opt/ros/indigo/setup.bash
make "$@" VERBOSE=1 -j8 run_tests

最后, 再更改两个文件的权限: sudo chmod +x /usr/local/bin/eclipsemake*

2.3. Importing the project into Eclipse

完成上述过程, 下面需要将一个工程导入到Eclipse中, 下面的步骤将以ur_modern_driver包作为示例, 当然, 你也可以用自己的catkin工作空间中的包作为导入的工程。 ur_modern_driver包可以通过git clone https://github.com/ThomasTimm/ur_modern_driver.git /path/to/your/catkin_ws/src/ur_modern_driver命令进行下载。
[New Project ] -> [C/C++] -> [MakeFile Project with Existing Code],



如上图所示, 点击Finish, 即可看到Eclipse左侧Project Explorer视图中出现了我们的ur_modern_driver包的工程文件。当然, 我们还需要再配置一下该工程。 [Project] -> [Properties] -> [C/C++ Build],



如上图所示, 更改Build command: eclipsemake, 更改Build location/path/to/your/catkin_ws/build/PROJECT_NAME

[C/C++ Build] -> [Environment] 中添加一个变量VERBOSE, value = 1. 如下图所示:



[C/C++ General] -> [Paths and Symbols] -> [#Symbols]GNU C++添加一个Symbol __GXX_EXPERIMENTAL_CXX0X__, 不设定任何值。 如下图所示:



[C/C++ General] -> [Preprocessor Includes Paths, Macros etc.] -> [Providers] 中选择 CDT GCC Build Output Parser [Shared]CDT GCC Built-in Compiler Settings [Shared], 并且两种都将 Use global provider shared between projects选中。



配置结束后, 就可以开开心心的编译了。* [Project]* ->* [Build Project]*. 你会在Eclipse中看到如下内容:



2.4. Adding run configurations to run ROS nodes in Eclipse

在上面的基础上, 已经是可以开开心心的编写代码, 以及编译代码了。 但是还是不能在Eclipse中运行代码。 一般而言, 个人还是推荐直接在命令行中运行生成的节点, 而不是在Eclipse中运行。当然, 想在Eclipse中运行节点, 也是可以的, 主要也就是配置以下run configurations.

[Run As] -> [Run Configurations], 双击[C/C++ Application], 按下图配置运行的二进制文件。



[Environment]中, 配置ROS_MASTER_URIROS_ROOT两个变量, 如下图所示:



ROS_ROOTROS_MASTER_URI的值可以打开Terminal,输入下述命令,然后复制打印出的值到Value即可.

$ echo $ROS_ROOT # http://localhost:11311
$ echo $ROS_MASTER_URI # /opt/ros/indigo/share/ros



保存后, 点击右下角的[Run]按键即可运行了。当然, 你还需要运行roscore, 运行ur_modern_driver会出现如下输出, 至少证明, 该节点确实被运行起来了。



3. ROSBUILD配置方式

前记:本文主要是翻译http://wiki.ros.org/IDEs中的第一部分关于Eclipse中ROS环境配置.其中需要在Terminal中输入的指令均以’ $ ’ 开头,黑体部分即为指令.由于本人英语能力有限(目前为止四级都还没有过),所以很多自己不太能读懂的地方都是意会,而且有部分内容尚未翻译.

3.1. 安装Eclipse

网上关于Ubuntu下安装Eclipse的帖子非常多,我也就不整理了.总的说来其实就两步,先安装JDK,然后解压Eclipse就OK了.需要的可以百度一下,一抓一大把.

3.2. 创建工程文件

3.2.1 创建ROS工程包并转成Eclipse工程文件

首先,cd到自己的工作空间.创建一个自己的Package,使用下诉命令.

$ roscd
$ cd camera
$ roscreate-pk gusb_cam_pub sensor_msgs std_msgs roscpp

如果对上述命令的文件目录有疑问,可查看上一篇博客. 我的工作空间目录是 ~/workspace/ROS, roscd首先是直接进入该目录.如果你roscd没有进入到你所新建的工作目录,说明你没有执行source ~/workspace/ROS/setup.bash .你也可以打开Terminal,输入 echo $ROS_PACKAGE_PATH .查看输出信息,是否含有你新建的工作目录. 我在工作目录下新建了一个文件夹,即对应教程中的sanbox文件夹.文件夹名是 camera. 所以在第三条命令执行前,我的完整目录应该是 ~/workspace/ROS/camera .执行第三条指令,即在该目录下新建ROS Package.包名是cam_pub(因为下一步工作我准备编写一个获取USB Camera数据然后通过Publish/Subscribe的形式发布出来的节点). 附加依赖包有 sensor_msgs和std_msgs. 然后,执行:

$ cd cam_pub
$ make eclipse-project

3.2.1.1 创建多个Eclipse工程文件

cd到你的package所在目录.按照上述我的工作目录,执行下述指令的目录应该是在 ~/workspace/ROS/camera .在该目录下,保存着之前我所创建的多个工程文件.然后运行

$ rosmake –target=eclipse-project –specified-only *

3.3. 导入工程到Eclipse

现在,开启Eclipse, File(文件) → Import(导入) → Existing projects into workspace(已存在的工程到工作空间),



点击, 然后选择路径到上诉已创建好的工程目录.



此处一定要注意,不能选择[Copy projects into workspace], 复制整个工程到Eclipse工作目录后,编译运行会出现问题. 点击, 完成整个导入过程.

3.4. 实验效果

  1. 现在我们首先尝试将之前已有代码导入Eclipse中.示例代码可以参考http://wiki.ros.org/ROS/Tutorials/WritingPublisherSubscriber%28c%2B%2B%29, 其中有两个及其简单的ROS Node代码.一个talker,一个listener.安装上述网站顺序,建好代码.在Terminal中尝试运行OK.现在可以按照上诉导入步骤导入到Eclipse中.导入之后没有任何报错.

  2. 如果没有已有Package需要导入,现在尝试第二种可能,就是在按照步骤2中创建好自己的Package,但是没有任何代码.可以看到,Eclipse中src文件夹是空文件夹,没有任何源码文件.现在尝试在Eclipse中创建源码文件,编辑代码. 右键单击src文件夹→New → Source File, 输入文件名talker.cpp,单击Finish.复制1)中网站所给出的talker.cpp代码.复制进来应该是没有任何错误的.但是我在复制之后有很多错误.我Project→ Clean…了一下,然后Project→ Build All,就OK了.没有任何错误.我也不知道为什么.

在下图中可以看到Eclipse中关于导入的节点文件夹中所包含的所有文件夹以及文件.



之前接触过ROS的朋友肯定知道,在写好代码之后均需修改CmakeList.txt,然后在Terminal中make才能编译源码.在Eclipse中同样需要这样.双击选择CmakeLists.txt,在文件末尾添加下述文字.

rosbuild_add_executable(talker src/talker.cpp)
rosbuild_add_executable(listener src/listener.cpp)

现在点击Project→ Build All, 即可编译.在文件夹bin中可以看到生成的可执行文件.一个talker,一个listener.

3.4.1. 在Eclipse中运行ROS可执行文件

在Eclipse中运行和调试ROS代码,最重要的一步是配置launchconfiguration.点击Run→ Run Configuration… → C/C++ Application (双击或者点击New),选择你所要运行的程序.在EnvironmentTab中,新增(至少)

ROS_ROOT
ROS_MASTER_URI



如果你不知道ROS_ROOT或者ROS_MASTER_URI的值是什么.可以打开Terminal,输入下述命令,然后复制打印出的值到Value即可.

$ echo $ROS_ROOT
$ echo $ROS_MASTER_URI



现在打开Terminal,输入$ roscore,然后在Eclipse中分别运行talker,和listener.依次可见到如下效果.说明ROS在Eclipse中环境搭建成功.并且ROSNode运行正常. 运行talker后的输出显示.



运行listener后的输出显示.



如何解决 ros-indigo-ubuntu (14.04) 中的“rospkg.common.ResourceNotFound”?

】如何解决ros-indigo-ubuntu(14.04)中的“rospkg.common.ResourceNotFound”?【英文标题】:Howtosolve"rospkg.common.ResourceNotFound"inros-indigo-ubuntu(14.04)?【发布时间】:2017-01-2420:17:43【问题描述】:我正在使用ros做人脸检测机器人。我在运... 查看详情

命令行无法在 Ubuntu 14.04 中为 ROS 创建 catkin 工作区

】命令行无法在Ubuntu14.04中为ROS创建catkin工作区【英文标题】:CommanlineisnotworkingtocreateacatkinworkplaceinUbuntu14.04forROS【发布时间】:2018-08-1207:15:52【问题描述】:我实际上是ROS和Linux的新手。为此,我在所有这些事情上都有些挣扎。... 查看详情

ubuntu14.04+ros启动本地摄像头

STEP1安装usb_cam创建一个工作空间,make一下mkdir -p~/catkin_ws/srccd~/catkin_ws/catkin_make STEP2下面是安装usb_camcdcatkin_ws/srcgitclonehttps://github.com/bosch-ros-pkg/usb_camusb_camcdusb_cammkdirbuildcdbuil 查看详情

ubuntu14.04安装和配置rosindigo

安装ROS配置Ubuntu的软件源配置Ubuntu要求允许接受restricted、universe和multiverse的软件源,可以根据下面的链接配置:https://help.ubuntu.com/community/Repositories/Ubuntu配置成如下图所示即可,一般情况下,这些配置都是默认的。软件源配置添加... 查看详情

ubuntu14.04使用本地摄像头跑orbslam2

前面的准备:Ubuntu14.04安装ROS安装步骤和问题总结Ubuntu14.04+ROS启动本地摄像头 STEP1:第一个终端roscoreSTEP2:第二个终端运行usb_camroslaunchusb_camusb_cam-test.launchSTEP3:rosrunORB_SLAM2Mono/home/zc/Desktop/ORBvoc.txt /home/zc/D 查看详情

ros安装与卸载教程

一ros安装1.0设备环境:Ubuntu14.04rosindigo1.1配置Ubuntu仓库变为允许"restricted,""universe,"and"multiverse1.2 sudosh-c‘echo"debhttp://packages.ros.org/ros/ubuntu$(lsb_release-sc)main">/etc/apt/sources.list.d/r 查看详情

ubuntu20.04下折腾ros

设置环境变量如下:运行小乌龟:控制小乌龟不跑啊 查看详情

ubuntu20.04下折腾ros

设置环境变量如下:运行小乌龟:控制小乌龟不跑啊 查看详情

ubuntu20.04下折腾ros

设置环境变量如下:运行小乌龟:控制小乌龟不跑啊 查看详情

ros:使用qtcreator创建gui程序

开发环境:Ubuntu14.04ROSindigoversionQtCreator3.0.1basedonQt5.2.1步骤如下:(按照下面命令一步步来,亲测可行)(一)安装qt-ros相关的包打开终端,输入下面的命令:$sudoapt-getinstallros-indigo-qt-create$sudoapt-getinstallros-indigo-qt-build(二)创建一... 查看详情

ubuntu18.04三五分钟即可一键安装ros系统(亲测有效)(代码片段)

...;如果换过了就不需要这一步)打开软件和更新弹窗在Ubuntu软件这里点击右边红色框,选择其他站点测试完之后选择服务器就行,点击关闭就行。最后在终端更新一下:sudoapt-getupdate2、安装ROSwgethttp://fishros.com/install... 查看详情

ubuntu14.04服务器环境下配置方法如下:(代码片段)

这篇文章主要介绍了Ubuntu14.04服务器环境下配置PHP7.0+Apache2+Mysql5.7的方法,较为详细的分析了Ubuntu14.04操作系统环境下配置PHP7.0+Apache2+Mysql5.7的具体步骤与相关命令使用技巧,需要的朋友可以参考下本文实例讲述了Ubuntu14.04服务器环境... 查看详情

ubuntu18.04版本下安装ros系统

...各种网络上别人安装的方法安装,出现各种问题,在配置ubuntu安装源时出现E:Malformedentry60inlistfile/etc/apt/sources.list(Component)E:Thelistofsourcescouldnotberead.等等,都是源配置问题。下面是本人最后安装成功的步骤。Ubuntu18.04 对应的ROS... 查看详情

ubuntu14.04下搭建graphlab集群

ubuntu14.04下搭建GraphLab集群1.GraphLab简单介绍  GraphLab是CMU(卡耐基梅隆大学)开发的一个以vertex为计算单元的大规模图处理系统,是继google的Pregel之后的第一个开源的大规模图处理系统,它解决了传统MapReduce框架... 查看详情

windows7下u盘安装ubuntu14.04双系统

1.准备工作(1)下载Ubuntu14.04系统镜像文件,Ultraiso,EasyBcd,分区助手  Ubuntu14.04地址:http://www.ubuntu.com/download/desktop/  Ultrasio官网地址:http://cn.ultraiso.net/xiazai.html(2)U盘一个(大于2G)2.制作U盘安装盘(1)格式化U盘(一... 查看详情

ros下kinect2的驱动安装及简单应用(代码片段)

...也都有支持。当然,Kinect2也是能够支持的。ROS安装于Ubuntu之上,我使用的版本是Ubuntu14.04+ROSindigo。关于ROS的安装问题,可以查看官网相关指导。很简单的步骤。依次输入下列命令:sudosh-c'echo"debhttp://packag... 查看详情

(ros/catkin)××/××.h:nosuchfileordirectory

操作系统:ros(indigo)/ubuntu14.04编译工具:cmake(catkin_make)出现错误:robot_control/src/robot_control.cpp:9:62:fatalerror:robot_control/robot_control.h:Nosuchfileordirectory #include<robot_control/robot_con 查看详情

robotoperatingsystem(ros)学习笔记2---使用smartcar进行仿真

搭建环境:XMWare Ubuntu14.04 ROS(indigo)转载自古月居 转载连接:http://www.guyuehome.com/248 一、模型完善  文件夹urdf下,创建gazebo.urdf.xacro、smartcar.urdf.xacro、smartcar_body.urdf.xacro三个文件1、机器人主体smartcar_bod 查看详情