基于WSL2 & ROS2 humble上安装gazebo及调试

前提:ROS2 基于WSL2已经安装完成,并测试可以显示小乌龟;WSL2的Ubuntu版本22.04;已经安装conda。

目前,humble对应的是Ubuntu22,jazzy版本较新,对应Ubuntu24。

1)建立python3.10虚拟环境

$ conda create -n ros2 python=3.10

成功后,激活ros2。因为ros2内的一些库文件是用python 3.10编译的,所以,最好用3.10版。

$ conda activate ros2

2)安装gazebo

$ sudo apt-get install ros-humble-gazebo-ros ros-humble-gazebo-ros2-control

安装完成,在console输入gazebo测试一下,是否能看到界面。

3)安装需要用到的python组件

$ pip install catkin_pkg

$ pip install empy==3.3.2

注意上面的empy版本,指定3.3.2,目前默认是4.2,太高编译会报错。

$ pip install lark

$ pip install numpy

$ pip install lxml

$ sudo apt-get install python3-rosdep

$ sudo apt install python3-colcon-common-extensions

如果后面编译过程中,提示缺失什么库,用pip安装即可。

作者在实际运行过程中,发现了conda的python3.10自带的glibc++库版本低,编译项目时会报错,这里是操作方法。

先看Ubuntu的库版本:

$ strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBCXX_3.4.21
GLIBCXX_3.4.22
GLIBCXX_3.4.23
GLIBCXX_3.4.24
GLIBCXX_3.4.25
GLIBCXX_3.4.26
GLIBCXX_3.4.27
GLIBCXX_3.4.28
GLIBCXX_3.4.29
GLIBCXX_3.4.30
GLIBCXX_DEBUG_MESSAGE_LENGTH

ros2 需要的是GLIBCXX_3.4.30,有就可以。

再看看conda下的版本:

$ $ strings ~/anaconda3/envs/ros2/lib/libstdc++.so.6 | grep GLIBCXX
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBCXX_3.4.21
GLIBCXX_3.4.22
GLIBCXX_3.4.23
GLIBCXX_3.4.24
GLIBCXX_3.4.25
GLIBCXX_3.4.26
GLIBCXX_3.4.27
GLIBCXX_3.4.28
GLIBCXX_3.4.29
GLIBCXX_DEBUG_MESSAGE_LENGTH

版本低,所以要处理一下。思路:把系统目录下的库copy到conda的ros2环境下,然后把软链接更新。

$ cp /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 ~/anaconda3/envs/ros2/lib/

$ cd ~/anaconda3/envs/ros2/lib/

$ rm libstdc++.so

$ rm libstdc++.so.6

$ ln -s libstdc++.so.6.0.30 libstdc++.so

$ ln -s libstdc++.so.6.0.30 libstdc++.so.6

作完这个工作就应该没有问题了。

4)下载测试项目

此处下载的是GitHub - legubiao/quadruped_ros2_control: ROS2-Control implementations for Quadruped robots

作者legubiao整理并开发了用于gazebo的开源代码,用来做例子。

$ git clone https://github.com/legubiao/quadruped_ros2_control.git

5)编译项目的过程

$ cd path/to/quadruped_ros2_control/../

$ sudo rosdep init

$ rosdep update

$ rosdep install --from-paths quadruped_ros2_control --ignore-src -r -y

$ sudo apt-get install ros-humble-imu-sensor-broadcaster

$ sudo apt install ros-humble-joint-state-broadcaster

$ cd path/to/quadruped_ros2_control

$ colcon build --packages-up-to unitree_guide_controller go2_description keyboard_input 

$ colcon build --packages-up-to leg_pd_controller

启动仿真界面:

$ source path/to/quadruped_ros2_control/install/setup.bash

$ ros2 launch unitree_guide_controller gazebo_classic.launch.py

启动控制界面:

$ source path/to/quadruped_ros2_control/install/setup.bash

$ ros2 run keyboard_input keyboard_input

 


欢迎转载,本文地址: https://blog.prodrich.com/detail/89/

带着使命来到世上的你,给他人提供价值,才有价值