阶段1:基础知识
1. ROS简介
学习内容:
- 什么是ROS:
- ROS(Robot Operating System)是一个用于机器人软件开发的开源框架,提供了一系列工具、库和约定。
- 主要功能包括硬件抽象、设备驱动、库、可视化工具、消息传递和软件包管理。
实践活动:
- 浏览ROS官网和文档,了解ROS的基本概念和应用领域。
2. ROS安装与配置
学习内容:
- 安装ROS:
- ROS主要在Ubuntu系统上运行,以下是安装步骤:
# 设置源列表
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
# 设置密钥
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
# 更新软件包列表
sudo apt update
# 安装ROS(以ROS Noetic为例)
sudo apt install ros-noetic-desktop-full
# 初始化rosdep
sudo rosdep init
rosdep update
# 设置环境变量
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
# 安装rosinstall工具
sudo apt install python3-rosinstall python3-rosinstall-generator python3-wstool build-essential
- 国内的同学可以使用鱼香ROS一键安装ROS
wget http://fishros.com/install -O fishros && . fishros
实践活动:
- 安装ROS并进行基本配置,确保能够成功运行
roscore
命令。
3.ROS核心概念
学习内容:
节点(Nodes):
ROS中的节点是一个独立运行的进程,每个节点负责特定的任务。
通信(Topic):
ROS使用主题(Topics)进行节点间通信,节点发布(Publish)或订阅(Subscribe)主题。
服务(Services):
服务允许节点之间进行同步通信,类似于函数调用。
参数服务器(Parameter Server)
参数服务器用于存储参数,可以被所有节点访问。
消息(Messages)与服务类型(Service Types):
消息是节点间交换的数据结构,服务类型定义了请求和响应的数据结构。
实践活动:
- 浏览ROS Wiki,了解每个核心概念的详细内容。
阶段2:基础实践
1. 创建与运行第一个ROS节点
学习内容:
- 编写简单的发布者(Publisher)节点和订阅者(Subscriber)节点。
- 使用
rosrun
和roslaunch
运行节点。
实践活动:
创建一个工作空间并编写第一个ROS节点。
示例代码:
1.创建工作空间:
#创建catkin工作空间
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make
#设置环境变量
source devel/setup.bash
2.创建简单的Publisher节点(Python):
#创建一个新的ROS包
cd ~/catkin_ws/src
catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
#编写publisher节点
cd ~/catkin_ws/src/beginner_tutorials/src
#创建一个名为talker.py的文件,并添加以下内容:
#!/usr/bin/env python
import rospy
from std_msgs.msg import String
def talker():
pub = rospy.Publisher('chatter', String, queue_size=10)
rospy.init_node('talker', anonymous = True)
rate = rospy.Rate(10) #10hz
while not rospy.is_shutdown():
hello_str = "hello world %s" % rospy.get_time()
rospy.loginfo(hello_str)
pub.publish(hello_str)
rate.sleep()
if __name__ == '__main__':
try:
talker()
except rospy.ROSInterruptException:
pass
3. 创建简单的Subscriber节点(Python):
#创建一个名为listener.py的文件,并添加以下内容:
#!/usr/bin/env python
import rospy
from std_msgs.msg import String
def callback(data):
rospy.loginfo(rospy.get_caller_id() + "Iheard %s", data.data)
def listener():
rospy.init_node('listener', announymous = True)
rospy.Subscriber('chatter', String, callback)
rospy.spin()
if __name__ == '__main__':
listener()
4.运行节点:
#在一个终端运行roscore
roscore
#在另一个终端运行talker节点
rosrun beginner_tutorials talker.py
#在第三个终端运行listener节点
rosrun beginner_tutorials listener.py
阶段3:进阶知识
1. ROS参数服务器
学习内容:
- 设置和获取参数
- ROS参数服务器用于存储全局参数,参数可以是各种类型,如整数、浮点数、字符串等。
- 使用命令
rosparam
可以设置和获取参数。
实践活动:
- 设置和获取参数的示例: