ROS1之第一个样例运行

前言

学习了ROS2 humble之后,做项目的过程中发现很多想要使用的插件基本都是支持ROS1的,如果想要使用那么必须自己去移植。这对于一个仅仅学习ROS2的人来说实在很困难。因此有必要去学习ROS1。

老规矩,先查看一个完整的ROS1的文件系统是怎么样的,然后看看运行一个简单的Hello world样例是如何操作的。

ROS1文件系统

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
WorkSpace --- 自定义的工作空间

|--- build:编译空间,用于存放CMake和catkin的缓存信息、配置信息和其他中间文件。

|--- devel:开发空间,用于存放编译后生成的目标文件,包括头文件、动态&静态链接库、可执行文件等。

|--- src: 源码

|-- package:功能包(ROS基本单元)包含多个节点、库与配置文件,包名所有字母小写,只能由字母、数字与下划线组成

|-- CMakeLists.txt 配置编译规则,比如源文件、依赖项、目标文件

|-- package.xml 包信息,比如:包名、版本、作者、依赖项...(以前版本是 manifest.xml)

|-- scripts 存储python文件

|-- src 存储C++源文件

|-- include 头文件

|-- msg 消息通信格式文件

|-- srv 服务通信格式文件

|-- action 动作格式文件

|-- launch 可一次性运行多个节点

|-- config 配置信息

|-- CMakeLists.txt: 编译的基本配置

其中,devel文件夹类似于ROS2里面的install文件夹

运行一个Hello World程序操作流程(C++为例)

  • 1.创建工作空间并初始化
1
2
3
mkdir -p ty_ros_ws(自定义空间名称)/src
cd ty_ros_ws(自定义空间名称)
catkin_make
  • 2.进入 src 创建 ros 包并添加依赖
1
2
cd src
catkin_create_pkg hello_vscode(自定义ROS包名) roscpp rospy std_msgs

其中 roscpp、rospy 与 std_msgs是依赖包。

  • 3.进入 hello_vscode(自定义ROS包名)包里面的src,创建C++文件,名为:Hello_vscode_c.cpp。然后写入下面的内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
#include "ros/ros.h"

int main(int argc, char *argv[])
{
//执行 ros 节点初始化 , ‘Hello’是节点名称
ros::init(argc,argv,"hello");
//创建 ros 节点句柄 (非必须)
ros::NodeHandle n;
//控制台输出 hello world
ROS_INFO("hello from Felix!");

return 0;
}
  • 4.调整配置文件CMakeList.txt
1
2
3
4
5
add_executable(hello_vscode_c(一般使用步骤3的源文件名,当然也可以自己舍弃其他的但是不建议) src/hello_vscode_c.cpp(步骤3的源文件名.cpp)
)
target_link_libraries(hello_vscode_c(步骤3的源文件名)
${catkin_LIBRARIES}
)
  • 5.编译:进入ty_ros_ws(自定义空间名称),然后catkin_make编译

  • 6.在终端运行roscore

  • 7.再打开一个新的终端

    • source ./devel/setup.bash
    • rosrun hello_vscode(包名) hello_vscode_c(设置的可执行文件名,一般是源文件名)
  • 8.控制台打印:

1
Hello from Felix!

参考内容:

  • 赵虚左BiliBili里面的ROS1教程