川崎duAro机器人 ROS_moveit demo

2023-05-16

说明

demo.cpp

/* Author: hiics */

#include <ros/ros.h>
#include <iostream>
// MoveIt!
#include <moveit/move_group_interface/move_group_interface.h>
#include <moveit/planning_scene_interface/planning_scene_interface.h>
// moveit_msgs
#include <moveit/robot_state/conversions.h>
#include <moveit_msgs/DisplayRobotState.h>
#include <moveit_msgs/DisplayTrajectory.h>
#include <moveit_msgs/AttachedCollisionObject.h>
#include <moveit_msgs/CollisionObject.h>
#include <moveit_msgs/GetPlannerParams.h>
// moveit_visual_tools
#include <moveit_visual_tools/moveit_visual_tools.h>
// tf2
#include <tf2_geometry_msgs/tf2_geometry_msgs.h>
#include <tf2_ros/transform_listener.h>
#include <geometry_msgs/TransformStamped.h>
//gazebo
#include <gazebo_msgs/SpawnModel.h>
// Kinematics
#include <moveit_msgs/GetPositionIK.h>

int main(int argc, char** argv)
{
  //init node
  ros::init(argc, argv, "demo");
  ros::NodeHandle node_handle;
  ros::AsyncSpinner spinner(1);
  spinner.start();

  //init planning_scene_interface
  moveit::planning_interface::PlanningSceneInterface planning_scene_interface;

  //init lower_arm and initial posture
  static const std::string LOWER_PLANNING_GROUP = "lower_arm";
  moveit::planning_interface::MoveGroupInterface move_group1(LOWER_PLANNING_GROUP);
  const robot_state::JointModelGroup* lower_joint_model_group =
      move_group1.getCurrentState()->getJointModelGroup(LOWER_PLANNING_GROUP);

  moveit::core::RobotStatePtr lower_current_state = move_group1.getCurrentState();
  std::vector<double> lower_joint_group_positions;
  lower_current_state->copyJointGroupPositions(lower_joint_model_group, lower_joint_group_positions);
  lower_joint_group_positions[0] = -0.785;  
  lower_joint_group_positions[1] =  0.785;  
  lower_joint_group_positions[2] =  0.0;  
  lower_joint_group_positions[3] =  0.0;   
  move_group1.setJointValueTarget(lower_joint_group_positions);
  moveit::planning_interface::MoveGroupInterface::Plan move_plan;
  bool success = (move_group1.plan(move_plan) == moveit::planning_interface::MoveItErrorCode::SUCCESS);
  move_group1.execute(move_plan);

  //init upper_arm and initial posture
  static const std::string UPPER_PLANNING_GROUP = "upper_arm";
  moveit::planning_interface::MoveGroupInterface move_group2(UPPER_PLANNING_GROUP); 
  const robot_state::JointModelGroup* upper_joint_model_group =
      move_group2.getCurrentState()->getJointModelGroup(UPPER_PLANNING_GROUP);

  moveit::core::RobotStatePtr upper_current_state = move_group2.getCurrentState();
  std::vector<double> upper_joint_group_positions;
  upper_current_state->copyJointGroupPositions(upper_joint_model_group, upper_joint_group_positions);
  upper_joint_group_positions[0] =  0.785;  
  upper_joint_group_positions[1] = -0.785;  
  upper_joint_group_positions[2] =  0.0;  
  upper_joint_group_positions[3] =  0.0;   
  move_group2.setJointValueTarget(upper_joint_group_positions);
  success = (move_group2.plan(move_plan) == moveit::planning_interface::MoveItErrorCode::SUCCESS);
  move_group2.execute(move_plan);

  // init again
  move_group1.setJointValueTarget(lower_joint_group_positions);
  success = (move_group1.plan(move_plan) == moveit::planning_interface::MoveItErrorCode::SUCCESS);
  move_group1.execute(move_plan);

  //init botharms
  static const std::string BOTH_PLANNING_GROUP = "botharms";
  moveit::planning_interface::MoveGroupInterface two_arms_move_group(BOTH_PLANNING_GROUP); 

  // clear environment
  namespace rvt = rviz_visual_tools;
  moveit_visual_tools::MoveItVisualTools visual_tools("marker");
  visual_tools.deleteAllMarkers();
  sleep(1);
  
    //add objest-------------------------------------------------------------------------
  std::vector<moveit_msgs::CollisionObject> collision_objects; 
  // define table1----------------------
  moveit_msgs::CollisionObject collision_table1;
  collision_table1.header.frame_id = move_group1.getPlanningFrame();
  collision_table1.id = "box1";

  shape_msgs::SolidPrimitive primitive1;
  primitive1.type = primitive1.BOX;
  primitive1.dimensions.resize(3);
  primitive1.dimensions[0] = 0.4;
  primitive1.dimensions[1] = 0.5;
  primitive1.dimensions[2] = 0.7;

  geometry_msgs::Pose box_pose1;
  box_pose1.orientation.w = 1.0;
  box_pose1.position.x = 0.75;
  box_pose1.position.y = 0.0;
  box_pose1.position.z = 0.45;

  collision_table1.primitives.push_back(primitive1);
  collision_table1.primitive_poses.push_back(box_pose1);
  collision_table1.operation = collision_table1.ADD;
  collision_objects.push_back(collision_table1);

  // define table2----------------------
  moveit_msgs::CollisionObject collision_table2;
  collision_table2.header.frame_id = move_group1.getPlanningFrame();
  collision_table2.id = "box2";

  shape_msgs::SolidPrimitive primitive2;
  primitive2.type = primitive2.BOX;
  primitive2.dimensions.resize(3);
  primitive2.dimensions[0] = 0.4;
  primitive2.dimensions[1] = 0.5;
  primitive2.dimensions[2] = 0.7;

  geometry_msgs::Pose box_pose2;
  box_pose2.orientation.w = 1.0;
  box_pose2.position.x = -0.75;
  box_pose2.position.y = 0.0;
  box_pose2.position.z = 0.45;

  collision_table2.primitives.push_back(primitive2);
  collision_table2.primitive_poses.push_back(box_pose2);
  collision_table2.operation = collision_table2.ADD;
  collision_objects.push_back(collision_table2);

  // define table3----------------------
  moveit_msgs::CollisionObject collision_table3;
  collision_table3.header.frame_id = move_group1.getPlanningFrame();
  collision_table3.id = "box3";

  shape_msgs::SolidPrimitive primitive3;
  primitive3.type = primitive3.BOX;
  primitive3.dimensions.resize(3);
  primitive3.dimensions[0] = 1;
  primitive3.dimensions[1] = 0.4;
  primitive3.dimensions[2] = 0.7;

  geometry_msgs::Pose box_pose3;
  box_pose3.orientation.w = 1.0;
  box_pose3.position.x = 0;
  box_pose3.position.y = 0.65;
  box_pose3.position.z = 0.45;

  collision_table3.primitives.push_back(primitive3);
  collision_table3.primitive_poses.push_back(box_pose3);
  collision_table3.operation = collision_table3.ADD;
  collision_objects.push_back(collision_table3);

  // define object1----------------------
  moveit_msgs::CollisionObject collision_object1;
  collision_object1.header.frame_id = move_group1.getPlanningFrame();
  collision_object1.id = "box4";

  shape_msgs::SolidPrimitive primitive4;
  primitive4.type = primitive4.BOX;
  primitive4.dimensions.resize(3);
  primitive4.dimensions[0] = 0.1;
  primitive4.dimensions[1] = 0.1;
  primitive4.dimensions[2] = 0.1;

  geometry_msgs::Pose box_pose4;
  box_pose4.orientation.w = 1.0;         
  box_pose4.position.x = 0.75;           
  box_pose4.position.y = 0.00;              
  box_pose4.position.z = 0.86;         

  collision_object1.primitives.push_back(primitive4);
  collision_object1.primitive_poses.push_back(box_pose4);
  collision_object1.operation = collision_object1.ADD;
  collision_objects.push_back(collision_object1);

  // define object2----------------------
  moveit_msgs::CollisionObject collision_object2;
  collision_object2.header.frame_id = move_group2.getPlanningFrame();
  collision_object2.id = "box5";

  shape_msgs::SolidPrimitive primitive5;
  primitive5.type = primitive5.BOX;
  primitive5.dimensions.resize(3);
  primitive5.dimensions[0] = 0.1;
  primitive5.dimensions[1] = 0.1;
  primitive5.dimensions[2] = 0.1;

  geometry_msgs::Pose box_pose5;
  box_pose5.orientation.w = 1.0;  
  box_pose5.position.x = -0.75;        
  box_pose5.position.y = 0.00;            
  box_pose5.position.z = 0.86;         

  collision_object2.primitives.push_back(primitive5);
  collision_object2.primitive_poses.push_back(box_pose5);
  collision_object2.operation = collision_object2.ADD;
  collision_objects.push_back(collision_object2);

  // Add an object into the world
  ROS_INFO_NAMED("tutorial", "Add an object into the world");
  planning_scene_interface.addCollisionObjects(collision_objects);
  sleep(1);
  
  // step1:left arm move--------------------------------------------------------
  // move lower_pose1(up)
  geometry_msgs::Pose lower_pose1;
  lower_pose1.orientation.w = 1.0;
  lower_pose1.position.x = 0.2544;
  lower_pose1.position.y = 0.6546;
  lower_pose1.position.z = 1.10;  
  move_group1.setPoseTarget(lower_pose1);

  success = (move_group1.plan(move_plan) == moveit::planning_interface::MoveItErrorCode::SUCCESS);
  move_group1.execute(move_plan);

  // move lower_pose2 (go above the object )
  geometry_msgs::Pose lower_pose2;
  lower_pose2.orientation.w = 1.0;
  lower_pose2.position.x = 0.749;
  lower_pose2.position.y = 0.01;
  lower_pose2.position.z = 1.10;  
  move_group1.setPoseTarget(lower_pose2);

  success = (move_group1.plan(move_plan) == moveit::planning_interface::MoveItErrorCode::SUCCESS);
  move_group1.execute(move_plan);

  // move lower_pose3(down)
  geometry_msgs::Pose lower_pose3;
  lower_pose3.orientation.w = 1.0;
  lower_pose3.position.x = 0.749;
  lower_pose3.position.y = 0.01;
  lower_pose3.position.z = 0.97;
  move_group1.setPoseTarget(lower_pose3);

  success = (move_group1.plan(move_plan) == moveit::planning_interface::MoveItErrorCode::SUCCESS);
  move_group1.execute(move_plan);

  //catch the object
  move_group1.attachObject(collision_object1.id,"lower_link_j4");

  // step2:right arm move--------------------------------------------------------
  // move upper_pose1(up)
  geometry_msgs::Pose upper_pose1;
  upper_pose1.orientation.w = 1.0;
  upper_pose1.position.x = -0.2545;
  upper_pose1.position.y =  0.6546;
  upper_pose1.position.z =  1.10; 
  move_group2.setPoseTarget(upper_pose1);

  success = (move_group2.plan(move_plan) == moveit::planning_interface::MoveItErrorCode::SUCCESS);
  move_group2.execute(move_plan);

  // move upper_pose2(go above the object )
  geometry_msgs::Pose upper_pose2;
  upper_pose2.orientation.w = 1.0;
  upper_pose2.position.x = -0.749;
  upper_pose2.position.y =  0.01;
  upper_pose2.position.z =  1.10;
  move_group2.setPoseTarget(upper_pose2);

  success = (move_group2.plan(move_plan) == moveit::planning_interface::MoveItErrorCode::SUCCESS);
  move_group2.execute(move_plan);

  // move upper_pose3(down)
  geometry_msgs::Pose upper_pose3;
  upper_pose3.orientation.w = 1.0;
  upper_pose3.position.x = -0.749;
  upper_pose3.position.y =  0.01;
  upper_pose3.position.z =  0.965;
  move_group2.setPoseTarget(upper_pose3);

  success = (move_group2.plan(move_plan) == moveit::planning_interface::MoveItErrorCode::SUCCESS);
  move_group2.execute(move_plan);
  
  //catch the object
  move_group2.attachObject(collision_object2.id,"upper_link_j4");

  //step3:left arm forward move--------------------------------------------------------
  // move lower_pose4 (up)
  geometry_msgs::Pose lower_pose4;
  lower_pose4.orientation.w = 1.0;
  lower_pose4.position.x = 0.749;
  lower_pose4.position.y = 0.01;
  lower_pose4.position.z = 1.10; 
  move_group1.setPoseTarget(lower_pose4);

  success = (move_group1.plan(move_plan) == moveit::planning_interface::MoveItErrorCode::SUCCESS);
  move_group1.execute(move_plan);

  // move lower_pose5(forward)
  geometry_msgs::Pose lower_pose5;
  lower_pose5.orientation.w = 1.0;
  lower_pose5.position.x = 0.3553;
  lower_pose5.position.y = 0.6632;
  lower_pose5.position.z = 1.10;
  move_group1.setPoseTarget(lower_pose5);

  success = (move_group1.plan(move_plan) == moveit::planning_interface::MoveItErrorCode::SUCCESS);
  move_group1.execute(move_plan);  

  //step4:right arm forward move--------------------------------------------------------
  // move upper_pose4 (up)
  geometry_msgs::Pose upper_pose4;
  upper_pose4.orientation.w = 1.0;
  upper_pose4.position.x = -0.749;
  upper_pose4.position.y =  0.01;
  upper_pose4.position.z =  1.10;
  move_group2.setPoseTarget(upper_pose4);

  success = (move_group2.plan(move_plan) == moveit::planning_interface::MoveItErrorCode::SUCCESS);
  move_group2.execute(move_plan);

  // move upper_pose4 (forward)
  geometry_msgs::Pose upper_pose5;
  upper_pose5.orientation.w = 1.0;
  upper_pose5.position.x = -0.333;
  upper_pose5.position.y =  0.678;
  upper_pose5.position.z =  1.10;
  move_group2.setPoseTarget(upper_pose5);

  success = (move_group2.plan(move_plan) == moveit::planning_interface::MoveItErrorCode::SUCCESS);
  move_group2.execute(move_plan);

  //step5:lift arm put down object--------------------------------------------------------
  // move lower_pose6 (down)
  geometry_msgs::Pose lower_pose6;
  lower_pose6.orientation.w = 1.0;
  lower_pose6.position.x = 0.3553;
  lower_pose6.position.y = 0.6632;
  lower_pose6.position.z = 0.97;
  move_group1.setPoseTarget(lower_pose6);

  success = (move_group1.plan(move_plan) == moveit::planning_interface::MoveItErrorCode::SUCCESS);
  move_group1.execute(move_plan);

  move_group1.detachObject(collision_object1.id);
  sleep(1);

  // move lower_pose7 (up)
  move_group1.setPoseTarget(lower_pose5);
  success = (move_group1.plan(move_plan) == moveit::planning_interface::MoveItErrorCode::SUCCESS);
  move_group1.execute(move_plan);


  //step6:right arm put down object--------------------------------------------------------
  geometry_msgs::Pose upper_pose6;
  upper_pose6.orientation.w = 1.0;
  upper_pose6.position.x = -0.333;
  upper_pose6.position.y =  0.678;
  upper_pose6.position.z =  0.97;
  move_group2.setPoseTarget(upper_pose6);

  success = (move_group2.plan(move_plan) == moveit::planning_interface::MoveItErrorCode::SUCCESS);
  move_group2.execute(move_plan);
  
  move_group2.detachObject(collision_object2.id);
  sleep(1);
  move_group2.setPoseTarget(upper_pose5);
  success = (move_group2.plan(move_plan) == moveit::planning_interface::MoveItErrorCode::SUCCESS);
  move_group2.execute(move_plan);

  // step7: Return to the initial position--------------------------------------------------------
  moveit::planning_interface::MoveGroupInterface::Plan two_arms_plan;
  geometry_msgs::Pose lower_pose7;
  lower_pose7.orientation.w = 1.0;
  lower_pose7.position.x = 0.2544;
  lower_pose7.position.y = 0.6546;
  lower_pose7.position.z = 0.965;

  geometry_msgs::Pose upper_pose7;
  upper_pose7.orientation.w = 1.0;
  upper_pose7.position.x = -0.2545;
  upper_pose7.position.y =  0.6546;
  upper_pose7.position.z =  0.965;

  two_arms_move_group.setPoseTarget(lower_pose7, "lower_link_j4");
  two_arms_move_group.setPoseTarget(upper_pose7, "upper_link_j4");
  success = (two_arms_move_group.plan(two_arms_plan) == moveit::planning_interface::MoveItErrorCode::SUCCESS);
  two_arms_move_group.execute(two_arms_plan);

  return 0;
}

cmake.txt

cmake_minimum_required(VERSION 2.8.3)
project(khi_duaro_gazebo)

add_compile_options(-std=c++11)

find_package(Eigen3 REQUIRED)

if(NOT EIGEN3_INCLUDE_DIRS)
  set(EIGEN3_INCLUDE_DIRS ${EIGEN3_INCLUDE_DIR})
endif()

find_package(catkin REQUIRED COMPONENTS
 interactive_markers
 moveit_core
 moveit_visual_tools
 moveit_ros_planning
 moveit_ros_planning_interface
 pluginlib
 geometric_shapes
 tf2_ros
 tf2_eigen
 tf2_geometry_msgs
)

catkin_package(
  LIBRARIES
    demo
    demo_dual
  CATKIN_DEPENDS
    moveit_core
    moveit_visual_tools
    moveit_ros_planning_interface
    interactive_markers
  DEPENDS
    EIGEN3
)

include_directories(SYSTEM ${THIS_PACKAGE_INCLUDE_DIRS} ${Boost_INCLUDE_DIR} ${EIGEN3_INCLUDE_DIRS})
include_directories(${catkin_INCLUDE_DIRS})
link_directories(${catkin_LIBRARY_DIRS})

add_executable(demo
  src/demo.cpp
)

target_link_libraries(demo ${catkin_LIBRARIES})

install(TARGETS demo DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION})
install(DIRECTORY launch controller DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION})

install(DIRECTORY config launch script
  DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
  USE_SOURCE_PERMISSIONS )



package.xml

<?xml version="1.0"?>
<package>
  <name>khi_duaro_gazebo</name>
  <version>1.1.2</version>
  <description>The khi_duaro_gazebo package</description>

  <author email="nakamichi_d@khi.co.jp">nakamichi_d</author>
  <maintainer email="nakamichi_d@khi.co.jp">nakamichi_d</maintainer>

  <license>BSD</license>

  <url type="website">http://ros.org/wiki/khi_robot</url>
  <url type="repository">https://github.com/Kawasaki-Robotics/khi_robot</url>

  <buildtool_depend>catkin</buildtool_depend>

  <build_depend>gazebo_ros_control</build_depend>
  <build_depend>pluginlib</build_depend>
  <build_depend>eigen</build_depend>
  <build_depend>moveit_core</build_depend>
  <build_depend>moveit_ros_planning_interface</build_depend>
  <build_depend>moveit_ros_perception</build_depend>
  <build_depend>interactive_markers</build_depend>
  <build_depend>geometric_shapes</build_depend>
  <build_depend>moveit_visual_tools</build_depend>
  <build_depend>tf2_ros</build_depend>
  <build_depend>tf2_eigen</build_depend>
  <build_depend>tf2_geometry_msgs</build_depend>

  <run_depend>gazebo_ros_control</run_depend>
  <run_depend>pluginlib</run_depend>
  <run_depend>eigen</run_depend>
  <run_depend>moveit_core</run_depend>
  <run_depend>moveit_ros_planning_interface</run_depend>
  <run_depend>moveit_ros_perception</run_depend>
  <run_depend>interactive_markers</run_depend>
  <run_depend>geometric_shapes</run_depend>
  <run_depend>moveit_visual_tools</run_depend>
  <run_depend>tf2_ros</run_depend>
  <run_depend>tf2_eigen</run_depend>
  <run_depend>tf2_geometry_msgs</run_depend>

  <run_depend>catkin</run_depend>
  <run_depend>controller_manager</run_depend>
  <run_depend>effort_controllers</run_depend>
  <run_depend>gazebo_ros</run_depend>
  <run_depend>joint_state_controller</run_depend>
  <run_depend>joint_trajectory_controller</run_depend>
  <run_depend>positon_controllers</run_depend>
  <run_depend>robot_state_publisher</run_depend>
  <run_depend>rostopic</run_depend>
  <run_depend>catkin</run_depend>
  <run_depend>khi_duaro_description</run_depend>

  <export></export>

</package>

rviz_demo.launch

其实就是moveit_config文件夹中的demo.launch

<launch>
  <arg name="db" default="false" />
  <arg name="db_path" default="$(find khi_duaro_moveit_config)/default_warehouse_mongo_db" />
  <arg name="debug" default="false" />
  <arg name="use_gui" default="false" />

  <!-- Load the URDF, SRDF and other .yaml configuration files on the param server -->
  <include file="$(find khi_duaro_moveit_config)/launch/planning_context.launch">
    <arg name="load_robot_description" value="true"/>
  </include>

  <!-- We do not have a robot connected, so publish fake joint states -->
  <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher">
    <param name="/use_gui" value="$(arg use_gui)"/>
    <rosparam param="/source_list">[/move_group/fake_controller_joint_states]</rosparam>
  </node>

  <!-- Given the published joint states, publish tf for the robot links -->
  <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" respawn="true" output="screen" />

  <!-- Run the main MoveIt executable without trajectory execution (we do not have controllers configured by default) -->
  <include file="$(find khi_duaro_moveit_config)/launch/move_group.launch">
    <arg name="allow_trajectory_execution" value="true"/>
    <arg name="fake_execution" value="true"/>
    <arg name="info" value="true"/>
    <arg name="debug" value="$(arg debug)"/>
  </include>

  <!-- Run Rviz and load the default config to see the state of the move_group node -->
  <include file="$(find khi_duaro_moveit_config)/launch/moveit_rviz.launch">
    <arg name="config" value="true"/>
    <arg name="debug" value="$(arg debug)"/>
  </include>

  <!-- If database loading was enabled, start mongodb as well -->
  <include file="$(find khi_duaro_moveit_config)/launch/default_warehouse_db.launch" if="$(arg db)">
    <arg name="moveit_warehouse_database_path" value="$(arg db_path)"/>
  </include>

</launch>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

川崎duAro机器人 ROS_moveit demo 的相关文章

  • ROS学习(1)——ROS1和ROS2的区别

    因为机器人是一个系统工程 它包括了机械臂结构 电子电路 驱动程序 通信框架 组装集成 调试和各种感知决策算法等方面 任何一个人甚至是一个公司都不可能完成机器人系统的研发工作 但是我们又希望自己能造出一个机器人跑一跑 验证一下自己的算法 所以
  • Ubuntu镜像下载地址

    镜像地址https launchpad net ubuntu cdmirrors
  • 清华大学开源软件镜像站网址

    清华大学 TUNA 协会原名清华大学学生网管会 注册名清华大学学生网络与开源软件协会 是由清华大学网络技术和开源软件爱好者 技术宅组成的团体 现阶段向校内外提供开源软件镜像等服务 清华大学 TUNA 协会清华大学 TUNA 协会原名清华大学
  • 激光雷达LMS111在ROS上的使用

    LMS111 10100 在ROS上的测试与使用 准备工作 设备 硬件 LMS111 101000激光雷达 软件 ubuntu16 04 ROS 开始 设备连接 将激光雷达与处理器 电脑 工控机等 通过以太网连接好 激光雷达默认的IP地址为
  • Unity动画机制 Animator与Animator Controller教程

    Chinar blog www chinar xin Unity动画机制 Animator Animation 本文提供全流程 中文翻译 Chinar 的初衷是将一种简单的生活方式带给世人 使有限时间 具备无限可能 Chinar 心分享 心
  • 树莓派配置wifi做热点方法

    http wiki jikexueyuan com project raspberry pi wifi html
  • SpringBoot整合ELK教程

    SpringBoot整合ELK教程 1 基础概念 ELK 即 Elasticsearch Logstash Kibana 组合起来可以搭建线上日志系统 本文主要讲解使用 ELK 来收集测试框架产生的日志 Elasticsearch 用于存储
  • roslaunch error: ERROR: cannot launch node of type

    今天在因为github上有个之前的包更新了 重新git clone后出现了一个问题 ERROR cannot launch node of type crazyflie demo controller py can t locate nod
  • 无法加载 LZ4 支持的 Python 扩展。 LZ4 压缩将不可用

    我是 ROS 新手 我刚刚打开终端并输入roscore和另一个终端并键入rostopic node我收到这个错误 上面写着 无法加载 LZ4 支持的 Python 扩展 LZ4 压缩将不可用 我搜索并去了https pypi org pro
  • 什么是 void `std::allocator`?即:`std::allocator`

    自动生成ROS 机器人操作系统 message C 头文件包含如下类型定义 typedef std msgs Header
  • ROS AsyncSpinner 的多线程行为

    我试图了解 ROS 中的 AsyncSpinner 是如何工作的 因为我可能有一些误解 你可以找到类似的问题here As seen here它的定义提到 异步旋转器 产生几个线程 可配置 将并行执行回调 同时不会阻塞执行该操作的线程 叫它
  • Tornado websocket 演示的 Nginx 配置?

    有人可以向我提供 Tornado websocket 聊天演示的 Nginx 配置吗 该演示位于 tornado demos websocket 像这样的配置将起作用 events worker connections 1024 http
  • 不使用ros编译roscpp(使用g++)

    我正在尝试在不使用ROS其余部分的情况下编译roscpp 我只需要订阅一个节点 但该节点拥有使用旧版本ROS的节点 并且由于编译问题 我无法将我的程序与他的程序集成 我从git下载了源代码 https github com ros ros
  • 错误状态:平台不允许不安全的 HTTP:http://0.0.0.0:9090

    我正在尝试从我的 flutter 应用程序连接到 ws local host 9090 使用 rosbridge 运行 的 Ros WebSocket 服务 但我在 Flutter 中收到以下错误 错误状态 平台不允许不安全的 HTTP h
  • 我的代码的 Boost 更新问题

    我最近将 boost 更新到 1 59 并安装在 usr local 中 我的系统默认安装在 usr 并且是1 46 我使用的是ubuntu 12 04 我的代码库使用 ROS Hydro 机器人操作系统 我有一个相当大的代码库 在更新之前
  • catkin_make后找不到ROS包

    我根据 ROS 的 Wiki 页面创建了一个 ROS 工作区 我还使用创建了一个包catkin create pkg在我刚刚创建的工作区下 然后 按照 ROS Wiki 中的步骤使用以下命令构建包catkin make 构建包后 我插入命令
  • SurfaceView示例代码

    我需要 Android 的示例教程SurfaceView 或者使用它的可以共享的示例代码 API 演示对我来说很难理解 有人有替代方案吗 这次提交 https github com johnnylambada WorldMap commit
  • ROS安装错误(Ubuntu 16.04中的ROS Kinetic)

    中列出的步骤顺序http wiki ros org kinetic Installat 已被关注 尝试在Ubuntu 16 04中安装ROSkinetic 输入以下命令时出错 sudo apt get install ros kinetic
  • ROS 从 python 节点发布数组

    我是 ros python 的新手 我正在尝试从 python ros 节点发布一个一维数组 我使用 Int32MultiArray 但我无法理解多数组中布局的概念 谁能给我解释一下吗 或者还有其他方式发布数组吗 Thanks usr bi
  • 如何订阅“/scan”主题、修改消息并发布到新主题?

    我想通过订阅message ranges来改进turtlebot3的LDS 01传感器 通过应用一些算法修改messange ranges并将其发布到新主题 如下所示 但是当我运行编码时出现错误 错误是 遇到溢出的情况 错误是 运行时警告

随机推荐

  • Imu误差模型、零偏、零偏稳定性

    原文链接 零偏 xff0c 零偏稳定性和零偏重复性 xff0c IMU误差模型 什么是零偏 xff08 Bias xff09 在陀螺静止时 xff0c 陀螺仪仍会 xff0c 以规定时间内测得的输出量平均值相应的等效输入角速率表示 xff0
  • 海思3516a实现OSD叠加水印

    文章目录 前言一 三个文件的编译二 海思SDK使用步骤1 创建叠加字符2 添加叠加区域到视频通道 总结 前言 两天的努力终于实现了 xff0c 激动 xff01 在网上查阅了各种资料 xff0c 只是有零散的信息 xff0c 海思3516a
  • 结合下图,说明UART的工作原理

    结合下图 xff0c 说明UART的工作原理 UART提供三个独立的异步串行I O口 xff0c 他们可以运行于中断模式或者DMA模式 xff0c 也就是说UART可以产生中断请求或者DMA请求 xff0c 以便在CPU和UART之间传输数
  • 深入理解计算机系统 -- 大端与小端字节序

    一 大端字节序 vs 小端字节序 字节序指一个多字节对象在内存中存储的方式 xff0c 小端字节序机器在存储多字节对象时采用低地址存低有效字节的策略 xff0c 大端则恰恰相反 字节序由CPU架构决定 xff0c 与操作系统无直接关系 像常
  • TCP连接建立

    TCP 一种面向来连接的 可靠的 基于字节流的传输层通信协议 面向连接 xff1a 数据在发送之前必须在两端建立连接 xff0c 方法就是我们熟知的三次握手连接 可靠传输 xff1a 通过多种机制来保证数据的正确传输 xff0c 比如序列号
  • UDP接收端收不到广播的消息问题排查

    网络调试助手可以互相发送 xff0c 而你的UDP广播代码却不行 你是广播 是不会被路由器转发的 但是在同一个交换机下 是可以收到广播的 还有就是 电脑的虚拟网卡会拦截广播操作 xff0c 因为你没有指定一个地址 xff0c 所以代码正确的
  • STM32带FIFO的DMA传输应用示例

    STM32系列芯片都内置DMA外设 xff0c 其中很多系列的DMA配备了FIFO 这里以STM32F429芯片及开发板为例 xff0c 演示一下带FIFO的DMA传输实现过程 大致情况是这样的 xff0c 我用TIMER1通道1的比较事件
  • 两种方式判断内存的大小端存储方式

    1 目的 xff1a 判断ubuntu操作系统的内存属于大端还是小端存储 2 源代码 两种方法判断大小端 xff08 处理器取值时的字节序 xff09 xff1a 1 字符指针 2 联合体 法1 if 1 include lt stdio
  • 字符串:求str1在str2中首次出现的位置。

    span class token macro property span class token directive keyword include span span class token string lt stdio h gt sp
  • 基于ROS利用客户端和服务端实现C++节点和python节点间传送图像

    基于ROS利用客户端和服务端实现C 43 43 节点和python节点间传送图像 配置ROS下和python3通信以及配置python3可用的cv bridge 环境安装和使用 参考 xff1a https blog csdn net qq
  • iMaxB6充电介绍

    iMaxB6是一款多用途充电器 xff0c 能够为Li ion Li Poly Li Fe Ni Cd Ni MH和Pb类型电池充电 xff0c 支持6串以内的平衡充电 简要步骤 xff1a 1 连接正负电源 xff1b 2 连接平衡线 x
  • 基于stm32串口环形缓冲队列处理机制

    原文链接 xff1a 基于stm32串口环形缓冲队列处理机制 入门级 xff08 单字节 xff09 串口环形缓冲区实验 1 1 实验简介 最简单的串口数据处理机制是数据接收并原样回发的机制是 xff1a 成功接收到一个数 xff0c 触发
  • 源码安装nginx 1.23.1

    先看看仓库们 yum list nginx 已加载插件 xff1a fastestmirror langpacks Loading mirror speeds from cached hostfile base mirrors aliyun
  • Sublime Text运行C和C++程序

    原文链接 xff1a Sublime Text运行C和C 43 43 程序 Sublime Text 是一款当下非常流行的文本编辑器 xff0c 其功能强大 xff08 提供有众多的插件 xff09 界面简洁 还支持跨平台使用 xff08
  • keilC51编译常见错误和警告说明

    如对编译出错感兴趣的网友能否把你们常遇到的错误信息收集起来并提出最终的解决办法加以归纳以期共享 xff01 1 L15 重复调用 WARNING L15 MULTIPLE CALL TO SEGMENT SEGMENT PR SPI REC
  • RS485的电路以及相关波形

    1 RS485的电路 xff0c 要注意RE引脚一般是和DE引脚接在一起的 2 差分信号AB的波形 xff0c 高电平6 2v左右 xff0c 低电平 3v 3 A点的波形 4 B点波形 5 接收RX的波形
  • Ubuntu安装cmake

    Ubuntu18 04安装cmake 转载自https www cnblogs com yanqingyang p 12731855 html 一 使用安装命令 span class token function sudo span apt
  • C/C++混淆点-strcat和strcpy区别

    一 原因分析 假设 xff1a char str 61 NULL str 61 new char 11 你想为字符串str开辟一个存储十个字符的内存空间 xff0c 然后你现在有两个字符串 xff1a char c1 61 34 abc 3
  • QGC 添加电机测试功能

    组装过程中为了测试电机的连接以及转向 xff0c 现将电机测试功能单独制作一个页面 xff0c 以便使用 一 xff0c 效果 原型 实际效果总是差那么一丢丢 二 xff0c 实现思路 MavlinkConsole 功能 xff0c 可以在
  • 川崎duAro机器人 ROS_moveit demo

    说明 demo cpp Author hiics include lt ros ros h gt include lt iostream gt MoveIt include lt moveit move group interface mo