1.ROS项目开发流程
工作空间类似于一个project;而功能包就是完成各个功能如图像处理、SLAM、Navigation等的子包;源代码相必就很熟悉了;编译规则指的是CMakeList.txt,由于C++是一种需要进行编译的语言,如果使用Python则不需要配置编译规则;编译与运行类似于buildall。
(1)创建工作空间
工作空间(workspace) 是一个存放工程开发相关文件的文件夹。
- src:代码空间(Source Space)
- 源代码存放地址
- build:编译空间(build Space)
- 存放了中间文件,如二进制文件
- devel:开发空间(Development Space)
- 存放最终生成的可执行文件和环境变量
- install:安装空间(Install Space)
create workspace
$ mkdir -p catkin_ws/src
$ cd catkin_ws/src
$ catkin_init_workspace
compile
必须返回到工作空间的根目录👇
$ cd catkin_ws
$ catkin_make
此时会生成devel和build两个文件夹📃,devel文件夹内的lib文件夹保存了pkg的可执行文件。
$ catkin_make install
这句命令可以产生install文件夹📃
config env
$ source /devel/setup.bash
如果使用的是zsh,则
$ source /devel/setup.zsh
check env
$ echo $ROS_PACKAGE_PATH
如果使用的是melodic18.04的话应该返回
/home/${usrname}/catkin_ws/src:/opt/ros/melodic/share
(2)创建功能包
$ catkin_create_pkg<package_name> [depend1] [depend2] [depend3]
create pkg
$ cd ~/catkin_ws/src
$ catkin_create_pkg learning_communication rospy roscpp std_msgs std_srvs
rospy是python的接口;roscpp是c++的接口;std_msgs是消息的接口;std_srvs是服务的接口
compile
$ cd ~/catkin_ws
$ catkin_make
$ source /devel/setup.zsh
这时我们已经完成了创建一个功能包,在功能包内存放了include用来存放头文件的文件夹、src用来存放源文件的文件夹、package.xml和CMakeLists.txt文件。
package.xml
其中含有<build_depend>编译依赖、<exec_depend>运行依赖,当发现需要添加其他依赖时,可以手动添加。
除此之外.xml文件中还包含版本号,发布者信息、📫、证书等。都以<...> ... </...>
的格式构成。
CMakeLists.txt(编译过程)
可以参考CMakeLists使用简介和补充知识。
2.ROS Topic通信编程
依照于wiki官方 Writing a Simple Publisher and Subscriber (C++)的例程。
(1)如何实现一个发布者
这里补充一个int main(int argc, char* argv[], cha