AI+智能服务机器人应用基础

  • 前言
    • 欢迎使用 Markdown编辑器
    • 欢迎使用 VMware Workstation
      • VMware Workstation创建新的虚拟机
  • AI+智能服务机器人应用基础
    • 一、服务机器人整体认识
    • 二、ROS 机器人操作系统的认识
      • 项目1、小海龟
        • 任务1 创建 ROS 工作空间与功能包
        • 任务2 使用 launch 文件启动节点
          • 调用ROS的小海龟
            • 代码如下:
            • 流程图片:
            • 效果展示:
    • 三、ROS通信架构
      • ROS核心概念:节点
    • 四、 ROS通信方式
      • 项目1、使用话题机制实现节点间通信
        • 任务1 创建一个话题的步骤(订阅者)
        • 任务2 创建一个话题的步骤(发布者)
    • 五、 ROS通信架构
      • 服务通信
      • 项目1、客户端Client的编程实现
        • 任务1 创建一个客户端
        • 任务2 创建一个服务端
      • 参数服务器
        • 任务3 参数的使用与编程方法
    • 六、机器人的坐标系统
      • 认识TF
      • 项目1、TF广播与监听的编程实现
    • 七、机器人模型搭建
      • URDF基础
      • 项目1、制作URDF模型
        • 任务1 添加基本模型
        • 任务2 添加机器人link之间的相对位置关系
        • 任务3 添加模型的尺寸,形状和颜色等添加模型的尺寸,形状和颜色等
        • 任务4 显示URDF模型
      • 项目2、制作xacro模型
      • 项目3、 制作gazebo模型
      • 项目4、小乌龟的运动控制
      • 项目5、机器人的运动控制
      • 项目6、实操练习
    • 八、SLAM建图(大作业)

**作者:韩海霆

前言

欢迎使用 Markdown编辑器

你好!这是我学习如何使用 Markdown编辑器 来编写我的一个学习笔记和完成我的学习报告作业,通过 Markdown编辑器 所展示的页面让老师和大家更好阅读我的学习报告。、

欢迎使用 VMware Workstation

这是在我的机器人专业课洪老师作业要求下第N+1使用 VMware Workstation虚拟机 搭建乌班图ROS系统。如果你想学习如何使用 VMware Workstation 虚拟机安装并且使用乌班图+ROS, 可以仔细阅读这篇文章,了解一下 我的第N+1次的ROS安装和学习《AI+智能服务机器人应用基础》【个人笔记】的基本知识和有关基于树莓派的机器人多功能搭建的一个理论学习和实操操作,仅供大家参考,我们一起学习交流。

VMware Workstation创建新的虚拟机

VMware Workstation安装和创建新的虚拟机在很多平台有很多博主对 VMware Workstation 安装和创建新的虚拟机的过程简单、不繁琐;同时在博客上也有比较详细的教程,在本文章就推荐个人认为比较好的博客给予大家参考,在这里就不详细描述:

虚拟机VMware下载与安装教程(详细)
虚拟机VMware安装乌班图教程(详细)

过程遇到问题,解决如下:

  1. VMware Workstation密钥问题 :在网上搜VMware Workstation密钥有很多都尝试直至破解成功就行;
  2. 乌班图有三大版本 乌班图版本选择版本 根据个人需求选择各自需要的版本;

AI+智能服务机器人应用基础

一、服务机器人整体认识

随着科学技术的发展,机器人技术和人工智能技术的日益成熟,人们不仅仅希望机器人能够在工厂之中完成固定、重复的劳作,还希望机器人能够机器人能够在日常生活之中为人类提供便利,“服务机器人”的概念出现在我们的视野之中。
服务机器人的认识是学习服务机器人的基础部分,对服务机器人的定义、发展、分类、应用、机械构成、控制方式、编程方式的了解,在应用服务机器人具有重要作用。

(未完成,待更新)


二、ROS 机器人操作系统的认识

ROS (Robot Operating System)即机器人操作系统,是如今最流行的机器人软件架构,它包含了大量工具软件、库代码和约定协议,为机器人研究提供了代码复用的支持将搭建和控制机器人的难度大幅地降低。本项目中,我们将会学习使用ROS机器人操作系统的基本命令,操作PC(个人计算机)通过网络远程登录Castle-X机器人并学习ROS机器人操作系统的核心——“通信机制”。

项目1、小海龟

任务1 创建 ROS 工作空间与功能包

(未完成,待更新)

任务2 使用 launch 文件启动节点

调用ROS的小海龟
代码如下:

启动ROS Master
roscore
启动小海龟仿真
rosrun turtlesim turtlesim_node
启动海龟控制节点
rosrun turtlesim turtle_teleop_key

流程图片:

效果展示:



结论:

  1. launch(文件格式):以一种特殊的XML(标记语言)格式编写,可以同时运行多个nodes(节点)的文件。
  2. 本节没什么难度,傻瓜式跟着操作就行

三、ROS通信架构

ROS核心概念:节点

在ROS的世界里,最小的进程单元就是节点(node)。一个软件包里可以有多个可执行文件,可执行文件在运行之后就成了一个进程(process),这个进程在ROS中就叫做节点。
从程序角度来说,node就是一个可执行文件(通常为C++编译生成的可执行文件、Python脚本) 被执行,加载到了内存之中;
从功能角度来说,通常一个node负责者机器人的某一个单独的功能。
由于机器人的功能模块非常复杂,我们往往不会把所有功能都集中到一个node上,而会采用分布式的方式,把鸡蛋放到不同的篮子里。例如有一个node来控制底盘轮子的运动,有一个node驱动摄像头获取图像,有一个node驱动激光雷达,有一个node根据传感器信息进行路径规划……这样做可以降低程序发生崩溃的可能性,试想一下如果把所有功能都写到一个程序中,模块间的通信、异常处理将会很麻烦。


四、 ROS通信方式

本实验主要学习ROS(机器人操作系统)的核心通信机制
话题机制,介绍了话题通信机制的模型和通信流程,并且学习了使用 python语言(面向对象的解释型计算机程序设计语言)编写最基本的发布者和订阅者节点来实现话题通信机制。

项目1、使用话题机制实现节点间通信

任务1 创建一个话题的步骤(订阅者)

任务要求:
订阅者节点名称:std学号
订阅的话题名:/turtle/pose
消息的数据类型:turtlesim::Pose
特殊要求:
收到订阅的消息后,将消息打印出来,并保留2位小数
订阅的话题名为/turtle/pose并观察现象和分析

-1. 进入communication_tutorials/scripts(路径)目录。新建一个终端,输入以下命令
-2. 创建监听器文件并赋予权限。在之前的终端中依次输入以下命令
-3. 在之前的终端输入以下命令,添加下面的代码到新建 demo1.py
流程展示(附代码)

>②
>③

#### 终端指令
$   roscd communication_tutorials/scripts
$   touch demo1.py
$   chmod +x demo1.py
$   gedit demo1.py
# demo1.py 代码内容如下:
#!/usr/bin/env python
#coding:utf-8import rospy
from turtlesim.msg import Posedef poseCallback(msg):rospy.loginfo("Turtle pose: x:%0.6f, y:%0.6f", msg.x, msg.y)def pose_subscriber():rospy.init_node('pose_subscriner', anonymous=True)rospy.Subscriber("/turtle1/pose", Pose, poseCallback)rospy.spin()if __name__ == "__main__":pose_subscriber()

任务2 创建一个话题的步骤(发布者)

发布者编程要求:
发布者节点名称:std学号
发布者的话题名:/turtle1/cmd_vel
消息的数据类型:geometry_msgs::Twist
特殊要求:控制小乌龟走四边形轨迹

-1. 进入自己的工作空间 castle_ws 下的 src 文件 我的工作空间为 hht_ws
-2. 创建新的功能包 这里我的功能包命名为 project_turtorials
-3. 创建 scripts 文件夹并且进入此文件夹
-4. 创建消息发布者 demo0.py 并赋予权限
-5. 在终端输入$ gedit demo0.py,添加代码到新建的 demo0.py(文件名称)

流程展示(附demo0.py代码)

> ②

#### 终端指令
$   cd ~/castle_ws/src
$   catkin_crete_pkg project_tutorials std_msgs rospy roscpp
$   roscd project_tutorials
$   mkdir scripts
$   cd scripts
$   touch talker.py
$   chomd +x demo0.py
# demo0.py 代码内容如下:
#!/usr/bin/env python
#coding:utf-8
# license removed for brevityimport rospy
import time
from geometry_msgs.msg import Twistturn = Truedef std2024060135():global turnrospy.init_node('std2024060135', anonymous=True)turtle_vel_pub = rospy.Publisher('/turtle1/cmd_vel', Twist, queue_size=10)rate = rospy.Rate(1)while not rospy.is_shutdown():vel_msg = Twist()if turn:vel_msg.linear.x = 1.0vel_msg.angular.z = 0.0turn = Falseelse:vel_msg.linear.x = 0.0vel_msg.angular.z = 1*3.14/2turn = Trueturtle_vel_pub.publish(vel_msg)rospy.loginfo("Publish turtle velocity command[%0.2f m/s,%0.2f rad/s]",vel_msg.linear.x, vel_msg.angular.z)rate.sleep()
# while not rospy.is_shutdown():
# vel_msg = Twist()# vel_msg.linear.x = 1
# vel_msg.linear.y = 0
# vel_msg.linear.z = 0
# vel_msg.angular.x = 0
# vel_msg.angular.y = 0
# vel_msg.angular.z = 0# turn = False# time.sleep(0.5)# vel_msg.linear.x = 0
# vel_msg.linear.y = 1
# vel_msg.linear.z = 0
# vel_msg.angular.x = 0
# vel_msg.angular.y = 0
# vel_msg.angular.z = 0# time.sleep(0.5)# turtle_vel_pub.publish(vel_msg)
# rospy.loginfo("Publish turtle velocity command[%0.2f m/s,%0.2f rad/s]",vel_msg.linear.x, vel_msg.linear.y)
# rate.sleep()#while not rospy.is_shutdown():
# vel_msg = Twist()
# vel = Counter()# vel_msg.linear.x = 1# turtle_vel_pub.publish(vel_msg)
# rospy.loginfo("Publish turtle velocity command[%0.2f m/s,%0.2f rad/s]",vel_msg.linear.x, vel_msg.linear.y)# rate.sleep()if __name__ == '__main__':try:std2024060135()except rospy.ROSInterruptException:pass

我的的小结

  1. 这里我是用python代码是因为python没有像C++那样多出很多编译操作和BUG
  2. demo0代码中 >rate = rospy.Rate(1)< 这里Rate是乌龟的运动频率,当我把频率设置为5的时候,小乌龟走出的形状是圆形的
  3. 任务要求小乌龟走的是正方形,我这里定义一个真假值,然后用判断语句去执行相应步骤。在这里我认为还有其他方法,比如可以用for循环让小乌龟执行每一步骤后停止换方向再执行前进等

五、 ROS通信架构

服务通信

前面我们介绍了ROS的通信方式中的topic(主题)通信,我们知道topic是ROS中的一种单向的异步通信方式。然而有些时候单向的通信满足不了通信要求,比如当一些节点只是临时而非周期性的需要某些数据,如果用topic通信方式时就会消耗大量不必要的系统资源,造成系统的低效率高功耗。
service方式在通信模型上与topic做了区别。Service通信是双向的,它不仅可以发送消息,同时还会有反馈。所以service包括两部分,一部分是请求方(Clinet),另一部分是应答方/服务提供方(Server)。
请求方(Client)会发送一个request,要等待server处理,反馈回一个reply,这样通过类似“请求-应答”的机制完成整个服务通信。

项目1、客户端Client的编程实现

任务1 创建一个客户端

客户端编程要求:
客户端节点名称:std学号
特殊要求:运行后随机位置出现小乌龟,并每隔2秒出现1只小乌龟,超过5只后停止;

提示:
如何实现一个客户端

  • 初始化ROS节点;
  • 创建一个 Cilent 实例;
  • 发布服务请求数据;
  • 等待 Server 处理之后的应答结果。
#!/usr/bin/env python
import sys
import rospy
from turtlesim.srv import Spawndef turtle_spawn():rospy.init_node('turtle_spawn')#发现 /spawn 服务后创建一个服务客户端,连接名为 /spawn 的 servicerospy.wait_for_service('/spawn')try:add_turtle = rospy.ServiceProxy('/spawn', Spawn)#请求服务调用,输入请求数据response = add_turtle(2.0, 2.0, 0.0, "turtle2")return response.nameexcept rospy.ServiceException, e:print"Service call failed: %s"%eif __name__ == "__main__":#服务端用并显示调用结果print"Spwan turtle successfully [name:%s]"%(turtle_spawn())

任务2 创建一个服务端

代码如下:

参数服务器

参数服务器,作为ROS中另外一种数据传输方式,有别于topic和service,它更加的静态。参数服务器维护着一个数据字典,字典里存储着各种参数和配置。

action主要弥补了service通信的一个不足,就是当机器人执行一个长时间的任务时,假如利用service通信方式,那么client会很长时间接受不到反馈的reply,致使通信受阻。当service通信不能很好的完成任务时候,action则可以比较适合实现长时间的通信过程,action通信过程可以随时被查看过程进度,也可以终止请求,这样的一个特性,使得它在一些特别的机制中拥有很高的效率。

任务3 参数的使用与编程方法

任务要求如下:
从课件的第12页开始,完成程序功能编写。
发挥主观能动性,遇到问题分析、查找资料并解决
最终完成一份实验报告。尝试改变小乌龟仿真器的背景颜色。






六、机器人的坐标系统

机器人的坐标变换一直以来是机器人学的一个难点,我们人类在进行一个简单的动作时,从思考到实施行动再到完成动作可能仅仅需要几秒钟,但是机器人来讲就需要大量的计算和坐标转换。

认识TF

TF是一个ROS世界里的一个基本的也是很重要的概念,所谓TF(TransForm),就是坐标转换。在现实生活中,我们做出各种行为模式都可以在很短的时间里完成,比如拿起身边的物品,但是在机器人的世界里,则远远没有那么简单。

当机器人的"眼睛"获取一组数据,关于物体的坐标方位,但 是相对于机器人手臂来说,这个坐标只是相对于机器人头部的传感器,并不直接适用于机器 人手臂执行,那么物体相对于头部和手臂之间的坐标转换,就是TF。
坐标变换包括了位置姿态两个方面的变换,ROS中的tf是一个可以让用户随时记录多个坐标系的软件包。tf保持缓存的树形结构中的坐标系之间的关系,并且允许用户在任何期望的时间
点在任何两个坐标系之间转换点,矢量等

项目1、TF广播与监听的编程实现

**实操作业要求如下:**
参考课件第17~22页,完成TF广播与监听的程序功能编写。
理解turtle1向turtle2坐标转换所使用的函数是何意义,并在代码附近添加注释

(后续补充)


七、机器人模型搭建

URDF基础

URDF介绍
URDF:即 Unified Robot Description Format, 为统一的机器人描述格式,是 ROS(机器人操作系统) 中一个非常重要的机器人模型描述格式。ROS 可以解析 文件中使用 XML(标记语音) 格式描述的机器人模型,同时提供 URDF(模型 格式) 文件的 C++(计算机程序设计) 解析器。
获取机器人URDF模型文件的途径通常有
-自己写
-机器人制造商提供其机器人的URDF模型
-通过机械设计软件导出URDF文件

项目1、制作URDF模型

任务1 添加基本模型

我们以构建一个小车为例子,为大家讲解这部分的内容:(相关的示例代码可以从urdf_demo中找到)
首先构建base_link作为小车的父坐标系,然后在base_link基础上,再构建左轮,右轮 和雷达 link. 最后不同的link之间通过joint来连接。参考代码如下:

<robot name='mycar'><link name="base_link"/><link name="right" /><link name="left"/><link name="rplidar" />
<joint name="right_joint" type="continuous "><parent link="base_link" /><child link="right" />
</joint><joint name="letf_joint" type="continuous "><parent link="base_link"/><child link="left"7>
</joint><joint name="rplidar_joint" type="fixed"><parent link="base_iink"/><child link=" rplidar/>
</robot>

首先将urdf_demo功能包拷贝到~/catkin_ws/src/目录下
随后进入工作空间进行编译:
cd ~/catkin_ws
catkin_make

随后打开新的终端,输入
roslaunch urdf_demo display_urdf_link_joint.launch
回车之后, 发现所有的link和joint都在一起了


任务2 添加机器人link之间的相对位置关系

在基础模型之上,我们需要为机器人之间link来设相对坐标位置和旋转方向的关系,URDF中通过来描述这种关系。
随后打开新的终端,输入命令
roslaunch urdf_demo display_urdf_link_position.launch
回车之后,发现所有的link和joint已经有在固定的位置上了


任务3 添加模型的尺寸,形状和颜色等添加模型的尺寸,形状和颜色等

在已经设置好模型的link基础上,添加模型的形状(例如圆柱或长方体),相对于link的位置,颜色等。其中形状用来描述,颜色用来描述。
尝试修改描述的内容,为小车底盘绘制成圆柱形cylinder;
尝试修改描述的内容,将小车底盘绘制成红色。


任务4 显示URDF模型

想要在rviz中显示出我们制作好的小车的URDF模型,可以写一个launch文件,参考如下:

效果如下:

项目2、制作xacro模型

(略)

项目3、 制作gazebo模型

(略)

项目4、小乌龟的运动控制

(略)

项目5、机器人的运动控制

(略)

项目6、实操练习

综上模块学习,以下为实操过程展示:

  • ①ROS为用户提供了一个检查URDF语法的工具:

  • ②Tab键补全:
  • ③执行检查:
  • ④首先将urdf_demo功能包拷贝到~/catkin_ws/src/目录下:
  • ⑤随后进入工作空间进行编译:
  • ⑥cd ~/catkin_ws:
  • ⑦catkin_make:
  • ⑧在终端输roslaunch urdf_demo display_urdf_link_joint.launch
  • ⑨但是会跳出错误

  • **`把这里面文档中这句话全部删除,再重新运行
  • roslaunch urdf_demo display_urdf_link_joint.launch





随后打开新的终端,输入命令
$ roslaunch urdf_demo display_urdf_link_position.launch

回车之后,发现所有的link和joint已经有在固定的位置上了

想要在rviz中显示出我们制作好的小车的URDF模型,可以写一个launch文件,参考如下

打开终端输入
$roslaunch urdf_demo display_urdf_color_geometry.launch
效果如下:

另外,我们可以输入
$ rosrun rqt_tf_tree rqt_tf_tree
可以看到以下tf 树:
rosrun turtlesim turtlesim_node

  • 打开新的终端,输入roslaunch urdf_demo display_xacro.launch,回车之后,发现所有的link和joint已经有在固定的位置上了,并且小车颜色和形状已经固定完成。

  • 打开新终端,输入

  • 查看话题与节点的拓扑图


八、SLAM建图(大作业)

SLAM建图(大作业)

AI+智能服务机器人应用基础【实践报告】相关推荐

  1. AI+智能服务机器人应用基础【学习报告】

    AI+智能服务机器人应用基础[学习报告] 前言 欢迎使用 VMware Workstation VMware Workstation创建新的虚拟机 AI+智能服务机器人应用基础 项目1. 服务机器人整 ...

  2. 小i智慧学堂进复旦:探讨AI智能服务体系运营与实践

    人工智能的引入可以帮助人们更加专注于高附加值工作,进行决策与创新,从而推动企业业务增长,因此,人工智能与各行业深度融合已是大势所趋.但由于智能服务运营复杂,并且会涉及到一些新的方法和技能,如果不能尽快 ...

  3. 重磅干货!AI智能服务体系搭建与实践培训班11月24-25日上海开课

    如今,单一的智能化产品已经无法满足的市场需求,多元化.全景式的智能服务才是AI未来发展的趋势. 但企业在引入智能服务时 该如何选择适合企业自身需求的智能产品? 企业的AI智能服务体系该如何搭建? 搭建 ...

  4. AI 智能皮影机器人

    AI 智能皮影机器人 项目演示视频 项目背景 创意来源 皮影戏(Shadow Puppets),又称"影子戏"或"灯影戏",作为我国的第一批世界非物质文化遗产, ...

  5. 智能服务机器人产品及解决方案

    产品概述 随着人工智能(AI)领域技术的不断发展和演进,面向人工智能的领域应用也越来越被更多的企业关注.信迈作为中国领先的创新型软件及信息技术服务商,一直致力于人工智能领域技术的探索和实践. 信迈凭借 ...

  6. 节假日无休?让智能服务机器人替你加班

    是谁,连续72小时没有合眼? 是谁,节假日也一直坚守在岗位上? 是谁,兢兢业业? 是谁,无私奉献? ..... 有没有想过一种可能,这个能从事重复性劳动.不怕苦不怕累的员工,竟然是机器人! 最近一支趣 ...

  7. 人力资源管理计算机基础,人力资源管理-专-李佑强-计算机应用基础实践报告.doc...

    文档介绍: 人力资源管理-专-李佑强-计算机应用基础实践报告贵州高等教育自学考试实践考试<计算机应用基础>课程实践性报告题目:计算机应用基础(word,excel)操作姓名:李佑强学号:2 ...

  8. 人力资源管理计算机基础,人力资源管理-专-李佑强-计算机应用基础实践报告

    <人力资源管理-专-李佑强-计算机应用基础实践报告>由会员分享,可在线阅读,更多相关<人力资源管理-专-李佑强-计算机应用基础实践报告(10页珍藏版)>请在人人文库网上搜索. ...

  9. 计算机实训机器人实验原理是什么,实验报告机器人控制技术基础实验报告.doc...

    实验报告机器人控制技术基础实验报告 华北电力大学 实 验 报 告 | | 实验名称: 机器人控制技术基础 课程名称: 机器人控制技术基础 | | 实 验 人: 成 绩: 18.00秒 指导教师: 实验 ...

最新文章

  1. Ubuntu12.04版本安装arm-linux-gcc 4.3.3
  2. 3600插b450i开不了机_win10电脑开不了机怎么办
  3. Nacos处理服务变更通知
  4. SharePoint 2013 关于自定义显示列表表单的bug
  5. 苏宁官方辟谣“员工猝死”:因个人身体原因晕倒
  6. [Guava源码日报(1)]Guava类库简介
  7. JupterNoteBook
  8. 亚马逊Alexa Connect Kit(ACK)
  9. windows安装yarn和tyarn
  10. dll,sys文件被认定为病毒后如何删除
  11. spring-task
  12. rails erb_您需要知道Rails中的erb以及如何掌握它
  13. suse账号解锁_Linux多次登录失败用户被锁定使用Pam_Tally2解锁
  14. docker基础(11):自定义tomcat镜像启动与访问
  15. MATLAB程序:IEEE802.16d路径损耗模型
  16. 关于AD之PCB各层的简单说明
  17. linux 赋予文件权限
  18. sohc和vtec的关系
  19. 你的电脑将在一分钟后自动重启 netsh winsock reset无效的解决方法
  20. SQL多表联合查询时采用字段模糊匹配

热门文章

  1. xmind可以画流程图吗_怎样用XMind方便地制作流程图
  2. 小米删除了文件无网络无服务器,小米手机里的文件删了怎么恢复?超详细解决方法...
  3. 互联网开发搞手游创作8-再次推倒重新
  4. 将svg图标转换成iconfont图标
  5. 视频教程-Kali Linux 网络安全渗透测试-渗透测试
  6. Jexl表达式引擎(2)
  7. MySQL5.7修改默认root密码
  8. Java程序设计课程教学实践
  9. 「机器学习」天池比赛:金融风控贷款违约预测
  10. 基于jsp+java+ssm妇女联合会管理系统