cd ~/catkin_ws/src
catkin_create_pkg my_package rospy std_msgs sensor_msgs
在你的ROS包中创建一个scripts
目录,并在其中编写你的Python脚本。例如,创建一个名为camera_info_modifier.py
的脚本:
mkdir -p ~/catkin_ws/src/my_package/scripts
touch ~/catkin_ws/src/my_package/scripts/camera_info_modifier.py
chmod +x ~/catkin_ws/src/my_package/scripts/camera_info_modifier.py
#!/usr/bin/env python
import rospy
from sensor_msgs.msg import CameraInfo
def callback(data):
# 处理 CameraInfo 消息
modified_data = CameraInfo()
modified_data.header = data.header
modified_data.height = data.height
modified_data.width = data.width
modified_data.distortion_model = data.distortion_model
modified_data.D = data.D
modified_data.K = data.K
modified_data.R = data.R
modified_data.P = data.P
modified_data.binning_x = data.binning_x
modified_data.binning_y = data.binning_y
modified_data.roi = data.roi
# 可以根据需要对数据进行修改
modified_data.header.frame_id = "new_frame_id"
# 发布修改后的消息
pub.publish(modified_data)
if __name__ == '__main__':
rospy.init_node('camera_info_modifier_node', anonymous=True)
# 定义发布者,发布到新的话题
pub = rospy.Publisher('/new_camera_info_topic', CameraInfo, queue_size=10)
# 定义订阅者,订阅旧的话题
rospy.Subscriber('/old_camera_info_topic', CameraInfo, callback)
rospy.spin()
3. 配置CMakeLists.txt
虽然Python脚本不需要编译,但仍需要配置CMakeLists.txt
文件,以确保ROS能够找到你的脚本。编辑~/catkin_ws/src/my_package/CMakeLists.txt
文件,添加如下内容:
catkin_install_python(PROGRAMS scripts/camera_info_modifier.py
DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
cd ~/catkin_ws
catkin_make
source devel/setup.bash
rosrun my_package camera_info_modifier.py