2/21()

1.部署环境
在proxy主机家目录下将lnmp_soft.tar.gz拷贝到web1
scp lnmp_soft.tar.gz 192.168.2.100:

tar -xf lnmp_soft.tar.gz
cd lnmp_soft/
tar -xf nginx-1.17.6.tar.gz
cd nginx-1.17.6/

yum -y install gcc make pcre-devel openssl-devel

./configure //配置
make //编译
make install //安装

yum -y install mariadb mariadb-server mariadb-devel //安装数据库相关软件包
yum -y install php php-mysql php-fpm //安装php相关软件包

systemctl start mariadb
systemctl start php-fpm

vim conf/nginx.conf //修改配置文件,实现动静分离,
修改65~71行为以下状态
在这里插入图片描述
配置好lnmp之后
[root@web1 nginx]# systemctl stop httpd
[root@web1 nginx]# systemctl stop firewalld
[root@web1 nginx]# sbin/nginx //开启服务

配置好lnmp之后
cd ~/lnmp_soft/php_scripts/
tar -xf php-memcached-demo.tar.gz //释放带登录功能的网页
cp -r php-memcached-demo/* /usr/local/nginx/html/ //拷贝页面

火狐浏览器访问http://192.168.2.100/index.php

在这里插入图片描述
sbin/nginx-s #重新家在服务
火狐浏览器访问http://192.168.2.5/index.php

在这里插入图片描述
在这里插入图片描述
Session 存储在服务器端,保存用户名、登录状态等信息
Cookies 由服务器下发给客户端,保存在客户端的一个文件保存的主要内容是sessionID

删除web1和web2的session页面
rm -rf /var/lib/php/session/*
火狐浏览器访问http://192.168.2.5/index.php 登陆两次才算成功,目前两次是正常现象

到web1与web2主机修改存储session文件的位置
在这里插入图片描述
改成memcache,表示session的存储不在是本地的普通文件,而是去找memcache
tcp://192.168.2.5:11211 //这里的路径修改为安装了memcache服务的服务器地址与端口

yum -y install php-pecl-memcache //安装php与memcached服务关联的软件包
systemctl restart php-fpm

所有主机关闭防火墙和selinux
最后清空浏览器的历史记录,再访问http://192.168.2.5/index.php仅仅登录一次即可成功

(rosenv) whyros@ubuntu:~/爱死机战队-汪辉耀-何海-朱睿程/ros_ws$ roslaunch mini2_description gazebo_room.launch ... logging to /home/whyros/.ros/log/4051dbf6-56a8-11f0-8dcd-81cf0e965cb7/roslaunch-ubuntu-348341.log Checking log directory for disk usage. This may take a while. Press Ctrl-C to interrupt Done checking log file disk usage. Usage is <1GB. started roslaunch server http://ubuntu:37833/ SUMMARY ======== PARAMETERS * /gazebo/enable_ros_network: True * /joint_state_publisher/source_list: ['/joint_states1'] * /mini2/mini2/11_Joint_controller/gravity_compensation: True * /mini2/mini2/11_Joint_controller/joint: 11_Joint * /mini2/mini2/11_Joint_controller/pid/d: 50.0 * /mini2/mini2/11_Joint_controller/pid/i: 0.1 * /mini2/mini2/11_Joint_controller/pid/p: 1000.0 * /mini2/mini2/11_Joint_controller/type: position_controll... * /mini2/mini2/11_Joint_controller/update_rate: 1000 * /mini2/mini2/12_Joint_controller/gravity_compensation: True * /mini2/mini2/12_Joint_controller/joint: 12_Joint * /mini2/mini2/12_Joint_controller/pid/d: 40.0 * /mini2/mini2/12_Joint_controller/pid/i: 0.1 * /mini2/mini2/12_Joint_controller/pid/p: 800.0 * /mini2/mini2/12_Joint_controller/type: position_controll... * /mini2/mini2/12_Joint_controller/update_rate: 1000 * /mini2/mini2/13_Joint_controller/gravity_compensation: True * /mini2/mini2/13_Joint_controller/joint: 13_Joint * /mini2/mini2/13_Joint_controller/pid/d: 60.0 * /mini2/mini2/13_Joint_controller/pid/i: 0.1 * /mini2/mini2/13_Joint_controller/pid/p: 1200.0 * /mini2/mini2/13_Joint_controller/type: position_controll... * /mini2/mini2/13_Joint_controller/update_rate: 1000 * /mini2/mini2/21_Joint_controller/gravity_compensation: True * /mini2/mini2/21_Joint_controller/joint: 21_Joint * /mini2/mini2/21_Joint_controller/pid/d: 20.0 * /mini2/mini2/21_Joint_controller/pid/i: 0.1 * /mini2/mini2/21_Joint_controller/pid/p: 400.0 * /mini2/mini2/21_Joint_controller/type: position_controll... * /mini2/mini2/21_Joint_controller/update_rate: 1000 * /mini2/mini2/22_Joint_controller/gravity_compensation: True * /mini2/mini2/22_Joint_controller/joint: 22_Joint * /mini2/mini2/22_Joint_controller/pid/d: 20.0 * /mini2/mini2/22_Joint_controller/pid/i: 0.1 * /mini2/mini2/22_Joint_controller/pid/p: 400.0 * /mini2/mini2/22_Joint_controller/type: position_controll... * /mini2/mini2/22_Joint_controller/update_rate: 1000 * /mini2/mini2/23_Joint_controller/gravity_compensation: True * /mini2/mini2/23_Joint_controller/joint: 23_Joint * /mini2/mini2/23_Joint_controller/pid/d: 20.0 * /mini2/mini2/23_Joint_controller/pid/i: 0.1 * /mini2/mini2/23_Joint_controller/pid/p: 400.0 * /mini2/mini2/23_Joint_controller/type: position_controll... * /mini2/mini2/23_Joint_controller/update_rate: 1000 * /mini2/mini2/31_Joint_controller/gravity_compensation: True * /mini2/mini2/31_Joint_controller/joint: 31_Joint * /mini2/mini2/31_Joint_controller/pid/d: 20.0 * /mini2/mini2/31_Joint_controller/pid/i: 0.5 * /mini2/mini2/31_Joint_controller/pid/p: 400.0 * /mini2/mini2/31_Joint_controller/type: position_controll... * /mini2/mini2/31_Joint_controller/update_rate: 1000 * /mini2/mini2/32_Joint_controller/gravity_compensation: True * /mini2/mini2/32_Joint_controller/joint: 32_Joint * /mini2/mini2/32_Joint_controller/pid/d: 20.0 * /mini2/mini2/32_Joint_controller/pid/i: 0.1 * /mini2/mini2/32_Joint_controller/pid/p: 400.0 * /mini2/mini2/32_Joint_controller/type: position_controll... * /mini2/mini2/32_Joint_controller/update_rate: 1000 * /mini2/mini2/33_Joint_controller/gravity_compensation: True * /mini2/mini2/33_Joint_controller/joint: 33_Joint * /mini2/mini2/33_Joint_controller/pid/d: 20.0 * /mini2/mini2/33_Joint_controller/pid/i: 0.1 * /mini2/mini2/33_Joint_controller/pid/p: 400.0 * /mini2/mini2/33_Joint_controller/type: position_controll... * /mini2/mini2/33_Joint_controller/update_rate: 1000 * /mini2/mini2/41_Joint_controller/gravity_compensation: True * /mini2/mini2/41_Joint_controller/joint: 41_Joint * /mini2/mini2/41_Joint_controller/pid/d: 20.0 * /mini2/mini2/41_Joint_controller/pid/i: 0.5 * /mini2/mini2/41_Joint_controller/pid/p: 400.0 * /mini2/mini2/41_Joint_controller/type: position_controll... * /mini2/mini2/41_Joint_controller/update_rate: 1000 * /mini2/mini2/42_Joint_controller/gravity_compensation: True * /mini2/mini2/42_Joint_controller/joint: 42_Joint * /mini2/mini2/42_Joint_controller/pid/d: 20.0 * /mini2/mini2/42_Joint_controller/pid/i: 0.5 * /mini2/mini2/42_Joint_controller/pid/p: 400.0 * /mini2/mini2/42_Joint_controller/type: position_controll... * /mini2/mini2/42_Joint_controller/update_rate: 1000 * /mini2/mini2/43_Joint_controller/gravity_compensation: True * /mini2/mini2/43_Joint_controller/joint: 43_Joint * /mini2/mini2/43_Joint_controller/pid/d: 20.0 * /mini2/mini2/43_Joint_controller/pid/i: 0.5 * /mini2/mini2/43_Joint_controller/pid/p: 400.0 * /mini2/mini2/43_Joint_controller/type: position_controll... * /mini2/mini2/43_Joint_controller/update_rate: 1000 * /mini2/mini2/500_Joint_controller/gravity_compensation: True * /mini2/mini2/500_Joint_controller/joint: 500_Joint * /mini2/mini2/500_Joint_controller/pid/d: 20.0 * /mini2/mini2/500_Joint_controller/pid/i: 0.5 * /mini2/mini2/500_Joint_controller/pid/p: 400.0 * /mini2/mini2/500_Joint_controller/type: position_controll... * /mini2/mini2/500_Joint_controller/update_rate: 1000 * /mini2/mini2/50_Joint_controller/gravity_compensation: True * /mini2/mini2/50_Joint_controller/joint: 50_Joint * /mini2/mini2/50_Joint_controller/pid/d: 20.0 * /mini2/mini2/50_Joint_controller/pid/i: 0.5 * /mini2/mini2/50_Joint_controller/pid/p: 400.0 * /mini2/mini2/50_Joint_controller/type: position_controll... * /mini2/mini2/50_Joint_controller/update_rate: 1000 * /mini2/mini2/51_Joint_controller/gravity_compensation: True * /mini2/mini2/51_Joint_controller/joint: 51_Joint * /mini2/mini2/51_Joint_controller/pid/d: 20.0 * /mini2/mini2/51_Joint_controller/pid/i: 0.5 * /mini2/mini2/51_Joint_controller/pid/p: 400.0 * /mini2/mini2/51_Joint_controller/type: position_controll... * /mini2/mini2/51_Joint_controller/update_rate: 1000 * /mini2/mini2/52_Joint_controller/gravity_compensation: True * /mini2/mini2/52_Joint_controller/joint: 52_Joint * /mini2/mini2/52_Joint_controller/pid/d: 30.0 * /mini2/mini2/52_Joint_controller/pid/i: 0.1 * /mini2/mini2/52_Joint_controller/pid/p: 500.0 * /mini2/mini2/52_Joint_controller/type: position_controll... * /mini2/mini2/52_Joint_controller/update_rate: 1000 * /mini2/mini2/53_Joint_controller/gravity_compensation: True * /mini2/mini2/53_Joint_controller/joint: 53_Joint * /mini2/mini2/53_Joint_controller/pid/d: 20.0 * /mini2/mini2/53_Joint_controller/pid/i: 0.5 * /mini2/mini2/53_Joint_controller/pid/p: 400.0 * /mini2/mini2/53_Joint_controller/type: position_controll... * /mini2/mini2/53_Joint_controller/update_rate: 1000 * /mini2/mini2/joint_state_controller/publish_rate: 50 * /mini2/mini2/joint_state_controller/type: joint_state_contr... * /robot_description: <?xml version="1.... * /rosdistro: noetic * /rosversion: 1.17.3 * /use_sim_time: True NODES / gazebo (gazebo_ros/gzserver) gazebo_gui (gazebo_ros/gzclient) joint_control (mini2_description/joint_control.py) joint_state_publisher (joint_state_publisher/joint_state_publisher) robot_state_publisher (robot_state_publisher/robot_state_publisher) /mini2/ controller_spawner (controller_manager/spawner) spawn_urdf (gazebo_ros/spawn_model) auto-starting new master process[master]: started with pid [348349] ROS_MASTER_URI=http://localhost:11311 setting /run_id to 4051dbf6-56a8-11f0-8dcd-81cf0e965cb7 process[rosout-1]: started with pid [348359] started core service [/rosout] process[gazebo-2]: started with pid [348367] process[gazebo_gui-3]: started with pid [348370] process[mini2/spawn_urdf-4]: started with pid [348375] process[mini2/controller_spawner-5]: started with pid [348378] process[robot_state_publisher-6]: started with pid [348379] process[joint_state_publisher-7]: started with pid [348380] process[joint_control-8]: started with pid [348385] [WARN] [1751394109.302342, 0.000000]: DEPRECATION warning: --shutdown-timeout has no effect. [INFO] [1751394109.303728, 0.000000]: Controller Spawner: Waiting for service controller_manager/load_controller [INFO] [1751394109.332422, 0.000000]: Loading model XML from ros parameter robot_description [INFO] [1751394109.521168280]: Finished loading Gazebo ROS API Plugin. [INFO] [1751394109.523086673]: Finished loading Gazebo ROS API Plugin. [INFO] [1751394109.523249881]: waitForService: Service [/gazebo/set_physics_properties] has not been advertised, waiting... [INFO] [1751394109.524751521]: waitForService: Service [/gazebo_gui/set_physics_properties] has not been advertised, waiting... Traceback (most recent call last): File "/opt/ros/noetic/lib/gazebo_ros/spawn_model", line 239, in <module> exit_code = sm.run() File "/opt/ros/noetic/lib/gazebo_ros/spawn_model", line 132, in run model_xml = rospy.get_param(self.args.param) File "/opt/ros/noetic/lib/python3/dist-packages/rospy/client.py", line 468, in get_param return _param_server[param_name] #MasterProxy does all the magic for us File "/opt/ros/noetic/lib/python3/dist-packages/rospy/msproxy.py", line 123, in __getitem__ raise KeyError(key) KeyError: 'robot_description' [INFO] [1751394110.040706553]: waitForService: Service [/gazebo/set_physics_properties] is now available. [INFO] [1751394110.089876775, 0.001000000]: Physics dynamic reconfigure ready. [mini2/spawn_urdf-4] process has died [pid 348375, exit code 1, cmd /opt/ros/noetic/lib/gazebo_ros/spawn_model -urdf -model mini2_description -param robot_description -x 0.0244236973111199 -y -0.00001185 -z 0.00216909321295 -R 0 -P 0 -Y 0 -unpause __name:=spawn_urdf __log:=/home/whyros/.ros/log/4051dbf6-56a8-11f0-8dcd-81cf0e965cb7/mini2-spawn_urdf-4.log]. log file: /home/whyros/.ros/log/4051dbf6-56a8-11f0-8dcd-81cf0e965cb7/mini2-spawn_urdf-4*.log context mismatch in svga_surface_destroy context mismatch in svga_surface_destroy [WARN] [1751394139.451305, 2.934000]: Controller Spawner couldn't find the expected controller_manager ROS interface. [mini2/controller_spawner-5] process has finished cleanly log file: /home/whyros/.ros/log/4051dbf6-56a8-11f0-8dcd-81cf0e965cb7/mini2-controller_spawner-5*.log ^C[joint_control-8] killing on exit [joint_state_publisher-7] killing on exit [robot_state_publisher-6] killing on exit [gazebo_gui-3] killing on exit [gazebo-2] killing on exit ^C[gazebo_gui-3] escalating to SIGTERM [rosout-1] killing on exit [master] killing on exit shutting down processing monitor... ... shutting down processing monitor complete done (rosenv) whyros@ubuntu:~/爱死机战队-汪辉耀-何海-朱睿程/ros_ws$ roslaunch mini2_description gazebo_room.launch ... logging to /home/whyros/.ros/log/3fc93650-56aa-11f0-8dcd-81cf0e965cb7/roslaunch-ubuntu-361713.log Checking log directory for disk usage. This may take a while. Press Ctrl-C to interrupt Done checking log file disk usage. Usage is <1GB. started roslaunch server http://ubuntu:36143/ SUMMARY ======== PARAMETERS * /gazebo/enable_ros_network: True * /joint_state_publisher/source_list: ['/joint_states1'] * /mini2/arm_controller/constraints/goal_time: 0.6 * /mini2/arm_controller/constraints/joints/11_Joint/goal: True * /mini2/arm_controller/constraints/joints/11_Joint/trajectory: True * /mini2/arm_controller/constraints/joints/12_Joint/goal: True * /mini2/arm_controller/constraints/joints/12_Joint/trajectory: True * /mini2/arm_controller/constraints/joints/13_Joint/goal: True * /mini2/arm_controller/constraints/joints/13_Joint/trajectory: True * /mini2/arm_controller/constraints/joints/21_Joint/goal: True * /mini2/arm_controller/constraints/joints/21_Joint/trajectory: True * /mini2/arm_controller/constraints/joints/22_Joint/goal: True * /mini2/arm_controller/constraints/joints/22_Joint/trajectory: True * /mini2/arm_controller/constraints/joints/23_Joint/goal: True * /mini2/arm_controller/constraints/joints/23_Joint/trajectory: True * /mini2/arm_controller/constraints/joints/31_Joint/goal: True * /mini2/arm_controller/constraints/joints/31_Joint/trajectory: True * /mini2/arm_controller/constraints/joints/32_Joint/goal: True * /mini2/arm_controller/constraints/joints/32_Joint/trajectory: True * /mini2/arm_controller/constraints/joints/33_Joint/goal: True * /mini2/arm_controller/constraints/joints/33_Joint/trajectory: True * /mini2/arm_controller/constraints/joints/41_Joint/goal: True * /mini2/arm_controller/constraints/joints/41_Joint/trajectory: True * /mini2/arm_controller/constraints/joints/42_Joint/goal: True * /mini2/arm_controller/constraints/joints/42_Joint/trajectory: True * /mini2/arm_controller/constraints/joints/43_Joint/goal: True * /mini2/arm_controller/constraints/joints/43_Joint/trajectory: True * /mini2/arm_controller/constraints/joints/500_Joint/goal: True * /mini2/arm_controller/constraints/joints/500_Joint/trajectory: True * /mini2/arm_controller/constraints/joints/50_Joint/goal: True * /mini2/arm_controller/constraints/joints/50_Joint/trajectory: True * /mini2/arm_controller/constraints/joints/51_Joint/goal: True * /mini2/arm_controller/constraints/joints/51_Joint/trajectory: True * /mini2/arm_controller/constraints/joints/52_Joint/goal: True * /mini2/arm_controller/constraints/joints/52_Joint/trajectory: True * /mini2/arm_controller/constraints/joints/53_Joint/goal: True * /mini2/arm_controller/constraints/joints/53_Joint/trajectory: True * /mini2/arm_controller/constraints/stopping_trajectory_duration: 0.5 * /mini2/arm_controller/joints: ['11_Joint', '12_... * /mini2/arm_controller/pid_gains/11_Joint/d: 50.0 * /mini2/arm_controller/pid_gains/11_Joint/i: 0.1 * /mini2/arm_controller/pid_gains/11_Joint/p: 1000.0 * /mini2/arm_controller/pid_gains/12_Joint/d: 40.0 * /mini2/arm_controller/pid_gains/12_Joint/i: 0.1 * /mini2/arm_controller/pid_gains/12_Joint/p: 800.0 * /mini2/arm_controller/pid_gains/13_Joint/d: 60.0 * /mini2/arm_controller/pid_gains/13_Joint/i: 0.1 * /mini2/arm_controller/pid_gains/13_Joint/p: 1200.0 * /mini2/arm_controller/pid_gains/21_Joint/d: 20.0 * /mini2/arm_controller/pid_gains/21_Joint/i: 0.1 * /mini2/arm_controller/pid_gains/21_Joint/p: 400.0 * /mini2/arm_controller/pid_gains/22_Joint/d: 20.0 * /mini2/arm_controller/pid_gains/22_Joint/i: 0.1 * /mini2/arm_controller/pid_gains/22_Joint/p: 400.0 * /mini2/arm_controller/pid_gains/23_Joint/d: 20.0 * /mini2/arm_controller/pid_gains/23_Joint/i: 0.1 * /mini2/arm_controller/pid_gains/23_Joint/p: 400.0 * /mini2/arm_controller/pid_gains/31_Joint/d: 20.0 * /mini2/arm_controller/pid_gains/31_Joint/i: 0.5 * /mini2/arm_controller/pid_gains/31_Joint/p: 400.0 * /mini2/arm_controller/pid_gains/32_Joint/d: 20.0 * /mini2/arm_controller/pid_gains/32_Joint/i: 0.1 * /mini2/arm_controller/pid_gains/32_Joint/p: 400.0 * /mini2/arm_controller/pid_gains/33_Joint/d: 20.0 * /mini2/arm_controller/pid_gains/33_Joint/i: 0.1 * /mini2/arm_controller/pid_gains/33_Joint/p: 400.0 * /mini2/arm_controller/pid_gains/41_Joint/d: 20.0 * /mini2/arm_controller/pid_gains/41_Joint/i: 0.5 * /mini2/arm_controller/pid_gains/41_Joint/p: 400.0 * /mini2/arm_controller/pid_gains/42_Joint/d: 20.0 * /mini2/arm_controller/pid_gains/42_Joint/i: 0.5 * /mini2/arm_controller/pid_gains/42_Joint/p: 400.0 * /mini2/arm_controller/pid_gains/43_Joint/d: 20.0 * /mini2/arm_controller/pid_gains/43_Joint/i: 0.5 * /mini2/arm_controller/pid_gains/43_Joint/p: 400.0 * /mini2/arm_controller/pid_gains/500_Joint/d: 20.0 * /mini2/arm_controller/pid_gains/500_Joint/i: 0.5 * /mini2/arm_controller/pid_gains/500_Joint/p: 400.0 * /mini2/arm_controller/pid_gains/50_Joint/d: 20.0 * /mini2/arm_controller/pid_gains/50_Joint/i: 0.5 * /mini2/arm_controller/pid_gains/50_Joint/p: 400.0 * /mini2/arm_controller/pid_gains/51_Joint/d: 20.0 * /mini2/arm_controller/pid_gains/51_Joint/i: 0.5 * /mini2/arm_controller/pid_gains/51_Joint/p: 400.0 * /mini2/arm_controller/pid_gains/52_Joint/d: 30.0 * /mini2/arm_controller/pid_gains/52_Joint/i: 0.1 * /mini2/arm_controller/pid_gains/52_Joint/p: 500.0 * /mini2/arm_controller/pid_gains/53_Joint/d: 20.0 * /mini2/arm_controller/pid_gains/53_Joint/i: 0.5 * /mini2/arm_controller/pid_gains/53_Joint/p: 400.0 * /mini2/arm_controller/type: effort_controller... * /mini2/joint_state_controller/publish_rate: 50 * /mini2/joint_state_controller/type: joint_state_contr... * /robot_description: <?xml version="1.... * /rosdistro: noetic * /rosversion: 1.17.3 * /use_sim_time: True NODES / gazebo (gazebo_ros/gzserver) gazebo_gui (gazebo_ros/gzclient) joint_control (mini2_description/joint_control.py) joint_state_publisher (joint_state_publisher/joint_state_publisher) robot_state_publisher (robot_state_publisher/robot_state_publisher) /mini2/ controller_spawner (controller_manager/spawner) spawn_urdf (gazebo_ros/spawn_model) auto-starting new master process[master]: started with pid [361721] ROS_MASTER_URI=http://localhost:11311 setting /run_id to 3fc93650-56aa-11f0-8dcd-81cf0e965cb7 process[rosout-1]: started with pid [361732] started core service [/rosout] process[gazebo-2]: started with pid [361742] process[gazebo_gui-3]: started with pid [361745] process[mini2/spawn_urdf-4]: started with pid [361750] process[mini2/controller_spawner-5]: started with pid [361753] process[robot_state_publisher-6]: started with pid [361754] process[joint_state_publisher-7]: started with pid [361755] process[joint_control-8]: started with pid [361760] [WARN] [1751394967.320296, 0.000000]: DEPRECATION warning: --shutdown-timeout has no effect. [INFO] [1751394967.322947, 0.000000]: Controller Spawner: Waiting for service /mini2/controller_manager/load_controller [INFO] [1751394967.360534, 0.000000]: Loading model XML from ros parameter /robot_description [INFO] [1751394967.367955, 0.000000]: Waiting for service /gazebo/spawn_urdf_model [INFO] [1751394967.591428043]: Finished loading Gazebo ROS API Plugin. [INFO] [1751394967.592695892]: waitForService: Service [/gazebo/set_physics_properties] has not been advertised, waiting... [INFO] [1751394967.712372708]: Finished loading Gazebo ROS API Plugin. [INFO] [1751394967.714188401]: waitForService: Service [/gazebo_gui/set_physics_properties] has not been advertised, waiting... [INFO] [1751394968.111488158]: waitForService: Service [/gazebo/set_physics_properties] is now available. [INFO] [1751394968.144013226, 0.003000000]: Physics dynamic reconfigure ready. [INFO] [1751394968.274723, 0.016000]: Calling service /gazebo/spawn_urdf_model [INFO] [1751394968.639988, 0.036000]: Spawn status: SpawnModel: Successfully spawned entity [INFO] [1751394968.641505, 0.036000]: Unpausing physics [mini2/spawn_urdf-4] process has finished cleanly log file: /home/whyros/.ros/log/3fc93650-56aa-11f0-8dcd-81cf0e965cb7/mini2-spawn_urdf-4*.log [INFO] [1751394972.082549432, 0.036000000]: Loading gazebo_ros_control plugin [INFO] [1751394972.082927631, 0.036000000]: Starting gazebo_ros_control plugin in namespace: /mini2 [INFO] [1751394972.083688984, 0.036000000]: gazebo_ros_control plugin is waiting for model URDF in parameter [/robot_description] on the ROS param server. [INFO] [1751394972.197588955, 0.036000000]: Loaded gazebo_ros_control. [INFO] [1751394972.419081, 0.058000]: Controller Spawner: Waiting for service /mini2/controller_manager/switch_controller [INFO] [1751394972.422287, 0.058000]: Controller Spawner: Waiting for service /mini2/controller_manager/unload_controller [INFO] [1751394972.424556, 0.059000]: Loading controller: joint_state_controller [INFO] [1751394972.443607, 0.061000]: Loading controller: arm_controller [ERROR] [1751394972.448703925, 0.061000000]: Could not load controller 'arm_controller' because controller type 'effort_controllers/JointTrajectoryController' does not exist. [ERROR] [1751394972.448778446, 0.061000000]: Use 'rosservice call controller_manager/list_controller_types' to get the available types context mismatch in svga_surface_destroy context mismatch in svga_surface_destroy [ERROR] [1751394973.449190, 0.161000]: Failed to load arm_controller [INFO] [1751394973.450581, 0.161000]: Controller Spawner: Loaded controllers: joint_state_controller [INFO] [1751394973.456978, 0.162000]: Started controllers: joint_state_controller
07-03
<think>我们正在解决ROS Gazebo仿真启动时出现的两个相关错误:1."Controller Spawnercouldn'tfind theexpected controller_manager ROSinterface"2."Couldnot loadarm_controller becausecontroller typedoes notexist"根据引用[1]和[2]以及之前的知识,我们可以总结出以下原因和解决方案: ###错误1:ControllerSpawner couldn't findthe expectedcontroller_managerROS interface**原因分析:**-控制器管理器(controller_manager)节点没有启动,或者启动的命名空间与控制器生成器(ControllerSpawner)期望的命名空间不匹配。-可能缺少`gazebo_ros_control`插件,或者插件配置不正确。 **解决方案:** 1. **安装必要的ROS包**:确保安装了与ROS发行版对应的`gazebo_ros_control`包。例如,对于Melodic:```bashsudoapt installros-melodic-gazebo-ros-control```同时,确保安装了`ros_control`和`ros_controllers`包:```bashsudoapt installros-melodic-ros-control ros-melodic-ros-controllers```2.**在URDF/Xacro文件中添加`gazebo_ros_control`插件**:在机器人模型的URDF/Xacro文件中,添加以下插件配置(通常在描述机器人的根标签内):```xml<gazebo><plugin name="gazebo_ros_control" filename="libgazebo_ros_control.so"><!--设置机器人的命名空间,如果全局则留空或写"/" --><robotNamespace>/</robotNamespace></plugin></gazebo>```注意:`<robotNamespace>`必须与后续控制器配置中的命名空间一致。如果使用全局命名空间,可以设置为`/`或留空(但建议显式设置)。 3. **检查控制器管理器的命名空间**:在启动控制器管理器(controller_manager)的launch文件中,确保节点配置的命名空间与插件中设置的`robotNamespace`一致。例如:```xml<node name="controller_spawner"pkg="controller_manager"type="spawner"args="arm_controller joint_state_controller"/>```如果插件中设置了`<robotNamespace>/my_robot`,那么控制器管理器节点应该放在相同的命名空间下,或者在启动节点时设置命名空间:```xml<nodename="controller_spawner"pkg="controller_manager"type="spawner"ns="my_robot"args="arm_controllerjoint_state_controller" />```4.**验证控制器管理器是否运行**:启动仿真后,运行:```bashrosnodelist```查看是否有`/controller_manager`或`/my_robot/controller_manager`这样的节点。如果没有,说明控制器管理器没有启动。###错误2: Couldnot loadarm_controller becausecontroller typedoes notexist**原因分析:** -控制器类型名称拼写错误(注意ROS控制器类型名称是大小写敏感的)。 -没有安装包含该控制器的ROS包(例如,`arm_controller`可能是自定义的,或者属于某个特定的包)。 -控制器配置文件(YAML)中指定的控制器类型不正确。**解决方案:**1.**检查控制器类型名称**:确保在控制器配置文件(如`arm_controller.yaml`)中,控制器的类型(type)正确。例如,使用`effort_controllers/JointTrajectoryController`而不是`Effort_controllers/JointTrajectoryController`(注意大小写)。 2. **安装相应的控制器包**:如果控制器类型属于ROS的标准控制器(如`joint_state_controller`、`effort_controllers`等),请确保已安装`ros_controllers`包:```bashsudoapt installros-melodic-ros-controllers#替换为你的ROS发行版```如果是自定义控制器,确保包含该控制器的包已经正确编译,并且被ROS环境找到(即`roscd`可以进入该包,且包中的`<depend>`在`package.xml`中已声明)。3.**检查控制器配置文件**:在YAML配置文件中,确保控制器类型使用完整的类型名称(包括包名)。例如:```yamlarm_controller:type:effort_controllers/JointTrajectoryControllerjoints:- joint1-joint2gains: #PID参数等joint1: {p:1000,d:0.1, i:0,i_clamp:0}joint2: {p:1000,d:0.1,i:0, i_clamp:0}```4.**确保控制器配置文件被正确加载**:在启动控制器管理器的launch文件中,确保通过`rosparam`命令加载了配置文件:```xml<rosparam file="$(find my_robot_control)/config/arm_controller.yaml" command="load"/>``` ###综合调试步骤:1.**检查依赖包**:确保所有必要的ROS包已安装(`gazebo_ros_control`, `ros_control`,`ros_controllers`)。2.**检查URDF插件**:确认机器人模型中正确添加了`gazebo_ros_control`插件。 3. **检查命名空间**:确保插件、控制器配置文件和控制器管理器节点使用相同的命名空间。4.**检查控制器类型**:确认控制器类型名称正确,且对应的包已安装或编译。5.**查看日志**:启动仿真时,查看终端输出的详细错误信息,有助于定位问题。 通过以上步骤,应该能够解决这两个错误。如果问题仍然存在,请提供更详细的错误日志和配置文件片段以便进一步分析。--- ###相关问题1.如何在 ROS中为 Gazebo仿真机器人配置 PID控制器参数?2.ROS控制器管理器(controller_manager)如何管理多个控制器? 3.如何自定义ROS控制器并集成到 Gazebo仿真中? 4.在 Gazebo仿真中,如何调试关节控制器不响应命令的问题?5.ROS控制(ros_control)框架的基本结构和工作原理是什么?</think>针对 ROS Gazebo 仿真中出现的 **"Controller Spawner couldn't find the expected controller_manager ROS interface"** 和 **"Could not load arm_controller because controller type does not exist"** 错误,结合引用内容和实际经验,以下是系统化的解决方案: --- ### 一、核心问题诊断 这两个错误通常由以下原因共同导致: 1. **控制器管理器未启动**:`controller_manager` 节点未运行或命名空间不匹配 2. **控制器插件缺失**:未安装必要的 ROS 控制包 3. **配置不一致**:URDF 插件、YAML 配置和启动文件的命名空间冲突 4. **控制器类型错误**:YAML 文件中控制器类型名称拼写错误或未安装 --- ### 二、分步解决方案 #### 步骤 1:安装必要依赖包 ```bash # 安装核心控制包(替换<distro>为ROS发行版,如noetic/melodic) sudo apt install ros-<distro>-gazebo-ros-control \ ros-<distro>-ros-control \ ros-<distro>-ros-controllers \ ros-<distro>-joint-state-controller ``` #### 步骤 2:在 URDF/Xacro 中添加插件 在机器人模型文件中插入以下配置(通常在根标签 `<robot>` 内): ```xml <gazebo> <plugin name="gazebo_ros_control" filename="libgazebo_ros_control.so"> <!-- 必须与控制器YAML的命名空间一致 --> <robotNamespace>/</robotNamespace> </plugin> </gazebo> ``` > **关键点**:`<robotNamespace>/</robotNamespace>` 表示全局命名空间,若使用自定义命名空间(如 `/my_robot`),后续所有配置需同步修改[^2]。 #### 步骤 3:修复控制器配置(YAML 文件) 检查 `arm_controller.yaml` 文件: ```yaml # 正确控制器类型示例(注意大小写和包名) arm_controller: type: position_controllers/JointTrajectoryController # 标准控制器类型 joints: [joint1, joint2, joint3] # 实际关节名 gains: # PID参数示例 joint1: {p: 1000, d: 0.1, i: 0.0} ``` **常见错误修正**: - 错误类型:`type: JointTrajectoryController` → 正确应为 `position_controllers/JointTrajectoryController` - 缺少 PID 参数导致机械臂无力倒地[^1] #### 步骤 4:修正启动文件(Launch File) 确保正确加载控制器: ```xml <launch> <!-- 加载控制器参数 --> <rosparam file="$(find your_pkg)/config/arm_controller.yaml" command="load"/> <!-- 启动控制器管理器 --> <node name="controller_manager" pkg="controller_manager" type="spawner" args="arm_controller joint_state_controller" /> <!-- 确保与YAML中的控制器名一致 --> </launch> ``` #### 步骤 5:验证通信状态 启动后检查节点和接口: ```bash rosnode list | grep controller_manager # 确认节点存在 rostopic list | grep arm_controller # 检查控制器话题 rosservice call /controller_manager/list_controllers # 查询已加载控制器 ``` --- ### 三、错误场景专项处理 | 现象 | 解决方案 | |-------|----------| | 机械臂软绵无力倒地 | 1. 检查 PID 参数是否配置<br>2. 确认 `gazebo_ros_control` 插件安装完整[^1] | | `controller type does not exist` | 1. 检查 `type:` 字段拼写<br>2. 安装对应控制器包:`sudo apt install ros-<distro>-<controller_type>` | | 命名空间不匹配 | 确保 URDF 的 `<robotNamespace>`、YAML 的根键、启动文件的 `ns` 参数三者一致 | --- ### 四、调试技巧 1. **可视化调试**: ```bash rqt_console # 查看详细错误日志 rqt_graph # 检查节点连接关系 ``` 2. **逐步启动**:先启动 Gazebo 空世界,再单独加载机器人模型和控制器。 通过以上步骤,95% 的控制器加载问题可得到解决。若仍存在问题,建议检查 MoveIt 配置与 Gazebo 控制器的对接参数。 --- ### 相关问题 1. 如何在 Gazebo 中为机械臂关节配置 PID 参数? 2. ROS 控制器管理器 (controller_manager) 的工作原理是什么? 3. 如何调试 Gazebo 与 ROS 之间的 topic 通信延迟? 4. 使用 Xacro 时如何正确集成 `gazebo_ros_control` 插件? 5. MoveIt 与 Gazebo 联合仿真时需要哪些关键配置?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值