前言:本文原本初衷为个人梳理知识点复习使用,发现网上目前没有关于ros的详细图文教程,大部分需要另外查看相关资料才能看懂,非常不适合我这个初学者,尤其是没有c++基础,所以干脆自己归纳笔记,但考虑时间效率,很多内容是回顾的时候写的,并不想每一个步骤都配图说明。如果有其他学习爱好者需要,对每一个步骤详细配图说明,请在评论区告诉我,我会根据需求添加图片,感谢各位支持!
1.1 ros简介
略
1.2 环境搭建
略
1.3 hello world 实现
ROS中的程序即便使用不同的编程语言,实现流程也大致类似,以当前HelloWorld程序为例,实现流程大致如下:
- 先创建一个工作空间;
- 再创建一个功能包;
- 编辑源文件;
- 编辑配置文件;
- 编译并执行。
1.创建工作空间(以demo01_ws为例)
打开终端,分别输入以下命令
mkdir -p demo01_ws/src
cd demo01_ws
catkin_make
输入第一行命令,按下回车键,再输入第二行命令,按下回车键
输入第三行命令,按下回车键,结果如下
代码看不懂?下面是代码分析:
-
mkdir -p demo01_ws/src/
:mkdir
:创建目录的命令。-p
:这个选项代表 "parents",意味着如果指定的目录路径中的上级目录不存在,mkdir
命令会创建它们。这允许你一次性创建多级目录结构,而不需要逐个手动创建每个目录。demo01_ws/src
:这是要创建的目录路径,demo01_ws
是工作空间的名称,src
是源代码目录。
-
cd demo01_ws
:cd
:改变当前工作目录的命令。cd
命令代表 "change directory",即 "改变目录"。这个命令用于改变当前的工作目录,也就是你当前所在的目录路径。当你在计算机上执行命令时,你需要知道当前的工作目录,因为这决定了哪些文件和目录是你可以直接访问的。demo01_ws
:这是要切换到的目录名,也就是刚刚创建的工作空间目录。
catkin_make
:这是ROS中用于编译工作空间的命令。它会查找工作空间中的所有包,安装依赖,并编译源代码。
2.创建功能包
(1)启动vscode
打开终端(快捷键ctrl+alt+t)直接输入
code .
就会打开vscode
创建功能包
找到src,鼠标右击Create Catkin Package,自定义功能包名称,例如helloworld
在弹出的窗口输入功能包名,这里是 helloworld ,回车
之后又会弹出这个窗口,输入以下代码用于添加依赖,回车。分别是c++ ,python,和标准信息(注意每个依赖之间的间隔)
roscpp rospy std_msgs
回车后如下所示
接着在src(注意是下面的src)上右击,新建文件(注意是文件,不是文件夹),用于编写c++源文件。
给c++源文件自定义命名,如图所示的hello_world.cpp 等。
3.编写源文件
接下来就是编写c++源码了
示例代码如下
#include "ros/ros.h" // 包含ROS的头文件,这是使用ROS功能的基础。
int main(int argc, char *argv[]) // 程序的主函数,接收命令行参数。
{
// 执行ROS节点初始化
// 初始化ROS节点,设置节点名为"hello"。
ros::init(argc, argv, "hello");
// 创建ROS节点句柄(非必须)
// 创建一个NodeHandle对象,用于管理节点的通信和参数。虽然不是必须,但通常推荐使用。
ros::NodeHandle n;
// 控制台输出 hello world
// 使用ROS的日志系统输出信息到控制台。这里输出的是"hello world!"。
ROS_INFO("hello world!");
return 0; // 程序正常退出,返回0表示成功。
}
4.编辑配置文件
在helloworld功能包下面src目录下的CMakeList.txt文件
1.找到下图代码,放开注释(快捷键ctrl+/)
修改里面的&{PROJECT_NAME}_node,改成c++文件名称。这里的文件名称是hello_world
改完的结果如下(注意空格以及不要打错字母)
5.编译并执行
回到源代码开始编译(快捷键ctrl+shift+b)
像这样100%且没有报错,就可以了
接下来就可以在终端运行看看了
打开终端(快捷键ctrl+alt+t)
在第一个窗口输入
roscore
运行如下
这里将启动ros核心,这是关键
第二个窗口输入(语法如下)
cd 工作空间
source ./devel/setup.bash
rosrun 包名 C++节点
这里我们输入(注意每输入一行回车一次,再输入下一行)
结果如下,注意这里敲错导致出错,所以一定要写正确
最后结果打出了hello world! 大功告成!