kinova-mico2机械臂功能包kinova-ros-noetic使用问题汇总

博主由于实验室需求需要使用kinova-mico2机械臂,现在是使用kinova-ros-noetic功能包的问题解决汇总以及该功能包虚拟环境和实操操作流程:

一、Kinova-ros安装

1.下载功能包

mkdir -p kinova_ws/src
cd kinova_ws
catkin_make
cd src

git clone https://github.com/Kinovarobotics/kinova-ros.git kinova-ros
cd ..
catkin_make

创建工作空间,然后在src目录下下载该功能包并命名为kinova-ros,由于github下载速度较慢,我们也可以gitclone速度可能会非常慢,所以也可以选择直接进入https://github.com/Kinovarobotics/kinova-ros.git

这个网址下载压缩包解压命名为kinova-ros之后复制粘贴到kinova_ws/src目录下,在执行catkin_make效果是一样的。

(1)如要进行实操机械臂,使用USB访问机械臂,要将 udev 规则文件 10-kinova-arm.rules从~/cat_ws/src/kinova-ros/kinova_driver/udev复制到/etc/udev/rules.d/中:

cd kinova_ws/src/kinova-ros
sudo cp kinova_driver/udev/10-kinova-arm.rules /etc/udev/rules.d/

(2)安装moveit

sudo apt-get install ros-noetic-moveit
sudo apt-get install ros-noetic-trac-ik

(3)验证机械臂和moveit可用

cd kinova_ws
source ./devel.setup.bash
roslaunch kinova_bringup kinova_robot.launch kinova_robotType:=m1n6s200
#重新打开一个终端运行
roslaunch m1n6s300_moveit_config m1n6s200_demo.launch

二、虚拟功能包使用问题汇总

1.运行roslaunch m1n6s300_moveit_config m1n6s300_virtual_robot_demo.launch

启动虚拟机器人报错

libmoveit_kinematics_base.so.1.1.16问题,moveit版本不对

[WARN] [1743408843.139205090]: Kinematics solver doesn't support #attempts anymore, but only a timeout.
Please remove the parameter '/robot_description_kinematics/arm/kinematics_solver_attempts' from your configuration.
[ERROR] [1743408843.143801090]: The kinematics plugin (arm) failed to load. Error: Failed to load library /opt/ros/noetic/lib//libtrac_ik_kinematics_plugin.so. Make sure that you are calling the PLUGINLIB_EXPORT_CLASS macro in the library code, and that names are consistent between this macro and your XML. Error string: Could not load library (Poco exception = libmoveit_kinematics_base.so.1.1.16: cannot open shared object file: No such file or directory)
[ERROR] [1743408843.143922166]: Kinematics solver could not be instantiated for joint group arm.

使用命令

ls /opt/ros/noetic/lib/ | grep libmoveit_kinematics_base.so

查看共享库输出如下

libmoveit_kinematics_base.so
libmoveit_kinematics_base.so.1.1.14

继续使用命令:

dpkg -l | grep ros-noetic-moveit

发现确实安装的各种版本中掺杂了1.1.14版本,此情况需要重新安装moveit,步骤如下:

1.首先,清除所有 moveit 相关包

sudo apt-get remove --purge "ros-noetic-moveit*"
sudo apt-get autoremove

2.更新软件源

sudo apt-get update

3.重新安装moveit

sudo apt-get install ros-noetic-moveit

4.验证这回是否安装版本正确

dpkg -l | grep ros-noetic-moveit

这次版本都是1.1.16,在当前终端运行moveit官方测试程序:

roslaunch moveit_setup_assistant setup_assistant.launch

正确启动。


2.运行gazebo程序:roslaunch kinova_gazebo robot_launch.launch kinova_robotType:=m1n6s200

报错:

Could not load controller ‘joint_state_controller’ because controller type ‘joint_state_controller/JointStateController’ does not exist.

以及其他关于controller问题,例如:Could not load controller 'finger_tip_1_position_controller' because controller type 'effort_controllers/JointPositionController' does not exist
都是由于缺少机械臂控制器包,只需要安装功能包,命令如下:

sudo apt-get install ros-noetic-effort-controllers
sudo apt-get install ros-noetic-joint-state-controller
sudo apt-get install ros-noetic-position-controllers
sudo apt-get install ros-noetic-joint-trajectory-controller

sudo apt-get install ros-noetic-ros-control
sudo apt-get install ros-noetic-ros-controllers

ros-noetic-effort-controllers控制关节的力矩,ros-noetic-position-controllers控制关节的位置,ros-noetic-joint-state-controller读取关节状态(位置、速度、力矩),ros-noetic-joint-trajectory-controller控制多个关节按照轨迹运动

前四个就可以解决如果还没解决应该是还有其他缺少的,直接运行后面两个全部安装。
之后就可以运行对应的gazebo程序


3.运行rviz程序显示机器人模型(robot_model)时报错找不到对应机械臂的mesh程序,即,无法显示机器人模型

该原因是因为第一次运行rviz显示机械臂模型时需要在当前机械臂工作空间下运行,即:

cd kinova_ws
source ./devel/setup.bash
rosrun rviz rviz

4.于1中sudo apt-get remove --purge "ros-noetic-moveit*"
sudo apt-get autoremove
两个命令移除了TRAC-IK 机械臂运动学求解器插件所以出现了加载moveit后没有小球,无法使用小球拖动机械臂的问题

报错如下:

[ERROR] [1743410721.141575007]: The kinematics plugin (arm) failed to load. Error: According to the loaded plugin descriptions the class trac_ik_kinematics_plugin/TRAC_IKKinematicsPlugin with base class type kinematics::KinematicsBase does not exist. Declared types are  cached_ik_kinematics_plugin/CachedKDLKinematicsPlugin cached_ik_kinematics_plugin/CachedSrvKinematicsPlugin j2n6s300_arm_kinematics/IKFastKinematicsPlugin j2s6s300_arm_kinematics/IKFastKinematicsPlugin j2s7s300_robot_arm_kinematics/IKFastKinematicsPlugin kdl_kinematics_plugin/KDLKinematicsPlugin lma_kinematics_plugin/LMAKinematicsPlugin m1n6s300_mico_arm_kinematics/IKFastKinematicsPlugin srv_kinematics_plugin/SrvKinematicsPlugin
[ERROR] [1743410721.141632153]: Kinematics solver could not be instantiated for joint group arm.

只需要安装TRAC-IK插件即可,命令跟上面一样:

sudo apt-get install ros-noetic-trac-ik
保险起见增加命令(正常安装完上面的,再装下面的就会显示已经安装过了)
sudo apt-get install ros-noetic-trac-ik-kinematics-plugin


三、三种机械臂控制方案

1.真机控制


使用命令如下

cd kinova_ws
source ./devel.setup.bash
roslaunch kinova_bringup kinova_robot.launch kinova_robotType:=m1n6s300
#重新打开一个终端运行
roslaunch m1n6s300_moveit_config m1n6s300_demo.launch

这个命令首先启动真机驱动(kinova_robot.launch),然后打开真机的机械臂moveit控制(m1n6s300_demo.launch),这时MoveIt 通过 ros_control 控制真实机器人。这时使用的:

moveit_controller_manager:moveit_simple_controller_manager/MoveItSimpleControllerManager


2.gazebo仿真

使用命令如下:

cd kinova_ws
source ./devel.setup.bash
roslaunch kinova_gazebo robot_launch.launch kinova_robotType:=m1n6s300
#重新打开一个终端运行
roslaunch m1n6s300_moveit_config m1n6s300_gazebo_demo.launch

这个命令先启动gazebo仿真,之后启动仿真机械臂的moveit控制,这时使用的

moveit_controller_manager:moveit_simple_controller_manager/MoveItSimpleControllerManager

这时在m1n6s300_gazebo_demo.launch文件中有以下代码需要修改,不然无法运行:

  <!-- Run the main MoveIt executable without trajectory execution (we do not have controllers configured by default) -->
  <include file="$(find m1n6s300_moveit_config)/launch/move_group_m1n6s300.launch">
    <arg name="allow_trajectory_execution" value="true"/>
    <arg name="fake_execution" value="false"/>
    <arg name="info" value="true"/>
    <arg name="debug" value="$(arg debug)"/>
    <arg name="joint_states_ns" value="/m1n6s300/joint_states"/>
    <!-- 下面这句代码需要删掉 -->
    <arg name="controller_manager" value="m1n6s300_ros_control"/>
  </include>  

修改后代码如下:

  <!-- Run the main MoveIt executable without trajectory execution (we do not have controllers configured by default) -->
  <include file="$(find m1n6s300_moveit_config)/launch/move_group_m1n6s300.launch">
    <arg name="allow_trajectory_execution" value="true"/>
    <arg name="fake_execution" value="false"/>
    <arg name="info" value="true"/>
    <arg name="debug" value="$(arg debug)"/>
    <arg name="joint_states_ns" value="/m1n6s300/joint_states"/>
    <!-- 修改为如下代码 -->
    <arg name="gazebo_sim" value="true"/>
  </include>  

如果不删除该句则会报错move_group_m1n6s300.launch中没有这个参数,导致根本不能启动

3.纯 RViz 规划

使用命令如下:

cd kinova_ws
source ./devel/setup.bash
roslaunch <robot_name>_moveit_config <robot_name>_virtual_robot_demo.launch

这个命令使用moveit直接模拟轨迹,不连接真实或者虚拟机械臂,这时使用的

moveit_controller_manager:moveit_fake_controller_manager/MoveItFakeControllerManage

关于如何启用这三种控制方案是由节点move_group_m1n6s300.launch的参数fake_execution与gazebo_sim参数控制

  <include file="$(find m1n6s300_moveit_config)/launch/move_group_m1n6s300.launch">
    <arg name="allow_trajectory_execution" value="true"/>
    <arg name="fake_execution" value="false"/>
    <arg name="info" value="true"/>
    <arg name="debug" value="$(arg debug)"/>
    <arg name="joint_states_ns" value="/m1n6s300_driver/out/joint_state"/> 
    <arg name="gazebo_sim" value="true"/>
  </include>

控制方案汇总


当fake_execution=true,即Fake Arm / 纯 RViz 规划;fake_execution=false且gazebo_sim=false,即真实机器人;fake_execution=false且gazebo_sim=true,即Gazebo 仿真。
这里有一个问题,启动真实机器人的代码中

  <!-- Run the main MoveIt executable without trajectory execution (we do not have controllers configured by default) -->
  <include file="$(find m1n6s300_moveit_config)/launch/move_group_m1n6s300.launch">
    <arg name="allow_trajectory_execution" value="true"/>
    <arg name="fake_execution" value="false"/>
    <arg name="info" value="true"/>
    <arg name="debug" value="$(arg debug)"/>
    <arg name="joint_states_ns" value="/m1n6s300_driver/out/joint_state"/> 
    <arg name="gazebo_sim" value="true"/>
  </include>

启动了gazebo_sim=true,原因暂不知,待研究


更正:

在控制真机中需要修改为 false

且启动时因为本人使用的是m1n6s200,即mico2。需要指定kinova_robotType:=m1n6s200,即指定使用的对应机械臂型号。当然这个前面也写了。
持续更新后续问题解决方案

### ROS2 末端执行器 力控制 清洁机器人 实现方案 #### 使用 OCS2 构建清洁机器人模型 为了实现带有末端力控功能的清洁机器人,在构建其机械结构可以参考已有的机器人示例。对于不同类型的机器人手,OCS2 提供了一系列用于模拟和测试的基础框架和支持工具[^1]。 #### 配置 ros2_control 控制器 针对末端执行器的精确操控需求,通过 `ros2_control` 可以为清洁机器人定制专门的控制器逻辑。具体来说,需要定义适合于力反馈调节的任务空间控制器,并将其集成到系统的整体架构之中。此过程涉及创建相应的 YAML 配置文档以及修改 URDF/XACRO 文件以适应新的硬件接口标准[^2]。 #### 设计运动学模型与路径规划算法 借助 MoveIt! 工具集中的 RobotModel 和 JointModelGroup 类型对象,能够方便地描述并操作整个装置的动作序列。特别是当涉及到多自由度联动的情况下,合理安排各部分之间的相对位置关系至关重要。此外,还需考虑如何优化轨迹生成策略从而提高工作效率的同确保安全性[^3]。 #### 开发末端工具专用驱动程序 考虑到实际应用场景可能存在的特殊要求,如接触敏感性检测或是微调姿态保持等功能,则有必要单独编写一套适用于该类设备的操作指令集合。这类工作通常围绕着传感器数据采集、解析处理及其后续响应机制展开深入探讨[^4]。 #### Kinova-ROS 接口应用实例分析 如果选用的是基于 Jaco 或 Mico 平台的产品线作为基础平台的话,那么可以直接利用 Kinova-ROS 所提供的丰富资源来进行快速原型搭建和技术验证实验。该项目不仅涵盖了基本的功能模块而且还含了大量实用的教学资料可供参考学习[^5]。 ```python import rclpy from sensor_msgs.msg import JointState from geometry_msgs.msg import WrenchStamped def force_feedback_callback(msg): # 处理来自力/扭矩传感器的消息 pass def main(args=None): rclpy.init(args=args) node = rclpy.create_node('cleaning_robot_force_controller') subscription = node.create_subscription( WrenchStamped, '/ft_sensor_topic', force_feedback_callback, 10) if __name__ == '__main__': main() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

徐凤年_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值