概述
说明:本篇文章用于介绍使用webots搭建简单的四轮差分小车模型,参考了多篇已有的文章,由于是第一次搭建,不准确之处欢迎批评指正。
联系方式:2250017028@qq.com
环境搭建可以参考该文章:webots环境搭建
1.车身
- 添加Robot节点,并将其配置为固定节点
2. 添加外观和物理属性
i.首先在children中添加Base_nodes/Shape节点,并配置appearance和geometry属性
ii. 配置物理属性和碰撞属性
物理属性使用默认参数即可,碰撞属性将上面的Shape节点复制进来即可
2.车轮
i.在Robot/children节点中添加HingeJoint节点,其中包括以下三个属性需要配置
ii.配置参数
技巧:
- 可以先确定Solid的相关参数,配置跟车身类似,HingeJointParameters/anchor属性就跟Solid/translation属性相同。
- device中的节点名称是由device/name属性确定的,即ROS调用服务的外设名称由此决定。
iii. 复制另外三个轮子
注意要修改轮子位置,转轴位置,电机名称等属性。
iv. 添加摩擦力属性
在WorldInfo/ContactProperties中添加contactProperties子节点,并将该子节点下的coulombFriction属性值修改为0.5
4.搭建外设
在Robot/children节点下添加其他外设或者机器人节点。
这里的Robot也要设定为固定节点,并像上面车身节点一样配置相关属性。
效果如图
3.测试
到这里基本可以完成模型搭建,可以使用webots的控制器模板来设计一个简单的控制器测试模型搭建是否正常。
// File: my_controller.cpp
// Date:
// Description:
// Author:
// Modifications:
// You may need to add webots include files such as
// <webots/DistanceSensor.hpp>, <webots/Motor.hpp>, etc.
// and/or to add some other includes
#include <webots/Robot.hpp>
#include <webots/Motor.hpp>
#include <webots/Keyboard.hpp>
#include <webots/Camera.hpp>
#include <webots/RangeFinder.hpp>
// All the webots classes are defined in the "webots" namespace
using namespace webots;
// This is the main program of your controller.
// It creates an instance of your Robot instance, launches its
// function(s) and destroys it at the end of the execution.
// Note that only one instance of Robot should be created in
// a controller program.
// The arguments of the main function can be specified by the
// "controllerArgs" field of the Robot node
int main(int argc, char **argv) {
// create the Robot instance.
Robot *robot = new Robot();
// get the time step of the current world.
int timeStep = (int)robot->getBasicTimeStep();
// Create Instancee
Motor *wheels[4];
Keyboard *keyboard;
Camera *camera;
RangeFinder *rf;
char wheels_names[4][11] = {"rf_motor", "rr_motor", "lf_motor", "lr_motor"};
// Set motor status
for (int i = 0; i < 4; i++)
{
wheels[i] = robot->getMotor(wheels_names[i]);
wheels[i]->setPosition(INFINITY);
wheels[i]->setVelocity(0);
}
// Enable Camera
camera = robot->getCamera("kinect color");
rf = robot->getRangeFinder("kinect range");
camera->enable(4*timeStep);
rf->enable(4*timeStep);
// Enable keyboard
keyboard = robot->getKeyboard();
keyboard->enable(10*timeStep);
// kinematic param
float R_ = 0.1; // radius
float S_ = 0.4; // axis dis
float L_ = 0.41; // wheel dis
float v1, v2, vel, omega;
int key;
// Main loop:
// - perform simulation steps until Webots is stopping the controller
while (robot->step(timeStep) != -1) {
// Read the sensors:
//Get Motor Data
v1 = wheels[1]->getVelocity() * R_;
v2 = wheels[3]->getVelocity() * R_;
vel = (v1+v2)/2;
omega = (v2 - v1) * L_ / (L_ * L_ + S_ * S_);
printf("小车速度:v = %f, omega = %f",vel, omega);
// Get Key Data
key = keyboard->getKey();
switch(key)
{
case 'Q':
wheels[0]->setVelocity(3);
wheels[1]->setVelocity(3);
wheels[2]->setVelocity(1);
wheels[3]->setVelocity(1);
break;
case 'E':
wheels[0]->setVelocity(1);
wheels[1]->setVelocity(1);
wheels[2]->setVelocity(3);
wheels[3]->setVelocity(3);
break;
case 'W':
wheels[0]->setVelocity(2);
wheels[1]->setVelocity(2);
wheels[2]->setVelocity(2);
wheels[3]->setVelocity(2);
break;
case 'S':
wheels[0]->setVelocity(-2);
wheels[1]->setVelocity(-2);
wheels[2]->setVelocity(-2);
wheels[3]->setVelocity(-2);
break;
case 'D':
wheels[0]->setVelocity(2);
wheels[1]->setVelocity(2);
wheels[2]->setVelocity(-2);
wheels[3]->setVelocity(-2);
break;
case 'A':
wheels[0]->setVelocity(-2);
wheels[1]->setVelocity(-2);
wheels[2]->setVelocity(2);
wheels[3]->setVelocity(2);
break;
default:
wheels[0]->setVelocity(0);
wheels[1]->setVelocity(0);
wheels[2]->setVelocity(0);
wheels[3]->setVelocity(0);
break;
}
// Enter here functions to read sensor data, like:
// double val = ds->getValue();
// Process sensor data here.
// Enter here functions to send actuator commands, like:
// motor->setPosition(10.0);
};
// Enter here exit cleanup code.
delete robot;
return 0;
}
如果有其他问题,欢迎与我联系进行讨论!
最后
以上就是缓慢星星为你收集整理的Webots和ROS联合仿真探索(三):搭建仿真环境和仿真模型(四轮差分小车)的全部内容,希望文章能够帮你解决Webots和ROS联合仿真探索(三):搭建仿真环境和仿真模型(四轮差分小车)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复