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

    使用imu_utils标定,拥有了db3文件了,使用ros2 launch启动编译好的imu_an节点报错,启动不了

    已定时 已固定 已锁定 已移动 未解决
    综合问题
    imuutils,ros2 ros2 humble
    3
    24
    890
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 小鱼小
      小鱼 技术大佬 @yuan
      最后由 编辑

      @yuan 在 使用imu_utils标定,拥有了db3文件了,使用ros2 launch启动编译好的imu_an节点报错,启动不了 中说:

      [imu_an-1] [INFO] [1722931605.611123480] [imu_an]: Waiting for IMU data...
      [imu_an-1] [ERROR] [1722931605.611210670] [imu_an]: Failed to load imu_topic
      [imu_an-1] [ERROR] [1722931605.612426206] [imu_an]: Failed to load imu_name
      [imu_an-1] [ERROR] [1722931605.612452157] [imu_an]: Failed to load data_save_path
      [imu_an-1] [ERROR] [1722931605.612457508] [imu_an]: Failed to load max_time_min
      [imu_an-1] [ERROR] [1722931605.612460949] [imu_an]: Failed to load max_cluster
      [imu_an-1] terminate called after throwing an instance of 'rclcpp::exceptions::RCLError'
      [imu_an-1] what(): could not create subscription: rcl node's context is invalid, at ./src/rcl/node.c:428

      看起来像是参数没有传递到代码里,代码是怎么写的,贴一下,另外检查下launch写的对不对

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

      Y 2 条回复 最后回复 回复 引用 0
      • Y
        yuan @小鱼
        最后由 编辑

        @小鱼
        代码是这样的

        ain( int argc, char** argv )
        {
            rclcpp::init( argc, argv);
            //rclcpp::Node n( "~" );
            auto node = std::make_shared<rclcpp::Node>("n");
            //rclcpp::Logger( ROSCONSOLE_DEFAULT_NAME, ros::console::levels::Debug );
            RCLCPP_INFO(node->get_logger(), "Waiting for IMU data...");
            std::string IMU_TOPIC;
            std::string IMU_NAME;
            int max_cluster;
        
            IMU_TOPIC      = ros_utils::readParam<std::string>(*node, "imu_topic");
            IMU_NAME       = ros_utils::readParam<std::string>(*node, "imu_name");
            data_save_path = ros_utils::readParam<std::string>(*node, "data_save_path");
            max_time_min   = ros_utils::readParam<int>(*node, "max_time_min");
            max_cluster    = ros_utils::readParam<int>(*node, "max_cluster");
        
            // rclcpp::Subscription sub_imu = n->create_subscription( IMU_TOPIC, //
            //                                        20000000,
            //                                        imu_callback,
            //                                        ros::TransportHints( ).tcpNoDelay( ) );
            //    rclcpp::Publisher pub = n.advertise< geometry_msgs::Vector3Stamped >( ALLAN_TOPIC,
            //    2000 );
            auto sub_imu = node->create_subscription<sensor_msgs::msg::Imu>(
            IMU_TOPIC, 10, imu_callback);
        
        
            auto gyr_x = std::make_shared<imu::AllanGyr>("gyr x", max_cluster);
            auto gyr_y = std::make_shared<imu::AllanGyr>("gyr y", max_cluster);
            auto gyr_z = std::make_shared<imu::AllanGyr>("gyr z", max_cluster);
            auto acc_x = std::make_shared<imu::AllanAcc>("acc x", max_cluster);
            auto acc_y = std::make_shared<imu::AllanAcc>("acc y", max_cluster);
            auto acc_z = std::make_shared<imu::AllanAcc>("acc z", max_cluster);
            std::cout << "wait for imu data." << std::endl;
            rclcpp::WallRate loop( 100 );
        
            //    ros::spin( );
            while ( !end )
            {
                loop.sleep( );
                rclcpp::spin_some(node);
                //rclcpp::spin(n);
        
            }
        
            ///
            gyr_x->calc( );
            std::vector< double > gyro_v_x  = gyr_x->getVariance( );
            std::vector< double > gyro_d_x  = gyr_x->getDeviation( );
            std::vector< double > gyro_ts_x = gyr_x->getTimes( );
        
            gyr_y->calc( );
        

        然后就是我运行ros2 run imu_utils imu_an也报错,看起来像是没有imu_an这个节点,我是看了你那个教程也是多了一个a.out文件

        小鱼小 2 条回复 最后回复 回复 引用 0
        • Y
          yuan @小鱼
          最后由 编辑

          @小鱼
          报错是这样的

          ysh@ysh:~/ros2_ws$ ros2 run imu_utils imu_an 
          [INFO] [1722935421.840191342] [n]: Waiting for IMU data...
          [ERROR] [1722935421.840539049] [n]: Failed to load imu_topic
          [ERROR] [1722935421.841680445] [n]: Failed to load imu_name
          [ERROR] [1722935421.841792184] [n]: Failed to load data_save_path
          [ERROR] [1722935421.841890937] [n]: Failed to load max_time_min
          [ERROR] [1722935421.841986597] [n]: Failed to load max_cluster
          terminate called after throwing an instance of 'rclcpp::exceptions::RCLError'
            what():  could not create subscription: rcl node's context is invalid, at ./src/rcl/node.c:428
          
          
          小鱼小 2 条回复 最后回复 回复 引用 0
          • 小鱼小
            小鱼 技术大佬 @yuan
            最后由 编辑

            @yuan 在 使用imu_utils标定,拥有了db3文件了,使用ros2 launch启动编译好的imu_an节点报错,启动不了 中说:

            IMU_TOPIC = ros_utils::readParamstd::string(*node, "imu_topic");
            IMU_NAME = ros_utils::readParamstd::string(*node, "imu_name");
            data_save_path = ros_utils::readParamstd::string(*node, "data_save_path");
            max_time_min = ros_utils::readParam<int>(*node, "max_time_min");
            max_cluster = ros_utils::readParam<int>(*node, "max_cluster");

            应该是这里报错,都没获取到参数

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

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

              @yuan 在 使用imu_utils标定,拥有了db3文件了,使用ros2 launch启动编译好的imu_an节点报错,启动不了 中说:

              terminate called after throwing an instance of 'rclcpp::exceptions::RCLError'
              what(): could not create subscription: rcl node's context is invalid, at ./src/rcl/node.c:428

              不过看这个错误是没有 rclcpp_init()

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

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

                @yuan 用gdb,debug下,看看挂在了哪一行

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

                Y 3 条回复 最后回复 回复 引用 0
                • Y
                  yuan @小鱼
                  最后由 编辑

                  此回复已被删除!
                  1 条回复 最后回复 回复 引用 0
                  • Y
                    yuan @小鱼
                    最后由 编辑

                    此回复已被删除!
                    1 条回复 最后回复 回复 引用 0
                    • Y
                      yuan @小鱼
                      最后由 编辑

                      @小鱼 ```
                      Starting program: /home/ysh/ros2_ws/install/imu_utils/lib/imu_utils/imu_an --ros-args --params-file /home/ysh/ros2_ws/src/param.yaml
                      [Thread debugging using libthread_db enabled]
                      Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
                      [New Thread 0x7ffff4dff640 (LWP 126145)]
                      [New Thread 0x7ffff45fe640 (LWP 126146)]
                      [New Thread 0x7ffff3dfd640 (LWP 126147)]
                      [New Thread 0x7ffff35fc640 (LWP 126148)]
                      [New Thread 0x7ffff2dfb640 (LWP 126149)]
                      [New Thread 0x7ffff25fa640 (LWP 126150)]
                      [New Thread 0x7ffff1df9640 (LWP 126151)]
                      [New Thread 0x7ffff15f8640 (LWP 126152)]
                      [New Thread 0x7ffff0df7640 (LWP 126153)]
                      [INFO] [1722937129.258907543] [n]: Waiting for IMU data...
                      [ERROR] [1722937129.259067701] [n]: Failed to load imu_topic
                      [ERROR] [1722937129.259904065] [n]: Failed to load imu_name
                      [ERROR] [1722937129.259961287] [n]: Failed to load data_save_path
                      [ERROR] [1722937129.260008229] [n]: Failed to load max_time_min
                      [ERROR] [1722937129.260054711] [n]: Failed to load max_cluster
                      terminate called after throwing an instance of 'rclcpp::exceptions::RCLError'
                      what(): could not create subscription: rcl node's context is invalid, at ./src/rcl/node.c:428
                      [Thread 0x7ffff4dff640 (LWP 126145) exited]

                      Thread 1 "imu_an" received signal SIGABRT, Aborted.
                      __pthread_kill_implementation (no_tid=0, signo=6, threadid=140737322031168) at ./nptl/pthread_kill.c:44
                      44 ./nptl/pthread_kill.c: 没有那个文件或目录.

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

                        @yuan 在 使用imu_utils标定,拥有了db3文件了,使用ros2 launch启动编译好的imu_an节点报错,启动不了 中说:

                        ros_utils::readParamstd::string

                        这个函数怎么写的

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

                        Y 2 条回复 最后回复 回复 引用 0
                        • Y
                          yuan @小鱼
                          最后由 编辑

                          此回复已被删除!
                          1 条回复 最后回复 回复 引用 0
                          • Y
                            yuan @小鱼
                            最后由 编辑

                            @小鱼

                            template< typename T >
                            T
                            readParam( rclcpp::Node& n, std::string name )
                            {
                                T ans;
                                if ( n.get_parameter( name, ans ) )
                                {
                                    RCLCPP_INFO_STREAM(n.get_logger(), "Loaded " << name << ": " << ans );
                                }
                                else
                                {
                                    RCLCPP_ERROR_STREAM(n.get_logger(), "Failed to load " << name );
                                    rclcpp::shutdown();
                                }
                                return ans;
                            }
                            
                            
                            小鱼小 2 条回复 最后回复 回复 引用 0
                            • 小鱼小
                              小鱼 技术大佬 @yuan
                              最后由 编辑

                              @yuan 在 使用imu_utils标定,拥有了db3文件了,使用ros2 launch启动编译好的imu_an节点报错,启动不了 中说:

                              rclcpp::shutdown();

                              这里这里,你给shutdown() 干啥!!!!!

                              删掉!!!!!

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

                              Y 2 条回复 最后回复 回复 引用 0
                              • Y
                                yuan @小鱼
                                最后由 编辑

                                @小鱼 没有呀,现在是这个样子的

                                int
                                main( int argc, char** argv )
                                {
                                    rclcpp::init( argc, argv);
                                    //rclcpp::Node n( "~" );
                                    auto node = std::make_shared<rclcpp::Node>("n");
                                    //rclcpp::Logger( ROSCONSOLE_DEFAULT_NAME, ros::console::levels::Debug );
                                    RCLCPP_INFO(node->get_logger(), "Waiting for IMU data...");
                                    std::string IMU_TOPIC;
                                    std::string IMU_NAME;
                                    int max_cluster;
                                
                                
                                    IMU_TOPIC      = ros_utils::readParam<std::string>(*node, "imu_topic");
                                    IMU_NAME       = ros_utils::readParam<std::string>(*node, "imu_name");
                                    data_save_path = ros_utils::readParam<std::string>(*node, "data_save_path");
                                    max_time_min   = ros_utils::readParam<int>(*node, "max_time_min");
                                    max_cluster    = ros_utils::readParam<int>(*node, "max_cluster");
                                
                                    // rclcpp::Subscription sub_imu = n->create_subscription( IMU_TOPIC, //
                                    //                                        20000000,
                                    //                                        imu_callback,
                                    //                                        ros::TransportHints( ).tcpNoDelay( ) );
                                    //    rclcpp::Publisher pub = n.advertise< geometry_msgs::Vector3Stamped >( ALLAN_TOPIC,
                                    //    2000 );
                                    auto sub_imu = node->create_subscription<sensor_msgs::msg::Imu>(
                                    IMU_TOPIC, 10, imu_callback);
                                
                                
                                    auto gyr_x = std::make_shared<imu::AllanGyr>("gyr x", max_cluster);
                                    auto gyr_y = std::make_shared<imu::AllanGyr>("gyr y", max_cluster);
                                    auto gyr_z = std::make_shared<imu::AllanGyr>("gyr z", max_cluster);
                                    auto acc_x = std::make_shared<imu::AllanAcc>("acc x", max_cluster);
                                    auto acc_y = std::make_shared<imu::AllanAcc>("acc y", max_cluster);
                                    auto acc_z = std::make_shared<imu::AllanAcc>("acc z", max_cluster);
                                    std::cout << "wait for imu data." << std::endl;
                                    rclcpp::WallRate loop( 100 );
                                
                                    //    ros::spin( );
                                    while ( !end )
                                    {
                                        loop.sleep( );
                                        rclcpp::spin_some(node);
                                        //rclcpp::spin(n);
                                
                                    }
                                
                                Y 1 条回复 最后回复 回复 引用 0
                                • Y
                                  yuan @yuan
                                  最后由 编辑

                                  @yuan
                                  你的意思是read文件里面吗

                                  1 条回复 最后回复 回复 引用 0
                                  • Y
                                    yuan @小鱼
                                    最后由 编辑

                                    @小鱼
                                    删掉重新编译还是一样的鱼哥

                                    ysh@ysh:~/ros2_ws$ ros2 run imu_utils imu_an
                                    [INFO] [1723018093.544028406] [n]: Waiting for IMU data...
                                    [ERROR] [1723018093.544215273] [n]: Failed to load imu_topic
                                    [ERROR] [1723018093.544802558] [n]: Failed to load imu_name
                                    [ERROR] [1723018093.544864169] [n]: Failed to load data_save_path
                                    [ERROR] [1723018093.544946202] [n]: Failed to load max_time_min
                                    [ERROR] [1723018093.544995910] [n]: Failed to load max_cluster
                                    terminate called after throwing an instance of 'rclcpp::exceptions::RCLError'
                                      what():  could not create subscription: rcl node's context is invalid, at ./src/rcl/node.c:428
                                    [ros2run]: Aborted
                                    
                                    
                                    1 条回复 最后回复 回复 引用 0
                                    • 小鱼小
                                      小鱼 技术大佬 @yuan
                                      最后由 编辑

                                      @yuan 在 使用imu_utils标定,拥有了db3文件了,使用ros2 launch启动编译好的imu_an节点报错,启动不了 中说:

                                        RCLCPP_ERROR_STREAM(n.get_logger(), "Failed to load " << name );
                                          rclcpp::shutdown();
                                      

                                      这里,兄弟,你获取失败为什么要shutdown,就算不执行了,你也要直接抛出异常推出

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

                                      Y 1 条回复 最后回复 回复 引用 0
                                      • Y
                                        yuan @小鱼
                                        最后由 编辑

                                        @小鱼 他源码是这样的,我把它删掉还是报错了呀

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

                                          @yuan 删掉重新构建,你现在没办法给我证明你现在运行的是之前的程序,还是你删除之后的

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

                                          Y 1 条回复 最后回复 回复 引用 0
                                          • Y
                                            yuan @小鱼
                                            最后由 编辑

                                            @小鱼
                                            您能远程帮我看下吗,孩子都要重装系统了,磕头感谢😣

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