Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【V-REP自学笔记(四)】键盘控制YouBot机器人

【V-REP自学笔记(四)】键盘控制YouBot机器人

作者头像
博士的沙漏
发布于 2020-09-03 08:01:35
发布于 2020-09-03 08:01:35
1.3K00
代码可运行
举报
文章被收录于专栏:AI与机器人AI与机器人
运行总次数:0
代码可运行

导语

在这一系列的V-REP自学笔记中,我们定了一个小目标,完成一个Demo。使用官方提供的KUKA公司的YouBot机器人模型来实验机器人的感知和控制过程,控制机器人从A点抓取物品,然后移动到B点将物品放置在B点的工作台上,这其中涉及到V-REP环境中的机器人感知和控制过程。没有看过前期学习笔记的读者,可以在文末找到往期文章地址。

在上一期的自学笔记中,我们讲解了通过Lua脚本来控制YouBot机器人的各个关节运动。在本期笔记中,我们将学习通过键盘来控制YouBot机器人的移动,建立键盘这个交互接口有助于后续的其他功能实现和算法的调试过程,话不多说,先放一个最终的效果视频:

1. 认识YouBot的底盘

在上一篇文章(【V-REP自学笔记(三)】用代码控制机器人)中,我们简单介绍了YouBot机器人底盘上的4个轮子,这里再简单回顾一下。

我们仔细观察一下就会发现,YouBot底盘上的四个轮子是不一样的,不是普通的轮子,这种轮子叫麦克纳姆轮,简称麦轮。麦轮与普通的固定轮不同,除了提供前后方向的移动还能提供左右方向的切向移动。

麦克纳姆轮分为A轮和B轮,上图所示为A轮,B轮与A轮的横向运动方向相反。当轮子向前运动时,A轮提供向前和向左的运动速度,B轮提供向前和向右的运动速度,因此,YouBot机器人底盘上的4个麦克纳姆轮分别为A-B-A-B的配置。

那么,当所有轮子都向前运动,则整个底盘的运动方向是向前运动的。

如果A轮正转,B轮反转,则前后方向的运动速度抵消,只剩下向左的运动速度。

我们通过控制各个A轮和B轮的运动方向就可以控制YouBot机器人的前进、后退、左移、右移、左转、右转和斜向45度移动等动作,这里不再一一例举各个轮子的旋转方向与底盘移动方向的关系,大家可以看一下这个视频。

视频出处:https://www.bilibili.com/video/av17229132/

2. 键盘控制YouBot移动

在上一期的自学笔记中我们已经介绍了在V-REP中使用Lua脚本来控制YouBot机器人的简单运动,这次我们将对底盘的运动方向做进一步的介绍,并实现一个键盘控制下的YouBot机器人移动控制。整个代码不是很多,主要包括一个键盘事件检测函数和一个轮子运动方向的控制函数,完整的代码已经推送到Github仓库,欢迎大家下载使用:https://github.com/chauby/V-REP-YouBot-Demo.git

在本次的笔记中,我们自定义了一个键盘事件检测函数,用来检测键盘上哪些按键被按下了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function getKeyboardStatus()
    message,data,data2=simGetSimulatorMessage()
    if (message==sim_message_keypress) then
        if (data[1]==2007) then -- up key
            print("up")
            move_direction = 1
        elseif (data[1]==2008) then -- down key
            print("down")
            move_direction = 2
        elseif (data[1]==2009) then -- left key
            print("left")
            move_direction = 3
        elseif (data[1]==2010) then -- right key
            print("right")
            move_direction = 4
        elseif (data[1]==string.byte('q')) then -- q key
            print("q")
            move_direction = 5
        elseif (data[1]==string.byte('w')) then -- w key
            print("w")
            move_direction = 6
        end

        if (data[1]==string.byte(' ')) then -- space key
            wheel_velocity = 0
            print("stop")
        else
            wheel_velocity = 1
        end
    end
end

检测的方式是调用V-REP官方提供的API接口simGetSimulatorMessage()这个函数来获取键盘的按下情况,并通过比对键盘码(例如2007表示方向上键,2009表示方向左键)来设定YouBot的运动方向。这里我们提供了前进、后退、左移、右移、左旋、右旋和停止几个功能。

在获得了键盘的信息以后,我们需要设定YouBot底盘上每个轮子的运动方向来实现上述的几个功能,这里自定义的函数如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function setYouBotMovementDirection()
    -- Check movement direction
    if (move_direction == 1) then -- go forward
        lf_dire = -1
        rf_dire = -1
        lr_dire = -1
        rr_dire = -1
    elseif (move_direction == 2) then -- go backward
        lf_dire = 1
        rf_dire = 1
        lr_dire = 1
        rr_dire = 1
    elseif (move_direction == 3) then -- go left
        lf_dire = 1
        rf_dire = -1
        lr_dire = -1
        rr_dire = 1
    elseif (move_direction == 4) then -- go right
        lf_dire = -1
        rf_dire = 1
        lr_dire = 1
        rr_dire = -1
    elseif (move_direction == 5) then -- turn left
        lf_dire = 1
        rf_dire = -1
        lr_dire = 1
        rr_dire = -1
    elseif (move_direction == 6) then -- turn right
        lf_dire = -1
        rf_dire = 1
        lr_dire = -1
        rr_dire = 1
    end
end

最后,就是在sysCall_actuation()这个函数接口里面调用我们刚刚自定义的2个函数来控制每个轮子的运动:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function sysCall_actuation()
    -- Check keyboard press events
    getKeyboardStatus()
    setYouBotMovementDirection()

    -- Keep the arm status
    for i = 1,5,1 do
        sim.setJointPosition(arm_joints[i], desired_joint_angles[i])
    end
    
    -- Apply the desired wheel velocities
    sim.setJointTargetVelocity(wheel_joints[1], lf_dire*wheel_velocity)
    sim.setJointTargetVelocity(wheel_joints[2], lr_dire*wheel_velocity)
    sim.setJointTargetVelocity(wheel_joints[3], rr_dire*wheel_velocity)
    sim.setJointTargetVelocity(wheel_joints[4], rf_dire*wheel_velocity)
end 

到此为止,在V-REP软件中使用键盘来控制YouBot机器人的移动过程已经介绍完了。从下一篇笔记开始,我们将学习构建底盘的运动学模型,从而对机器人的移动过程做精确的路径规划。本项目涉及到的代码都将发布在Github上,欢迎大家Star和下载使用。

项目地址:https://github.com/chauby/V-REP-YouBot-Demo.git

往期回顾

  1. 【V-REP自学笔记(一)】平台介绍和软件安装
  2. 【V-REP自学笔记(二)】软件入门
  3. 【V-REP自学笔记(三)】用代码控制机器人

作者知识有限,有不正确的地方还望读者能够指出来,大家共同学习和进步,不胜感激!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 博士的沙漏 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【V-REP自学笔记(五)】YouBot底盘运动学与路径规划
在这一系列的V-REP自学笔记中,我们定了一个小目标,完成一个Demo。使用官方提供的KUKA公司的YouBot机器人模型来实验机器人的感知和控制过程,控制机器人从A点抓取物品,然后移动到B点将物品放置在B点的工作台上,这其中涉及到V-REP环境中的机器人感知和控制过程。没有看过前期学习笔记的读者,可以在文末找到往期文章地址。
博士的沙漏
2020/09/03
1.8K0
【V-REP自学笔记(五)】YouBot底盘运动学与路径规划
【V-REP自学笔记(三)】用代码控制机器人
在这一系列的V-REP自学笔记中,我们定了一个小目标,完成一个Demo。使用官方提供的KUKA公司的YouBot机器人模型来实验机器人的感知和控制过程,控制机器人从A点抓取物品,然后移动到B点将物品放置在B点的工作台上,这其中涉及到V-REP环境中的机器人感知和控制过程。没有看过前期学习笔记的读者,可以在文末找到往期文章地址。
博士的沙漏
2020/09/03
3.1K0
【V-REP自学笔记(三)】用代码控制机器人
【V-REP自学笔记(七)】Matlab/Python远程控制
在这一系列的V-REP自学笔记中,我们定了一个小目标,完成一个Demo。使用官方提供的KUKA公司的YouBot机器人模型来实验机器人的感知和控制过程,控制机器人从A点抓取物品,然后移动到B点将物品放置在B点的工作台上,这其中涉及到V-REP环境中的机器人感知和控制过程。没有看过前期学习笔记的读者,可以在文末找到往期文章地址。
博士的沙漏
2020/09/03
2.9K0
【V-REP自学笔记(七)】Matlab/Python远程控制
【V-REP自学笔记(二)】软件入门
在这一系列的V-REP自学笔记中,我们定了一个小目标,完成一个Demo。使用官方提供的KUKA公司的YouBot机器人模型来实验机器人的感知和控制过程,控制机器人从A点抓取物品,然后移动到B点将物品放置在B点的工作台上,这其中涉及到V-REP环境中的机器人感知和控制过程。没有看过前期学习笔记的读者,可以在文末找到往期文章地址。
博士的沙漏
2020/09/03
2.7K0
【V-REP自学笔记(二)】软件入门
【V-REP自学笔记(六)】基于V-REP逆运动学模块的机械臂轨迹规划
在这一系列的V-REP自学笔记中,我们定了一个小目标,完成一个Demo。使用官方提供的KUKA公司的YouBot机器人模型来实验机器人的感知和控制过程,控制机器人从A点抓取物品,然后移动到B点将物品放置在B点的工作台上,这其中涉及到V-REP环境中的机器人感知和控制过程。没有看过前期学习笔记的读者,可以在文末找到往期文章地址。
博士的沙漏
2020/09/03
3.4K0
【V-REP自学笔记(六)】基于V-REP逆运动学模块的机械臂轨迹规划
【V-REP自学笔记(八)】控制youBot抓取和移动物体
在这一系列的V-REP自学笔记中,我们定了一个小目标,完成一个Demo。使用官方提供的KUKA公司的YouBot机器人模型来实验机器人的感知和控制过程,控制机器人从A点抓取物品,然后移动到B点将物品放置在B点的工作台上,这其中涉及到V-REP环境中的机器人感知和控制过程。没有看过前期学习笔记的读者,可以在文末找到往期文章地址。
博士的沙漏
2020/10/26
2.3K0
【V-REP自学笔记(八)】控制youBot抓取和移动物体
【V-REP自学笔记(一)】平台介绍和软件安装
常用的机器人物理仿真软件有ROS/Gazebo、V-REP、Webots、Adams等,有的收费,有的开源,提供的功能也不同。V-REP是一个跨平台的机器人仿真软件,提供多种机器人模型和控制接口,便于开发者快速验证算法和低成本开发,主要特性包括:
博士的沙漏
2020/09/03
3.9K0
【V-REP自学笔记(一)】平台介绍和软件安装
ROS(indigo)国外开源示例包括多机器人控制等基于V-Rep和Gazebo的仿真
这个例子可以测试机械臂,四旋翼飞行器和先锋机器人,这里以先锋机器人跟随二维码为例。
zhangrelay
2019/01/23
1.9K0
差速巡线机器人设计-良好(80+)的报告-2023
差速巡线机器人设计-及格(60+)的报告-2023_zhangrelay的博客-CSDN博客
zhangrelay
2023/03/22
3050
差速巡线机器人设计-良好(80+)的报告-2023
Dji Robomaster(机甲大师)S1主要Python API汇总
文章来源于dji的BBS,为了文章的完整性放到这里,跳转链接放到了原文链接,有需要的可以点击跳转。
云深无际
2021/04/14
4.6K1
Dji Robomaster(机甲大师)S1主要Python API汇总
ROS进阶:使用URDF和Xacro构建差速轮式机器人模型
本篇文章介绍的是ROS高效进阶内容,使用URDF 语言(xml格式)做一个差速轮式机器人模型,并使用URDF的增强版xacro,对机器人模型文件进行二次优化。
芯动大师
2025/05/15
930
ROS进阶:使用URDF和Xacro构建差速轮式机器人模型
差速巡线机器人设计-及格(60+)的报告-2023
差速巡线机器人设计实验的目的是为了探索差速驱动技术在机器人巡线中的应用。通过设计和制作差速巡线机器人,可以测试其在不同地形和环境下的巡线能力和稳定性,同时也可以探索差速驱动技术在机器人运动控制中的优势和局限性。此外,该实验还可以促进自己对机器人控制和运动学的理解和应用能力的提升。
zhangrelay
2023/03/19
3400
差速巡线机器人设计-及格(60+)的报告-2023
ROS专题----机器人模型urdf简明笔记
版权声明:本文为zhangrelay原创文章,有错请轻拍,转载请注明,谢谢... https://blog.csdn.net/ZhangRelay/article/details/60959642
zhangrelay
2019/01/23
2K0
机器人操作系统ROS(indigo)与三维仿真软件V-Rep(3.2.1)通信接口使用笔记
通过网页快速了解Linux(Ubuntu)和ROS机器人操作系统,请参考实验楼在线系统如下:
zhangrelay
2019/01/23
9600
使用机器人操作系统ROS 2和仿真软件Gazebo 9搭建机器人教程(一)
参考链接:https://github.com/bunchofcoders/basic_bocbot
zhangrelay
2020/02/19
3.9K0
使用机器人操作系统ROS 2和仿真软件Gazebo 9搭建机器人教程(一)
使用Ubuntu 18.04 LTS开启机器人开发的愉快历程
https://cn.ubuntu.com/internet-of-things/
zhangrelay
2019/01/23
3.4K0
差速轮式机器人仿真升级:Gazebo与Rviz集成及传感器仿真详解
本篇文章我们介绍的内容是差速轮式机器人进行升级 ,我们添加相关的物理属性,使用gazebo+rviz进行仿真。 通过编写机器人控制的程序,遥控机器人在gazeob仿真环境中移动,并通过rviz实时察看 camera,kinect和lidar三种传感器的仿真效果。
芯动大师
2025/05/15
1590
差速轮式机器人仿真升级:Gazebo与Rviz集成及传感器仿真详解
车辆动力学方程推导和代码实现
车辆动力学模型是描述汽车运动规律的微分方程,一般用于分析汽车的平顺性和操纵稳定性。二自由度的车辆动力学模型基于单车模型假设,只考虑轮胎侧偏特性,其应用前提是
艰默
2024/01/23
7851
车辆动力学方程推导和代码实现
现代控制理论(机器人或人工智能方向)补充资料:Python Control Systems Library + Modern Robotics
Python控制系统库是一个Python模块,它实现了反馈控制系统分析和设计的基本操作。
zhangrelay
2022/04/29
9890
PID横向控制和仿真实现
PID是一种常见的控制算法,全称为Proportional-Integral-Derivative,即比例-积分-微分控制器。PID控制器是一种线性控制器,它将设定值与实际值进行比较,根据误差的大小,控制器会相应地调整系统的比例、积分和微分系数,以减小误差。
艰默
2024/01/11
4740
PID横向控制和仿真实现
推荐阅读
相关推荐
【V-REP自学笔记(五)】YouBot底盘运动学与路径规划
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验