mujoco 20240707 2

优化器 非线性

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

https://nlopt.readthedocs.io/en/latest/

射弹发射优化

projectile launch optimization

在这里插入图片描述
在这里插入图片描述

worldbody中 geom没有joint的话就是默认固定

在这里插入图片描述

在这里插入图片描述

如何使用非线性优化 求解

在这里插入图片描述

// void simulator(double Xin[3],double Xout[2])
// {
//   double v,theta,time_of_flight;
//   v = Xin[0];
//   theta = Xin[1];
//   time_of_flight = Xin[2];
//
//   d->qvel[0] = v*cos(theta);
//   d->qvel[2] = v*sin(theta);
//   while (d->time < time_of_flight)
//   {
//     mj_step(m,d);
//   }
//   //printf("%f %f %f \n",d->time,d->qpos[0],d->qpos[2]);
//   Xout[0] = d->qpos[0];
//   Xout[1] = d->qpos[2];
// }

先初始化,然后就是开始循环,但是他这里有个问题,就是
他的意思是他初始化以后他的初始化里面调用了 simulator,里面step了
然后他初始化后 时间就变成2了 ,他想要初始化后时间从0开始

就在初始化函数里用一个 mj_reset
在这里插入图片描述

  mj_resetData(m, d);

在这里插入图片描述

在main 中include constrain c

在constrain 里extern 声明参数,或者用别的方法

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
reset的位置错了。constrain中的simulator用到了积分器,要注意积分器的时间,他constrain中要一次次优化,每次看效果 每次搞完都要置零

更改优化损失函数 t最小

在这里插入图片描述
·	!@q

NPLOT的一个问题

在equality中call simulator
如果要用什么积分器计算 又要调用simulator
此时可以计算cost
在这里插入图片描述
开发者没有考虑 你在这里要调用两次simulator,特别是当你的时间很长
中间的参数,缓存 更新 追踪 计算啥的

作者给出的建议是,弄一个全局变量,然后把中间计算参数给到这个变量,可以访问

equality是在cost后面调用的

把equality中的计算剪切给到cost中。然后用cost中变量保存的参数到equality用
在这里插入图片描述

double cost = 0*x[2];

lecture 12 利用非线性优化 进行运动学反解

在这里插入图片描述
他的意思是 你这里会重复运行 关于data 用于robot 还是 simulator

一个用于 forward simulation 在每一个时间步长

一个用于计算来找到torque

所以这里用了一个分支,可以随意重置这个分支

在这里插入图片描述

数据分支
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

lemniscate

在这里插入图片描述


void my_controller(const mjModel* m, mjData* d)
{
  //write control here
  double Xin[2] = {d->qpos[0],d->qpos[1]};
  double Xref[2]={0};
  curve(d->time, Xref);
  inverse_kinematics(Xin,Xref);
  d->ctrl[0] = Xin[0]; d->ctrl[2] = Xin[1];

  xref=Xref[0]; zref=Xref[1];
  xact=d->sensordata[0]; zact = d->sensordata[2];

  //write data here (dont change/dete this function call; instead write what you need to save in save_data)
  if ( loop_index%data_frequency==0)
    {
      save_data(m,d);
    }
  loop_index = loop_index + 1;
}

为他配置偏移中心 以及 角速度 和 幅度
在这里插入图片描述

根据关节配置的初始位置来反推 你这个轨迹的中心点

在这里插入图片描述

在这里插入图片描述
左边是你设置了 你每次step 都会调用
你使用了4次 my controller is called 4 times

右边的不会每次step都会调用你controller,相当于是独立了

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值