有关工作空间的结构:
WorkSpace -- 自定义的工作空间
|-- build:编译空间,用于存放CMake和catkin的缓存信息、配置信息和其他中间文件
|-- devel:开发空间,用于存放编译后生成的目标文件,包括头文件、动态或静态链接库、可执行文件等
|-- src:源码
|-- package:功能包,这是ROS基本单元
|-- CMakeLists.txt:配置编译规则,例如源文件、依赖项、目标文件
|-- package.xml:包信息,例如包名、版本、作者
|-- scripts:存储python文件
|-- src:存储C++源文件
|-- include:头文件
|-- msg:消息通信格式文件
|-- srv:服务通信格式文件
|-- action:动作格式文件
|-- launch:存储launch文件
|-- config:配置信息
|-- CMakeLists.txt:编译的基本配置
1.在主目录下建立文件夹catkin_ws
mkdir -p ~/catkin_ws/src
mkdir -p表示允许创建目录及子目录
2.进入catkin_ws/src文件夹下,执行下面指令:
catkin_init_workspace
将catkin_ws文件夹初始化成ROS工作空间的属性。
3.在catkin_ws下打开终端
catkin_make
这一步是编译工作空间,其实就是刷新一次工作空间的可执行文件,后续只要src下有新增了ROS程序,要生成可执行文件,都要执行这一步。编译完后,catkin_ws下会新增build和devel文件夹。
4.在catkin_ws/src下创建功能包(package)
catkin_create_pkg helloworld std_msgs rospy roscpp
通过catkin_create_pkg命令创建一个名为“helloworld”的功能包,其依赖项有std_msgs(标准信息库),rospy(python的API),roscpp(C++的API)。
5.由于新增了helloworld功能包,需要重新catkin_make一下工作空间,以更新相关的功能包。
所以,重复第二步的catkin_make操作(注意是在工作空间目录下catkin_make)。
6.在helloworld功能包的src下创建C++(这里在src下创建一个helloworld.cpp程序),写完helloworld.cpp之后需要编译成二进制可执行文件,具体操作如下:
6.1进入helloworld功能包,可以看到src、CMakeLists.txt、package.xml文件夹。编译helloworld.cpp文件需要在helloworld功能包下的CMakeLists.txt添加相关语句,在helloworld功能包下打开终端:
gedit CMakeLists.txt
gedit是一个文本编辑软件,进入CMakeLists.txt之后,找到找到里面有一行写着##Declare a C++ executable
,在这一行前面或者后面添加如下内容
add_executable(helloworld src/helloworld.cpp)
target_link_libraries(helloworld ${catkin_LIBRARIES})
第一行add_executable
表示我们要添加一个可执行文件,helloworld
是这个可执行文件的名字(并不是非得和helloworld.cpp中的helloworld一样,不过建议用一样的),src/helloworld.cpp
指定要编译的源文件的位置.
第二行target_link_libraries
表示我们要将可执行文件链接到一个库,我们要使用ROS当然是要链接到ROS的库了,括号里helloworld是
指定要链接可执行文件的名字,后面是指定要链接的库的名字.添加完上述内容后我们保存并退出CMakeLists.txt文件.
6.2由于功能包发生了更改,需要重新catkin_make一下工作空间,所以再重复一下第二步。
注:有关make、cmake、catkin_make,感兴趣的可以找找资料,大体上就是catkin_make将cmake、make的功能整合在一块了。
7.source一下工作空间的环境变量,以便让ROS找到你的工作空间。
一次性的方法:
source ~/helloworld/devel/setup.bash
永久的方法,运行如下指令,打开.bashrc文件(此文件每次shell打开都会自动运行),在最底下加入source ~/helloworld/devel/setup.bash语句,保存关闭即可:
gedit ~/.bashrc
添加python语言的ros程序:
在功能包中,新建一个scripts(和src同级)文件夹,用来存放python的源码。
python源码注意赋予其可执行权限即可。其没有cpp程序中的下面步骤。
add_executable(helloworld src/helloworld.cpp)
target_link_libraries(helloworld ${catkin_LIBRARIES})
具体详细流程:优先推荐wiki:rospy/Tutorials - ROS Wiki
起手入门可参见:ROS——创建工作空间和功能包并成功运行一个基本python文件_Irving.Gao的博客-CSDN博客_ros运行python代码
在使用python编写ROS程序时,其没有spinonce()这个函数,可以用“python解决spinonce()”找到一些方法。
这里,推荐一个简单方法,直接把相关内容写在回调函数里加一个逻辑判断可以直接了当的替代spinonce()功能。