1. 认识ROS | ROS学习笔记

1. ROS发展现状

  • ROS十周年: ROS Turns 10! - ROS robotics news
  • ROS元老机器人——PR2
  • NASA空间站机器人
  • ROS应用
    • 无人驾驶
    • roboearth
    • 利用手机相机和处理器
    • ROS2
  • ROS已经机器人领域的事实标准 robots.ros.org
  • ROS社区内功能包数量关注度,相关文章指数上涨

2. 课程介绍

课程参考资料

  1. 遇事不决问google:Google
  2. ROS wiki :http://wiki.ros.org
  3. ROS answer:https://answers.ros.org
  4. 古月居:http:lwww.guyuehome.com
  5. Exbot实验室:https://www.exbot.net/

3. ROS历史起源

4. ROS总体设计

[!tip] 提高机器人研发中软件复用率

[!check] 五个特点

  1. 点对点的设计
  2. 多语言支持
  3. 架构精简、集成度高
  4. 组件化工具包丰富
  5. 免费并且开源
  1. 点对点的设计
    1. 节点单元
    2. 分布式网络
    3. RPC+TCP/UDP通信
    4. 适合多机协同
  2. 多语言支持
    1. 支持python、c++、Java
    2. 语言无关的接口定义
  3. 架构精简、集成度高
    1. 每个功能节点单独编译
    2. 接口统一
    3. 多个开源项目
  4. 组件化工具包丰富
    1. 3D可视化工具——rviz
    2. 物理仿真环境——gazebo
    3. 数据记录工具——rosbag
    4. Qt工具箱——rqt_*
  5. 免费并且开源

[!cite] 四位一体
ROS = 通讯机制 + 开发工具 + 应用功能 + 生态系统

[!summary] ROS总体设计

5. ROS系统实现

  • 三个层次
    • 计算图
    • 文件系统
    • 开源社区

5.1 计算图

  1. 节点(Node)–软件模块
  2. 节点管理器(ROS Master)一一控制中心,提供参数管理
  3. 话题(Topic)一一异步通信机制,传输消息(Message)
  4. 服务(Service)一一同步通信机制,传输请求/应答数据
1)话题通信机制
  • Talker 注册
  • Listener 注册
  • ROS Master 进行信息匹配
  • Listener 发送连接请求
  • Talker 确定联接请求
  • 建立网络连接
  • Talker向Listener发布数据

2)服务通信机制(与topic相比少了两步)
  • Talker 注册
  • Listener 注册
  • ROS Master 进行信息匹配
  • Listener 发送连接请求
  • Talker 确定联接请求
  • 建立网络连接
  • Talker向Listener发布服务应答数据
3)参数通信机制(类似于全局变量)
  • Talker 设置变量
  • Listener 查询参数值
  • ROS Master 向Listener 发送参数值

注:Talker 向 ROS Master更新了参数,Listener如果重新查询,不能及时更新参数

4)话题和服务的区别.

5.2 文件系统

  1. 功能包清单(Package manifest):记录功能包的基本信息,包含作者信息、许可信息、依赖选项、编译标志等。
  2. 元功能包(Meta Packages):组织多个用于同一目的功能包。
  3. 元功能包清单(Meta Packages.):类似于功能包清单,不同之处在于元功能包清单中可能会包含运行时需要依赖的功能包或者声明一些引用的标签。
  4. 消息类型(Message):消息是ROS节点之间发布/订阅的通信信息,可以使用ROS系统提供的消息类型,也可以使用.msg文件在功能包的msg文件夹下自定义需要的消息类型。
  5. 服务类型(Service):服务类型定义了ROS服务器/客户端通信模型下的请求与应答数据类型,可以使用ROS系统提供的服务类型,也可以使用.Srv文件在功能包的srv文件夹中进行定义。
  6. 代码(Code):放置功能包节点源代码的文件夹。

5.3 开源社区

  1. ROS发行版
  2. 软件源
  3. ROS wiki
  4. ROS Answer

6. 初次实践

6.1 版本选择

Ubuntu20.04
ROS1——Noetic

6.2 Ubuntu20.04 noetic安装记录

参考:wiki

  1. 添加ROS软件源(使用清华源)
sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'
  1. 添加密匙
sudo apt-key adv --keyserver 'hkp://pgp.mit.edu:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

出现下面的提示密匙添加正确

3. 安装ROS

sudo apt update
sudo apt install ros-noetic-desktop-full
  1. 设置环境变量
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
  1. 安装依赖
sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential
  1. 初始化rosdep
sudo rosdep init
rosdep update
1)对于rosdep初始化失败

因为网络问题,rosdep init 很容易失败,csdn有很多解决方法

这里用一个比较方便的:本文之后,世上再无rosdep更新失败问题)

  1. 安装 pip3
sudo apt-get install python3-pip
  1. 安装 rosdepc
sudo pip3 install rosdepc
  • 如果失败
sudo pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple rosdepc
  1. 初始化
sudo rosdepc init
  1. 更新
rosdepc update
2)以上比较麻烦的话,可以使用一键安装(doge)
wget http://fishros.com/install -O fishros && . fishros

ROS默认安装路径在 /opt/ros/noetic

其中比较重要的是 includelibshare 三个文件夹

  1. include 里面主要是 .h 头文件,使用 c++ 编程需要 include
  2. lib 文件夹主要是安装的可执行程序,即 node
  3. share 主要是安装功能包的接口,比如 topicservice

6.3 安装后测试

  1. 使用 roscore 命令启动ROS Master
roscore

6.4 ROS命令工具

命令作用
catkin_create-pkg创建功能包
rospack获取功能包信息
catkin_make编译工作空间中的功能包
rosdep自动安装功能包依赖的其他包
roscd功能包目录跳转
roscp拷贝功能包文件
rosed编辑功能包文件
rosrun运行功能包可执行文件
roslaunch运行启动文件

6.5 第一个ROS例程(小海龟仿真)

  1. 启动ROS Master(第一个终端)
roscore
  1. 启动小海龟仿真器(第二个终端)
rosrun turtlesim turrlesim_node
  1. 启动海龟控制节点(第三个终端)
rosrun turtlesim turtle_teleop_key


4. 使用 rqt_graph 可视化工具参看计算图

rqt_graph


5. 使用rosnode list查看系统的节点

rosnode list


6. 使用 rosnode info 查看节点信息

rosnode info /turtlesim


7. 使用 rostopic list 查看系统的发布/订阅话题

rostopic list


8. 使用 rosnode info 查看话题信息

rostopic info /turtle1/cmd_vel 


9. 使用 rostopic echo · 监听话题信息

rostopic echo /turtle1/cmd_vel


10. 使用 rostopic pub 来发布命令

rostopic pub /turtle1/cmd_vel geometry_msgs/Twist "linear:
  x: 0.0
  y: 2.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: 0.0" 


11. 添加参数使其一直旋转

rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'

请添加图片描述

  1. 使用 rosservice list 查看系统的服务
rosservice list


13. 使用 rosservice info 查看服务信息

rosservice info /spawn 


14. 使用 rosservice call发布服务请求

rosservice call /spawn "x: 2.0
y: 5.0
theta: 0.0
name: 'turtle2'" 


15. 使用 rqt_plot 可视化工具

rqt_plot

请添加图片描述

ROS应用框架

总结

作业

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值