全文总结
前言
搞搞狗。
环境配置
模拟机器狗中的环境,在本地虚拟机配置,通过网线运行测试用例程序,测试运行情况。
图片来自宇树科技文档
一个基于现代架构(如ROS 2) 的机器狗,机器狗是一个复杂的机电系统,通常会将功能分解为多个独立的、松散耦合的软件模块,每个模块就是一个节点,它们之间利用DDS实现协同运动,具体到我们的控制上,我们可以通过官方的SDK操控,也可以通过ROS2操控,它们本质都是去和机器狗上的DDS通信,从而控制其各部分工作。
宇树机器狗Go2文档:https://support.unitree.com/home/zh/developer/ROS2_service
ROS2安装路径:https://github.com/unitreerobotics/unitree_ros2?tab=readme-ov-file
ROS2文档:https://docs.ros.org/en/foxy/Installation/Ubuntu-Install-Debians.html
SDK安装路径:https://github.com/unitreerobotics/unitree_sdk2
现在要做的是我们的主机上配置好驱动机器狗的ROS2环境,我们的主机和机器狗处于同一局域网之下,也相当于一个DDS节点,这样就可以参与局域网中DDS的通信,从而控制一个局域网中其他节点的行为:
uck@uck-virtual-machine:~/Go2$ git clone https://github.com/unitreerobotics/unitree_ros2
正克隆到 'unitree_ros2'...
remote: Enumerating objects: 605, done.
remote: Counting objects: 100% (154/154), done.
remote: Compressing objects: 100% (77/77), done.
remote: Total 605 (delta 110), reused 77 (delta 77), pack-reused 451 (from 3)
接收对象中: 100% (605/605), 1.22 MiB | 220.00 KiB/s, 完成.
处理 delta 中: 100% (203/203), 完成.
//将 ROS 2 apt 存储库添加到系统中
uck@uck-virtual-machine:~/Go2$ sudo apt install software-properties-common
正在读取软件包列表... 完成
正在分析软件包的依赖关系树... 完成
正在读取状态信息... 完成
software-properties-common 已经是最新版 (0.99.22.9)。
software-properties-common 已设置为手动安装。
升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 0 个软件包未被升级。
uck@uck-virtual-machine:~/Go2$ sudo add-apt-repository universe
正在添加组件‘universe’到所有软件源。
按 [ENTER] 继续,或按 Ctrl-c 取消。
命中:1 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy InRelease
获取:2 http://security.ubuntu.com/ubuntu jammy-security InRelease [129 kB]
命中:3 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates InRelease
//添加带有 apt 的 ROS 2 GPG 密钥
uck@uck-virtual-machine:~/Go2$ sudo apt update && sudo apt install curl -y
命中:1 http://security.ubuntu.com/ubuntu jammy-security InRelease
命中:2 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy InRelease
命中:3 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates InRelease
命中:4 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-backports InRelease
uck@uck-virtual-machine:~/Go2$ sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
//然后将存储库添加到源列表中
uck@uck-virtual-machine:~/Go2$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
//设置存储库后更新 apt 存储库缓存。
sudo apt update
//ROS 2 软件包建立在经常更新的 Ubuntu 系统上。 始终建议您在安装新软件包之前确保您的系统是最新的。
sudo apt upgrade
//安装ROS的一些依赖
sudo apt install ros-humble-rmw-cyclonedds-cpp
sudo apt install ros-humble-rosidl-generator-dds-idl
sudo apt install ros-humble-desktop python3-argcomplete
sudo apt install ros-humble-ros-base python3-argcomplete
sudo apt install ros-dev-tools
//如果“source/opt/ros/humble/setup.bash“在安装 ROS2 时被添加到 ~/.bashrc 文件中,需要注释掉:
sudo apt install gedit
sudo gedit ~/.bashrc
# source /opt/ros/humble/setup.bash
//编译 cyclone-dds
uck@uck-virtual-machine:~/Go2/unitree_ros2/cyclonedds_ws/src$ git clone https://github.com/ros2/rmw_cyclonedds -b humble
正克隆到 'rmw_cyclonedds'...
remote: Enumerating objects: 3012, done.
remote: Counting objects: 100% (1319/1319), done.
remote: Compressing objects: 100% (319/319), done.
remote: Total 3012 (delta 1188), reused 1012 (delta 1000), pack-reused 1693 (from 1)
接收对象中: 100% (3012/3012), 1.09 MiB | 34.00 KiB/s, 完成.
处理 delta 中: 100% (2205/2205), 完成.
uck@uck-virtual-machine:~/Go2/unitree_ros2/cyclonedds_ws/src$ git clone https://github.com/eclipse-cyclonedds/cyclonedds -b releases/0.10.x
正克隆到 'cyclonedds'...
remote: Enumerating objects: 49750, done.
remote: Counting objects: 100% (1933/1933), done.
remote: Compressing objects: 100% (802/802), done.
//安装colcon,为了编译准备
uck@uck-virtual-machine:~/Go2/unitree_ros2/cyclonedds_ws$ sudo apt install python3-colcon-common-extensions
正在读取软件包列表... 完成
正在分析软件包的依赖关系树... 完成
正在读取状态信息... 完成
将会同时安装下列软件:
libjs-jquery-hotkeys libjs-jquery-isonscreen libjs-jquery-metadata
libjs-jquery-tablesorter libjs-jquery-throttle-debounce
python3-colcon-argcomplete python3-colcon-bash python3-colcon-cd
python3-colcon-cmake python3-colcon-core python3-colcon-defaults
python3-colcon-devtools python3-colcon-installed-package-information
python3-colcon-library-path python3-colcon-metadata
uck@uck-virtual-machine:~/Go2/unitree_ros2/cyclonedds_ws/src$ cd ..
uck@uck-virtual-machine:~/Go2/unitree_ros2/cyclonedds_ws$ colcon build --packages-select cyclonedds
source /opt/ros/humble/setup.bash
colcon build
使用以太网电缆连接 Unitree 机器人和计算机。然后,使用 ifconfig 查看机器人连接的网络接口。例如,下图中的“enp3s0”。
图片来自宇树科技文档
接下来,打开网络设置,找到机器人连接的网络接口。在 IPv4 设置中,将 IPv4 模式更改为手动,将地址设置为 192.168.123.99,将掩码设置为 255.255.255.0,这样是为了让我们的主机和机器狗处于同一个局域网。完成后,单击应用并等待网络重新连接。

图片来自宇树科技文档
ping 192.168.123.161(这是宇树官方指出的机器狗的默认ip):
uck@uck-virtual-machine:~/Go2/unitree_ros2/cyclonedds_ws$ ping 192.168.123.161
PING 192.168.123.161 (192.168.123.161) 56(84) bytes of data.
64 bytes from 192.168.123.161: icmp_seq=1 ttl=64 time=5.26 ms
64 bytes from 192.168.123.161: icmp_seq=2 ttl=64 time=3.15 ms
64 bytes from 192.168.123.161: icmp_seq=3 ttl=64 time=1.85 ms
64 bytes from 192.168.123.161: icmp_seq=4 ttl=64 time=3.21 ms
^C
--- 192.168.123.161 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
//可以ping通之后,就获取环境以设置 Unitree 机器人的 ROS2 支持:
修改指令:vim ~/Go2/unitree_ros2/setup.sh //这个过程可能需要更改路径,因为unitree_ros2默认是安装foxy的,需要将其全部修改成humble.
source ~/Go2/unitree_ros2/setup.sh
//然后就可以使用 ROS 2 命令,查看我们当前主机的局域网下,所有已声明(即有节点发布或订阅)的 Topic 的名称列表
ros2 topic list

图片来自宇树科技文档
然后我们选择ros2 topic echo /sportmodestate输入,它也是ROS2命令,主要用于实时监视并打印特定主题(Topic)上发布的消息内容。
如果我们的机器狗上有订阅这个主题的模块,那么就会对应的返回数据给我们,其实也就是机器狗的特定模块的节点和我们的主机上的ROS2节点在局域网通信特定的数据了。
总结
狗动了。
本文章为作者的笔记和心得记录,顺便进行知识分享,有任何错误请评论指点:)。

1350

被折叠的 条评论
为什么被折叠?



