鱼香ROS社区
    • 版块
    • 最新
    • 未解决
    • 已解决
    • 群组
    • 注册
    • 登录
    紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
    提问前必看的发帖注意事项: 社区问答规则(小鱼个人)更新 | 高质量帖子发布指南

    2.3 source install/setup.bash无法修改环境变量

    已定时 已固定 已锁定 已移动
    ROS2机器人开发:从入门到实践
    报错求解, source install
    3
    3
    268
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 3
      3220898108
      最后由 编辑

      运行了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$ 
      
      小鱼小 1 条回复 最后回复 回复 引用 0
      • 小伊小
        机器人小伊
        最后由 编辑

        从你提供的信息来看,你在运行 source install/setup.bash 后,环境变量 AMENT_PREFIX_PATH 并没有发生变化,这通常意味着 setup.bash 脚本没有正确执行或者其中的环境变量设置没有生效。这里有几个可能的原因和解决方法:

        1. 检查 setup.bash 脚本:

          • 确保 install/setup.bash 脚本中确实有设置 AMENT_PREFIX_PATH 或其他相关环境变量的代码。你可以使用 cat install/setup.bash 查看脚本内容。
          • 确认脚本中没有语法错误,特别是路径和变量赋值部分。
        2. 脚本执行权限:

          • 确保 setup.bash 脚本具有执行权限。可以使用 chmod +x install/setup.bash 命令来添加执行权限。
        3. Shell 类型:

          • 如果你使用的是非 Bash shell(如 zsh 或 fish),可能 setup.bash 脚本中的某些 Bash 特性不兼容。可以尝试在 Bash 中运行该脚本,或者查找是否有为其他 shell 准备的 setup.zsh 或 setup.fish 等脚本。
        4. 环境变量覆盖:

          • 有时候,其他脚本或配置可能会覆盖 AMENT_PREFIX_PATH。你可以检查是否有其他 source 命令或环境变量设置在你的 shell 配置文件中(如 .bashrc 或 .bash_profile)。
        5. 临时变量:

          • 如果 setup.bash 中使用了 export 命令来设置环境变量,它们应该是全局或会话级别的。但如果你是在一个子 shell 中运行 source 命令,这些变量可能只在该子 shell 中有效。尝试直接在当前的 shell 环境中运行 source 命令。
        6. 重启终端:

          • 有时候,简单地重启你的终端窗口可以解决问题,因为这样可以确保所有的配置文件都被重新加载。
        7. 检查 ROS 2 安装:

          • 确保你的 ROS 2 安装是完整的,并且 install/setup.bash 是从正确的工作空间中生成的。如果你从一个已经存在的 ROS 2 安装目录(如 /opt/ros/foxy)中复制或错误地使用了 setup.bash,它可能不会按预期工作。

        如果以上方法都不能解决问题,你可能需要更详细地检查你的 ROS 2 工作空间的构建过程,或者考虑重新构建工作空间。


        以上为生成回答,仅供参考~

        我是小伊,已接入ChatGpt,所有回复,仅供参考~

        1 条回复 最后回复 回复 引用 0
        • 小鱼小
          小鱼 技术大佬 @3220898108
          最后由 编辑

          @3220898108 确认是否构建成功

          新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

          1 条回复 最后回复 回复 引用 0
          • 第一个帖子
            最后一个帖子
          皖ICP备16016415号-7
          Powered by NodeBB | 鱼香ROS