Webots中Spot或SpotMini案例-焦 虑 腾 空-

2023-10-20 22:30
文章标签 案例 spot webots spotmini

本文主要是介绍Webots中Spot或SpotMini案例-焦 虑 腾 空-,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

"Spot "机器人,此前被称为 "SpotMini",是波士顿动力公司开发的一款四条腿的类似狗的机器人。

详细介绍的短视频在文末,如需简要了解,不必观看视频,个人一直觉得视频的时间成本很高,流量成本很高,制作成本也很高,这三高是相对于图文博客而言。

焦虑的Spot

这款敏捷的机器人身高83厘米,可以完成各种搜索、检查和运送任务。它能以前所未有的速度攀爬楼梯和穿越崎岖的地形,但它的体型却足够小,适合在室内使用。它是一个坚固耐用的(IP54防尘和防潮保护)和可定制的平台。Spot可以去轮式机器人无法去的地方,同时携带的有效载荷的耐力远超空中无人机。最大速度为1.6米/秒,续航时间为90分钟,电池可更换。Spot使用5个立体摄像头(360度视觉),在动态工作场所移动时,可以避开障碍物和人。

附上参考网址(非点击打开的链接,请复制打开)

教程说明:https://cyberbotics.com/doc/guide/spot模型网址:https://github.com/cyberbotics/webots/tree/master/projects/robots/boston_dynamics软件下载:https://cyberbotics.com/#download
腾空的spot

上图可以看到webots软件界面,腾空时前后摄像头的图像也在仿真窗口左上和右上显示。

如上运动效果的代码如下:

/** Copyright 1996-2020 Cyberbotics Ltd.** 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.*//** Description:   Simple controller to present the Spot robot.*/#include <webots/camera.h>
#include <webots/device.h>
#include <webots/led.h>
#include <webots/motor.h>
#include <webots/robot.h>#include <math.h>
#include <stdio.h>
#include <stdlib.h>#define NUMBER_OF_LEDS 8
#define NUMBER_OF_JOINTS 12
#define NUMBER_OF_CAMERAS 5// Initialize the robot's information
static WbDeviceTag motors[NUMBER_OF_JOINTS];
static const char *motor_names[NUMBER_OF_JOINTS] = {"front left shoulder abduction motor",  "front left shoulder rotation motor",  "front left elbow motor","front right shoulder abduction motor", "front right shoulder rotation motor", "front right elbow motor","rear left shoulder abduction motor",   "rear left shoulder rotation motor",   "rear left elbow motor","rear right shoulder abduction motor",  "rear right shoulder rotation motor",  "rear right elbow motor"};
static WbDeviceTag cameras[NUMBER_OF_CAMERAS];
static const char *camera_names[NUMBER_OF_CAMERAS] = {"left head camera", "right head camera", "left flank camera","right flank camera", "rear camera"};
static WbDeviceTag leds[NUMBER_OF_LEDS];
static const char *led_names[NUMBER_OF_LEDS] = {"left top led",          "left middle up led", "left middle down led","left bottom led",       "right top led",      "right middle up led","right middle down led", "right bottom led"};static void step() {const double time_step = wb_robot_get_basic_time_step();if (wb_robot_step(time_step) == -1) {wb_robot_cleanup();exit(0);}
}// Movement decomposition
static void movement_decomposition(const double *target, double duration) {const double time_step = wb_robot_get_basic_time_step();const int n_steps_to_achieve_target = duration * 1000 / time_step;double step_difference[NUMBER_OF_JOINTS];double current_position[NUMBER_OF_JOINTS];for (int i = 0; i < NUMBER_OF_JOINTS; ++i) {current_position[i] = wb_motor_get_target_position(motors[i]);step_difference[i] = (target[i] - current_position[i]) / n_steps_to_achieve_target;}for (int i = 0; i < n_steps_to_achieve_target; ++i) {for (int j = 0; j < NUMBER_OF_JOINTS; ++j) {current_position[j] += step_difference[j];wb_motor_set_position(motors[j], current_position[j]);}step();}
}static void lie_down(double duration) {const double motors_target_pos[NUMBER_OF_JOINTS] = {-0.40, -0.99, 1.59,   // Front left leg0.40,  -0.99, 1.59,   // Front right leg-0.40, -0.99, 1.59,   // Rear left leg0.40,  -0.99, 1.59};  // Rear right legmovement_decomposition(motors_target_pos, duration);
}static void stand_up(double duration) {const double motors_target_pos[NUMBER_OF_JOINTS] = {-0.1, 0.0, 0.0,   // Front left leg0.1,  0.0, 0.0,   // Front right leg-0.1, 0.0, 0.0,   // Rear left leg0.1,  0.0, 0.0};  // Rear right legmovement_decomposition(motors_target_pos, duration);
}static void sit_down(double duration) {const double motors_target_pos[NUMBER_OF_JOINTS] = {-0.20, -0.40, -0.19,  // Front left leg0.20,  -0.40, -0.19,  // Front right leg-0.40, -0.90, 1.18,   // Rear left leg0.40,  -0.90, 1.18};  // Rear right legmovement_decomposition(motors_target_pos, duration);
}static void give_paw() {// Stabilize postureconst double motors_target_pos_1[NUMBER_OF_JOINTS] = {-0.20, -0.30, 0.05,   // Front left leg0.20,  -0.40, -0.19,  // Front right leg-0.40, -0.90, 1.18,   // Rear left leg0.49,  -0.90, 0.80};  // Rear right legmovement_decomposition(motors_target_pos_1, 4);const double initial_time = wb_robot_get_time();while (wb_robot_get_time() - initial_time < 8) {wb_motor_set_position(motors[4], 0.2 * sin(2 * wb_robot_get_time()) + 0.6);  // Upperarm movementwb_motor_set_position(motors[5], 0.4 * sin(2 * wb_robot_get_time()));        // Forearm movementstep();}// Get back in sitting postureconst double motors_target_pos_2[NUMBER_OF_JOINTS] = {-0.20, -0.40, -0.19,  // Front left leg0.20,  -0.40, -0.19,  // Front right leg-0.40, -0.90, 1.18,   // Rear left leg0.40,  -0.90, 1.18};  // Rear right legmovement_decomposition(motors_target_pos_2, 4);
}int main(int argc, char **argv) {wb_robot_init();const double time_step = wb_robot_get_basic_time_step();// Get camerasfor (int i = 0; i < NUMBER_OF_CAMERAS; ++i)cameras[i] = wb_robot_get_device(camera_names[i]);// enable the two front cameraswb_camera_enable(cameras[0], 2 * time_step);wb_camera_enable(cameras[1], 2 * time_step);// Get the LEDs and turn them onfor (int i = 0; i < NUMBER_OF_LEDS; ++i) {leds[i] = wb_robot_get_device(led_names[i]);wb_led_set(leds[i], 1);}// Get the motors (joints) and set initial target position to 0for (int i = 0; i < NUMBER_OF_JOINTS; ++i)motors[i] = wb_robot_get_device(motor_names[i]);while (true) {
//    lie_down(4.0);
//    stand_up(4.0);
//    sit_down(4.0);
//    give_paw();
//    stand_up(4.0);
//    lie_down(3.0);
//    stand_up(3.0);
//    lie_down(2.0);
//    stand_up(2.0);
//    lie_down(1.0);
//    stand_up(1.0);
//    lie_down(0.75);
//    stand_up(0.75);lie_down(0.5);stand_up(0.5);lie_down(0.4);stand_up(0.4);lie_down(0.3);stand_up(0.3);lie_down(0.2);stand_up(0.2);lie_down(0.1);stand_up(0.1);               }wb_robot_cleanup();return EXIT_FAILURE;
}

可以自己编程实现更多复杂的运动。


在Webots中使用Spot或Spotmini说明

  • https://www.bilibili.com/video/bv1Dt4y1y72x

 

这篇关于Webots中Spot或SpotMini案例-焦 虑 腾 空-的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/250116

相关文章

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

客户案例:安全海外中继助力知名家电企业化解海外通邮困境

1、客户背景 广东格兰仕集团有限公司(以下简称“格兰仕”),成立于1978年,是中国家电行业的领军企业之一。作为全球最大的微波炉生产基地,格兰仕拥有多项国际领先的家电制造技术,连续多年位列中国家电出口前列。格兰仕不仅注重业务的全球拓展,更重视业务流程的高效与顺畅,以确保在国际舞台上的竞争力。 2、需求痛点 随着格兰仕全球化战略的深入实施,其海外业务快速增长,电子邮件成为了关键的沟通工具。

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。

STL经典案例(四)——实验室预约综合管理系统(项目涉及知识点很全面,内容有点多,耐心看完会有收获的!)

项目干货满满,内容有点过多,看起来可能会有点卡。系统提示读完超过俩小时,建议分多篇发布,我觉得分篇就不完整了,失去了这个项目的灵魂 一、需求分析 高校实验室预约管理系统包括三种不同身份:管理员、实验室教师、学生 管理员:给学生和实验室教师创建账号并分发 实验室教师:审核学生的预约申请 学生:申请使用实验室 高校实验室包括:超景深实验室(可容纳10人)、大数据实验室(可容纳20人)、物联网实验

(入门篇)JavaScript 网页设计案例浅析-简单的交互式图片轮播

网页设计已经成为了每个前端开发者的必备技能,而 JavaScript 作为前端三大基础之一,更是为网页赋予了互动性和动态效果。本篇文章将通过一个简单的 JavaScript 案例,带你了解网页设计中的一些常见技巧和技术原理。今天就说一说一个常见的图片轮播效果。相信大家在各类电商网站、个人博客或者展示页面中,都看到过这种轮播图。它的核心功能是展示多张图片,并且用户可以通过点击按钮,左右切换图片。

SpringMVC的第一个案例 Helloword 步骤

第一步:web.xml配置 <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocati

真实案例分享:零售企业如何避免销售数据的无效分析?

在零售业务的数据分析中,无效分析不仅浪费时间和资源,还可能导致错误的决策。为了避免这种情况,企业必须采取策略来确保他们的数据分析工作能够产生实际的商业价值。本文将通过行业内真实的案例,探讨零售企业如何通过精心设计的数据策略和分析方法,借助商业智能BI工具,避免销售数据的无效分析,确保每一次分析都能为业务增长提供有力的支持。 文章中提到的BI数据分析工具分享给大家—— https://s.fan