AI+智能服务机器人应用基础【学习报告】
作者:韩海霆
学号:2024060135
班级:2020级应用电子技术A班
前言
欢迎使用 VMware Workstation
你好! 这是基于老师需求下第N+1使用 VMware Workstation虚拟机 搭建乌班图ROS系统。如果你想学习如何使用 VMware Workstation 虚拟机安装并且使用乌班图+ROS, 可以仔细阅读这篇文章,了解一下 我的第N+1次的ROS安装和学习《AI+智能服务机器人应用基础》【个人笔记】的基本知识。
VMware Workstation创建新的虚拟机
VMware Workstation安装和创建新的虚拟机在很多平台有很多博主对 VMware Workstation 安装和创建新的虚拟机的过程简单、不繁琐;同时在博客上也有比较详细的教程,在本文章就推荐个人认为比较好的博客给予大家参考,在这里就不详细描述:
过程遇到问题,解决如下:
- VMware Workstation密钥问题 :在网上搜VMware Workstation密钥有很多都尝试直至破解成功就行;
- 乌班图有三大版本 乌班图版本选择版本 根据个人需求选择各自需要的版本;
AI+智能服务机器人应用基础
项目1、 服务机器人整体认识
随着科学技术的发展,机器人技术和人工智能技术的日益成熟,人们不仅仅希望机器人能够在工厂之中完成固定、重复的劳作,还希望机器人能够机器人能够在日常生活之中为人类提供便利,“服务机器人”的概念出现在我们的视野之中。
服务机器人的认识是学习服务机器人的基础部分,对服务机器人的定义、发展、分类、应用、机械构成、控制方式、编程方式的了解,在应用服务机器人具有重要作用。
(未完成,待更新)
项目2、 ROS 机器人操作系统的认识
ROS (Robot Operating System)即机器人操作系统,是如今最流行的机器人软件架构,它包含了大量工具软件、库代码和约定协议,为机器人研究提供了代码复用的支持将搭建和控制机器人的难度大幅地降低。本项目中,我们将会学习使用ROS机器人操作系统的基本命令,操作PC(个人计算机)通过网络远程登录Castle-X机器人并学习ROS机器人操作系统的核心——“通信机制”。
任务1 创建 ROS 工作空间与功能包
(未完成,待更新)
任务2 使用 launch 文件启动节点
调用ROS的小海龟
代码如下:
启动ROS Master
roscore
启动小海龟仿真
rosrun turtlesim turtlesim_node
启动海龟控制节点
rosrun turtlesim turtle_teleop_key
流程图片:
效果展示:
结论:
- launch(文件格式):以一种特殊的XML(标记语言)格式编写,可以同时运行多个nodes(节点)的文件。
- 本节没什么难度,傻瓜式跟着操作就行
任务3、 使用话题机制实现节点间通信
本实验主要学习ROS(机器人操作系统)的核心通信机制
话题机制,介绍了话题通信机制的模型和通信流程,并且学习了使用 python语言(面向对象的解释型计算机程序设计语言)编写最基本的发布者和订阅者节点来实现话题通信机制。
三、创建一个话题的步骤
1)创建发布者
-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 brevity
import rospy
import time
from geometry_msgs.msg import Twist
turn = True
def std2024060135():
global turn
rospy.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.0
vel_msg.angular.z = 0.0
turn = False
else:
vel_msg.linear.x = 0.0
vel_msg.angular.z = 1*3.14/2
turn = True
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.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
我的的小结
这里我是用python代码是因为python没有像C++那样多出很多编译操作和BUG
demo0代码中 >rate = rospy.Rate(1)< 这里Rate是乌龟的运动频率,当我把频率设置为5的时候,小乌龟走出的形状是圆形的
任务要求小乌龟走的是正方形,我这里定义一个真假值,然后用判断语句去执行相应步骤。在这里我认为还有其他方法,比如可以用for循环让小乌龟执行每一步骤后停止换方向再执行前进等
2)创建订阅者
-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-8
import rospy
from turtlesim.msg import Pose
def 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()
任务4、 使用服务机制实现节点间通信
一、 服务的概念
二、 服务通信机制模型及分析
三、创建一个服务的步骤
1)创建服务端(server)
2)创建客户端(client)
提示:
如何实现一个客户端
- 初始化ROS节点;
- 创建一个 Cilent 实例;
- 发布服务请求数据;
- 等待 Server 处理之后的应答结果。
#!/usr/bin/env python
import sys
import rospy
from turtlesim.srv import Spawn
def turtle_spawn():
rospy.init_node('turtle_spawn')
#发现 /spawn 服务后创建一个服务客户端,连接名为 /spawn 的 service
rospy.wait_for_service('/spawn')
try:
add_turtle = rospy.ServiceProxy('/spawn', Spawn)
#请求服务调用,输入请求数据
response = add_turtle(2.0, 2.0, 0.0, "turtle2")
return response.name
except rospy.ServiceException, e:
print"Service call failed: %s"%e
if __name__ == "__main__":
#服务端用并显示调用结果
print"Spwan turtle successfully [name:%s]"%(turtle_spawn())
3)添加编译选项
4)运行可执行程序
持续更新........