如何用MATLAB做边际效用,1、在仿真机中运行Gazebo LBR Simulator七自由度工业机械臂...

1、在仿真机中运行Gazebo LBR Simulator七自由度工业机械臂

2、在Matlab中连接ROS网络

rosinit('192.168.127.128')

3、查看ROS网络中的节点和主题并记录结果

rosnode list

rostopic list

4、查询主题/iiwa/PositionJointInterface_trajectory_controller/command的消息类型,以及发布者和订阅者。

rostopic info

rostopic type

5、订阅/iiwa/joint_states主题,并接收一个消息,可以获得机械臂七个关节Joint的名称和当前位置,并记录

jointStateSub = rossubscriber('/iiwa/joint_states')

jsMsg=receive(jointStateSub)

6、注册为主题/iiwa/PositionJointInterface_trajectory_controller/command的消息发布者,然后再查询主题的发布者和订阅者,跟4比较。

[jointTauPub, jtMsg] = rospublisher('/iiwa/PositionJointInterface_trajectory_controller/command')

rostopic info

7、构造trajectory_msgs/JointTrajectory消息,并发布,控制机械臂运动

jtMsg = rosmessage('trajectory_msgs/JointTrajectory')

jtMsg.JointNames = 第5步查询到的七个关节名称

jtMsg.Points 是trajectory_msgs/JointTrajectoryPioint消息的集合,所以需要构造若干个trajectory_msgs/JointTrajectoryPioint消息,并赋给jtMsg.Points

tjPoint1 = rosmessage('trajectory_msgs/JointTrajectoryPoint')

tjPoint2 = rosmessage('trajectory_msgs/JointTrajectoryPoint')

tjPoint1.Positions = 七个关节的位置

tjPoint1.Velocities = 七个关节的运动速度,可设为0

tjPoint1.TimeFromStart.Sec = 1

tjPoint1.TimeFromStart.Nsec = 0

tjPoint2.Positions = 七个关节的另一个位置

tjPoint2.Velocities = 七个关节的运动速度,可设为0

tjPoint2.TimeFromStart.Sec = 4

tjPoint2.TimeFromStart.Nsec = 0;

把这两个点或者更多的点赋给jtMsg.Points

jtMsg.Points = [tjPoint1,tjPoint2]

发送消息

send(jointTauPub,jtMsg)

观察机械臂的动作

8、尝试改变不同关节的角度,观察机械臂的动作。动作完成后,参照5接收一个/iiwa/joint_states主题的消息,查看机械臂的位置是否跟你设置的位置一样。

9、退出ROS网络

rosshutdown

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. URDF文件 以下是一个简单的六自由度机械的URDF文件示例: ``` <?xml version="1.0"?> <robot name="six_dof_arm" xmlns:xacro="http://www.ros.org/wiki/xacro"> <link name="base_link"> <visual> <geometry> <cylinder length="0.2" radius="0.05"/> </geometry> </visual> <inertial> <mass value="1.0"/> <inertia ixx="0.1" iyy="0.1" izz="0.1" ixy="0.0" ixz="0.0" iyz="0.0"/> </inertial> </link> <joint name="shoulder_pan_joint" type="revolute"> <parent link="base_link"/> <child link="shoulder_link"/> <origin rpy="0 0 0" xyz="0 0 0.1"/> <axis xyz="0 0 1"/> <limit effort="100" lower="-3.14" upper="3.14" velocity="1.0"/> </joint> <link name="shoulder_link"> <visual> <geometry> <cylinder length="0.3" radius="0.05"/> </geometry> </visual> <inertial> <mass value="1.0"/> <inertia ixx="0.1" iyy="0.1" izz="0.1" ixy="0.0" ixz="0.0" iyz="0.0"/> </inertial> </link> <joint name="shoulder_lift_joint" type="revolute"> <parent link="shoulder_link"/> <child link="upper_arm_link"/> <origin rpy="-1.57 0 0" xyz="0 0 0.3"/> <axis xyz="0 1 0"/> <limit effort="100" lower="-3.14" upper="3.14" velocity="1.0"/> </joint> <link name="upper_arm_link"> <visual> <geometry> <cylinder length="0.4" radius="0.05"/> </geometry> </visual> <inertial> <mass value="1.0"/> <inertia ixx="0.1" iyy="0.1" izz="0.1" ixy="0.0" ixz="0.0" iyz="0.0"/> </inertial> </link> <joint name="elbow_joint" type="revolute"> <parent link="upper_arm_link"/> <child link="forearm_link"/> <origin rpy="1.57 0 0" xyz="0 0 0.4"/> <axis xyz="0 1 0"/> <limit effort="100" lower="-3.14" upper="3.14" velocity="1.0"/> </joint> <link name="forearm_link"> <visual> <geometry> <cylinder length="0.2" radius="0.05"/> </geometry> </visual> <inertial> <mass value="1.0"/> <inertia ixx="0.1" iyy="0.1" izz="0.1" ixy="0.0" ixz="0.0" iyz="0.0"/> </inertial> </link> <joint name="wrist_joint" type="revolute"> <parent link="forearm_link"/> <child link="wrist_link"/> <origin rpy="-1.57 0 0" xyz="0 0 0.2"/> <axis xyz="0 1 0"/> <limit effort="100" lower="-3.14" upper="3.14" velocity="1.0"/> </joint> <link name="wrist_link"> <visual> <geometry> <cylinder length="0.1" radius="0.05"/> </geometry> </visual> <inertial> <mass value="1.0"/> <inertia ixx="0.1" iyy="0.1" izz="0.1" ixy="0.0" ixz="0.0" iyz="0.0"/> </inertial> </link> <joint name="gripper_joint" type="revolute"> <parent link="wrist_link"/> <child link="gripper_link"/> <origin rpy="-1.57 0 0" xyz="0 0 0.1"/> <axis xyz="0 1 0"/> <limit effort="100" lower="-3.14" upper="3.14" velocity="1.0"/> </joint> <link name="gripper_link"> <visual> <geometry> <box size="0.05 0.05 0.1"/> </geometry> </visual> <inertial> <mass value="0.1"/> <inertia ixx="0.0001" iyy="0.0001" izz="0.0001" ixy="0.0" ixz="0.0" iyz="0.0"/> </inertial> </link> </robot> ``` 2. Launch文件 以下是一个简单的六自由度机械Gazebo2仿真的launch文件示例: ``` <launch> <!-- Load URDF into parameter server --> <param name="robot_description" textfile="$(find six_dof_arm)/urdf/six_dof_arm.urdf" /> <!-- Launch Gazebo with robot model --> <node name="gazebo" pkg="gazebo_ros" type="gazebo" args="$(find six_dof_arm)/worlds/six_dof_arm.world"/> <!-- Spawn robot model in Gazebo --> <node name="spawn_urdf" pkg="gazebo_ros" type="spawn_model" args="-urdf -model my_robot -param robot_description"/> <!-- Start joint_state_publisher --> <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher"> <rosparam param="source_list">[/shoulder_pan_joint, /shoulder_lift_joint, /elbow_joint, /wrist_joint, /gripper_joint]</rosparam> </node> <!-- Start robot_state_publisher --> <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" /> </launch> ``` 注意,上述示例的文件路径和文件名需要根据实际情况进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值