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下载与安装教程(详细)
虚拟机VMware安装乌班图教程(详细)

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

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

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

流程图片:

在这里插入图片描述

效果展示:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

结论:

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

任务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

我的的小结

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

持续更新........

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

没有角的独角仙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值