Webots中常用的函数(C版)
wb_supervisor_node_get_field(WbNodeRef, "translation")
:
查找WbFieldRef在指定的节点中。“”字段表示机器人在全球(世界)坐标系中的位置。wb_supervisor_node_get_from_def()
:
调用在场景树中搜索名为“MY_ROBOT”的对象WbNodeRef robot_node = wb_supervisor_node_get_from_def("MY_ROBOT"); WbFieldRef trans_field = wb_supervisor_node_get_field(robot_node, "translation");
wb_supervisor_field_get_sf_vec3f()
:
用于读取指定字段的最新值。请注意,与传感器或执行器功能不同,wb_supervisor_field _ *()
函数会立即执行:它们的执行不会推迟到下一个wb_robot_step()
调用。const double *trans = wb_supervisor_field_get_sf_vec3f(trans_field);
resetRobot()
:
move robot to initial position评估的参数集
不同控制器将在单独的系统进程中运行,它们无法访问彼此的变量。虽然,他们将不得不通过其他方式进行沟通,以便指定需要评估的参数集。有可能并推荐使用WebotsEmitter
和Receiver
来在Supervisor
和其他控制器之间交换信息。例如,在典型的情况下,主管将向机器人控制器发送评估参数(例如,基因型)。机器人控制器收听他们的接收器s,等待一组新的参数。一旦收到,机器人控制器开始执行由该组参数指定的行为。在这种情况下,主管需要一个发射器,每个机器人都需要一个接收器。重置机器人的方法
使用优化算法时,您可能需要在每次适应评估之前或之后重置机器人。有几种重置机器人的方法:
使用wb_supervisor_field_set _ *()
和wb_supervisor_simulation_physics_reset()
函数
您可以使用wb_supervisor_field_set ...()
和 wb_supervisor_simulation_physics_reset()
函数轻松重置机器人的位置,方向和物理特性,下面是一个示例:
// get handles to the robot's translation and rotation fields
WbNodeRef robot_node = wb_supervisor_node_get_from_def("MY_ROBOT");
WbFieldRef trans_field = wb_supervisor_node_get_field(robot_node, "translation");
WbFieldRef rot_field = wb_supervisor_node_get_field(robot_node, "rotation");// reset the robot
const double INITIAL_TRANS[3] = { 0, 0.5, 0 };
const double INITIAL_ROT[4] = { 0, 1, 0, 1.5708 };
wb_supervisor_field_set_sf_vec3f(trans_field, INITIAL_TRANS);
wb_supervisor_field_set_sf_rotation(rot_field, INITIAL_ROT);
wb_supervisor_simulation_physics_reset();
上述方法的缺点是它只能重置机器人的主要位置和方向。对于某些类型的优化,这可能很好,但对于其他类型则不够。尽管可以向要重置的一组数据添加更多参数,但有时很难重置所有内容。伺服位置和机器人控制器都不是以这种方式重置。的伺服位置应被重置使用 wb_servo_set_position()
和机器人控制器应当通过从管理进程将消息发送到机器人控制器过程(使用Webots重置 发射器 / 接收器通讯系统)。机器人控制器程序应该能够处理这样的消息并相应地重置其状态。
wb_supervisor_simulation_revert()
:
该功能从头开始重新启动物理模拟和所有控制器。用这种方法,所有的东西都会重置,包括物理位置,伺服位置和控制器。但是这个函数也会重新启动调用wb_supervisor_simulation_revert()
的控制器,这通常是运行优化算法的控制器,因此优化状态会丢失。因此,为了使用这种技术,有必要开发可以保存和恢复优化算法的完整状态的函数。在调用wb_supervisor_simulation_revert()
之前应保存优化状态,并在Supervisor
时重新加载控制器重新启动。wbu_motion_new,wbu_motion_delete
:
获取并释放一个动作文件句柄
#include <webots/utils/motion.h>WbMotionRef wbu_motion_new(const char *filename);void wbu_motion_delete(WbMotionRef motion);
在filename可以以绝对路径或相对于控制器目录的路径来指定。
wbu_motion_play
,wbu_motion_stop
,wbu_motion_set_loop
,wbu_motion_set_reverse
:
控制运动文件回放
#include <webots/utils/motion.h>
void wbu_motion_play(WbMotionRef motion);
void wbu_motion_stop(WbMotionRefmotion);
void wbu_motion_set_loop(WbMotionRef motion, bool loop);
void wbu_motion_set_reverse(WbMotionRefmotion, bool reverse);
请注意,wb_robot_step()
运动文件中的功能步骤和姿势间隔可能不同。在这种情况下,Webot通过线性插值计算中间关节位置。
wbu_motion_stop()
中断指定的运动的再现但保留当前位置。中断后,播放可以继续wbu_motion_play()
。
该wbu_motion_set_loop()
套环模式的指定的运动的。如果 循环模式为true,则当文件到达文件的结束或开始(反向模式)时,动作重复。的循环模式都可以使用,例如,让一个机器人重复一系列步骤在行走序列。请注意,循环模式可以在动作播放时更改。
wbu_motion_set_reverse()
设定倒档模式指定的运动。如果反转模式是true,则动作文件向后播放。例如,通过使用反向模式,可以将步行运动转变为向后步行运动。该反向模式是可以改变的,而运动是打,在这种情况下,动作会从当前位置回。
默认情况下,运动的循环模式和反向模式是false
wbu_motion_is_over
,wbu_motion_get_duration
,wbu_motion_get_time
,wbu_motion_set_time
:
控制播放位置
#include <webots/utils/motion.h>
bool wbu motion_is_over(WbMotionRef motion);
int wbu_motion_get_duration(WbMotionRefmotion);
int wbu_motion_get_time(WbMotionRef motion, bool loop);
void wbu_motion_set_time(WbMotionRefmotion, int t);
当播放位置到达动作文件的结尾时,该wbu_motion_is_over()
功能返回true。那就是当最后的姿势已经使用该功能发送到电机节点时wb_motor_set_position()
。但这并不意味着电机尚未达到规定的位置; 它们可能很慢或被障碍物,机器人,墙壁,地板等阻挡。如果运动处于循环模式,则此功能始终返回false。请注意, wbu_motion_is_over()
取决于反转模式。wbu_motion_is_over()
返回true时反向模式是true和重放位置是在文件的开头或当反向模式是false和重放位置是在文件的结尾。
该wbu_motion_get_duration()
函数以毫秒为单位返回运动文件的总持续时间。
该wbu_motion_get_time()
函数以毫秒为单位返回当前播放位置。
该wbu_motion_set_time()
功能可以及时更改播放位置。这允许用户向前或向后跳过。请注意,无论正在播放还是停止,时间位置都可以更改。最小值是0(运动开始),最大值是函数返回的值 wbu_motion_get_duration()
(运动结束)。时间位置以毫秒表示
wb_robot_step()
:
可同步Webots和控制器之间的传感器和执行器数据。如果该wb_robot_step()
功能未被调用,则Webots中将不会启动,并且控制器中的传感器也不会更新。
int wb_robot_step(int duration)
该duration参数指定以毫秒为单位的时间量,在wb_robot_step()
函数返回之前必须模拟该时间量。请注意,这不是实时的,而是虚拟的(模拟)时间,所以这不像调用系统的时间 sleep()。根据模拟和执行模式的复杂程度,该功能可能会很快返回。当它返回时,模拟时间的请求持续时间已过。换句话说,物理运行指定的持续时间:对象可能会移动,电机可能运行,传感器值可能会发生变化等。请注意,duration 参数必须是其倍数WorldInfo.basicTimeStep
。
如果此函数返回-1,则表示Webots希望终止控制器。当用户点击Revert
按钮或退出Webots 时会发生这种情况。所以如果你的代码需要做一些清理工作,例如刷新或关闭数据文件等,就必须测试这个返回值并采取适当的行动。控制器终止不能被否决:一秒钟后,控制器被Webots终止。所以只有一秒可用于清理。
wb_robot_get_device
:
获取设备的唯一标识符wb_robot_get_device_by_index
:
通过自省获取设备wb_robot_battery_sensor_enable
,wb_robot_battery_sensor_disable
,wb_robot_get_battery sampling_period
,wb_robot_battery_sensor_get_value
:
电池传感器功能
这些功能可以让您测量机器人电池当前的能量水平。首先,需要通过调用该wb_robot_battery_sensor_enable()
功能来启用电池传感器测量。该sampling_period
参数以毫秒表示,并定义了执行测量的频率。电池传感器启用后,通过调用该wb_robot_battery_sensor_get_value()
函数可以从中读取一个值 。返回值对应于以焦耳(J)表示的当前电池能量水平。
该wb_robot_battery_sensor_disable()
功能应该用于停止电池传感器测量。
该wb_robot_get_battery_sampling_period()
函数返回函数给定的时间段wb_robot_battery_sensor_enable()
,如果设备被禁用,则返回0。
wb_robot_get_basic_time_step
:
返回WorldInfo
节点的basicTimeStep
字段的值wb_robot_get_mode
:
获取操作模式,模拟与真实机器人wb_robot_get_name
:
返回机器人节点中定义的名称
本文转自博客园https://www.cnblogs.com/guojun-junguo/p/9077293.html
Webots中常用的函数(C版)相关推荐
- MapInfo中常用查询函数及用法
MapInfo中常用查询函数及用法: 函数用途 语法 备注 图层中选点 Str$(obj)="point": Str(String)表示字符串:point表示点: 图层中选线 St ...
- ML之sklearn:sklearn.metrics中常用的函数参数(比如confusion_matrix等 )解释及其用法说明之详细攻略
ML之sklearn:sklearn.metrics中常用的函数参数(比如confusion_matrix等 )解释及其用法说明之详细攻略 目录 sklearn.metrics中常用的函数参数 con ...
- Matlab:Matlab中常用的函数、案例详细攻略
Matlab:Matlab中常用的函数.案例详细攻略 目录 常用函数 1.与文件相关 2.MATLAB GUI不同控件函数间变量传递方法 常用函数 Matlab中的bwmorph函数解释 bwmorp ...
- Tkinter中常用的函数
Tkinter中常用的函数 窗口管理器的刷新事件 窗口管理器的刷新事件 ps:一个Tkinter应用在绝大部分时间都花费在内部的时间循环上(通过mainloop方法进入).事件来自于各种途径.包括来自 ...
- hive获取月份_【Hive】Hive中常用日期函数整理
前言 使用hive进行时间处理的过程中,有时忘记一些常用的函数用法,现整理一下hive中常用日期函数,当做备忘录使用,忘记来翻阅一下. 1 时间戳转化日期函数 时间戳必须是10位,默认情况下转化为'y ...
- Mysql中常用的函数汇总
Mysql中常用的函数汇总: 一.数学函数 abs(x) 返回x的绝对值 bin(x) 返回x的二进制(oct返回八进制,hex返回十六进制) ceiling(x) 返回大于x的最小整数值 exp(x ...
- Golang字符串中常用的函数
Golang字符串中常用的函数 说明: 字符串在我们程序开发中,使用的是非常多的,常用的函数需要同学们掌握: 下面列出20种常用的字符串函数: 1)统计字符串的长度,按字节len(str) 2)字符串 ...
- roscpp中常用的函数、类以及命名空间
roscpp中常用的函数.类以及命名空间 前言 前言 经过了一段时间的ros与gazebo机器人编队仿真的学习,对ros的结构有了一定了解,接下来将对松灵机器人的底盘进行实车开发,主要开发语言使用C+ ...
- jQuery中常用的函数方法总结
jQuery中为我们提供了很多有用的方法和属性,自己总结的一些常用的函数,方法.个人认为在www.21kaiyun.com的紫微斗数星座在线排盘开发中会比较常用的,仅供大家学习和参考. 事件处理 re ...
最新文章
- 递推DP HDOJ 5459 Jesus Is Here
- 了解ADF Faces clientComponent属性
- 再见Postman,这款API神器更好用!
- node js、npm、homebrew、cocoapod、git、hexo
- TensorFlow:tensorflow之CIFAR10与ResNet18实战
- favicon ico什么意思_你真的知道IPFS与Filecoin是什么吗?
- MySQL 主键、索引创建
- ​阿里云SAE助力百富旅行实现Serverless+微服务完美结合
- 上海图书馆e卡通阅读器差强人意
- 宽带网速如何测试软件,怎么测网速(教你精准测速的方法)
- android edittext的属性
- 在VSCode环境下用dlv工具的attach模式远程调试在运行中的服务
- 企业邮箱服务该怎么选择?
- 物联网通信技术期末复习5:第五章-网络传输技术
- PTA python 输出前 n 个Fibonacci数
- 正则表达式(附匹配手机号和HTML标签)
- 黑帽SEO之搜索引擎劫持
- 再见了,铁饭碗!2020年全部完成!取消事业编制成定局
- java大数据最全课程学习笔记(6)--MapReduce精通(二)--MapReduce框架原理
- 返回时上一界面仍保持之前的内容