Gazebo中使用set_link_state来改变物体位置

本文介绍了在Gazebo仿真环境中,如何通过调用/gazebo/set_link_state服务动态改变物体的位置。关键在于物体的.xacro文件中需设置<kinematic>1,确保仅进行运动学计算。之后可以通过话题或命令行来实施位置变更。

Gazebo中使用set_link_state来改变物体位置

Gazebo中,可以在运行的时候使用/gazebo/set_link_state服务来改变物体的位置。

首先对于要修改位置的物体,一定要记得在.xacro文件中的<gazebo>标签下加入<kinematic>1,表示只进行运动学计算,不涉及运动学,比如

<gazebo reference="camera_link">
    <material>Gazebo/Black</material>
    <kinematic>1</kinematic>
</gazebo>

这样之后使用服务来改变物体位置才会成功,不然会被拉回原来的位置。

之后可以利用话题来进行位置的设定:

	ros::ServiceClient client = node_handle.serviceClient<gazebo_msgs::SetLinkState>("/gazebo/set_link_state");

    // the first camera pos
    gazebo_msgs::SetLinkState objstate;

    objstate.request.link_state.link_name = "camera_link";
    objstate.request.link_state.pose.position.x = 0.0;
    objstate.request.link_state.pose.position.y = 0.0;
    objstate.request.link_state.pose.position.z = 0.5;
    objstate.request.link_state.pose.orientation.w = 1;
    objstate.request.link_state.pose.orientation.x = 0;
    objstate.request.link_state.pose.orientation.y = 0;
    objstate.request.link_state.pose.orientation.z = 0;
    objstate.request.link_state.twist.linear.x = 0.0;
    objstate.request.link_state.twist.linear.y = 0.0;
    objstate.request.link_state.twist.linear.z = 0.0;
    objstate.request.link_state.twist.angular.x = 0.0;
    objstate.request.link_state.twist.angular.y = 0.0;
    objstate.request.link_state.twist.angular.z = 0.0;
    objstate.request.link_state.reference_frame = "world";
    client.call(objstate);

也可以使用命令行来设置:

rosservice call gazebo/set_link_state '{link_state: {link_name: camera_link, pose: {position: {x: 0.5, y: 0.5, z: 0.5}}}}'
gazebo中运行该机械臂时,使用rostopic list命令,官方显示/clock /gazebo/link_states /gazebo/model_states /gazebo/parameter_descriptions /gazebo/parameter_updates /gazebo/set_link_state /gazebo/set_model_state /gazebo_gui/parameter_descriptions /gazebo_gui/parameter_updates /gazebo_ros_control/pid_gains/gripper/parameter_descriptions /gazebo_ros_control/pid_gains/gripper/parameter_updates /gazebo_ros_control/pid_gains/gripper/state /gazebo_ros_control/pid_gains/gripper_sub/parameter_descriptions /gazebo_ros_control/pid_gains/gripper_sub/parameter_updates /gazebo_ros_control/pid_gains/gripper_sub/state /gazebo_ros_control/pid_gains/joint1/parameter_descriptions /gazebo_ros_control/pid_gains/joint1/parameter_updates /gazebo_ros_control/pid_gains/joint1/state /gazebo_ros_control/pid_gains/joint2/parameter_descriptions /gazebo_ros_control/pid_gains/joint2/parameter_updates /gazebo_ros_control/pid_gains/joint2/state /gazebo_ros_control/pid_gains/joint3/parameter_descriptions /gazebo_ros_control/pid_gains/joint3/parameter_updates /gazebo_ros_control/pid_gains/joint3/state /gazebo_ros_control/pid_gains/joint4/parameter_descriptions /gazebo_ros_control/pid_gains/joint4/parameter_updates /gazebo_ros_control/pid_gains/joint4/state /open_manipulator/gripper_position/command /open_manipulator/gripper_sub_position/command /open_manipulator/joint1_position/command /open_manipulator/joint2_position/command /open_manipulator/joint3_position/command /open_manipulator/joint4_position/command /open_manipulator/joint_states /rosout /rosout_agg 我这边运行出来是/clock /gazebo/link_states /gazebo/model_states /gazebo/parameter_descriptions /gazebo/parameter_updates /gazebo/performance_metrics /gazebo/set_link_state /gazebo/set_model_state /gazebo_ros_control/pid_gains/joint1/parameter_descriptions /gazebo_ros_control/pid_gains/joint1/parameter_updates /gazebo_ros_control/pid_gains/joint2/parameter_descriptions /gazebo_ros_control/pid_gains/joint2/parameter_updates /gazebo_ros_control/pid_gains/joint3/parameter_descr
05-25
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值