ROS 学习记录(一)——快速体验

文章目录

创建并初始化工作空间

安装完 ROS 后,创建工作空间。假设工作空间名称为 ros-project,依次输入下面的命令创建并且初始化工作空间:

1mkdir -p ./ros-project/src/
2cd ros-project
3catkin_make

创建 ROS 包

进入 src/ 目录并且创建一个 ROS 包,一般 ROS 包的名称为 *_package

1cd src
2catkin_create_pkg test_package roscpp rospy std_msgs

上述命令会在 ros-project/src/ 下创建一个名为 test_package 的文件夹,文件夹的结构如下:

1.
2├── CMakeLists.txt
3├── include
4│   └── test_package
5├── package.xml
6└── src

参数中的 roscpp rospy std_msgs 是 ROS 中的常用模块。

创建源码并且输出 Hello World

C++ 实现

在当前包的 src/ 目录下创建 test_package_node.cpp

1cd test_package/
2touch src/test_package_node.cpp

在当前 C++ 源文件中写入如下代码:

 1#include "ros/ros.h"
 2
 3using namespace ros;
 4
 5int main(int argc, char **argv)
 6{
 7    init(argc, argv, "test_node_cpp");  // 初始化节点
 8    NodeHandle n;  // 创建节点句柄(以后会用到)
 9    ROS_INFO("Hello, World! Hello, C++!");  // 日志输出
10    return 0;
11}

为了能够编译这段代码,编辑当前包中的 CMakeList.txt,在其中添加如下内容(或者找到注释的部分):

1add_executable(${PROJECT_NAME}_node src/test_package_node.cpp)
2target_link_libraries(${PROJECT_NAME}_node
3  ${catkin_LIBRARIES}
4)

回到工作空间 ros-project 目录下并且编译:

1cd ros-project
2catkin_make

等待编译完成,随后后台运行 ROS 内核:

1roscore &

然后更新运行环境并且运行 Hello World 程序:

1. ./devel/setup.sh
2rosrun test_package_node

如果需要结束 ROS 内核,可以用 fg 将进程调取到前台再用 Ctrl+C 结束,或者用 jobs 命令查看进程作业号,再用 kill 结束指定作业号的进程,例如当进程的作业号为 1 时,使用 kill %1 结束进程。

Python 实现

回到包目录下,创建 scripts/ 目录并且创建 test_package_node.py

1cd test_package
2mkdir scripts/
3cd scripts/
4touch test_package_node.py

在文件中写入以下内容:

 1import rospy
 2
 3
 4def main():
 5    rospy.init_node("test_node_py")
 6    rospy.loginfo("Hello, World! Hello, Python!")
 7
 8
 9if __name__ == "__main__":
10    main()

赋予文件执行权限:

1chmod +x test_package_node.py

CMakeList.txt 中添加如下内容:

1catkin_install_python(PROGRAMS
2  scripts/test_package_node.py
3  DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
4)

然后回到工作空间目录,编译并执行 Python 脚本。

1cd ros-project
2catkin_make
3roscore &
4. ./devel/setup.sh
5rosrun test_package test_package_node.py

配置 tasks.json 快速编译(使用 Code)

每次编译的时候都要回到工作空间中再编译未免有些麻烦,因此编辑 .vscode/tasks.json 文件:

 1{
 2    // 有关 tasks.json 格式的文档,请参见
 3    // https://go.microsoft.com/fwlink/?LinkId=733558
 4    "version": "2.0.0",
 5    "tasks": [
 6        {
 7            "label": "catkin_make:debug",
 8            "type": "shell",
 9            "command": "catkin_make",
10            "args": [],
11            "group": {
12                "kind": "build",
13                "isDefault": true
14            },
15            "presentation": {
16                "reveal": "always"
17            },
18            "problemMatcher": "$msCompile"
19        }
20    ]
21}

此时修改好 CMakeList.txt 文件后,按下 Ctrl+Shift+B 快捷键即可直接编译。

使用 roslaunch 同时运行多个节点

回到包目录下并创建 launch/test_package.launch 文件:

1cd test_package
2mkdir launch/
3cd launch/
4touch test_package.launch

launch 文件使用 XML 格式,我们在文件中写如下内容:

1<launch>
2    <node pkg="test_package" type="test_package_node" name="cpp_node" output="screen" />
3    <node pkg="test_package" type="test_package_node.py" name="py_node" output="screen" />
4</launch>

pkg 为包名,type 为节点/脚本名,name 为节点名称,output 用于确定运行输出显示的位置。当 output="screen" 时,内容会在终端输出。

roslaunch 命令运行这些节点:

1roslaunch test_package test_package.launch

系列文章