ROS noetic [turtle1_tf_broadcaster-4] process has died

运行下面的指令

roslaunch turtle_tf turtle_tf_demo.launch

报错:

... logging to /home/mc/.ros/log/1d03f5da-9257-11ec-8b40-912958d5c310/roslaunch-ubun-29906.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://ubun:33955/

SUMMARY
========

PARAMETERS
 * /rosdistro: noetic
 * /rosversion: 1.15.14
 * /scale_angular: 2.0
 * /scale_linear: 2.0
 * /turtle1_tf_broadcaster/turtle: turtle1
 * /turtle2_tf_broadcaster/turtle: turtle2

NODES
  /
    sim (turtlesim/turtlesim_node)
    teleop (turtlesim/turtle_teleop_key)
    turtle1_tf_broadcaster (turtle_tf/turtle_tf_broadcaster.py)
    turtle2_tf_broadcaster (turtle_tf/turtle_tf_broadcaster.py)
    turtle_pointer (turtle_tf/turtle_tf_listener.py)

auto-starting new master
process[master]: started with pid [29914]
ROS_MASTER_URI=http://localhost:11311

setting /run_id to 1d03f5da-9257-11ec-8b40-912958d5c310
process[rosout-1]: started with pid [29924]
started core service [/rosout]
process[sim-2]: started with pid [29931]
process[teleop-3]: started with pid [29932]
process[turtle1_tf_broadcaster-4]: started with pid [29933]
/usr/bin/env: “python”: 没有那个文件或目录
process[turtle2_tf_broadcaster-5]: started with pid [29934]
/usr/bin/env: “python”: 没有那个文件或目录
process[turtle_pointer-6]: started with pid [29937]
/usr/bin/env: “python”: 没有那个文件或目录
Reading from keyboard
---------------------------
Use arrow keys to move the turtle. 'q' to quit.

[turtle1_tf_broadcaster-4] process has died [pid 29933, exit code 127, cmd /opt/ros/noetic/lib/turtle_tf/turtle_tf_broadcaster.py __name:=turtle1_tf_broadcaster __log:=/home/mc/.ros/log/1d03f5da-9257-11ec-8b40-912958d5c310/turtle1_tf_broadcaster-4.log].
log file: /home/mc/.ros/log/1d03f5da-9257-11ec-8b40-912958d5c310/turtle1_tf_broadcaster-4*.log
[turtle2_tf_broadcaster-5] process has died [pid 29934, exit code 127, cmd /opt/ros/noetic/lib/turtle_tf/turtle_tf_broadcaster.py __name:=turtle2_tf_broadcaster __log:=/home/mc/.ros/log/1d03f5da-9257-11ec-8b40-912958d5c310/turtle2_tf_broadcaster-5.log].
log file: /home/mc/.ros/log/1d03f5da-9257-11ec-8b40-912958d5c310/turtle2_tf_broadcaster-5*.log
[turtle_pointer-6] process has died [pid 29937, exit code 127, cmd /opt/ros/noetic/lib/turtle_tf/turtle_tf_listener.py __name:=turtle_pointer __log:=/home/mc/.ros/log/1d03f5da-9257-11ec-8b40-912958d5c310/turtle_pointer-6.log].
log file: /home/mc/.ros/log/1d03f5da-9257-11ec-8b40-912958d5c310/turtle_pointer-6*.log

从报错上来看,是找不到python,

process[turtle1_tf_broadcaster-4]: started with pid [29933]
/usr/bin/env: “python”: 没有那个文件或目录
process[turtle2_tf_broadcaster-5]: started with pid [29934]
/usr/bin/env: “python”: 没有那个文件或目录
process[turtle_pointer-6]: started with pid [29937]
/usr/bin/env: “python”: 没有那个文件或目录

于是我打开

/opt/ros/noetic/lib/turtle_tf/turtle_tf_broadcaster.py

看了一下,确实里面出现的是

#!/usr/bin/env python

使用which python也查不到任何信息,which python3则可以找到:/usr/bin/python3,

于是果断创建快捷链接,

sudo ln -s /usr/bin/python3 /usr/bin/python

问题解决。

参考:

[turtle1_tf_broadcaster-4] process has died - ROS Answers: Open Source Q&A Forum

### 加载并激活 ROS2 控制器 为了加载并激活 `fishbot_joint_state_broadcaster` 控制器,在 ROS2 中通常需要遵循特定的过程。这涉及到编辑控制器配置文件以及编写启动脚本来确保控制器能够正确初始化。 #### 编辑控制器配置文件 控制器的参数一般定义在一个 YAML 文件中,此文件指定了要使用的具体控制器及其属性。对于 `joint_state_broadcaster` 类型的控制器来说,应该有如下形式的内容: ```yaml controller_manager: ros__parameters: update_rate: 100 # 更新频率设置为每秒100次 fishbot_joint_state_broadcaster: type: joint_state_broadcaster/JointStateBroadcaster ``` 上述代码片段展示了如何指定控制器管理器更新速率和声明 `fishbot_joint_state_broadcaster` 的类型[^1]。 #### 创建启动文件 接下来,创建一个用于加载这些配置并将控制器添加到控制器管理器中的 Python 启动脚本或者 launch 文件。下面是一个简单的例子,演示了怎样利用 Launch API 来实现这一点: ```python from launch import LaunchDescription from launch_ros.actions import Node def generate_launch_description(): return LaunchDescription([ Node( package='controller_manager', executable='spawner.py', arguments=['fishbot_joint_state_broadcaster'], output='screen' ), ]) ``` 这段代码的作用是在运行时调用 controller_manager 提供的 spawner 工具来实例化所需的广播器[^2]。 #### 使用命令行工具激活控制器 除了编程方式外,还可以直接通过命令行工具来进行操作。一旦完成了前面提到的工作空间构建与环境准备之后,可以执行以下指令来加载并启动控制器: ```bash ros2 control load_controller fishbot_joint_state_broadcaster --set-state start ``` 这条命令将会向控制系统发送请求以装载指定名称的控制器,并立即将其状态设为活动模式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值