宇树go2机器狗学习记录(一)

今天启动狗简单玩了一下,感慨设备的先进,也感慨仿生类机器人还有很长的路要走。主要完成操作——固件更新、连接电脑、用手机完成各种动作操作、用app内的3d激光建图模式建图,并导航。写点东西记录下实验步骤以及可能遇到的问题以便后续自己操作。

宇树科技 文档中心(传送门)

SDK获取安装及例程运行

官方Go2 SDK 开发指南详细操作部分不再赘述。仅作步骤和问题记录。

安装编译

1.下载sdk

2.安装unitree_sdk2(目前叫unitree_sdk2-main)

3.编译例程

4.查看是否编译成功

配置网络环境

1.网线连接狗(狗开机)

2.将本机USB Ethernet 地址设置为与机器狗同一网段,如192.168.123.222。

3.测试连接是否成功。终端输入:ping 192.168.123.161。

4.查看123网段对应的网卡名字。终端输入:ifconfig。

例程运行

1.关闭运控sport_mode(本人手机操作)

2.运行例程

打开终端输入(网卡名换成自己的)

cd ~/unitree_sdk2/build/bin
sudo ./low_level enxf8e43b808e06

该例程会使 Go2 机器人腿部摆动,为了保护机器人,在运行此例程前应使机器人四腿悬空。

go2_stand_example例程即为趴下站起来。(宇树文档内的stand_example_go2就是这个)

终端输入代码如下即可运行。(注意网卡名字)

cd ~/unitree_sdk2/build/bin
sudo ./stand_example_go2 enxf8e43b808e06

创建客户应用

1.查阅 sport_client 接口

在这个位置unitree_sdk2/include/unitree/robot/go2/sport/sport_client.hpp

(文件夹如果被锁住那就打开终端输入sudo chmod 777 user)

#ifndef __UT_ROBOT_GO2_SPORT_CLIENT_HPP__
#define __UT_ROBOT_GO2_SPORT_CLIENT_HPP__

#include <unitree/robot/client/client.hpp>

namespace unitree
{
namespace robot
{
namespace go2
{
/*
 * PathPoint
 */
struct stPathPoint
{
  float timeFromStart;
  float x;
  float y;
  float yaw;
  float vx;
  float vy;
  float vyaw;
};

typedef struct stPathPoint PathPoint;

/*
 * SportClient
 */
class SportClient : public Client
{
public:
    explicit SportClient(bool enableLease = false);
    ~SportClient();

    void Init();

    /*
     * @brief Damp
     * @api: 1001
     */
    int32_t Damp();

    /*
     * @brief BalanceStand
     * @api: 1002
     */
    int32_t BalanceStand();

    /*
     * @brief StopMove
     * @api: 1003
     */
    int32_t StopMove();

    /*
     * @brief StandUp
     * @api: 1004
     */
    int32_t StandUp();

    /*
     * @brief StandDown
     * @api: 1005
     */
    int32_t StandDown();

    /*
     * @brief RecoveryStand
     * @api: 1006
     */
    int32_t RecoveryStand();

    /*
     * @brief Euler
     * @api: 1007
     */
    int32_t Euler(float roll, float pitch, float yaw);

    /*
     * @brief Move
     * @api: 1008
     */
    int32_t Move(float vx, float vy, float vyaw);

    /*
     * @brief Sit
     * @api: 1009
     */
    int32_t Sit();

    /*
     * @brief RiseSit
     * @api: 1010
     */
    int32_t RiseSit();

    /*
     * @brief SwitchGait
     * @api: 1011
     */
    int32_t SwitchGait(int d);

    /*
     * @brief Trigger
     * @api: 1012
     */
    int32_t Trigger();

    /*
     * @brief BodyHeight
     * @api: 1013
     */
    int32_t BodyHeight(float height);

    /*
     * @brief FootRaiseHeight
     * @api: 1014
     */
    int32_t FootRaiseHeight(float height);

    /*
     * @brief SpeedLevel
     * @api: 1015
     */
    int32_t SpeedLevel(int level);

    /*
     * @brief Hello
     * @api: 1016
     */
    int32_t Hello();

    /*
     * @brief Stretch
     * @api: 1017
     */
    int32_t Stretch();

    /*
     * @brief TrajectoryFollow
     * @api: 1018
     */
    int32_t TrajectoryFollow(std::vector<PathPoint>& path);

    // /*
    //  * @brief GetBodyHeight
    //  * @api: 1024
    //  */
    // int32_t GetBodyHeight();

    // /*
    //  * @brief GetFootRaiseHeight
    //  * @api: 1025
    //  */
    // int32_t GetFootRaiseHeight(float& height);

    // /*
    //  * @brief GetSpeedLevel
    //  * @api: 1026
    //  */
    // int32_t GetSpeedLevel(int&);

    /*
     * @brief SwitchJoystick
     * @api: 1027
     */
    int32_t SwitchJoystick(bool flag);

    /*
     * @brief ContinuousGait
     * @api: 1019
     */
    int32_t ContinuousGait(bool flag);

    /*
     * @brief Wallow
     * @api: 1021
     */
    int32_t Wallow();

    // /*
    //  * @brief Content
    //  * @api: 1020
    //  */
    // int32_t Content();

    /*
     * @brief Heart
     * @api: 1036
     */
    int32_t Heart();

    /*
     * @brief Pose
     * @api: 1028
     */
    int32_t Pose(bool flag);

    /*
     * @brief Scrape
     * @api: 1029
     */
    int32_t Scrape();

    /*
     * @brief FrontFlip
     * @api: 1030
     */
    int32_t FrontFlip();

    /*
     * @brief FrontJump
     * @api: 1031
     */
    int32_t FrontJump();

    /*
     * @brief FrontPounce
     * @api: 1032
     */
    int32_t FrontPounce();

    /*
     * @brief Dance1
     * @api: 1022
     */
    int32_t Dance1();

    /*
     * @brief Dance2
     * @api: 1023
     */
    int32_t Dance2();

    /*
     * @brief Dance3
     * @api: 1037
     */
    int32_t Dance3();

    /*
     * @brief Dance4
     * @api: 1038
     */
    int32_t Dance4();

    /*
     * @brief HopSpinLeft
     * @api: 1039
     */
    int32_t HopSpinLeft();
  
    /*
     * @brief HopSpinRight
     * @api: 1040
     */
    int32_t HopSpinRight();

    /*
     * @brief WiggleHips
     * @api: 1033
     */
    int32_t WiggleHips();

    /*
     * @brief GetState
     * @api: 1034
     */
    int32_t GetState(const std::vector<std::string>& _vector, std::map<std::string, std::string>& _map);

    /*
     * @brief EconomicGait
     * @api: 1035
     */
    int32_t EconomicGait(bool flag);

};
}
}
}

#endif//__UT_ROBOT_GO2_SPORT_CLIENT_HPP__

2.创建应用文件

3.编译文件

4.运行

最最基本的第一部分操作流程就写到这里吧。后续还会更新。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值