AI结合机器人的入门级仿真环境有哪些?

由于使用真实的机器人开发和测试应用程序既昂贵又费时,因此仿真已成为机器人应用程序开发中越来越重要的部分。在部署到机器人之前在仿真中验证应用程序可以通过尽早发现潜在问题来缩短迭代时间。通过模拟,还可以更轻松地测试在现实世界中可能过于危险的极端情况或场景。

1.8.1 Python模拟机器人环境
Pygame:

在python中,带有GUI窗口的Pygame经常用于环境模拟。Pygame是游戏开发的函数库。Pygame的核心包括图像处理、获取操作杆输入、多媒体音视频特效这些。青少年和大学生经常用于pygame 开发射击游戏、平衡特技猫等。

图片

有特技的猫

随着人工智能神经网络的发展,经常有学生和爱好者使用pygame搭配开发神经网络用于快速验证。

Pyglet:

pyglet是一个功能强大但易于使用的Python库,用于在Windows、macOS和Linux上开发游戏和其他视觉丰富的应用程序。它支持窗口、鼠标和键盘、控制器、操纵杆、显示图像、照片和视频以及播放声音和音乐。

图片

基于AI的智能乒乓机

Piglet和pygame 比较列表:

在这里插入图片描述

1.8.2 Webots
在机器人的世界中,有各种各样的仿真模拟器,例如gazebo、matlab的simulink、以及今天要介绍的webots。这些形形色色的仿真软件,给了机器人工程师们有了无限创造的可能。让工程师们,在没有实物的情况下,也能上手开发机器人。今天,我们就来看看这一款webots仿真模拟器。

webots仿真模拟器是根据Apache2.0许可条款发布的开源机器人模拟器。它提供了一个完整的开发环境来对机器人、车辆和生物力学系统进行建模、编程和仿真。webots的GitHub地址:

https://github.com/cyberbotics/webots

webots有着界面友好,资料齐全,上手快速,操作便捷等特点,它能提供的仿真也很强大。提供ros和ros2的接口。支持C/C++、python、JavaScript编程。

无人机 机械臂 机械狗 室内机器人。

图片

Webots的仿真环境搭建

Webots是一个用于模拟机器人的开源和多平台桌面应用程序。由cyberbotics公司开发,它提供了一个完整的开发环境来建模、编程和模拟机器人。包括模拟3D的可见模型和具备可度量的物理属性,以及类似KEIL编程软件的IDE,支持gcc 中的make,除此之外还可以使用java/python 等编程语言。

图片

         结合ROS构建地图

它专为专业用途而设计,广泛用于工业、教育和研究。

创建各种各样的模拟,包括两轮台式机器人、 工业手臂、 双足机器人、 多腿机器人、 模块化机器人、 汽车、 飞行无人机、 自主水下航行器、 履带式机器人、 航空航天器等。设置 室内或 室外 交互环境。

使用 Webots创建机器人原型,开发、测试和验证您的 AI 和控制算法。

图片

               案例

图片

                   合并图像

此示例演示了将两个相机图像合并为一个图像,以创建立体图像。立体相机安装在iRobot Create机器人上。在每一步,两个相机图像都被合并到一个显示设备中,一个被过滤成红色,另一个被过滤成青色。这会产生可以使用低成本红色/青色 3D 眼镜看到的立体 3D 图像。

图片

               模仿昆虫机器人

在此示例中,昆虫形机器人由LinearMotor和RotationalMotor设备组合而成。机器人使用交替的三脚架步态移动。

图片

                  月球机器人

两个KT机器人 (K-Team) 在月球的表面上盘旋。可以使用键盘上的箭头键修改它们的轨迹。月亮般的风景由IndexedFaceSet节点组成。两个机器人使用相同的控制器代码。

图片

                  足球台控制场景

两队简单的机器人在踢足球。Supervisor控制器作为裁判;它计算进球数并在 3D 视图中显示当前比分和剩余时间。此示例显示了如何使用Supervisor控制器读取和更改对象的位置。

图片

                 室内场景

为扫地机器人搭建的室内仿真环境,模拟实现了桌子、墙面、椅子、灯光等,通过编程python程序可以实现扫地机器人的行驶。

支持的轮式机器人还有两轮、四轮、机器狗等。

支持的传感器还有摄像头、雷达、陀螺仪、定位系统等。

Webots控制器可以用C/C++、Java、Python 或MATLAB TM编写。除了句法差异外,所有这些语言都共享相同的低级实现。只要函数/方法调用的顺序不变,每种编程语言都会产生完全相同的模拟结果。因此,此处使用 C 示例解释的概念也适用于 C++、Java、Python 和 MATLAB。

编程示例

下面是一个读取左右电机和传感器的简单demo.

#include <webots/robot.h>

#include <webots/motor.h>

#include <webots/distance_sensor.h>
#define TIME_STEP 32

int main()
{

wb_robot_init();
WbDeviceTag left_sensor = wb_robot_get_device(“left_sensor”); WbDeviceTag right_sensor = wb_robot_get_device(“right_sensor”); wb_distance_sensor_enable(left_sensor, TIME_STEP); wb_distance_sensor_enable(right_sensor, TIME_STEP);
WbDeviceTag left_motor = wb_robot_get_device(“left_motor”); WbDeviceTag right_motor = wb_robot_get_device(“right_motor”); wb_motor_set_position(left_motor, INFINITY); wb_motor_set_position(right_motor, INFINITY); wb_motor_set_velocity(left_motor, 0.0); wb_motor_set_velocity(right_motor, 0.0);
while (wb_robot_step(TIME_STEP) != -1) {
// 读取传感器

const double left_dist = wb_distance_sensor_get_value(left_sensor);

const double right_dist = wb_distance_sensor_get_value(right_sensor);
// 计算速度

const double left = compute_left_speed(left_dist, right_dist); const double right = compute_right_speed(left_dist, right_dist);
// 设置速度

wb_motor_set_velocity(left_motor, left); wb_motor_set_velocity(right_motor, right);

}
wb_robot_cleanup();

return 0;

}
总结

webots搭建环境比较方便,但是一个复杂的环境可能会费点时间,笔者用webots搭建室内环境用于slam建图仿真话还挺有趣。另外还可以和ros平台通信。相比gazebo 比较容易入手。

可以通过cyberbotics 的官网 下载。

https://www.cyberbotics.com/

本书中使用R2023a的版本大小大约200多M, 且安装在windows 下。

webots自带很多DEMO。打开一个模型DEMO,等待下载完成后就可以查看仿真效果,拷贝到自己的工程后就可以编辑程序了。

模型DEMO中有加速度模型、摄像机模型、超声测距模型、图像识别模型、陀螺仪模型、编码、激光雷达模型,可以说把机器人中能用到的传暗器基本都囊括了。

Windows环境下使用 python时,需要先安装python软件,并将python.exe设置成全局路径, 还需要打开cmd.exe 安装opencv 和相关的库 。

Python3 -m pip install opencv-python

1.8.2 unity
unity也就是一个游戏引擎。具体来说游戏引擎是开发者开发内容的工具,整合了很多功能,只要将相关美术模型导入其中,就能添加其他的灯光、物理、特效、动画等等。

Unity又可以称为Unity3D,是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。目前其市场占有率已经超过其他的软件开发平台,目前国内的许多手游都是基于该平台开发的。

图片

1.8.3 udacity
https://github.com/Zhenye-Na/e2e-learning-self-driving-cars

自动驾驶汽车是当今研究和商业中最热门和最有趣的话题。越来越多的大公司已经跳入这一领域。在这个项目中,我实现了 Nvidia Research 在这篇论文中提出的 CNN 模型,使用 PyTorch 从车辆仿真软件中的 3 个摄像头中提取特征来预测转向角。这是一种应用于自动驾驶的端到端方法。

Udacity使用 Unity开发的自动驾驶汽车模拟器。Udacity 需要google 账户对国内开发者不太友好。

目前使用udcity和unity完成端到端自动驾驶的训练,如下3路摄像头示意的场景,

图片

神经网络对3路图像训练输出油门和方向控制,实现自动驾驶。

公号:视觉动力机器人

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/791739.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# 登录界面代码

背景 MVVM 是一种软件架构模式&#xff0c;用于创建用户界面。它将用户界面&#xff08;View&#xff09;、业务逻辑&#xff08;ViewModel&#xff09;和数据模型&#xff08;Model&#xff09;分离开来&#xff0c;以提高代码的可维护性和可测试性。 MainWindow 类是 View&a…

【星计划★C语言】c语言初相识:探索编程之路

&#x1f308;个人主页&#xff1a;聆风吟_ &#x1f525;系列专栏&#xff1a;星计划★C语言、Linux实践室 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. ⛳️第一个c语言程序二. ⛳️数据类型2.1 &#x1f514;数据单位2.2 &…

哲♂学家带你深♂入了解动态顺序表

前言&#xff1a; 最近本哲♂学家学习了顺序表&#xff0c;下面我给大家分享一下关于顺序表的知识。 一、什么是顺序表 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构&#xff0c;一般情况下采用数组存储。在数组 上完成数据的增删查改。 顺序表&#xff…

C++从入门到精通——入门知识

1. C关键字(C98) C总计63个关键字&#xff0c;C语言32个关键字 2. 命名空间 在C/C中&#xff0c;变量、函数和后面要学到的类都是大量存在的&#xff0c;这些变量、函数和类的名称都将存在于全局作用域中&#xff0c;可能会导致很多冲突。使用命名空间的目的就是对标识符的名…

PS从入门到精通视频各类教程整理全集,包含素材、作业等(8)复发

PS从入门到精通视频各类教程整理全集&#xff0c;包含素材、作业等 最新PS以及插件合集&#xff0c;可在我以往文章中找到 由于阿里云盘有分享次受限制和文件大小限制&#xff0c;今天先分享到这里&#xff0c;后续持续更新 B站-PS异闻录&#xff1a;萌新系统入门课课程视频 …

大模型论文阅读:ADAPTIVE BUDGET ALLOCATION FOR PARAMETEREFFICIENT FINE-TUNING

大模型论文阅读:ADAPTIVE BUDGET ALLOCATION FOR PARAMETEREFFICIENT FINE-TUNING 论文链接:https://arxiv.org/pdf/2303.10512v1.pdf 当存在大量下游任务时,微调所有预训练模型的参数变得不可行。因此,为了以参数高效的方式学习预训练权重的增量更新,提出了许多微调方法,…

【并发编程】CountDownLatch

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;并发编程 ⛺️稳中求进&#xff0c;晒太阳 CountDownLatch 概念 CountDownLatch可以使一个获多个线程等待其他线程各自执行完毕后再执行。 CountDownLatch 定义了一个计数器&#xff0c;…

【每日一道算法题】移除链表节点

这里写自定义目录标题 【每日一道算法题】移除链表元素思路记录我的代码力扣官方题解递归迭代 【每日一道算法题】移除链表元素 力扣题目链接(opens new window) 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xf…

arm的状态寄存器

目录 一、arm 的 PSRs二、CPSR2.1 CPSR_cxsf 三、SPSR四、APSR 一、arm 的 PSRs arm 中有很多程序状态寄存器&#xff08;Program Status Registers&#xff0c;PSRs&#xff09;用于存储处理器的状态信息&#xff0c;包括 CPSR\SPSR\FPSR\APSR 等&#xff1a; CPSR&#xff…

Vue3配置router路由步骤

Vue3配置router路由步骤 首先创建一个vue3的项目 先检查一下router的版本&#xff0c;可以在pakage.json里面查看&#xff0c;也可以你直接在终端输入 npm list vue-router如果版本比较低的话&#xff0c;先升级一下 vue3的话&#xff0c;用以下命令 npm install vue-route…

红蓝色WordPress外贸建站模板

红蓝色WordPress外贸建站模板 https://www.mymoban.com/wordpress/5.html

TSINGSEE青犀推出河道/河湖/水域治理视频AI智能解决方案

一、方案背景 “十四五”时期&#xff0c;在面源污染防治等方面实现突破&#xff0c;实现主要水污染排放总量持续减少&#xff0c;水生态环境持续改善等任务艰巨。进一步完善流域综合治理体系&#xff0c;提升流域水环境综合治理能力和水平&#xff0c;更好适应新阶段发展需求…

IDEA2023.1.1中文插件

1.启动IDEA 选中Customize 2.选择All settings 3.选中Plugins,再搜索栏里输入Chinese,找到 "Chinese (Simplified) Language"插件&#xff0c;点击 Install 进行安装。 4. 安装完成后&#xff0c;重启IntelliJ IDEA&#xff0c;即可看到界面语言已经变为中文。

JavaScript(一)基础

文章目录 一、JS介绍JavaScript是什么JavaScript书写位置JavaScript的注释输入输出语法字面量 二、变量变量是什么变量基本使用变量的本质变量命名规则与规范变量拓展-数组var与let的区别 三、常量四、数据类型数据类型检测数据类型数据类型转换隐式转换显式转换 简单运算符断点…

【洛谷 P8695】[蓝桥杯 2019 国 AC] 轨道炮 题解(映射+模拟+暴力枚举+桶排序)

[蓝桥杯 2019 国 AC] 轨道炮 题目描述 小明在玩一款战争游戏。地图上一共有 N N N 个敌方单位&#xff0c;可以看作 2D 平面上的点。其中第 i i i 个单位在 0 0 0 时刻的位置是 ( X i , Y i ) (X_i, Y_i) (Xi​,Yi​)&#xff0c;方向是 D i D_i Di​ (上下左右之一, 用…

同步检查继电器 JT-1/200 100V 面板嵌入式安装,板后接线

系列型号 JT-1同步检查继电器&#xff1b; DT-1同步检查继电器&#xff1b; JT-3同步检查继电器&#xff1b; DT-3同步检查继电器&#xff1b; 一、应用范围 JT(DT)系列同步检查继电器用于两端供电线路的自动重合闸线路中&#xff0c;以检查线路上电压的存在及线路上和变电站汇…

基于Spring Boot的在线考试系统

开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven…

element-ui breadcrumb 组件源码分享

今日简单分享 breadcrumb 组件的源码实现&#xff0c;主要从以下三个方面&#xff1a; 1、breadcrumb 组件页面结构 2、breadcrumb 组件属性 3、breadcrumb 组件 slot 一、breadcrumb 组件页面结构 二、breadcrumb 组件属性 2.1 separator 属性&#xff0c;分隔符&#xff…

程序员沟通之道:TCP与UDP之辩,窥见有效沟通的重要性(day19)

程序员沟通的重要性&#xff1a; 今天被师父骂了一顿&#xff0c;说我不及时回复他&#xff0c;连最起码的有效沟通都做不到怎么当好一个程序员&#xff0c;想想还挺有道理&#xff0c;程序员需要知道用户到底有哪些需求&#xff0c;用户与程序员之间的有效沟通就起到了关键性作…

Java多态世界(day18)

多态&#xff1a;重写的方法调用和执行 1.静态绑定&#xff1a;编译器在父类中找方法&#xff0c;如&#xff1a; 上面的eat&#xff08;&#xff09;方法是先在父类中找方法&#xff0c;父类没有的话&#xff0c;就算子类有编译也会报错。&#xff08;如果引用方法在父类中存…