目的很简单,能让Pepper从电梯口走到指定房间里。

大致上是参考的这篇文章
使用Pepper with ROS
但是这篇文章有细节上错的地方。
这里主要是纠正以下错误,并且给出安装中常见问题的解决方式

1.文章3.4步rosdep update

这里会有常见的time out报错我试了如下方法解决的
参考博客
然后多跑几次。

2.文章4.1步和4.2顺序反了

不得不说这一步的报错简直致命,我卡在这一步好久。
如果按照顺序会有如下报错,我一直去搜索如何解决依赖冲突,但是那是个死循环多亏了下面这篇博客根本不是没安装的问题!是没找到!

3.文章5.1步

运行roscore时候报错 Unable to contact my own server at的解决方法

4.文章5.2步

首先<>符号要换成单引号这是报错时我参考的博客。network_interface建议自己还是ifconfig命令查看以下,有的还真没在那篇文章选项里,比如我是wlp8s0。

5.文章6.2步

正常来说这里会报错是因为没有安装gmapping,可以自行搜素一下错误的解决方案。

6.得到了地图

7.打开地图

7.1 用ROS的命令roscd可以直接进入到文件夹catkin_ws
7.2 可以在文件夹里面打开文件也可以加入文件路径roslaunch pepper-ros-navigation navigation.launch map_file:=路径

但是目前存在一个问题,就是有的时候打开地图,机器人并没有在地图起始点。可能是某一步骤细节没注意到。目前还没有找到怎么把机器人拖动到地图某个位置的办法。

8.定点移动

由于楼道很长,ROS的路径规划算法是选择最优路线,走着走着就会很靠墙。pepper机器人防碰撞会在靠墙一定距离时选择停下,一旦停下就不会再走。
解决办法是在楼道地图上指定多个不靠墙的点,规定机器人移动必须经过这些点。

9.关于ROS的一些零碎但是有点用的知识

9.1 ROS喜欢称之为节点的东西其实就是进程
9.2 ROS目前支持的系统平台有: Ubuntu. osx.Debin。ROS在Ubuntu上的支持是最好的。建议内存4G或以上(内存太小,有些3D模拟可能运行不起来)。ROS是需要运行在Ubuntu操作系统之上,建议使用Ubuntu16.04和ROS Kinetic。理由是: ROS Kinetic 和Ubuntu 16.04都是长期维护版本(LTS),并且ROS Kinetic 是专门为Ubuntu16.04量身定做。
9.3
catkin_ws 是用户创建的工程文件目录(可以任意命名),包含整个工程;

src 目录是用户创建的功能包集合(不能修改名称),包含一个或多 个功能包;
build 目录是系统在编译src中的功能包时自动生成的,包含缓存信息和中间文件;
devel 目录是系统在编译src中的功能包时自动生成的,包含生 成的目标文件、环境变量。

这个pepper官方提供的包装在src文件夹相当于package 是用户创建的功能包

CMakeLists.txt-------package的编译规则(必须)
package.xml-------package的描述信息(必须)
launch/启动文件
include/C++头文件
src/源代码文件
scripts/可执行脚本
msg/自定义消息
srv/自定义服务
action/自定义action服务
urdf/urdf文件

10.详细代码

新建地图步骤
1.启动ros core节点管理器
roscore
2.在关闭自主模式下连接pepper
roslaunch pepper_bringup pepper_full.launch nao_ip:='192.168.43.64' roscore_ip:='127.0.0.1' network_interface:='wlp8s0'
3.启动rviz
rosrun rviz rviz -d ~/catkin_ws/src/pepper-ros-navigation/config/pepper.rviz
4.启动gmapping
roslaunch pepper-ros-navigation gmapping.launch
__(rostopic echo /move_base_simple/goal)
5.保存地图在某个路径cdros
rosrun map_server map_saver -f 文件名
6.打开你建的地图
roslaunch pepper-ros-navigation navigation.launch map_file:=路径
__(/home/elaine/catkin_ws/src/pepper-ros-navigation/launch/maps/map3.yaml)定点巡逻:
1.启动ros core节点管理器
roscore
2.在关闭自主模式下连接pepper
roslaunch pepper_bringup pepper_full.launch nao_ip:='192.168.199.216' roscore_ip:='127.0.0.1' network_interface:='wlp8s0'
3.打开你建的地图
roslaunch pepper-ros-navigation navigation.launch map_file:=/home/elaine/catkin_ws/src/pepper-ros-navigation/launch/maps/map3.yaml
4.开始巡逻,设置定点巡逻次数为两次
roslaunch pepper-ros-navigation way_point.launch loopTimes:=2

way_point.launch文件

<launch><!-- For Simulation --><arg name="sim_mode" default="false" /><param name="/use_sim_time" value="$(arg sim_mode)"/><arg name="loopTimes"       default="0" /><!-- move bas --><node pkg="pepper-ros-navigation" type="way_point.py" respawn="false" name="way_point" output="screen" launch-prefix="gnome-terminal -x"><!-- params for move_base --><param name="goalListX" value="[1.2,0.1,1.1]" /><param name="goalListY" value="[0.4,-1.0,-0.5]" /><param name="goalListZ" value="[0.0,0.0,0.0]" /><param name="loopTimes" value="$(arg loopTimes)" /><param name="map_frame" value="map" /></node>
</launch>

way_point.py脚本

#!/usr/bin/python
# coding=gbk# Copyright 2020 Wechange Tech.
# Developer: FuZhi, Liu (liu.fuzhi@wechangetech.com)
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.import rospy
import string
import math
import time
import sysfrom std_msgs.msg import String
from move_base_msgs.msg import MoveBaseActionResult
from actionlib_msgs.msg import GoalStatusArray
from geometry_msgs.msg import PoseStamped
import tf
class MultiGoals:def __init__(self, goalListX, goalListY, goalListZ,loopTimes, map_frame):self.sub = rospy.Subscriber('move_base/result', MoveBaseActionResult, self.statusCB, queue_size=10)self.pub = rospy.Publisher('move_base_simple/goal', PoseStamped, queue_size=10)   # params & variablesself.goalListX = goalListXself.goalListY = goalListYself.goalListZ = goalListZself.loopTimes = loopTimesself.loop = 1self.wayPointFinished = False self.goalId = 0self.goalMsg = PoseStamped()self.goalMsg.header.frame_id = map_frameself.goalMsg.pose.orientation.z = 0.0self.goalMsg.pose.orientation.w = 1.0# Publish the first goaltime.sleep(1)self.goalMsg.header.stamp = rospy.Time.now()self.goalMsg.pose.position.x = self.goalListX[self.goalId]self.goalMsg.pose.position.y = self.goalListY[self.goalId]self.goalMsg.pose.orientation.x = 0.0self.goalMsg.pose.orientation.y = 0.0if abs(self.goalListZ[self.goalId]) > 1.0:self.goalMsg.pose.orientation.z = 0.0self.goalMsg.pose.orientation.w = 1.0else:w = math.sqrt(1 - (self.goalListZ[self.goalId]) ** 2)self.goalMsg.pose.orientation.z = self.goalListZ[self.goalId]self.goalMsg.pose.orientation.w = wself.pub.publish(self.goalMsg) rospy.loginfo("Current Goal ID is: %d", self.goalId)   self.goalId = self.goalId + 1 def statusCB(self, data):if self.loopTimes and (self.loop > self.loopTimes):rospy.loginfo("Loop: %d Times Finshed", self.loopTimes)self.wayPointFinished = Trueif data.status.status == 3 and (not self.wayPointFinished): # reachedself.goalMsg.header.stamp = rospy.Time.now()                self.goalMsg.pose.position.x = self.goalListX[self.goalId]self.goalMsg.pose.position.y = self.goalListY[self.goalId]if abs(self.goalListZ[self.goalId]) > 1.0:self.goalMsg.pose.orientation.z = 0.0self.goalMsg.pose.orientation.w = 1.0else:w = math.sqrt(1 - (self.goalListZ[self.goalId]) ** 2)self.goalMsg.pose.orientation.z = self.goalListZ[self.goalId]self.goalMsg.pose.orientation.w = wself.pub.publish(self.goalMsg)  rospy.loginfo("Current Goal ID is: %d", self.goalId)              if self.goalId < (len(self.goalListX)-1):self.goalId = self.goalId + 1else:self.goalId = 0self.loop += 1if __name__ == "__main__":try:    # ROS Init    rospy.init_node('way_point', anonymous=True)# Get paramsgoalListX = rospy.get_param('~goalListX', '[2.0, 2.0]')goalListY = rospy.get_param('~goalListY', '[2.0, 4.0]')goalListZ = rospy.get_param('~goalListZ', '[0.0, 0.0]')map_frame = rospy.get_param('~map_frame', 'map' )loopTimes = int(rospy.get_param('~loopTimes', '0')) goalListX = goalListX.replace("[","").replace("]","")goalListY = goalListY.replace("[","").replace("]","")goalListZ = goalListZ.replace("[","").replace("]","")goalListX = [float(x) for x in goalListX.split(",")]goalListY = [float(y) for y in goalListY.split(",")]goalListZ = [float(z) for z in goalListZ.split(",")]if len(goalListX) == len(goalListY) == len(goalListZ) & len(goalListY) >=2:          # Constract MultiGoals Objrospy.loginfo("Multi Goals Executing...")mg = MultiGoals(goalListX, goalListY, goalListZ, loopTimes, map_frame)          rospy.spin()else:rospy.errinfo("Lengths of goal lists are not the same")except KeyboardInterrupt:print("shutting down")

参考视频

如何给Pepper机器人配置ROS使其可以到达指定地点相关推荐

  1. 从零开始配置ROS机器人系统环境-总结版

    本文目的:拿到一台新的工控机,如何给新机器配置ROS.安装cartographer.gmapping.Navigation等安装测试包.最终实现建图-定位-导航的一套流程. 文章目录 1. 工控机安装 ...

  2. 机器人操作系统ROS 编程开发--详细总结

    最近工作涉及到自动驾驶的,需要学习ROS,学习中总结了一些知识点,分享给大家. ROS基本介绍 机器人操作系统ROS,是一种分布式处理框架(又名Nodes),ROS常用C++和python编程语言开发 ...

  3. 机器人操作系统ROS—深度相机+激光雷达实现vSLAM建图与导航 转载

    原文:机器人操作系统ROS-深度相机+激光雷达实现vSLAM建图与导航_wx5d23599e462fa的技术博客_51CTO博客 这次将带大家学习如何使用深度相机实现机器人的视觉SLAM建图及导航. ...

  4. 杭州保俶塔实验机器人_【科教有闻】高照实验学校Pepper机器人课程亮相2020(杭州)国际数字教育大会“智能教育引领未来”论坛...

    "数化世间万物,一切皆有可能",数字经济时代的教育新画卷正在浙江杭州徐徐展开.12月10日至11日,2020(杭州)国际数字教育大会(2020iDEE)在杭州国际博览中心正式开幕, ...

  5. 计算机操作系统(OS)安装机器人操作系统(ROS)实现物联网功能

    博客中大量介绍了将Ubuntu等Linux系统借助机器人操作系统ROS实现机器人控制设计开发和物联网功能案例,并可基于OpenAI等实现人工智能相关训练. 这篇博文围绕windows系统展开,之前也写 ...

  6. 一文读懂自动驾驶中的机器人操作系统ROS

    一.什么是机器人操作系统ROS 1.ROS(Robot Operating System)是一个操作系统 ROS是对机器人的硬件进行了封装,不同的机器人.不同的传感器,在ROS里可以用相同的方式表示( ...

  7. 关于机器人操作系统(ROS)学习前须知二三

    ROS基础资料 1.什么是ROS? ROS(机器人操作系统,Robot Operating System),是专为机器人软体开发所设计出来的一套电脑作业系统架构.它是一个开源的元级操作系统(后操作系统 ...

  8. Gavin老师Transformer直播课感悟 - Rasa项目实战之电商零售智能业务对话机器人配置详解与Debugging演示(八十七)

    本文继续围绕工业级业务对话平台和框架Rasa,对Rasa项目实战之电商零售智能业务对话机器人系统所使用的各项配置进行详细剖析,并通过debug模式来理解在下面展示的Rasa graph archite ...

  9. Ubuntu20.04下 PC机对Locobot机器人的ROS远程通讯

    写在最前面:   最近参加了机器人导航的项目,前前后后配了好几次的ROS远程通讯,在这里把步骤.遇到的问题.教程什么的都汇总一下.   先明确我们要做的事情--实现在我们自己的PC机(之后简称Moni ...

最新文章

  1. Java接地气日常编码技巧
  2. 关于Action返回结果类型的事儿(下)
  3. 超越RMI,高效Java remote调用
  4. SSH 连接慢 与 反向解析
  5. linux设备驱动归纳总结(六):2.分享中断号【转】
  6. HTML转义字符 Unicode和CSS伪类介绍
  7. 回文字符串—回文子串—Manacher算法
  8. android retrofit2.0 rxjava2,Android - 网络请求之 Retrofit2 + RxJava
  9. Android onLoadFinished与onLoaderReset
  10. OpenCV基本线条操作
  11. CSDN如何快速更换皮肤
  12. Spring 框架简单介绍
  13. cvs导入oracle缺失逗号,pandas教程:使用read_csv()导入数据
  14. 做转移FSMO角色记录
  15. Basic SECS concept渣渣中文翻译
  16. MATLAB实验总结定积分,matlab实验报告--定积分的近似计算 -
  17. unity 获取 AudioSource 分贝值
  18. 从零搭建微信机器人(三):定时触发任务
  19. C语言学习--01 认识数据类型
  20. 软件复用及构件、C/S与B/S混合模型及实战项目技术简述

热门文章

  1. React 学习教程
  2. 老司机揭秘手机定位技术,实在是精彩!
  3. 手机被偷完整找回方案
  4. 蓝牙人员定位追踪系统解决方案,蓝牙定位技术应用全面-新导智能
  5. 《大规模元搜索引擎技(1)》一第1章 绪言
  6. 小程序云开发实现微信支付完整代码
  7. mysql 定位截取字符串_mysql 字符串定位、字符串截取
  8. 苹果ios微信浏览器视频自动播放
  9. PyTorch深度学习入门 || 系列(四)——非线性回归
  10. 《NFL橄榄球》:田纳西泰坦·橄榄1号位