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

    拓展3:FishBot 树莓派配置建图导航

    已定时 已固定 已锁定 已移动
    FishBot二驱机器人
    fishbot 建图导航
    12
    49
    5.6k
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 小鱼小
      小鱼 技术大佬 @515261725
      最后由 编辑

      @515261725 sudo apt install ros-$ROS_DISTRO-joint-state-publisher

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

      5152617255 2 条回复 最后回复 回复 引用 0
      • 5152617255
        空无之时 @小鱼
        最后由 编辑

        此回复已被删除!
        1 条回复 最后回复 回复 引用 0
        • 5152617255
          空无之时 @小鱼
          最后由 编辑

          @小鱼 这个命令还是这个报错,这个问题是pip版本太高了,回退就行了

          1 条回复 最后回复 回复 引用 0
          • 25241673162
            今朝
            最后由 编辑

            鱼哥,我雷达和主控板都是通过串口与树莓派进行通信的,前几步都没问题,但是我运行ros2 launch slam_toolbox online_async_launch.py就一直出现这个问题,换成cartograph建图也是报错,能出现map,但是不是实时更新c9152abb-f68b-436e-a328-bd8e834b0f22-image.png

            25241673162 1 条回复 最后回复 回复 引用 0
            • 25241673162
              今朝 @2524167316
              最后由 编辑

              @2524167316 862eb1be-1efa-44b9-a6b1-8f723c04de59-image.png 出现的map是这样的,不能实时更新,不知道哪里出来问题

              25241673162 小鱼小 2 条回复 最后回复 回复 引用 0
              • 25241673162
                今朝 @2524167316
                最后由 编辑

                @2524167316 7aea7dda-b152-49e9-bf50-3d691a661efc-image.png 雷达能正常运行,但是死活就是不能建图

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

                  @2524167316 这个看起来是正常的,不出图检查下各个话题是否正常。另外告知下固件版本类型。

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

                  25241673162 1 条回复 最后回复 回复 引用 0
                  • 25241673162
                    今朝 @小鱼
                    最后由 编辑

                    @小鱼 [async_slam_toolbox_node-1] [INFO] [1714996759.771290017] [slam_toolbox]: Message Filter dropping message: frame 'laser_frame' at time 1714996759.626 for reason 'discarding message because the queue is full'
                    我现在是用树莓派当上位机通过串口与主控板和雷达驱动板通信,树莓派用的是4b的,没有固件库,因为我没用wifi通信,一直报上面的错误

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

                      @2524167316 检查一下tf_tree

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

                      25241673162 1 条回复 最后回复 回复 引用 0
                      • 25241673162
                        今朝 @小鱼
                        最后由 编辑

                        @小鱼 b239133d-60c1-4cca-a686-f6f9b5283248-image.png 之前发现/odom有话题,但是没有数据传过来,现在/odom有数据了,但是还是建不了图

                        1 条回复 最后回复 回复 引用 0
                        • 小鱼小 小鱼 在 中 引用了 这个主题
                        • 2
                          2216200358
                          最后由 编辑

                          @小鱼 在 拓展3:FishBot 树莓派配置建图导航 中说:

                          ros2 launch fishbot_bringup fishbot_bringup.launch.py

                          运行之后,出现以下错误:
                          d600b8d0-c9fa-4c38-9d34-e49d4bba5e63-image.png
                          打开rviz之后也没有小车模型,也没有RobotModel话题,请问怎么解决。

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

                            @2216200358 提供下完整日志

                            https://fishros.org.cn/forum/topic/151/提问前必看-不符合要求的问题拒绝回答

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

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

                              @小鱼 雷达和四驱板都已经成功运行,运行ros2 launch fishbot_bringup fishbot_bringup.launch.py后,输出如下:
                              754a180f-2b26-436d-9737-c6ff13a14fff-image.png
                              在进行建图操作时,输入ros2 launch slam_toolbox online_async_launch.py,输出如下:
                              ae49bde4-deeb-44fb-9844-ec57d896027a-image.png
                              在rviz中没有RobotModel话题:
                              0553f4c1-a2a5-49db-98d5-0d75bde0f31c-image.png
                              2966b556-e4ed-4318-9093-8186f72af2e6-image.png
                              我是想要加载小车的模型在进行建图。

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

                                @2216200358 在 拓展3:FishBot 树莓派配置建图导航 中说:

                                fishbot_bringup.launch.py

                                看一下robot-state-publisher节点

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

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

                                  @小鱼 c9443a17-d956-498d-b974-f5f75925a3fa-image.png
                                  这样的
                                  这是节点:
                                  b7e8a356-e960-4761-a108-3da3b82b323b-image.png

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

                                    @小鱼 你把这个文件 ishbot_bringup.launch.py 的内容粘贴出来,另外不要截图:

                                    @小鱼 在 提问前必看!不符合要求的问题拒绝回答!! 中说:

                                    1. 不要截图,要复制粘贴,一定要代码块包裹
                                      不要截图的原因是,代码方便回答者去复制帮你搜索,而且无论是在手机上还是电脑上都更容易看。

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

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

                                      @小鱼

                                      import os
                                      from launch import LaunchDescription
                                      from launch.substitutions import LaunchConfiguration
                                      from launch_ros.actions import Node
                                      from launch_ros.substitutions import FindPackageShare
                                      
                                      
                                      def generate_launch_description():
                                          package_name = 'fishbot_description'
                                          urdf_name = "fishbot_v1.0.0.urdf"
                                      
                                          ld = LaunchDescription()
                                          pkg_share = FindPackageShare(package=package_name).find(package_name)
                                          urdf_model_path = os.path.join(pkg_share, f'urdf/{urdf_name}')
                                      
                                          robot_state_publisher_node = Node(
                                              package='robot_state_publisher',
                                              executable='robot_state_publisher',
                                              arguments=[urdf_model_path]
                                          )
                                      
                                          joint_state_publisher_node = Node(
                                              package='joint_state_publisher',
                                              executable='joint_state_publisher',
                                              name='joint_state_publisher',
                                              arguments=[urdf_model_path],
                                              output='screen',
                                      
                                          )
                                      
                                          fishbot_bringup_node = Node(
                                              package='fishbot_bringup',
                                              executable='fishbot_bringup',
                                              name='fishbot_bringup',
                                              output='screen',
                                          )
                                      
                                          ld.add_action(joint_state_publisher_node)
                                          ld.add_action(robot_state_publisher_node)
                                          ld.add_action(fishbot_bringup_node)
                                      
                                          return ld
                                      
                                      小鱼小 1 条回复 最后回复 回复 引用 0
                                      • 小鱼小
                                        小鱼 技术大佬 @2216200358
                                        最后由 编辑

                                        @2216200358 在 拓展3:FishBot 树莓派配置建图导航 中说:

                                        robot_state_publisher_node = Node(
                                        package='robot_state_publisher',
                                        executable='robot_state_publisher',
                                        arguments=[urdf_model_path]
                                        )

                                        这个写的感觉不太对,应该加个参数好像,你看看书前面的代码,或者最近B站的课程,也可以把TF贴出来看看

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

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

                                          @小鱼 ```
                                          #include <rclcpp/rclcpp.hpp>
                                          #include <rclcpp/rclcpp.hpp>
                                          #include <nav_msgs/msg/odometry.hpp>
                                          #include <tf2/utils.h>
                                          #include <tf2_ros/transform_broadcaster.h>

                                          class TopicSubscribe01 : public rclcpp::Node
                                          {
                                          public:
                                          TopicSubscribe01(std::string name) : Node(name)
                                          {
                                          RCLCPP_INFO(this->get_logger(), "大家好,我是%s.", name.c_str());
                                          odom_subscribe_ = this->create_subscription<nav_msgs::msg::Odometry>("odom", rclcpp::SensorDataQoS(), std::bind(&TopicSubscribe01::odom_callback, this, std::placeholders::1));
                                          tf_broadcaster
                                          = std::make_unique<tf2_ros::TransformBroadcaster>(this);
                                          }

                                          private:
                                          // 声明一个订阅者
                                          rclcpp::Subscription<nav_msgs::msg::Odometry>::SharedPtr odom_subscribe_;
                                          std::unique_ptr<tf2_ros::TransformBroadcaster> tf_broadcaster_;
                                          nav_msgs::msg::Odometry odom_msg_;

                                          void odom_callback(const nav_msgs::msg::Odometry::SharedPtr msg)
                                          {
                                          (void)msg;
                                          RCLCPP_INFO(this->get_logger(), "recv odom->base_footprint tf :(%f,%f)", msg->pose.pose.position.x, msg->pose.pose.position.y);
                                          odom_msg_.pose.pose.position.x = msg->pose.pose.position.x;
                                          odom_msg_.pose.pose.position.y = msg->pose.pose.position.y;
                                          odom_msg_.pose.pose.position.z = msg->pose.pose.position.z;

                                          odom_msg_.pose.pose.orientation.x = msg->pose.pose.orientation.x;
                                          odom_msg_.pose.pose.orientation.y = msg->pose.pose.orientation.y;
                                          odom_msg_.pose.pose.orientation.z = msg->pose.pose.orientation.z;
                                          odom_msg_.pose.pose.orientation.w = msg->pose.pose.orientation.w;
                                          

                                          };

                                          public:
                                          void publish_tf()
                                          {
                                          geometry_msgs::msg::TransformStamped transform;
                                          double seconds = this->now().seconds();
                                          transform.header.stamp = rclcpp::Time(static_cast<uint64_t>(seconds * 1e9));
                                          transform.header.frame_id = "odom";
                                          transform.child_frame_id = "base_footprint";

                                          transform.transform.translation.x = odom_msg_.pose.pose.position.x;
                                          transform.transform.translation.y = odom_msg_.pose.pose.position.y;
                                          transform.transform.translation.z = odom_msg_.pose.pose.position.z;
                                          transform.transform.rotation.x = odom_msg_.pose.pose.orientation.x;
                                          transform.transform.rotation.y = odom_msg_.pose.pose.orientation.y;
                                          transform.transform.rotation.z = odom_msg_.pose.pose.orientation.z;
                                          transform.transform.rotation.w = odom_msg_.pose.pose.orientation.w;
                                          tf_broadcaster_->sendTransform(transform);
                                          

                                          }
                                          };

                                          int main(int argc, char argv)
                                          {
                                          rclcpp::init(argc, argv);
                                          /产生一个的节点/
                                          auto node = std::make_shared<TopicSubscribe01>("fishbot_bringup");
                                          /
                                          运行节点,并检测退出信号
                                          /
                                          rclcpp::WallRate loop_rate(1000.0);
                                          while (rclcpp::ok())
                                          {
                                          rclcpp::spin_some(node);
                                          node->publish_tf();
                                          loop_rate.sleep();
                                          }

                                          rclcpp::shutdown();
                                          return 0;
                                          }

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

                                            @小鱼 tf指的是 rqt-tf-tree 图,可以看看前面基础课程

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

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