【Autolabor初级教程】ROS机器人入门 第1章 环境搭建 笔记
1.3.1 HelloWorld实现简介
OS中涉及的编程语言以C++和Python为主,ROS中的大多数程序两者都可以实现,C++运行效率高但是编码效率低,Python则反之。基于二者互补的特点,ROS设计者分别设计了roscpp与rospy库,roscpp旨在成为ROS的高性能库,而rospy则一般用于对性能无要求的场景,旨在提高开发效率。
-
创建工作空间并初始化
工作空间:一般形式为
xxx_ws/src
(意思是项目_工作空间workspace),下级目录src
用于存放源码执行编译
catkin_make
会在xxx_ws
下生成两个文件夹build
和devel
mkdir -p 自定义空间名称/src cd 自定义空间名称 catkin_make
-
进入src创建ros包并添加依赖
cd src catkin_create_pkg 自定义ROS包名 roscpp rospy std_msgs
-
进入 ros 包的 src 目录编辑源文件
cd 自定义的包/src
,新建源文件xxx.cpp
并编辑源文件 -
编辑自定义的包下的 Cmakelist.txt文件
编辑以下两项
# 使用指定的源文件来生成目标可执行文件 add_executable(<name> [source1] [source2 ...]) # 指定目标(可执行文件)需要链接到哪些库文件 target_link_libraries(上一步的<name> ${catkin_LIBRARIES} # 这是一个CMake变量,其中包含了由Catkin软件包导出的库的列表。 )
参考链接:
-
编译并执行
编译:返回工作空间,并执行
catkin_make
执行:打开一个新的终端执行
roscore
,启动ros的核心,启动完成后返回工作空间启动源文件source ./devel/setup.bash
:修改环境变量rosrun 功能包包名 可执行文件名
1.4.2 vscode 使用_基本配置
-
启动vscode:在项目的workspace目录下执行
code .
-
编译:快捷键
ctrl+shift+B
,点击catkin_make:build
旁的小齿轮(如果没有该选项,检查之前的插件是否全部安装启用)没有出现tasks.json的原因:要点击小齿轮!!!
注意选择
catkin_make:build
是不会有tasks.json的tasks.json内容替换为以下代码
{ // 有关 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" } ] }
-
创建包:右击
src
目录,选择create catkin package
,设置包名,添加依赖(roscpp
rospy
std_msgs
) -
编写源码:在包名的
src
下新建文件xxx.cpp
,编写源文件 -
编辑配置文件
-
编译执行:编译——
ctrl+shift+B
执行——在两个终端分别执行roscore
和source ./devel/setup.bash
rosrun 功能包包名 可执行文件名
中文输出乱码问题:在函数开头加入以下任意一条代码
setlocale(LC_CTYPE, "zh_CN.utf8");
setlocale(LC_ALL, "");
1.4.3 launch文件
作用:使用 launch 文件,可以一次性启动多个 ROS 节点
实现:
- 选定功能包右击 —> 添加 launch 文件夹
- 选定 launch 文件夹右击 —> 添加 launch 文件
- 编辑 launch 文件内容
- 执行launch文件:
roslaunch 包名 launch文件名
launch文件书写:
<launch>
<node pkg="helloworld" type="demo_hello" name="hello" output="screen" />
<node pkg="turtlesim" type="turtlesim_node" name="t1"/>
</launch>
Note:
-
第一个
<launch>
没有/
,第二个</launch>
有/ -
格式
<node pkg="" type="" name="" />
的结束>
前有/
-
符号含义:
- node —> 包含的某个节点
- pkg -----> 功能包
- type ----> 被运行的节点文件(type实测为图示,应为实际运行的命令)
- name --> 为节点命名
- output-> 设置日志的输出目标
-
若要将打印字符输出到屏幕,需要加上
output="screen"
1.5.1 ROS文件系统
参考链接:1.5.1 ROS文件系统 · Autolabor-ROS机器人入门课程《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: 编译的基本配置
1.5.2 ROS文件系统相关命令
参考链接:1.5.2 ROS文件系统相关命令 · Autolabor-ROS机器人入门课程《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 文件
1.5.3 ROS计算图
ROS 分布式系统中不同进程需要进行数据交互,计算图可以以点对点的网络形式表现数据交互过程。
运行指令:rosrun rqt_graph rqt_graph
小乌龟示例: