ROS开发可以使用多种编译器编写代码,为了方便项目的开发很多开发者会选择使用IDE进行开发
其中Eclipse就是在ROS开发中很常见的集成编译器,本文以Eclipse编译器为基础讲解如何利用Eclipse
环境开发ROS。
在开发之前需要先设置好相应的开发环境,具体可以详见:
https://blog.csdn.net/qq_34911636/article/details/100017518
https://blog.csdn.net/qq_34911636/article/details/100057210
(一)创建工作空间
1、在终端中输入cd ~/ 命令切换到root根目录下
2、mkdir -p catkin_ws/src 创建文件夹catkin_ws和src
3、cd catkin_ws/src 切换到src目录下面
3、catkin_init_workspace 输入工作空间初始化命令
4、cd .. 命令切换到上一级目录catkin_ws(也可以使用cd ~/catkin_ws/命令)
5、catkin_make 命令编译工作空间
6、source devel/setup.bash 设置工作空间的环境变量
7、echo $ROS_PACKAGE_PATH 用该命令查看是否设置成功,若成功则终端会出现以下提示:
至此工作空间创建完成
(二)在工作空间基础上创建功能包
1、首先把目录切换到cd ~/catkin_ws/src
2、在终端中输入catkin_create_pkg learning_communication std_msgs rospy roscpp
其中catkin_create_pkg为创建功能包命令,learning_communication为功能包的名称,后面三项
std_msgs rospy roscpp为功能包的依赖项
3、cd .. 命令切换到上一级目录catkin_ws(也可以使用cd ~/catkin_ws/命令)
4、使用catkin_make 命令重新编译工作空间
5、source ~/catkin_ws/devel/setup.bash 设置环境变量
(三)创建Eclipse工程文件
1、cd ~/catkin_ws/ 切换到catkin_ws目录
2、catkin_make --force-cmake -G"Eclipse CDT4 - Unix Makefiles" 输入命令生成可调式的工程文件
3、设置终端的环境变量到Eclipse中
awk -f $(rospack find mk)/eclipse.awk build/.project > build/.project_with_env && mv build/.project_with_env build/.project
项目的文件在目录 ~/catkin_ws/build,至此Eclipse工程文件创建完成
(四)将上述创建完的工程文件加载到Eclipse中
1、打开Eclipse软件设置catkin_ws 文件夹作为工作空间文件夹(文件夹可以自行创建一个)
2、选择File --> Import --> General --> Existing Projects into Workspace
3、点击next,从文件夹~/catkin_ws/导入工程,点击finish完成导入
4、添加预编译头文件命令,低版本的Eclipse软件是不会识别到ROS的头文件信息的,为了修复它
作如下操作进行设置(若是高版本的Eclipse软件此步骤省略,因为高版本不需要设置)
到 Project Properties --> C/C++ General --> Preprocessor Include Paths, Macros设置
以上三项打钩即可
5、导入完成之后就可以看到工程的目录文件
6、添加项目文件,这里以添加.cpp文件为例
如第5步骤图所示Source directory -> first_pkg->src文件下面添加.cpp文件
选择New –> Source File, 创建文件 talker.cpp文件,如下图所示:
点击finish
7、在talker.cpp文件里面加载以下代码,示例代码如下所示
#include "ros/ros.h"
int main(int argc, char **argv)
{
ros::init(argc, argv, "hello");
ros::NodeHandle nh;
ros::Rate loop_rate(10);
int count = 0;
while (ros::ok()) // Keep spinning loop until user presses Ctrl+C
{
ROS_INFO_STREAM("hello world" << count);
ros::spinOnce(); // Allow ROS to process incoming messages
loop_rate.sleep(); // Sleep for the rest of the cycle
count++;
}
return 0;
}
8、加载完代码如下所示,并且出现“eclipse Function 'init' could not be resolved”警告
“eclipse Function 'init' could not be resolved”警告的解决方法如下:
鼠标点击Project@build选择属性Properties,在属性里面选择C/C++ General->indexer如下所示:
Enable project specific setting 打钩,其他选项设置如下所示:
9、在编译工程项目前需要在包的CMakeLists.txt文件的末尾添加新的编译内容(红色部分)
CMakeLists.txt文件在工程项目中的位置:
CMakeLists.txt文件的末尾添加新的编译内容(红色部分)
## Declare a cpp executable
add_executable(talker src/talker.cpp)
## Specify libraries to link a library or executable target against
target_link_libraries(talker ${catkin_LIBRARIES})
上面两项中talker为新添加需要编译的文件名称
添加完成并且保存之后按快捷键 Ctrl-B,编译整个项目,记住此步骤不能省略
10、在Eclipse软件中运行和调试程序
在Run --> Run configurations... --> C/C++ Application (double click or click on New)双击C/C++ Application选项
然后选择可执行文件的路径,点击Browse,可执行文件就是刚才通过Ctrl-B编译生成的文件
可执行文件在~/root/catkin_ws/devel/lib/learning_communication/文件中的talker
设置完路径之后还要在Environment中的添加变量ROS_ROOT和ROS_MASTER_URI如下图所示:
其中ROS_ROOT和ROS_MASTER_URI的value值可通过在终端中输入命令获取,如下所示:
至此设置完成,点击Run运行程序,这边需要注意的是在运行程序前需要打开ROS确保ROS已经运行,因为
我们运行的这段程序是针对ROS编程,所以在启动Run前先要重新打开一个终端然后在终端中输入roscore
ROS运行成功运行之后再点击Run,程序才能正常运行起来。
11、程序运行的结果如下所示:
12、调试程序(单步运行、设置断点等)
在调试程序前需要在工作空间的~/root/catkin_ws/build路径下面运行
cmake ../src -DCMAKE_BUILD_TYPE=Debug 命令如下图所示
然后在Eclipse软件选择调试工具进行调试了,进入调试界面,如下所示: