ROS使用教程

src 存放的是功能包源码的代码空间

build 存放的是编译过程中产生的中间文件,使用较少

devel存放的是编译完成后的可执行文件、环境变量配置的脚本等,较常用

install存放的是编译完成后的可执行文件、环境变量配置的脚本等,较常用和devel类似,ROS 2 中将installdevel文件夹合并

设置环境变量,这样系统就知道功能包放在catkin\_ws功能包下面,这个命令只能在当前终端下生效。可以通过将该句命令加入配置文件当中, vi .bashrc 或者 vi .zshrc(如果用的是zsh终端的话)。

python代码为可执行文件,所以可以不用编译,C++代码需要编译,生成可执行文件。

CMakeList.txt就是主要配置主要的具体的配置的选项。

生成可执行文件,需要add_executable进行配置,如果需要多个源码,则在后面加上   1.cpp   2.cpp  ,例如:

add\_executable(talker src/talker.cpp 1.cpp 2.cpp 3.cpp)

由于许多可执行文件需要依赖第三方库,需要target\_link\_libraries将其和第三方的库进行链接

target\_link\_libraries(talker \${catkin\_LIBRARIES})

add\_dependencies 是根据自定义的消息内容添加第三方的依赖

详细步骤如下:

自定义的话题消息放在msg文件夹下面,在文件夹下面创建Person.msg文件

package.xml中添加功能包依赖

修改完成后进行编译

catkin\_ws目录下通过rosmsg show Person命令可以查看消息Person是否已经定义成功。

ROS通信编程–服务编程

package.xml.txt文件和消息中的xml文件设置一样。

如何实现一个服务器

代码定义为server.cpp

调用call表示如果srv有应答则继续运行,如果没有应答则一直停在这里,不继续运行

然后回到catkin\_ws的目录下,通过catkin\_make进行编译

如何运行编译的可执行文件

首先需要运行roscore来运行rosmaster

再新建终端,运行服务端rosrun learing\_communication server,由于没有消息,所以一直在消息等待

再启动客户端 rosrun learing\_communication client 3 4

generate\_messages(DEPENDENCIES std\_msgs)

generate\_messages(DEPENDENCIES actionlib\_msgs)

可以合并为:

generate\_messages(DEPENDENCIES std\_msgs actionlib\_msgs)

再次编译一下,看看代码是否正确

如何实现一个动作服务器

image

服务端 server

image

image

下面是动作客户端的代码示例

image

image

image

image

编译动作服务端和客户端,编译为可执行文件

编译没有问题后,查看运行效果如何,在终端输入roscore启动rosmaster

通过rosrun learning\_communication DoDishes\_client启动客户端

通过rosrun learning\_communication DoDishes\_server

image