最近一周因为工程需要,把ROS的一些基础学习了一下,现在做一下总结。
学习资源:
#创客智造整理的wiki上的ROS入门教程(中文)
https://www.ncnynl.com/category/ros-junior-tutorial/ #如果时间较多想锻炼自己英文水平或者就是英语大牛可以直接阅读wiki原稿
http://wiki.ros.org/ROS/Tutorials
#入门学习视频:古月居ROS入门21讲(推荐!!!)
https://www.bilibili.com/video/av59458869?from=search&seid=4767000398980361963
第一次接触ROS的话不建议去看创客智造和wiki ros,上面一开始就讲了两种工作区创建方式什么build和catkin_make的,穿插说的看着就很乱而且也不好理解,第一遍看的时候看的很糊涂。。。
而且那是以前的教程,现在ROS文件结构说法也已经更新了。
这里建议大家去b站看古月老师的视频!!讲解的很详细!!这么好的视频居然都没多少人看!!大家快去关注三连阿!
附上古月老师21讲课程资源的Git hub地址:
https://github.com/huchunxu/ros_21_tutorials/
好了,以下是我们的总结(以下都是ubuntu环境):
1. ROS安装
这里介绍ros-indigo版本的安装,其他版本大家可以参考并自行百度安装步骤:
(1) 添加ROS软件源
sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ $DISTRIB_CODENAME main" > /etc/apt/sources.list.d/ros-latest.list'
若上面不可用,可以尝试这个:
sudo sh -c 'echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
(2) 添加密钥
wget https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -O - | sudo apt-key add -
(3) 安装ROS
sudo apt update
sudo apt install ros-indigo-desktio-full
(4)初始化rosdep
sudo rosdep init
rosdep update
(5)设置环境变量
echo "source /opt/ros/indigo/setup.bash">>~/.bashrc
source ~/.bashrc
(6)安装rosinstall
sudo apt install python-rosinstall python-rosinstall-generator python-wstool build-essential
(7)安装完成
用ctl+alt+t打开一个终端,直接输入:roscore
出现下图信息,则表示ros安装成功:
接下来我们测试一个ros里自带的小案例
ctrl+alt+t新开一个终端(刚刚roscore终端不要关闭了,关闭了的话得先运行roscore)
输入命令,打开一个带有小乌龟的窗口:
rosrun turtlesim turtlesim_node
再打开一个终端输入命令,按动方向键,能观察到乌龟移动(需要定位在当前终端):
rosrun turtlesim turtle_teleop_key
至此,成功安装好了ROS
2. ROS文件结构
- 工作空间
- 功能包
- 文件(配置文件、具体代码文件、参数文件等)
创建命令:
创建工作空间:
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
编译工作空间:
cd ~/catkin_ws/
catkin_make
设置环境变量(重要):
source devel/setup.bash
检查环境变量:
echo $ROS_PACKAGE_PATH 创建功能包:
(格式:catkin_create_pkg <package_name> [depend1] [depend2] [depend3] [...])
cd ~/catkin_ws/src
catkin_create_pkg test_pkg_std_msgs rospy roscpp 编译功能包:
cd ~/catkin_ws
catkin_make
source ~/catkin_ws/devel/setup.bash 同一个工作空间下,不允许存在同名功能包;
不同工作空间下,允许存在同名功能包。
3. ROS通信
ROS里主要是通过一种叫节点(Node)的东西进行通信
节点是ROS中的执行单元,执行具体任务的进程,独立运行的可执行文件;
不同节点可以使用不同的编程语言,可分布式运行在不同的主机,目前支持的语言有:
- C++
- Python
- Java
- JS
节点间通过话题(Topic)或服务(Service)传递消息
- 话题(Topic)
采用异步通信机制,即发布消息的节点不管有没有其他接受消息的节点,只要它打开了,就会一直发消息。
消息数据类型和数据结构定义在.msg文件中。
- 服务(Service)
同步通信机制,使用客户端/服务器(C/S)模型,客户端发送请求,服务器完成处理后返回应答数据。
服务的数据结构和类型定义在.srv文件内。
ROS初步的基础概念大概就是这些,下篇我们来看一看具体的代码实现通信。