博主由于实验室需求需要使用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,即指定使用的对应机械臂型号。当然这个前面也写了。
持续更新后续问题解决方案