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