古月居《Ros 入门21讲》第 1 ~ 9 讲踩坑记录和学习笔记
一、安装 Ros
配置软件库,需要前四行打上勾,选择合适的镜像源。
安装过程中建议全程使用手机流量,如使用 WiFi 可能造成部分包下载失败。如果流量不够可以蹭朋友的热点。
安装步骤如下:
依次执行以下命令:
- 添加ROS软件源
1
$ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
- 添加密钥
1
$ sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
- 安装ROS
1
2$ sudo apt update
$ sudo apt install ros-melodic-desktop-full - 初始化rosdep 注意:这里执行 $ sudo rosdep init 命令可能会报错 ‘sudo rosdep找不到命令’ 或者如下报错
1
2$ sudo rosdep init
$ rosdep update解决方案是,先到网站 https://www.ipaddress.com/ 搜索 raw.githubusercontent.com 查询它的 IP 地址,我查到的是 199.232.68.133,然后执行如下命令:1
2
3ERROR: cannot download default sources list from:
https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.d/20-default.list
Website may be down.在打开的文件末尾添加1
2cd /etc
sudo gedit hosts保存退出,重新执行 $ sudo rosdep init 命令即可。1
199.232.68.133 raw.githubusercontent.com
- 设置环境变量
1
2echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
source ~/.bashrc - 安装rosinstall
1
$ sudo apt install python-rosinstall python-rosinstall-generator python-wstool build-essential
安装完成以后,在终端输入 ros 并按下 tab 键,可以看到输出的 ros 命令表,初步代表安装成功
接下来进行验证:
- 先在终端输入 roscore 回车,有如下相应:
如果报错 roscore not found,说明最开始安装的时候有些包没有装上,终端输入:注意:这里我用的是 Ubuntu 18.04,对应的 ros 版本是 melodic,其他版本需要对照下表选择命令:1
sudo apt install ros-melodic-roslaunch
再输入 roscore 命令即可。 - 再新开一个终端,输入:启动小海龟仿真器,应该可以看到蓝色的小海龟的界面
1
$ rosrun turtlesim turtlesim_node
如果报错 package turtlesim not found,说明很可能在安装 ros 的时候没有安装完整。我是切换到了手机热点,然后直接重新从上面的第三步开始,再安装一遍就好了。 - 再新开一个终端,输入:启动海龟控制节点,在这个终端内部就可以通过方向键控制小海龟运动了。
1
$ rosrun turtlesim turtle_teleop_key
至此安装全部完成。
二、Ros 简介与核心概念
2.1 什么是 Ros
全称:机器人操作系统(Robot Operating System)
构成:通信机制 (节点) + 工具软件包 + 高级应用功能 + 生态系统
笔者认为:Ros 是一套能够将分散的、由不同开发者编写的软件代码打包并统一管理、建立连接的高度灵活的软件框架,提供了大量的工具和基本的硬件底层逻辑,让基于硬件的软件开发更加遍历、为机器人研究和开发提供代码复用的支持。
2.2 Ros 核心概念
- 松耦合的节点通信 —— 节点为执行具体任务的进程、独立运行的可执行文件,可独立使用编程语言、可分布式运行在不同主机;
- 话题通信 —— 发布订阅,异步、单向数据流,适用于普通数据传输
- 服务通信 —— 一次握手,同步通信,适用于逻辑处理、人机交互
- 参数 —— 每个节点可通过网络访问的全局变量仓库,参数改变时不会通知节点更新,故只适用于存储静态的、非二进制的配置参数
- 功能包、功能包清单、元功能包
三、初步使用
3.1 命令行工具
- roscore:启动 ros master,必须首先运行
- rosrun [功能包名] [节点名] :运行节点,如
1
$ rosrun turtlesim turtlesim_node
- rqt_graph:显示整个系统的节点通讯图
- rosnode:显示节点信息,如 rosnode list 显示正在运行的节点数量、查看话题列表,rosnode info [节点名] 显示某个节点的运行情况和信息流
- rostopic:显示话题信息,且通过 rostopic 可以手动发布话题消息,增加 -r 可以循环发布话题,比如:两下 Tab 键是用于自动补全,-r 10 表示以每秒十次的频率循环发布
1
$ rostopic pub -r 10 /turtle1/cmd_vel geometry_msgs/Twist [Tab Tab]
- rosmsg show [msg]:查看发布指令的数据结构
- rosservice:显示服务信息,可以通过 rosservice call [服务名] [Tab Tab] 调用发布服务请求
- rosbag:记录话题记录并复现,可用于采集数据便于后续调试。
1
2
3
4
5
6
7
8// 记录数据
// -a 表示记录所有的数据 (-all)
// -O 表示把数据保存成压缩包,名字为 cmd_record.bag
$ rosbag record -a -O cmd_record
// 复现数据
// 复现数据并不需要启动键盘控制节点,小海龟就会自己动
$ rosbag play cmd_record.bag
注:CTRL + C 可以退出当前正在运行的功能 (如 roscore、循环发布、记录数据等)
3.2 创建工作空间与功能包
工作空间(workspace)是一个存放工程开发 相关文件的文件夹,包括:
- src:代码空间(Source Space,放功能包)
- build:编译空间(Build Space,放编译中间件)
- devel:开发空间(Development Space,放编译生成的可执行文件、库、脚本)
- install:安装空间(Install Space,和 devel 有重复)
创建工作空间与功能包的命令如下:
- 在主目录打开终端,依次输入如下命令 (catkin_ws 只是文件夹名称,可自定)
1
mkdir catkin_ws
1
cd catkin_ws
1
mkdir src
1
cd src
1
catkin_init_workspace
- 编译需要回到根目录 catkin_ws编译后根目录下有 build、devel、src 三个包,产生 install 包还需要运行
1
catkin_make
1
catkin_make install
- 创建功能包,使用 catkin_create_pkg
[depend1] [depend2] [depend3] 指令,注意一定要在 src 目录下创建。如: 1
cd src
创建了 src 和 include 文件夹,分别放置代码和头文件;还创建了 CMakeLists.txt 和 package.xml 文件。下面编译功能包,注意要先回到工作空间根目录再执行:1
catkin_create_pkg test_pkg std_msgs rospy roscpp
1
catkin_make
- 如果要运行功能包中的程序,需要先设置环境变量:再运行以下指令检查环境变量:
1
source devel/setup.bash
如果显示出 src 等路径,说明成功。1
echo $ROS_PACKAGE_PATH
3.3 package.xml 和 CMakeLists.txt
package.xml 提供功能包的基本信息和依赖信息;如果后面发现有其他依赖包需要添加,可以手动在该文件的相应标签添加上。
CMakeLists.txt 描述功能包的编译规则。