知乎YY硕工作(A1-QP-MPC-Controller)复现过程排雷总结

前言
笔者近日研读了MIT Cheetah 3 论文,对上层控制算法结构有了自己的理解。贴一张思维导图:
在这里插入图片描述

不码不工,真知无望。在理论学习后自然需要学习代码。知乎大神YY硕在2022年开源的工作A1-QP-MPC-Controller,依照MIT的具体实现思路,将高层控制指令和控制器的状态数据通过ROS消息发送,使各环节输入输出更加明晰;同时控制器运行在Docker容器当中,使后续在实体机上的移植也更加便捷。
考虑到以上,笔者决定复现该工作后,通过此进行代码的学习研究。
贴一个YY硕本人知乎的帖子:又一个开源的四足机器人控制器 - 知乎
github项目地址:ShuoYangRobotics/A1-QP-MPC-Controller:MIT Cheetah 3 控制器的开源实现

一、硬件准备

  • Intel NUC12(无独显)
  • Xbox one手柄

二、排雷总结

1. 控制器安装

在执行以下步骤时:

ssh root@localhost -p2233
# then input passward "password" when prompted to do so
cd /root/A1_ctrl_ws/
catkin build

注意:

  1. 主机的身份验证密钥发生了变化:如果第一遍安装未成功,想删除重新构建镜像时,可能会出现如下报错:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:hnHl+MyVxwb/7T6daM586X/6rnZrd5rktmBwF7FuLi0.
Please contact your system administrator.

解决方法:使用提供的命令删除 /你的目录/.ssh/known_hosts 文件中与 [localhost]:2233 相关的旧密钥条目

ssh-keygen -f "/你的目录/.ssh/known_hosts" -R "[localhost]:2233"

然后再重复使用ssh连接docker容器即可。

  1. 进入/root/A1_ctrl_ws/编译报错:
Errors     << a1_cpp:make /root/A1_ctrl_ws/logs/a1_cpp/build.make.002.log      
In file included from /usr/local/include/OsqpEigen/Solver.hpp:312:0,
                 from /usr/local/include/OsqpEigen/OsqpEigen.h:13,
                 from /root/A1_ctrl_ws/src/A1_Ctrl/src/a1_cpp/src/test/test_rotation.cpp:8:
/usr/local/include/OsqpEigen/Solver.tpp:10:10: fatal error: auxil.h: No such file or directory
 #include <auxil.h>
          ^~~~~~~~~

具体原因是,在编译Osqp-Eigen库时,找不到一些头文件而报错。这些头文件都是osqp库里的文件。
笔者先尝试去查看osqp库是否安装成功,使用指令:

  
sudo find / -name osqp

在/usr/local/include中找到了osqp。说明install环节没有问题。但是打开osqp文件时,发现里边确实没有auxil.h这个文件。实际上还会报错scaling.h等别的依赖库找不到。也就是说,安装了,但没完全安装。
以上头文件都可以在/usr/include/osqp/include/private中找到,可以选择将文件中的auxil.h scaling.h以及其他需要的文件都转移到/usr/local/include/osqp中,这样就不会报错找不到auxil.h等。

cp auxil.h /usr/local/include/osqp

OK,解决了这个问题之后,你将会看到一片红。。。。
在这里插入图片描述

大概看了一眼,基本都是"… has not been declared"这种报错。要不就是哪个包整个没有被安装,要不就是版本匹配问题。
通过查询csdn,发现是Osqp-Eigen库和osqp库的版本匹配问题。挂两个解决的帖子在这:
Linux系统下eigen、osqp、osqp-eigen具体安装步骤(测试报错的人必看!)_linux 安装eigen-CSDN博客
【osqp-eigen安装】编译报错问题-CSDN博客
截止到2023年07月19日,osqp-eigen的最新版本为v0.8.0,其能够适配osqp的版本为v0.6.3。
但是,我试图在原docker环境中uninstall osqp重新安装v0.6.3,发现好像还是不行。可能是哪个地方没有卸载干净。

我的解决方案是:在dockerfile中找到 git clone --recursive https://github.com/oxfordcontrol/osqp.git, 加上版本,改为:

git clone --recursive -b release-0.6.3 https://github.com/oxfordcontrol/osqp.git

所以知道为啥开头要写那个重新构建镜像时主机的身份验证密钥问题的解决方案了吧。。。。。。
构建成功后,再将将/usr/include/osqp/include/private路径中的auxil.h scaling.h以及其他需要的文件都转移到/usr/local/include/osqp中,这样就不会报错找不到auxil.h等。
最后catkin build,应该就没有问题了。

2. Gazebo仿真image构建

因为笔者的Intel Nuc12没有独显,所以在运行 脚本run_gazebo_docker.bash 时,删除脚本中的
–runtime=nvidia \整行。
完整脚本为:

XAUTH=/tmp/.docker.xauth
if [ ! -f $XAUTH ]
then
    xauth_list=$(xauth nlist :0 | sed -e 's/^..../ffff/')
    if [ ! -z "$xauth_list" ]
    then
        echo $xauth_list | xauth -f $XAUTH nmerge -
    else
        touch $XAUTH
    fi
    chmod a+r $XAUTH
fi

docker run -it \
    --env="DISPLAY=$DISPLAY" \
    --env="QT_X11_NO_MITSHM=1" \
    --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \
    --env="XAUTHORITY=$XAUTH" \
    --volume="$XAUTH:$XAUTH" \
    --runtime=nvidia \
    --privileged \
    --network host \
    --name a1_unitree_gazebo_docker \
    a1_unitree_gazebo_image

到此,笔者的项目全部编译构建完成,可以运行。

后边准备研究具体代码实现,边学边更新。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值