如何编译包含unitree_ros2功能包的ROS2工作空间?
如何编译包含unitree_ros2功能包的ROS2工作空间?
嘿,我之前也踩过这个坑!按照官方教程编译Unitree_ros2的时候,确实只会生成并编译少数几个子包,这就导致咱们自己搭建ROS2工作空间、想要用到Unitree_ros2里其他功能的时候,总会碰到各种依赖或者找不到包的问题。
其实这个情况的原因很简单:Unitree_ros2并不是作为单一的ROS2功能包来管理的,它是由多个独立的子功能包组合而成的,官方默认的编译配置只开启了部分常用子包的编译开关,所以才会出现只编译少数子包的情况。
下面是我亲测有效的解决步骤,帮你编译完整的Unitree_ros2功能包:
1. 确保获取到完整的Unitree_ros2源码
把完整的Unitree_ros2源码仓库克隆到你的ROS2工作空间的src目录下,别只拉取部分子包哦。
2. 修改编译配置,开启所有子包的编译
进入Unitree_ros2的根目录,找到编译配置文件(通常是根目录下的CMakeLists.txt或者colcon.meta,不同版本可能略有差异):
- 如果你看到类似
set(BUILD_SUBDIRECTORIES "unitree_legged_msgs;unitree_legged_real")这样的配置,说明这里指定了仅编译列出的子包,你可以把需要的其他子包名称加进去,或者直接把这个值设为空字符串"",这样就会编译所有子包。 - 有些版本里可能是用编译选项来控制的,比如
option(BUILD_XXX "Build XXX package" OFF),把你需要的子包对应的OFF改成ON就行。
3. 编译整个ROS2工作空间
回到你的ROS2工作空间根目录,用colcon命令进行编译,建议加上--symlink-install参数,方便后续修改代码后不用重新编译:
cd ~/your_ros2_workspace colcon build --symlink-install
4. 验证编译结果
编译完成后,先source一下工作空间的setup文件:
source install/setup.bash
然后用ros2 pkg list命令查看已安装的ROS2包,如果你能看到所有需要的Unitree_ros2子包,就说明编译成功啦!
一些额外的小提示
- 不同版本的Unitree_ros2编译配置可能不一样,如果找不到上述配置,可以仔细看看仓库根目录的README文件,里面一般会有关于编译更多子包的说明。
- 如果编译时出现依赖缺失的报错,根据错误提示安装对应的ROS2依赖包即可,比如Ubuntu系统下可以用
sudo apt install ros-<你的ROS2版本>-<依赖包名称>来安装。
备注:内容来源于stack exchange,提问作者haobo du




