/use_sim_time
:Bool-通知ROS使用已发布的/ clock
主题作为ROS时间。
如果应通过/use_sim_time
参数使用仿真时间,则Gazebo使用ROS参数服务器通知其他应用程序,尤其是Rviz。 启动gazebo_ros
时,gazebo应将其自动设置为true
如果gazebo
发布到ROS的/clock
话题作为ROS系统提供模拟同步时间,则/use_sim_time
为true
。
关于仿真时间,参考ROS C++ Time
(2)检查参数设置
rosparam get /use_sim_time
(3)gazebo订阅的话题
~/set_link_state
: gazebo_msgs/LinkState
- Sets the state (pose/twist) of a link.
~/set_model_state
: gazebo_msgs/ModelState
- Sets the state (pose/twist) of a model.
通过话题在仿真中设置模型的位姿
# 通过在线数据库添加一个可乐
rosrun gazebo_ros spawn_model -database coke_can -gazebo -model coke_can -y 1
# 发布话题/gazebo/set_model_state设置可乐罐位置
rostopic pub -r 20 /gazebo/set_model_state gazebo_msgs/ModelState '{model_name: coke_can, pose: { position: { x: 1, y: 0, z: 2 }, orientation: {x: 0, y: 0.491983115673, z: 0, w: 0.870604813099 } }, twist: { linear: { x: 0, y: 0, z: 0 }, angular: { x: 0, y: 0, z: 0} }, reference_frame: world }'
(4)gazebo发布的话题
-
/clock
: rosgraph_msgs/Clock - 发布仿真时间, to be used with /use_sim_time parameter. -
~/link_states
: gazebo_msgs/LinkStates - 发布仿真中所有Link的状态 -
~/model_states
: gazebo_msgs/ModelStates - 发布仿真中所有model的状态
使用话题查看model和link的状态
rostopic echo -n 1 /gazebo/model_states
rostopic echo -n 1 /gazebo/link_states
(5)服务:在仿真中创建和销毁model
-
~/spawn_urdf_model
:gazebo_msgs/SpawnModel
- 使用此服务生成通用机器人描述格式(URDF) -
~/spawn_sdf_model
:gazebo_msgs/SpawnModel
- 使用此服务可产生以gazebo仿真描述格式SDF编写的模型 -
~/delete_model
:gazebo_msgs/DeleteModel
- 此服务允许用户从仿真中删除模型
略……
(6)服务:力控制
这些服务允许用户在仿真中将扳手和力施加到身体和关节上:
-
~/apply_body_wrench
:gazebo_msgs/ApplyBodyWrench
- 在仿真中将 wrench施加到物体上. 注意:施加在同意物体上的所有active wrenches都是累积的。 -
~/apply_joint_effort
:gazebo_msgs/ApplyJointEffort
- 在仿真中将 effort 施加到物体上 -
~/clear_joint_forces
:gazebo_msgs/JointRequest
- 清除添加到joint上的effort -
~/clear_body_wrenches
:gazebo_msgs/ClearBodyWrenches
- 清除添加到物体上的wrench
将力矩添加到Joint上
为例演示效果,关闭重力:
rosrun gazebo_ros spawn_model -database coke_can -gazebo -model coke_can -y 1
rosservice call /gazebo/set_physics_properties "
time_step: 0.001
max_update_rate: 1000.0
gravity:
x: 0.0
y: 0.0
z: 0.0
ode_config:
auto_disable_bodies: False
sor_pgs_precon_iters: 0
sor_pgs_iters: 50
sor_pgs_w: 1.3
sor_pgs_rms_error_tol: 0.0
contact_surface_layer: 0.001
contact_max_correcting_vel: 100.0
cfm: 0.0
erp: 0.2
max_contacts: 20"
服务:/gazebo/apply_body_wrench
给可乐罐起点施加0.01Nm的扭矩,持续1秒,会看到可乐沿x轴正向旋转:
rosservice call /gazebo/apply_body_wrench '{body_name: "coke_can::link" , wrench: { torque: { x: 0.01, y: 0 , z: 0 } }, start_time: 10000000000, duration: 1000000000 }'
施加反向力矩:-0.01Nm,时间持续1秒,并停止旋转:
# 注意:start_time和duration的单位为微秒,即10^-9秒
rosservice call /gazebo/apply_body_wrench '{body_name: "coke_can::link" , wrench: { torque: { x: -0.01, y: 0 , z: 0 } }, start_time: 10000000000, duration: 1000000000 }'
通常,如果持续时间为负数,那么转矩将无限期持续
清除作用力矩
服务:/gazebo/clear_body_wrenches
rosservice call /gazebo/clear_body_wrenches '{body_name: "coke_can::link"}'
仿真中对关节添加力
服务:/gazebo/apply_joint_effort
rosservice call /gazebo/apply_joint_effort "joint_name: 'joint2'
effort: 10.0
start_time:
secs: 0
nsecs: 0
duration:
secs: 10
nsecs: 0"
清除作用力
服务:/gazebo/clear_joint_forces
rosservice call /gazebo/clear_joint_forces '{joint_name: joint2}'
(7)服务:仿真过程控制
-
~/pause_physics
:std_srvs/Empty
- 暂停物理更新 -
~/unpause_physics
:std_srvs/Empty
- 恢复物理更新 -
~/reset_simulation
:std_srvs/Empty
- 重置仿真过程,包括时间 -
~/reset_world
:std_srvs/Empty
- 重置模型姿态
暂停和取消暂停
# 暂停仿真,仿真时间停止,对象变静态,但gazebo内部更新循环仍在继续,但仿真时间没有改变,因此任何受仿真时间限制的内容都不会更新
rosservice call gazebo/pause_physics
# 取消暂停
rosservice call gazebo/unpause_physics
参考文献:
- http://wiki.ros.org/ros_control
- https://wiki.ros.org/urdf/XML/Transmission
- https://github.com/ros-controls/ros_control/wiki/joint_limits_interface
- http://gazebosim.org/tutorials/?tut=ros_control
- https://github.com/ros-simulation/gazebo_ros_demos
- https://wiki.ros.org/dynamic_reconfigure
- http://gazebosim.org/tutorials/?tut=ros_comm
评论(0)
您还未登录,请登录后发表或查看评论