结合着看上一节
目录标题
ur机械臂
文件指令集
roslaunch ur_bringup ur5_bringup.launch robot_ip:=IP_OF_THE_ROBOT [reverse_port:=REVERSE_PORT]
roslaunch ur5_moveit_config ur5_moveit_planning_execution.launch
roslaunch ur5_moveit_config moveit_rviz.launch config:=true
roslaunch ur_modern_driver ur3_bringup.launch limited:=true robot_ip:=192.168.1.10 use_lowbandwidth_trajectory_follower:=true
roslaunch ur3_moveit_config ur3_moveit_planning_execution.launch limited:=true
roslaunch ur3_moveit_config moveit_rviz.launch config:=true
roslaunch ur_gazebo ur5.launch limited:=true
roslaunch ur5_moveit_config ur5_moveit_planning_execution.launch sim:=true limited:=true
roslaunch ur5_moveit_config moveit_rviz.launch config:=true
首先是bringup
他这里不同的包不太一样 有modern driver 还有ur bringup
roslaunch ur_modern_driver ur3_bringup.launch
ur3_bringup
| 一些参数
|ur3 up load.launch
|ur common.launch
ur3 up load 在urdescripton中
|ros description command = ur3_robot urdf 文件 相当于把模型文件加载给服务器,
这里用了if else 调用是否为limit的模型,同时传参
hardware_interface/PositionJointInterface
ur common.launch 他的ip节点啥的主要给到这里
|一堆参数
|启动robot state puublisher节点
|启动 ur driver中的driver.py 并传了一堆参数 如 max payload以及velocity
|启动tf2 ros包中的buffer server节点
官方的模型文件
总结:
1 基本的模型
2 模型在gazebo中的标签配置
3 为joint添加传动
4 添加gazebo控制器插件
robot.urdf.xacro
|comman.gazebo .xacro
| ur3.urdf.xacro 这里相当于传入了宏定义文件
下面就是直接调用宏定义文件并传参hardware_interface/PositionJointInterface
然后给了个虚拟link word 和 关节将word和机器人连接
comman gazebo .xacro
主体部分就是给到ros control控制插件
<gazebo>
<plugin name="ros_control" filename="libgazebo_ros_control.so">
<!--robotNamespace>/</robotNamespace-->
<!--robotSimType>gazebo_ros_control/DefaultRobotHWSim</robotSimType-->
<legacyModeNS>true</legacyModeNS>
</plugin>
ur3.urdf.xacro
|包含文件transmission.xacro 每个关节进行设置
|文件ur。gazebo.xacro 他这里给每个link进行gazebo设置
|各个模型关节描述,这里面没有gazebo
总的宏定义文件中包含了两个宏调用:
调用上面的文件,就是上面的gazebo和
transmission并传参hw_interface="${transmission_hw_interface}
gazebo launch
|一些参数
|启动仿真世界(find gazebo_ros)/launch/empty world.launch
|ur3 upload.launch
| gazebo ros 开始spawn model节点
|包含controller util.launch
|包含arm controller ur3.yaml 加载然后node name="arm_controller_spawner" pkg="controller_manager" type="controller_manager" args="spawn arm_controller"
最后
|<node name="ros_control_controller_manager" pkg="controller_manager" type="controller_manager" respawn="false" output="screen" args="load joint_group_position_controller" />
controller util.launch
robot state publisher节点
rostopic包中的rostopic节点,之后传参args="pub /calibrated std_msgs/Bool true"
加载joint_state_controller.yaml
之后<node name="joint_state_controller_spawner" pkg="controller_manager" type="controller_manager" args="spawn joint_state_controller"
joint_state_controller.yaml
joint_state_controller:
type: joint_state_controller/JointStateController
publish_rate: 50
arm controller ur3.yaml
arm_controller:
type: position_controllers/JointTrajectoryController
joints:
- shoulder_pan_joint
- shoulder_lift_joint
- elbow_joint
- wrist_1_joint
- wrist_2_joint
- wrist_3_joint
constraints:
goal_time: 0.6
stopped_velocity_tolerance: 0.05
shoulder_pan_joint: {trajectory: 0.1, goal: 0.1}
shoulder_lift_joint: {trajectory: 0.1, goal: 0.1}
elbow_joint: {trajectory: 0.1, goal: 0.1}
wrist_1_joint: {trajectory: 0.1, goal: 0.1}
wrist_2_joint: {trajectory: 0.1, goal: 0.1}
wrist_3_joint: {trajectory: 0.1, goal: 0.1}
stop_trajectory_duration: 0.5
state_publish_rate: 25
action_monitor_rate: 10
joint_group_position_controller:
type: position_controllers/JointGroupPositionController
joints:
- shoulder_pan_joint
- shoulder_lift_joint
- elbow_joint
- wrist_1_joint
- wrist_2_joint
- wrist_3_joint
ur3_moveit_planning_execution.launch
他这里如果sim为true,就会
<remap if="$(arg sim)" from="/follow_joint_trajectory" to="/arm_controller/follow_joint_trajectory"/》
文件形式:
主要
<include file="$(find ur3_moveit_config)/launch/move_group.launch">
<arg name="limited" default="$(arg limited)"/>
<arg name="debug" default="$(arg debug)" />
</include>
move_group.launch 该文件是自动生成的
moveit_rviz.launch
这个也是自动生成的
<launch>
<arg name="debug" default="false" />
<arg unless="$(arg debug)" name="launch_prefix" value="" />
<arg if="$(arg debug)" name="launch_prefix" value="gdb --ex run --args" />
<arg name="config" default="false" />
<arg unless="$(arg config)" name="command_args" value="" />
<arg if="$(arg config)" name="command_args" value="-d $(find ur3_moveit_config)/launch/moveit.rviz" />
<node name="$(anon rviz)" launch-prefix="$(arg launch_prefix)" pkg="rviz" type="rviz" respawn="false"
args="$(arg command_args)" output="screen">
<rosparam command="load" file="$(find ur3_moveit_config)/config/kinematics.yaml"/>
</node>
</launch>
古月居课程
提到了为了连接moveit和gazebo仿真
1 完善模型,惯性和碰撞
2 为link添加gazebo标签
gazebo reference=“linkname”
material Gazebo/Blue /material
/gazebo
3 为joint添加传动
4 添加gazebo控制器插件,
为robot元素添加插件
为link ,joint标签添加插件
joint trajectory contreller (gazebo)
这里和ur官方的包不一样
在于type是spawner
joint state controller(gazebo)
就是那个state publisher
follow joint trajectory
在moveit配置包下的config中有controllers.yaml
就是follow joint trajectory
说是有一个moveit controller mannager.launch 生成文件,原本是空的。在启动move group.launch文件是后会调用他。
ur官方的:
<launch>
<rosparam file="$(find ur3_moveit_config)/config/controllers.yaml"/>
<param name="use_controller_manager" value="false"/>
<param name="trajectory_execution/execution_duration_monitoring" value="false"/>
<param name="moveit_controller_manager" value="moveit_simple_controller_manager/MoveItSimpleControllerManager"/>
</launch>
我自己的:
<launch>
<!-- loads moveit_controller_manager on the parameter server which is taken as argument
if no argument is passed, moveit_simple_controller_manager will be set -->
<arg name="moveit_controller_manager" default="moveit_simple_controller_manager/MoveItSimpleControllerManager" />
<param name="moveit_controller_manager" value="$(arg moveit_controller_manager)"/>
<!-- loads ros_controllers to the param server -->
<rosparam file="$(find ur_gripper_moveit_config)/config/ros_controllers.yaml"/>
</launch>
https://www.guyuehome.com/24269/feed
srdf
一些经过moveit 配置界面完成后的配置文件
古月居课程代码
bringup .launch
|gazebo world.launch
配置世界,加载参数,上传模型,启动gazebo世界节点
| gazebo states.launch
将关节控制器的配置参数加载到参数服务器中,
之后joint_controller_spawner pkg="controller_manager" type="spawner"
运行robot_state_publisher节点,发布tf,<remap from="/joint_states" to="/probot_anno/joint_states"
|trejectory controller.launch
trajectory_control.yaml之后"arm_controller_spawner" pkg="controller_manager" type="spawner"
|planning execution.launch
planning execution.launch:
<launch>
# The planning and execution components of MoveIt! configured to
# publish the current configuration of the robot (simulated or real)
# and the current state of the world as seen by the planner
<include file="$(find probot_anno_moveit_config)/launch/move_group.launch">
<arg name="publish_monitored_planning_scene" value="true" />
</include>
# The visualization component of MoveIt!
<include file="$(find probot_anno_moveit_config)/launch/moveit_rviz.launch">
<arg name="config" 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="false"/>
<rosparam param="/source_list">[/probot_anno/joint_states]</rosparam>
</node>
</launch>