【ROS Gazebo专题】四、将Fetch机器人放到Gazebo中进行玩耍

Gazebo的了解请看我前两篇博客:

【ROS学习笔记】二、Gazebo的使用上

【ROS学习笔记】三、Gazebo的使用下


系统环境介绍:

操作系统:Ubuntu 14.04 LTS

ROS版本:Indigo


1、介绍一下Fetch机器人相关

官网:http://fetchrobotics.com/

    FetchRobotic的团队成员,很多事来自于WillowGarage,WillowGarage这个团队很厉害,大名鼎鼎的PR2就是他们维护的,曾经惊艳过这个世界,可惜的是2013年,项目终止,自此结束了PR2开源工程的生命维护。

回到正题,Fetch和Freight是硅谷机器人公司FetchRobotics的仓储机器人,Fetch的机器人可以根据订单把货架上的商品拿下来,放到另一个叫Freight的机器人里运回打包。Fetch相当于Kiva的升级版,Fetch机器人具备自动导航功能,可以在货架间移动,识别产品并将其取下货架并运动到叫Freight的自动驾车机器人里(以上摘自:效率就是一切:盘点国内外9款物流机器人)。

事实上,Fetch和Freight的区别就是,Freight只是一个底盘,而Fetch具有底盘以上包括机械臂,视觉设备,升降结构等部件,如图:



2、在Gazebo中导入Fetch

首先说明下,Fetch官方推荐我们使用的ros版本为Indigo。

英文好的,建议直接看官方的说明:http://docs.fetchrobotics.com/introduction.html

a)首先,我们需要下载一下fetch_gazebo的相关文件(在此之前,请确认你的操作系统为Ubuntu14.04,ROS版本为Indigo)

sudo apt-get install ros-indigo-fetch-gazebo-demo
下载 安装完成后,你会发现在你opt/ros/indigo/share路径下,多了几个"fetch_xxx"系列的文件夹。

b)把fetch在仿真里运行起来

首先,我们把roscore服务打开,打开终端

roscore


然后开启新的终端,运行fetch相关的launch文件:

roslaunch fetch_gazebo simulation.launch
之后就会打开Gazebo,并且fetch会出现在里面,同时会发现fetch有一个初始化的行为,便是他的手臂初始的动作,如图:


这个就是fetch机器人的模型。

再模拟一个freight底盘放入Gazebo.

打开一个新的终端,输入指令:

roslaunch fetch_gazebo simulation.launch robot:=freight

看完效果图后,我会说明一下这个指令的区别。

如图效果:

矮个子的就是Freight机器人,其实就是fetch的底盘,砸下来的瞬间和fetch各自飞的好远,惯性参数不合理到吓尿观众。
freight的指令和fetch比起来多了一个robot:=freight

为什么会这样,我们看一下simulation.launch文件的代码:

<launch>

  <arg name="robot" default="fetch"/>
  <arg name="debug" default="false"/>
  <arg name="gui" default="true"/>
  <arg name="headless" default="false"/>

  <!-- Start Gazebo with a blank world -->
  <include file="$(find gazebo_ros)/launch/empty_world.launch">
    <arg name="debug" value="$(arg debug)" />
    <arg name="gui" value="$(arg gui)" />
    <arg name="paused" value="false"/>
    <arg name="use_sim_time" value="true"/>
    <arg name="headless" value="$(arg headless)"/>
  </include>

  <!-- Oh, you wanted a robot? -->
  <include file="$(find fetch_gazebo)/launch/include/$(arg robot).launch.xml" />

</launch>
这里有两句关键语句,第一句讲述了参数格式,默认为fetch:

<arg name="robot" default="fetch"/>
第二句,描述了参数对应文件:

  <include file="$(find fetch_gazebo)/launch/include/$(arg robot).launch.xml" />
找到对应路径下,发现fetch_gazebo/launch/include文件夹下包含了fetch.launch和freight.launch文件,这就是为什么不输入参数和输入参数会有两个不同的模型出现的缘故。

有人可能会问为什么freight会有一个蓝色的扇面,解释一下,这是fetch激光的扫描范围,270度。

那为什么freight有,fetch没有,他们应该是同一种底盘类型才对,原因是因为fetch的xarco文件中,关于激光laser.link属性中的visualize属性被设置了false,想修改的话,进入到fetch_gazebo/robots 路径下,找到fetch.gazebo.xarco文件,使用终端gedit打开

sudo gedit fetch.gazebo.xarco
使用ctrl f 功能找到laser_link位置,将图中属性false改为true:


保存并关闭。

将之前打开的gazebo关闭,然后在终端上键入命令:

roslaunch fetch_gazebo simulation.launch
Gazebo开启后出现了我们需要想和freight一样的激光扫描的扇面,如图:



3)使用RVIZ工具和Gazebo中的Fetch联系起来

a)首先,rviz我就不介绍了,看到这的朋友应该都明白,如果是在不明白,建议先去看看其他博主写的关于ros的基础知识。我这里默认大家都是明白的。

打开终端,键入命令:

rosrun rviz rviz

启动如图工具:



首先,更改Rviz中的Global Options的Fixed Frame选项,将其改为base_link,如图:


Global Status 和 Fixed Frame 变为OK,说明连接建立正确.

b)在rviz中加入一些功能

如图,使用rviz的add按钮,加入功能:


分别是:RobotModel、PointCloud2、Camera、LaserScan

分别点击进去,选择对应的Topic,这样就可以从gazebo那里将数据取回来了。

为了更形象的测试,在gazebo中在线下载了个飞机的模型,并且将上次写的蓝色的盒子,也加入到了gazebo中,加入方法为打开终端:

roslaunch gazebo_ros box.launch

图片上红色的点为激光扫描到二维平面的轨迹,很清楚的可以看到,蓝色柱体的切面点。

左下角为相机采集到的图像。

白色的为摄像头采集数据,生成的点云数据。


4)使用键盘让Fetch动起来

打开终端,输入命令:

rosrun teleop_twist_keyboard teleop_twist_keyboard.py


使用 u    i    o
    j    k    l
    m    ,    .

按键进行控制,效果如下:


OK,去玩一会,下班回家。

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
前端聊天机器人的源码涉及到多个方面,包括前端页面的设计和开发、后端的接口开发以及机器人的逻辑部分。以下是一个简单的前端聊天机器人的源码示例,供参考: HTML代码: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>前端聊天机器人</title> <link rel="stylesheet" href="style.css"> </head> <body> <div class="chat-container"> <div class="messages"></div> <div class="input-container"> <input type="text" placeholder="请输入您要咨询的问题"> <button>发送</button> </div> </div> <script src="app.js"></script> </body> </html> ``` CSS代码: ```css * { box-sizing: border-box; margin: 0; padding: 0; } body { background-color: #f2f2f2; font-family: Arial, Helvetica, sans-serif; } .chat-container { width: 400px; margin: 50px auto; border: 1px solid #ccc; border-radius: 5px; overflow: hidden; } .messages { height: 300px; padding: 10px; overflow-y: scroll; } .message { margin-bottom: 10px; } .message .sender { font-weight: bold; } .message .text { margin-left: 10px; } .input-container { display: flex; border-top: 1px solid #ccc; padding: 10px; } .input-container input { flex: 1; border: none; border-radius: 5px; padding: 5px; margin-right: 10px; } .input-container button { border: none; border-radius: 5px; padding: 5px 10px; background-color: #007bff; color: #fff; cursor: pointer; } ``` JavaScript代码: ```javascript const messagesEl = document.querySelector('.messages'); const inputEl = document.querySelector('input'); const btnEl = document.querySelector('button'); btnEl.addEventListener('click', () => { const question = inputEl.value; addMessage('我', question); inputEl.value = ''; getAnswer(question); }); function addMessage(sender, text) { const messageEl = document.createElement('div'); messageEl.classList.add('message'); const senderEl = document.createElement('div'); senderEl.classList.add('sender'); senderEl.innerText = sender; const textEl = document.createElement('div'); textEl.classList.add('text'); textEl.innerText = text; messageEl.appendChild(senderEl); messageEl.appendChild(textEl); messagesEl.appendChild(messageEl); messagesEl.scrollTop = messagesEl.scrollHeight; } function getAnswer(question) { // 发送问题到后端接口,获取机器人的回答 fetch(`/api/answer?question=${encodeURIComponent(question)}`) .then(res => res.json()) .then(data => { addMessage('机器人', data.answer); }) .catch(err => { console.error(err); }); } ``` 以上代码仅供参考,实际开发还需要考虑更多因素,例如机器人的逻辑部分、后端API接口的开发、数据的存储与处理等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值