前提: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
带着使命来到世上的你,给他人提供价值,才有价值