紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
小鱼 ROS 2 新书上线!点击链接查看, 新书配套视频点击链接查看。
提问前必看的发帖注意事项—— 提问前必看!不符合要求的问题拒绝回答!!
社区使用指南—如何添加标签修改密码
小鱼 ROS 2 新书上线!点击链接查看, 新书配套视频点击链接查看。
提问前必看的发帖注意事项—— 提问前必看!不符合要求的问题拒绝回答!!
社区使用指南—如何添加标签修改密码
2.3 source install/setup.bash无法修改环境变量
-
运行了source install/setup.bash指令,未按照应有的程序执行
cpp文件code_text #include "rclcpp/rclcpp.hpp" #include "geometry_msgs/msg/twist.hpp" #include <chrono> // 引入时间相关头文件 // 使用时间单位的字面量,可以在代码中使用 s 和 ms 表示时间 using namespace std::chrono_literals; class TurtleCircle : public rclcpp::Node { private: rclcpp::TimerBase::SharedPtr timer_; // 定时器智能指针 rclcpp::Publisher<geometry_msgs::msg::Twist>::SharedPtr publisher_; // 发布者智能指针 public: explicit TurtleCircle(const std::string& node_name) : Node(node_name) { // 调用继承而来的父类函数创建订阅者 publisher_ = this->create_publisher<geometry_msgs::msg::Twist>("/turtle1/cmd_vel", 10); // 调用继承而来的父类函数创建定时器 timer_ = this->create_wall_timer(1000ms, std::bind(&TurtleCircle::timer_callback, this)); } private: void timer_callback() { auto msg = geometry_msgs::msg::Twist(); msg.linear.x = 1.0; msg.angular.z = 0.5; publisher_->publish(msg); } }; int main(int argc, char *argv[]) { rclcpp::init(argc, argv); auto node = std::make_shared<TurtleCircle>("turtle_square"); rclcpp::spin(node); rclcpp::shutdown(); return 0; }
错误提示
code_text ros2@ubuntu:~/chapt3$ printenv | grep AME LC_NAME=zh_CN.UTF-8 LOGNAME=ros2 USERNAME=ros2 AMENT_PREFIX_PATH=/opt/ros/foxy ros2@ubuntu:~/chapt3$ source install/setup.bash ros2@ubuntu:~/chapt3$ printenv | grep AME LC_NAME=zh_CN.UTF-8 LOGNAME=ros2 USERNAME=ros2 AMENT_PREFIX_PATH=/opt/ros/foxy ros2@ubuntu:~/chapt3$
-
从你提供的信息来看,你在运行
source install/setup.bash
后,环境变量AMENT_PREFIX_PATH
并没有发生变化,这通常意味着setup.bash
脚本没有正确执行或者其中的环境变量设置没有生效。这里有几个可能的原因和解决方法:-
检查
setup.bash
脚本:- 确保
install/setup.bash
脚本中确实有设置AMENT_PREFIX_PATH
或其他相关环境变量的代码。你可以使用cat install/setup.bash
查看脚本内容。 - 确认脚本中没有语法错误,特别是路径和变量赋值部分。
- 确保
-
脚本执行权限:
- 确保
setup.bash
脚本具有执行权限。可以使用chmod +x install/setup.bash
命令来添加执行权限。
- 确保
-
Shell 类型:
- 如果你使用的是非 Bash shell(如 zsh 或 fish),可能
setup.bash
脚本中的某些 Bash 特性不兼容。可以尝试在 Bash 中运行该脚本,或者查找是否有为其他 shell 准备的setup.zsh
或setup.fish
等脚本。
- 如果你使用的是非 Bash shell(如 zsh 或 fish),可能
-
环境变量覆盖:
- 有时候,其他脚本或配置可能会覆盖
AMENT_PREFIX_PATH
。你可以检查是否有其他source
命令或环境变量设置在你的 shell 配置文件中(如.bashrc
或.bash_profile
)。
- 有时候,其他脚本或配置可能会覆盖
-
临时变量:
- 如果
setup.bash
中使用了export
命令来设置环境变量,它们应该是全局或会话级别的。但如果你是在一个子 shell 中运行source
命令,这些变量可能只在该子 shell 中有效。尝试直接在当前的 shell 环境中运行source
命令。
- 如果
-
重启终端:
- 有时候,简单地重启你的终端窗口可以解决问题,因为这样可以确保所有的配置文件都被重新加载。
-
检查 ROS 2 安装:
- 确保你的 ROS 2 安装是完整的,并且
install/setup.bash
是从正确的工作空间中生成的。如果你从一个已经存在的 ROS 2 安装目录(如/opt/ros/foxy
)中复制或错误地使用了setup.bash
,它可能不会按预期工作。
- 确保你的 ROS 2 安装是完整的,并且
如果以上方法都不能解决问题,你可能需要更详细地检查你的 ROS 2 工作空间的构建过程,或者考虑重新构建工作空间。
以上为生成回答,仅供参考~
-
-
@3220898108 确认是否构建成功