文章目录
- 前言
- 1. ROS-melodic 安装
- 2. ROS基本操作
- 2.1 创建工作空间
- 2.2 创建功能包
- 2.3 HelloWorld(C++版)
- 2.4 HelloWorld(Python版)
- 3. Vscode ROS 插件
- 4. vscode 使用基本配置
- 4.1 启动 vscode
- 4.2 vscode 中编译 ros
- 5. launch文件演示
- 6. ROS文件系统
- 7. ROS文件系统相关命令
前言
📢本系列将依托赵虚左老师的ROS课程,写下自己的一些心得与笔记。
📢课程链接:https://www.bilibili.com/video/BV1Ci4y1L7ZZ
📢讲义链接:http://www.autolabor.com.cn/book/ROSTutorials/index.html
📢 文章可能存在疏漏的地方,恳请大家指出。
1. ROS-melodic 安装
推荐这篇博客Ubuntu18.04安装Ros(最新最详细亲测),讲解详细,安装基本不会有太大的问题。
2. ROS基本操作
ROS中的程序即便使用不同的编程语言,实现流程也大致类似,以当前HelloWorld程序为例,实现流程大致如下:
- 先创建一个工作空间;
- 再创建一个功能包;
- 编辑源文件;
- 编辑配置文件;
- 编译并执行。
2.1 创建工作空间
使用系统命令创建工作空间目录,然后运行ROS的工作空间初始化即可完成创建过程
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
创建完成后,可以在工作空间的根目录下使用catkin_make
命令编译整个工作空间。
cd ~/catkin_ws/
catkin_make
运行以下指令使环境生效。
source devel/setup.bash
用如下命令查看环境变量是否生效
echo $ROS_PACKAGE_PATH
打印如下,则设置成功。
为了使环境变量在所有终端中都有效,输入以下命令。
echo "source ~/catkin_ws/devel/setup.bash">> ~/.bashrc
2.2 创建功能包
cd src
catkin_create_pkg 自定义ROS包名 roscpp rospy std_msgs
创建完成后,回到工作空间再编译一遍。
cd ..
catkin_make
2.3 HelloWorld(C++版)
1.进入 ros 包的 src 目录编辑源文件
//1.包含 ros 的头文件
//2.编写 main 函数
//3.初始化ros节点
//4.输出日志
#include "ros/ros.h"
int main(int argc, char *argv[])
{
//执行 ros 节点初始化
ros::init(argc,argv,"hello");
//创建 ros 节点句柄(非必须)
ros::NodeHandle n;
//控制台输出 hello world
ROS_INFO("hello world!");
return 0;
}
2.编辑 ros 包下的 Cmakelist.txt文件
add_executable(步骤3的源文件名
src/步骤3的源文件名.cpp
)
target_link_libraries(步骤3的源文件名
${catkin_LIBRARIES}
)
3.进入工作空间目录并编译
cd ~/catkin_ws/
catkin_make
4.打开roscore
roscore
5.rosrun启动文件(rosrun 包名 节点名)
rosrun hellowolrd 步骤3的源文件名
运行成功会出现以下打印信息:
2.4 HelloWorld(Python版)
1.进入 ros 包添加 scripts 目录并编辑 python 文件
cd ros包
mkdir scripts
新建 python 文件: (文件名自定义)
#! /usr/bin/env python
#-- coding:UTF-8 --
# 第一行指定解释器
# 1.导包
# 2.编写主入口
# 3.初始化ros节点
# 4.输出日志
import rospy
if __name__ == "__main__":
rospy.init_node("Hello")
rospy.loginfo("Hello World!!!")
2.为 python 文件添加可执行权限
chmod +x 自定义文件名.py
3.编辑 ros 包下的 CamkeList.txt 文件
catkin_install_python(PROGRAMS scripts/自定义文件名.py
DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
4.进入工作空间目录并编译
cd ~/catkin_ws/
catkin_make
5.打开roscore
roscore
rosrun 包名 自定义文件名.py
运行成功会出现以下打印信息:
3. Vscode ROS 插件
C/C++ \ Cmake \Cmake Tools\python\ROS
4. vscode 使用基本配置
4.1 启动 vscode
code .
4.2 vscode 中编译 ros
快捷键 ctrl + shift + B
调用编译,选择:catkin_make:build
可以点击配置设置为默认,修改.vscode/tasks.json 文件
把这个
{
"version": "2.0.0",
"tasks": [
{
"type": "catkin_make",
"args": [
"--directory",
"/home/yuan/catkin_ws",
"-DCMAKE_BUILD_TYPE=RelWithDebInfo"
],
"problemMatcher": [
"$catkin-gcc"
],
"group": "build",
"label": "catkin_make: build"
}
]
}
改为
{
// 有关 tasks.json 格式的文档,请参见
// https://go.microsoft.com/fwlink/?LinkId=733558
"version": "2.0.0",
"tasks": [
{
"label": "catkin_make:debug", //代表提示的描述性信息
"type": "shell", //可以选择shell或者process,如果是shell代码是在shell里面运行一个命令,如果是process代表作为一个进程来运行
"command": "catkin_make",//这个是我们需要运行的命令
"args": [],//如果需要在命令后面加一些后缀,可以写在这里,比如-DCATKIN_WHITELIST_PACKAGES=“pac1;pac2”
"group": {"kind":"build","isDefault":true},
"presentation": {
"reveal": "always"//可选always或者silence,代表是否输出信息
},
"problemMatcher": "$msCompile"
}
]
}
4.4 创建 ROS 功能包
选定 src 右击 —> create catkin package
设置包名 添加依赖
PS1: 如果没有代码提示
修改 .vscode/c_cpp_properties.json
设置 “cppStandard”: “c++17”
PS2: main 函数的参数不可以被 const 修饰
PS3: 当ROS__INFO 终端输出有中文时,会出现乱码
解决办法:在函数开头加入下面代码的任意一句
setlocale(LC_CTYPE, "zh_CN.utf8");
setlocale(LC_ALL, "");
其余步骤与之前一致。
5. launch文件演示
- 选定功能包右击 —> 添加 launch 文件夹
- 选定 launch 文件夹右击 —> 添加 launch 文件
- 编辑 launch 文件内容
<launch>
<node pkg="helloworld" type="demo_hello" name="hello" output="screen" />
<node pkg="turtlesim" type="turtlesim_node" name="t1"/>
<node pkg="turtlesim" type="turtle_teleop_key" name="key1" />
</launch>
node ---> 包含的某个节点
pkg -----> 功能包
type ----> 被运行的节点文件
name --> 为节点命名
output-> 设置日志的输出目标
- 运行 launch 文件
roslaunch 包名 launch文件名
- 运行结果: 一次性启动了多个节点
6. ROS文件系统
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: 编译的基本配置
package.xml
该文件定义有关软件包的属性,例如软件包名称,版本号,作者,维护者以及对其他catkin软件包的依赖性。请注意,该概念类似于旧版 rosbuild 构建系统中使用的manifest.xml文件。
CMakelists.txt
文件CMakeLists.txt是CMake构建系统的输入,用于构建软件包。任何兼容CMake的软件包都包含一个或多个CMakeLists.txt文件,这些文件描述了如何构建代码以及将代码安装到何处。
7. ROS文件系统相关命令
ROS 的文件系统本质上都还是操作系统文件,我们可以使用Linux命令来操作这些文件,不过,在ROS中为了更好的用户体验,ROS专门提供了一些类似于Linux的命令,这些命令较之于Linux原生命令,更为简介、高效。文件操作,无外乎就是增删改查与执行等操作,接下来,我们就从这五个维度,来介绍ROS文件系统的一些常用命令。
1.增
catkin_create_pkg
自定义包名 依赖包 === 创建新的ROS功能包
sudo apt install xxx
=== 安装 ROS功能包
2.删
sudo apt purge xxx
==== 删除某个功能包
3.查
rospack list
=== 列出所有功能包
rospack find 包名
=== 查找某个功能包是否存在,如果存在返回安装路径
roscd 包名
=== 进入某个功能包
rosls 包名
=== 列出某个包下的文件
apt search xxx
=== 搜索某个功能包
4.改
rosed 包名 文件名
=== 修改功能包文件
需要安装 vim
比如:rosed turtlesim Color.msg
5.执行
5.1roscore
roscore === 是 ROS 的系统先决条件节点和程序的集合, 必须运行 roscore 才能使 ROS 节点进行通信。
roscore 将启动:
- ros master
- ros 参数服务器
- rosout 日志节点
用法:
roscore
或(指定端口号)
roscore -p xxxx
5.2rosrun
rosrun 包名 可执行文件名
=== 运行指定的ROS节点
比如:rosrun turtlesim turtlesim_node
5.3roslaunch
roslaunch 包名 launch文件名
=== 执行某个包下的 launch 文件