ROS机器人入门

http://www.autolabor.com.cn/book/ROSTutorials/

1、ROS简介

        ROS 是一个适用于机器人的开源的元操作系统。其实它并不是一个真正的操作系统,其
底层的任务调度、编译、寻址等任务还是由 Linux 操作系统完成,也就是说 ROS 实际上是运
行在 Linux 上的次级操作系统。但是 ROS 提供了操作系统应用的各种服务(如:硬件抽象、
底层设备控制、常用函数实现、进程间消息传递、软件包管理等),也提供了用于获取、编
译、跨平台运行代码的工具和函数。 ROS 主要采用松耦合点对点进程网络通信,目前主要还
是支持 Ubuntu 系统, windows 和 Mac OS 目前支持的还不好,所以推荐在 Ubuntu 系统上安
装使用 ROS。

        ROS是一套机器人通用软件框架,可以提升功能模块的复用性。

设计思想、核心概念、核心模块、核心工具:

        ROS 的设计思路主要是分布式架构,将机器人的功能和软件做成一个个节点,然后每个
节点通过 topic 进行沟通,这些节点可以部署在同一台机器上,也可以部署在不同机器上,
还可以部署在互联网上。
        ROS 的核心概念主要是节点和用于节点间通信的话题与服务。管理器 Master 管理节点
与话题之间通信的过程,并且还提供一个参数服务用于全局参数的配置。 ROS 通过功能包集
stack 和功能包 package 来组织代码。
        ROS 的核心模块包括:通信结构基础、机器人特性功能、工具集。通信结构基础主要是
消息传递、记录回放消息、远程过程调用、分布式参数系统;机器人特性功能主要是标准机
器人消息、机器人几何库、机器人描述语言、抢占式远程过程调用、诊断、位置估计、定位
导航;工具集主要是命令式工具、可视化工具、图形化接口。
      ROS 核心工具很丰富, ROS 常用命令工具是 rostopic、 rosservice、 rosnode、 rosparam、
rosmsg、 rossrv、 roswtf; ROS 常用可视化工具是 rqt、 rviz; ROS 用于存储与回放数据的
工具 rosbag; ROS 的 log 系统记录软件运行的相关信息; ROS 还拥有强大的第三方工具支持:
三维仿真环境 Gazebo、计算机视觉库 OpenCV、点云库 PCL、机械臂控制库 MoveIt、工业应
用库 Industrial、机器人编程工具箱 MRPT、实时控制库 Orocos。

ROS可以通过自身携带的主板汇总信息给远程PC,由远程PC担任数据处理任务,最后返回结果给主板处理;

ROS设计目标:

        代码复用:支持机器人技术研发中的代码重用
        分布式:ROS是进程的分布式框架,ROS中的进程可分布于不同的主机,不同主机协同工作,从而分散计算压力。

        松耦合:ROS的功能模块封装于独立的功能包或元功能包,便于分享,功能包内的模块以节点位单位运行,以ros标准的IO作为接口,开发者不需要关注模块内部的实现,只要了解接口规则就能实现复用,实现了模块间点对点的松耦合连接;

        精简:为ROS编写的代码可以与其他机器人软件框架一起使用,ROS易于与其他机器人软件框架集成:ROS已与OpenRAVE,Orocos和Player集成
        语言独立性:java,cpp,Python等,为了支持更多的应用开发和一致,ros设计为一种语言弱相关的框架结构;允许消息接口的嵌套使用

        易于测试:ROS具有称为rostest的内置单元/集成测试框架,可以轻松安装和拆卸测试工具
        大型应用:ROS适用于大型运行时系统和大型开发流程
        丰富的组件化工具包:ROS可采用组件化方式集成一些工具和软件到系统中并作为一个组件直接使用;

        免费且开源:开发者多,功能包多。

ROS安装:详见本文头的链接;

配置ros环境变量:

echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
测试ros代码:

使用记事本编写ros程序:

创建工作空间并初始化:

mkdir   -p  名称/src

cd  名称

catkin_make

进入src创建ros包并添加依赖:

cd src
catkin_create_pkg 自定义ROS包名 roscpp rospy std_msgs

helloworld:

1\进入 ros 包添加 scripts 目录并编辑 python 文件

cd ros包
mkdir scripts
2\新建 python 文件: (文件名自定义)

#! /usr/bin/env python

"""
    Python 版 HelloWorld

"""
import rospy

if __name__ == "__main__":
    rospy.init_node("Hello")
    rospy.loginfo("Hello World!!!!")
3\为 python 文件添加可执行权限

chmod +x 自定义文件名.py
4\编辑 ros 包下的 CamkeList.txt 文件

catkin_install_python(PROGRAMS scripts/自定义文件名.py
  DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
5\进入工作空间目录并编译

cd 自定义空间名称
catkin_make

6.进入工作空间目录并执行

先启动命令行1:

roscore

再启动命令行2:

cd 工作空间
source ./devel/setup.bash
rosrun 包名 自定义文件名.py


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/231055.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL主从复制详解

目录 1. 主从复制的工作原理 1.1. 主从复制的角色 1.2. 主从复制的流程 2. 配置MySQL主从复制 2.1. 确保主服务器开启二进制日志 2.2. 设置从服务器 2.3. 连接主从服务器 2.4. 启动复制 3. 主从复制的优化与注意事项 3.1. 优化复制性能 3.2. 注意复制延迟 3.3. 处理…

Broken pipe

1. 请解释什么是Broken pipe错误,以及它是如何发生的? Broken pipe错误通常发生在网络编程中,比如在使用socket编程时,当客户端发送了一个请求,但是服务器已经关闭了连接或者在客户端发送数据时,网络连接出…

多进程间通信学习之信号灯集(信号量数组)

信号灯集(信号量数组):1、实现进程同步的机制;2、在一个信号灯集中,可以有很多信号灯;3、这些信号灯集中的信号灯相互独立,每个灯的值的改变都不会影响到其他的信号灯;4、信号灯的值…

adb setting设置

设置主页面 adb shell am start com.android.settings/com.android.settings.Settings 安全 adb shell am start com.android.settings/com.android.settings.SecuritySettings 手机无线信息 adb shell am start com.android.settings/com.android.settings.RadioInfo 更…

买显卡别再只看N、A两家了,这些高性价比I卡也很香

谈起独立显卡,相信不少朋友都会第一时间想起NVIDIA与AMD这两家巨头。然而,除了这两家巨头以外,凭借集显占据全球最高显卡市场份额的英特尔在2021年正式入局了独显市场,并在去年9月的时候公布了Arc A系列显卡阵容,型号从…

算法——动态规划(DP,Dynamic Programming)

一、基础概念 DP的思想: 把问题分成子问题,前面子问题的解决结果被后面的子问题使用DP与分治法的区别: 分治法把问题分成独立的子问题,各个子问题能独立解决 自顶向下DP前面子问题的解决结果被后面的子问题使用,子问题…

【基于APB总线的DES实现】

基于APB总线的DES实现 本文内容摘要APB介绍仿真结果整体仿真写入数据DES加密部分DES加密读出密文 整体代码 本文内容摘要 本文是设计一个可兼容APB总线的DES加密协处理器,用来将DES加密模块与APB总线进行对接,使总线发送来的数据可以正常写入并进行加密后…

Autosar DEM DTC的Debounce策略

文章目录 简介Debounce策略1、基于计数器的 Debounce 策略2、基于时间的Debounce策略 简介 故障事件防抖,与按键防抖(软件需要延时确认按键不是误触发)的作用类似,目的是为了防止事件误触发采取的策略。 因为DTC并不是一达到触发…

65道Go基础高频题整理(附答案背诵)

说明一下Golang 中 make 和 new 的区别? 好的,关于 make 和 new 在 Go 语言中的区别,我来解释一下。 new 函数的作用: new(T) 函数会为 T 类型的新项分配零值内存,并返回其地址,即一个 *T 类型的值&#x…

产品调研——AI平台

本文主要记录了对腾讯云-TIONE平台、华为云-ModelArt等主流AI平台的产品调研。 交互式建模 简单点说就是提供了带训练资源的云IDE,使用形态包括Notebook、VsCode等。 腾讯云-TI平台 TI平台将tensorflow、pytorch、spark环境等均集成到一个Notebook容器中&#xf…

Android 一分钟使用RecyclerView完美实现瀑布

【免费】安卓RecyclerView瀑布流效果实现资源-CSDN文库 1.WaterfallFlowActivity 主函数代码: package com.example.mytestapplication;import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.widget.Toast;im…

Git总结 | Git面试都问些啥?

什么是Git为什么要用Git等等这些相信看到该标题点进来的同学也不希望浪费时间再看一遍,那么直接进入主题,对于日常工作中常用的Git相关操作进行整理,一起看看吧 面试官:你常用的Git操作是什么? 候选人:git clone 面试…

59. 螺旋矩阵 II(java实现,史上最详细教程,想学会的进!!!)

今天来分享一下螺旋矩阵的解题思路及代码的实现。 题目描述如下: 首先拿到这道题,首先不要慌张,我们来仔细分析一下会发现并没有那么难。 首先看下边界的元素是1、2、3递增的,那么我们也许可以根据这一点先把边界的元素一个一个给…

【Proteus仿真】【51单片机】视力保护仪

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真51单片机控制器,使LCD1602液晶,按键、HC-SR04超声波、PCF8591 ADC、光敏传感器、蜂鸣器、LED等。 主要功能: 系统运行后,LCD1602显示…

【vtkWidgetRepresentation】第十四期 二维标注

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 前言 本文分享vtk中的二维标注,主要用于医学领域,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~YO 目录 前言 1. vtkBiDimension…

新人学习python必须知道的规范(Python-PEP8)

NOTE(注意): 随着时间的推移,更好的编程方式可能会陆续出现,以下基于PEP8整理总结于2023-12-18. 由于加入了自己的一些见解,所以本文并不是PEP8的翻译版本,所以跟PEP8并不100%相同。其中样例代码只摘取了经典的常见的一部分。 以下…

Bash script进阶笔记

数组类型 arr(1 2 3) # 最基础的方式声明数组,用小括号(),元素之间逗号分隔 arr([1]10 [2]20 [3]30) # 初始化时指定index declare -a arr(1 2 3) # 用declare -a声明数组,小括号外面可选使用单引号、双引号 declare -a arr‘(1 2 3)’…

30道C++ 基础高频题整理(附答案背诵版)

1. C和C有什么区别? C是C语言的超集(我看网上很多文章说这是不对的),这意味着几乎所有的C程序都可以在C编译器中编译和运行。然而,C引入了许多新的概念和特性,使得两种语言在一些关键点上有显著的区别。 …

漏洞复现-海康威视 NCG 联网网关 login.php 目录遍历漏漏洞(附漏洞检测脚本)

免责声明 文章中涉及的漏洞均已修复,敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的…