目录
1 gazebo中碰撞模型崩坏或者飞的问题
主要原因:惯性(质量和惯性矩阵)设置不准确
个别零件质量太大,个别零件质量太小,同样的速度发生碰撞
弹性碰撞(或称完全弹性碰撞),如果在弹性力的作用下,只产生机械能的转移,系统内无机械能的损失,称为弹性碰撞(或称完全弹性碰撞)。此类碰撞过程中,系统动量和机械能同时守恒。
非弹性碰撞,如果是非弹性力作用,使部分机械能转化为物体的内能,机械能有了损失,称为非弹性碰撞。此类碰撞过程中,系统动量守恒,机械能有损失,即机械能不守恒。
完全非弹性碰撞,如果相互作用力是完全非弹性力,则机械能向内能转化量最大,即机械能的损失最大,称为完全非弹性碰撞。碰撞物体粘合在一起,具有同一速度。此类碰撞过程中,系统动量守恒,机械能不守恒,且机械能的损失最大。
2 编译报错
大致意思就是编译了不必要的包(gazebo)
CMake Warning (dev)at /usr/share/cmake-3.22/Modules/FindPackageHandlestandardArgs.cmake:438(message):The package name passed to find package handle standard args*(PkgConfig)does not match the name of the calling package (gazebo). This can lead toproblems in calling code that expects find package result variables(e.g.,FOUND`)to follow a certain pattern.all stack(most recent call first):
/usr/share/cmake-3.22/Modules/Findpkgconfig.cmake:99 (find package handle stanard args)/usr/lib/x86 64-linux-gnu/cmake/gazebo/gazebo-config.cmake:72 (include)CMakeLists.txt:20(find package)This warning is for project developers. use -Wno-dev to suppress it.
报错截图
解决方法
在 CMakeLists.txt 中删除 find_package(gazebo REQUIRED) 这行,重新编译就行
3 控制器无法正常启动
[ERROR] [gzserver-1]: process has died [pid 8858, exit code 255, cmd 'gzserverhome/xucg/car exp ws/install/gazebo simulation/share/gazebo simulation/worlds/4ws world,model slibgazebo ros init,so "slibgazebo ros factory.so -slibgazebo rosforce system.so'l.
[ros2-8] could not contact service /controller manager/load controllerERROR] [ros2-8]: process has died [pid 8872, exit code 1, cmd 'ros2 control loacontroller "set-state active joint state broadcaster'].ros2-7] Could not contact service /controller manager/load controllerERROR]
[ros2-7]: process has died [pid 8870, exit code 1, cmd 'ros2 control loacontroller .set-state active forward velocity_controller'].
[ros2-6] Could not contact service /controller manager/load controllerERROR] 「ros2-6l: process has died 「pid 8868, exit code 1, cmd 'ros2 control loacontroller .set-state active forward position controller']
解决方法
修改如下所示,把原本的 ExecuteProcess 函数注释,改用 Node 函数。
forward_position_controller = Node(
package="controller_manager",
executable="spawner",
arguments=["forward_position_controller"],
)
forward_velocity_controller = Node(
package="controller_manager",
executable="spawner",
arguments=["forward_velocity_controller"],
)
joint_state_broadcaster = Node(
package="controller_manager",
executable="spawner",
arguments=["joint_state_broadcaster"],
)
# forward_position_controller = ExecuteProcess(
# cmd=['ros2', 'control', 'load_controller', '--set-state', 'active', 'forward_position_controller'],
# output='screen'
# )
# forward_velocity_controller = ExecuteProcess(
# cmd=['ros2', 'control', 'load_controller', '--set-state', 'active', 'forward_velocity_controller'],
# output='screen'
# )
# # gazebo在加载urdf时,根据urdf的设定,会启动一个joint_states节点
# # 关节状态发布器
# joint_state_broadcaster = ExecuteProcess(
# cmd=['ros2', 'control', 'load_controller', '--set-state', 'active', 'joint_state_broadcaster'],
# output='screen'
# )
4 xacro:macro 定义函数
函数里面不能引用外部变量,只能使用函数定义的内部变量
5 xacro:property 定义变量的值
注意:不能使用小数的分数表示形式(1/100)
[ERROR] [launch]: caught exception in launch (see debug for traceback): caught multipLe exceptions when trying to load file of format flaunch]:. InvalidfrontendLaunchfileError: caught multiple exceptions when trying to load file of format [launch]:
ParseError:syntax error:line 1,column ScannerError: mapping values are not allowed herein "/home/xucg/car exp_ws/install/car_urdf/share/car urdf/launch/gazebo,launch", line 16,column 26
.XacroException: can't multiply sequence by non int of type 'floatwhen evaluating expression'948.91 * ratio'
报错截图
解决方法
#<xacro:property name="ratio" value="1/1000"/>
<xacro:property name="ratio" value="0.001"/>
6 gazebo 模型视觉穿模(已设置碰撞体积)
解决方法
需要设置更大的 kp 值(刚性系数)
<xacro:property name="kp" value="1000000"/>